summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/GipfelWidget.H1
-rw-r--r--src/GipfelWidget.cxx40
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);