diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/GipfelWidget.H | 1 | ||||
-rw-r--r-- | src/GipfelWidget.cxx | 40 |
2 files changed, 32 insertions, 9 deletions
diff --git a/src/GipfelWidget.H b/src/GipfelWidget.H index 2e440c5..90f5ef5 100644 --- a/src/GipfelWidget.H +++ b/src/GipfelWidget.H @@ -39,6 +39,7 @@ class GipfelWidget : public Fl_Group { int get_rel_track_width(Hill *m); static void find_peak_cb(Fl_Widget *o, void *f); + static void toggle_hidden_cb(Fl_Widget *o, void *f); public: typedef enum { diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index 7e9f6fc..214d2e1 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -543,6 +543,20 @@ GipfelWidget::find_peak_cb(Fl_Widget *, void *f) { } } +void +GipfelWidget::toggle_hidden_cb(Fl_Widget *, void *f) { + GipfelWidget *g = (GipfelWidget*) f; + + Hill *m = g->find_mountain(g->pan->get_visible_mountains(), g->mouse_x, g->mouse_y); + if (!m) + return; + + if (m->flags & Hill::HIDDEN) + m->flags &= ~Hill::HIDDEN; + else + m->flags |= Hill::HIDDEN; +} + void GipfelWidget::set_height_dist_ratio(double r) { pan->set_height_dist_ratio(r); @@ -630,15 +644,23 @@ GipfelWidget::handle(int event) { redraw(); } } else if (Fl::event_button() == FL_RIGHT_MOUSE) { - Fl_Menu_Item rclick_menu[] = { - {"Find Peak", 0, find_peak_cb, this}, - {0} - }; - const Fl_Menu_Item *mi = - rclick_menu->popup(Fl::event_x(), Fl::event_y(), 0, 0, 0); - - if (mi) - mi->do_callback(0, mi->user_data()); + Fl_Menu_Button rclick_menu(Fl::event_x_root(), + Fl::event_y_root(), 80, 1); + Hill *m = find_mountain(pan->get_visible_mountains(), + mouse_x, mouse_y); + char buf[1024]; + + rclick_menu.add("Find Peak", 0, find_peak_cb, this); + if (m) { + if (m->flags & Hill::HIDDEN) + snprintf(buf, sizeof(buf), "Unhide %s", m->name); + else + snprintf(buf, sizeof(buf), "Hide %s", m->name); + + rclick_menu.add(buf, 0, toggle_hidden_cb, this); + } + + rclick_menu.popup(); } Fl::focus(this); |