summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Fl_Search_Chooser.H9
-rw-r--r--src/Fl_Search_Chooser.cxx33
-rw-r--r--src/GipfelWidget.cxx3
3 files changed, 28 insertions, 17 deletions
diff --git a/src/Fl_Search_Chooser.H b/src/Fl_Search_Chooser.H
index e968452..4e89a1a 100644
--- a/src/Fl_Search_Chooser.H
+++ b/src/Fl_Search_Chooser.H
@@ -17,22 +17,23 @@ class Fl_Search_Browser : public Fl_Select_Browser {
Fl_Search_Browser(int X, int Y, int W, int H, const char *c):Fl_Select_Browser(X,Y,W,H,c){};
int find_prefix(const char *p);
+
private:
int find_prefix(const char *p, int s, int e);
};
-class Fl_Search_Chooser {
+class Fl_Search_Chooser : public Fl_Window {
private:
public:
- Fl_Window *w;
Fl_Search_Browser *sb;
Fl_Search_Chooser(const char *title);
void add(const char *t, void *d);
+
void *data();
- void show();
- int shown();
+
+ int handle(int event);
};
#endif
diff --git a/src/Fl_Search_Chooser.cxx b/src/Fl_Search_Chooser.cxx
index 99bbbd1..0ef435d 100644
--- a/src/Fl_Search_Chooser.cxx
+++ b/src/Fl_Search_Chooser.cxx
@@ -56,19 +56,19 @@ static void input_cb(Fl_Input* in, void*c) {
static void ok_cb(Fl_Input* in, void*c) {
Fl_Search_Chooser *sc = (Fl_Search_Chooser *) c;
- sc->w->hide();
+ sc->hide();
}
static void cancel_cb(Fl_Input* in, void*c) {
Fl_Search_Chooser *sc = (Fl_Search_Chooser *) c;
sc->sb->deselect();
- sc->w->hide();
+ sc->hide();
}
-Fl_Search_Chooser::Fl_Search_Chooser(const char *title) {
- w = new Fl_Window(320, 320, title?title:"Choose");
- Fl_Group *g = new Fl_Group(10, 10, w->w() - 10, w->h() - 10);
+Fl_Search_Chooser::Fl_Search_Chooser(const char *title) : Fl_Window(320, 320, title?title:"Choose") {
+ Fl::visible_focus(0);
+ Fl_Group *g = new Fl_Group(10, 10, w() - 10, h() - 10);
sb = new Fl_Search_Browser(g->x(), g->y(), g->w() , g->h() - 100, NULL);
sb->type(FL_HOLD_BROWSER);
Fl_Input *in = new Fl_Input(g->x()+50, g->h()-80, g->w()-80, 20, "Search");
@@ -80,7 +80,7 @@ Fl_Search_Chooser::Fl_Search_Chooser(const char *title) {
ok_b->callback((Fl_Callback*) ok_cb, this);
Fl::focus(in);
g->end();
- w->end();
+ end();
}
void
@@ -98,12 +98,21 @@ Fl_Search_Chooser::data() {
}
}
-void
-Fl_Search_Chooser::show() {
- w->show();
-}
int
-Fl_Search_Chooser::shown() {
- return w->shown();
+Fl_Search_Chooser::handle(int event) {
+ switch(event) {
+ case FL_KEYBOARD:
+ int key = Fl::event_key();
+
+ if (key == FL_Up || key == FL_Down) {
+ return sb->handle(event);
+ } else if (key == FL_Enter) {
+ hide();
+ return 1;
+ }
+
+ }
+
+ return Fl_Window::handle(event);
}
diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx
index 4f250cb..9d43f7b 100644
--- a/src/GipfelWidget.cxx
+++ b/src/GipfelWidget.cxx
@@ -193,7 +193,7 @@ GipfelWidget::set_viewpoint(const char *pos) {
r = pan->set_viewpoint(pos);
set_labels(pan->get_visible_mountains());
-
+ redraw();
return r;
}
@@ -201,6 +201,7 @@ void
GipfelWidget::set_viewpoint(const Hill *m) {
pan->set_viewpoint(m);
set_labels(pan->get_visible_mountains());
+ redraw();
}
static void