diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/GipfelWidget.cxx | 13 | ||||
| -rw-r--r-- | src/Hill.H | 6 | ||||
| -rw-r--r-- | src/Hill.cxx | 33 | 
3 files changed, 45 insertions, 7 deletions
| diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index b71abbf..8782fb1 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -1,5 +1,5 @@  //  -// "$Id: GipfelWidget.cxx,v 1.34 2005/06/22 19:47:19 hofmann Exp $" +// "$Id: GipfelWidget.cxx,v 1.35 2005/06/22 20:40:35 hofmann Exp $"  //  // GipfelWidget routines.  // @@ -348,7 +348,9 @@ GipfelWidget::get_view_height() {  void   GipfelWidget::update_menuitems(Hills *h) {    int i,j; -   +  Hills *h_sort = new Hills(h); +  h_sort->sort_name(); +    if (menuitems) {      free(menuitems);      menuitems = NULL; @@ -356,14 +358,15 @@ GipfelWidget::update_menuitems(Hills *h) {    menuitems = (Fl_Menu_Item*) calloc(h->get_num(), sizeof(Fl_Menu_Item) + 1);    j = 0; -  for (i=0; i<h->get_num(); i++) { -    if (h->get(i)->duplicate) { +  for (i=0; i<h_sort->get_num(); i++) { +    if (h_sort->get(i)->duplicate) {        continue;      } -    menuitems[j++].text = h->get(i)->name; +    menuitems[j++].text = h_sort->get(i)->name;    }    mb->menu(menuitems); +  delete h_sort;  }  void @@ -1,5 +1,5 @@  //  -// "$Id: Hill.H,v 1.15 2005/06/19 16:54:02 hofmann Exp $" +// "$Id: Hill.H,v 1.16 2005/06/22 20:40:35 hofmann Exp $"  //  // Copyright 2005 by Johannes Hofmann  // @@ -55,6 +55,8 @@ class Hills {   public:    Hills(); +  Hills(const Hills *h); +    ~Hills();    int load(const char *file); @@ -65,6 +67,8 @@ class Hills {    void sort_phi(); +  void sort_name(); +    void sort();    void clear(); diff --git a/src/Hill.cxx b/src/Hill.cxx index 08d834f..4057524 100644 --- a/src/Hill.cxx +++ b/src/Hill.cxx @@ -1,5 +1,5 @@  //  -// "$Id: Hill.cxx,v 1.16 2005/06/22 19:47:20 hofmann Exp $" +// "$Id: Hill.cxx,v 1.17 2005/06/22 20:40:35 hofmann Exp $"  //  // Hill routines.  // @@ -67,6 +67,16 @@ Hills::Hills() {    deg2rad = pi_d / 180.0;  } +Hills::Hills(const Hills *h) { +  num = h->num; +  cap = h->cap; +  m = (Hill **) malloc(cap * sizeof(Hill *)); +  memcpy(m, h->m, cap * sizeof(Hill *)); + +  pi_d = asin(1.0) * 2.0; +  deg2rad = pi_d / 180.0; +} +  int  Hills::load(const char *file) {    FILE *fp; @@ -184,6 +194,18 @@ comp_mountains_phi(const void *n1, const void *n2) {    }    } +static int +comp_mountains_name(const void *n1, const void *n2) { +  Hill *m1 = *(Hill **)n1; +  Hill *m2 = *(Hill **)n2; +   +  if (m1 && m2) { +    return strcmp(m1->name, m2->name); +  } else { +    return 0; +  }   +} +  void  Hills::sort() {    if (!m) { @@ -203,6 +225,15 @@ Hills::sort_phi() {  }  void +Hills::sort_name() { +  if (!m) { +    return; +  } + +  qsort(m, num, sizeof(Hill *), comp_mountains_name); +} + +void  Hills::clear() {    if (m) {      free(m); | 
