diff options
| -rw-r--r-- | .hgignore | 1 | ||||
| -rw-r--r-- | src/GipfelWidget.H | 4 | ||||
| -rw-r--r-- | src/GipfelWidget.cxx | 27 | ||||
| -rw-r--r-- | src/Hill.cxx | 3 | ||||
| -rw-r--r-- | src/gipfel.cxx | 2 | 
5 files changed, 33 insertions, 4 deletions
@@ -21,5 +21,6 @@ depcomp  install-sh  stamp-h1  missing +tags  gipfel diff --git a/src/GipfelWidget.H b/src/GipfelWidget.H index e301244..0bfc8ac 100644 --- a/src/GipfelWidget.H +++ b/src/GipfelWidget.H @@ -45,10 +45,12 @@ class GipfelWidget : public Fl_Widget {    void set_labels(Hills *v);    void update_menuitems(Hills *h); -   +   public:    GipfelWidget(int X,int Y,int W, int H); +  void menu_cb(Hill *hill); +    int load_image(const char *file);    int load_data(const char *file); 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;  } diff --git a/src/Hill.cxx b/src/Hill.cxx index 4057524..d189bd7 100644 --- a/src/Hill.cxx +++ b/src/Hill.cxx @@ -129,7 +129,8 @@ void Hills::mark_duplicates(double dist) {        j = i + 1;        n = get(j);        while (n && fabs(n->phi - m->phi) <= dist) { -	if (fabs(n->lam - m->lam) <= dist) { +	if (fabs(n->lam - m->lam) <= dist &&  +            fabs(n->height - m->height) <= 50.0 ) {  	  n->duplicate = 1;  	}  	j = j + 1; diff --git a/src/gipfel.cxx b/src/gipfel.cxx index e21f5f0..74dba5e 100644 --- a/src/gipfel.cxx +++ b/src/gipfel.cxx @@ -225,7 +225,7 @@ create_control_window() {    s_height_dist->box(FL_THIN_DOWN_BOX);    s_height_dist->labelsize(10);    s_height_dist->step(-0.001); -  s_height_dist->bounds(0.2, 0.01); +  s_height_dist->bounds(0.1, 0.01);    s_height_dist->slider(FL_UP_BOX);    s_height_dist->callback((Fl_Callback*)h_d_cb);    s_height_dist->align(FL_ALIGN_TOP);  | 
