diff options
Diffstat (limited to 'src/GipfelWidget.cxx')
-rw-r--r-- | src/GipfelWidget.cxx | 55 |
1 files changed, 13 insertions, 42 deletions
diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index b1b677b..5570399 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -39,12 +39,14 @@ #include <FL/fl_draw.H> #include "Fl_Search_Chooser.H" +#include "choose_hill.H" #include "util.h" #include "GipfelWidget.H" -static Fl_Menu_Item *menuitems; static double pi_d, deg2rad; +static void center_cb(Fl_Widget *o, void *f); + GipfelWidget::GipfelWidget(int X,int Y,int W, int H): Fl_Widget(X, Y, W, H) { int i; @@ -102,7 +104,7 @@ GipfelWidget::load_image(char *file) { mb = new Fl_Menu_Button(x(),y(),w()+x(),h()+y(),"&popup"); mb->type(Fl_Menu_Button::POPUP3); mb->box(FL_NO_BOX); - mb->menu(menuitems); + mb->add("Center Peak", NULL, (Fl_Callback*) center_cb, this); // try to retrieve gipfel data from JPEG comment section args[0] = "rdjpgcom"; @@ -201,7 +203,6 @@ GipfelWidget::load_data(const char *file) { r = pan->load_data(file); set_labels(pan->get_visible_mountains()); - update_menuitems(pan->get_close_mountains()); return r; } @@ -238,7 +239,6 @@ GipfelWidget::set_viewpoint(const char *pos) { r = pan->set_viewpoint(pos); set_labels(pan->get_visible_mountains()); - update_menuitems(pan->get_close_mountains()); return r; } @@ -247,7 +247,6 @@ void GipfelWidget::set_viewpoint(const Hill *m) { pan->set_viewpoint(m); set_labels(pan->get_visible_mountains()); - update_menuitems(pan->get_close_mountains()); } static void @@ -539,48 +538,21 @@ GipfelWidget::get_view_height() { } void -GipfelWidget::menu_cb(Hill* hill) { - if (hill) { - set_center_angle(hill->alph / deg2rad); +GipfelWidget::center() { + Hill *m = choose_hill(pan->get_close_mountains(), "Center Peak"); + if (m) { + set_center_angle(m->alph / deg2rad); if (!m1 || (m1 && m2)) { - m1 = hill; + m1 = m; } else { - m2 = hill; + m2 = m; } } } -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) { - int i,j; - Hills *h_sort = new Hills(h); - h_sort->sort_name(); - - if (menuitems) { - free(menuitems); - } - - menuitems = (Fl_Menu_Item*) calloc(h->get_num(), sizeof(Fl_Menu_Item) + 1); - j = 0; - for (i=0; i<h_sort->get_num(); i++) { - if (h_sort->get(i)->flags & (HILL_DUPLICATE | HILL_TRACK_POINT)) { - continue; - } - 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; +static void +center_cb(Fl_Widget *o, void *f) { + ((GipfelWidget*)f)->center(); } void @@ -588,7 +560,6 @@ GipfelWidget::set_height_dist_ratio(double r) { pan->set_height_dist_ratio(r); set_labels(pan->get_visible_mountains()); - update_menuitems(pan->get_close_mountains()); redraw(); } |