diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2005-07-29 17:13:26 +0100 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2005-07-29 17:13:26 +0100 |
commit | 02a0aca8283e7acd62eb4223c41a671209e5bf7d (patch) | |
tree | 0789af2beda67f017580774b581aaa9b5b2541aa /src/GipfelWidget.cxx | |
parent | 6d9fb3fd9c5fe1093ea882077429bb4ecb9b4719 (diff) |
popup menu and other stuff
Diffstat (limited to 'src/GipfelWidget.cxx')
-rw-r--r-- | src/GipfelWidget.cxx | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index 7cc5d1a..a8a6f00 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -30,6 +30,7 @@ #include <sys/wait.h> #include <fcntl.h> #include <errno.h> +#include <math.h> #include <FL/Fl.H> #include <FL/Fl_Menu_Item.H> @@ -41,10 +42,13 @@ #include "GipfelWidget.H" static Fl_Menu_Item *menuitems; +static double pi_d, deg2rad; GipfelWidget::GipfelWidget(int X,int Y,int W, int H): Fl_Widget(X, Y, W, H) { int i; + pi_d = asin(1.0) * 2.0; + deg2rad = pi_d / 180.0; img = NULL; pan = new Panorama(); cur_mountain = NULL; @@ -344,6 +348,23 @@ GipfelWidget::get_view_height() { return pan->get_view_height(); } +void +GipfelWidget::menu_cb(Hill* hill) { + if (hill) { + set_center_angle(hill->alph / deg2rad); + if (!m1 || (m1 && m2)) { + m1 = hill; + } else { + m2 = hill; + } + } +} + +void +static_menu_cb(Fl_Widget *o, void *f) { + Hill *hill = (Hill*) ((Fl_Menu_*)o)->mvalue()->user_data(); + ((GipfelWidget *)f)->menu_cb(hill); +} void GipfelWidget::update_menuitems(Hills *h) { @@ -362,9 +383,13 @@ GipfelWidget::update_menuitems(Hills *h) { if (h_sort->get(i)->duplicate) { continue; } - menuitems[j++].text = h_sort->get(i)->name; + menuitems[j].text = h_sort->get(i)->name; + menuitems[j].user_data(h_sort->get(i)); + j++; } + mb->menu(menuitems); + mb->callback((Fl_Callback*) static_menu_cb, this); delete h_sort; } |