diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2005-07-30 16:59:09 +0100 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2005-07-30 16:59:09 +0100 |
commit | 306a3865d4874417df3ce35e5a1792d194a0a1c6 (patch) | |
tree | 69d737675fafd18a8ba610e232911ddecc9bd816 /src/GipfelWidget.cxx | |
parent | 02a0aca8283e7acd62eb4223c41a671209e5bf7d (diff) |
initial track support
Diffstat (limited to 'src/GipfelWidget.cxx')
-rw-r--r-- | src/GipfelWidget.cxx | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index a8a6f00..9f9d10a 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -59,6 +59,7 @@ GipfelWidget::GipfelWidget(int X,int Y,int W, int H): Fl_Widget(X, Y, W, H) { for (i=0; i<=3; i++) { marker->add(new Hill(i * 10, 0)); } + track_points = NULL; fl_register_images(); } @@ -83,9 +84,27 @@ GipfelWidget::load_image(const char *file) { int GipfelWidget::load_data(const char *file) { - int r; - r = pan->load_file(file); - return r; + return pan->load_data(file); +} + +int +GipfelWidget::load_track(const char *file) { + track_points = new Hills(); + + if (track_points->load(file) != 0) { + delete track_points; + track_points = NULL; + return 1; + } + + for (int i=0; i<track_points->get_num(); i++) { + track_points->get(i)->flags |= HILL_TRACK_POINT; + } + + pan->add_hills(track_points); + redraw(); + + return 0; } int @@ -126,13 +145,14 @@ GipfelWidget::draw() { fl_push_clip(x(), y(), w(), h()); img->draw(x(),y(),w(),h(),0,0); - + + /* hills */ fl_font(FL_HELVETICA, 10); mnts = pan->get_visible_mountains(); for (i=0; i<mnts->get_num(); i++) { m = mnts->get(i); - if (m->duplicate) { + if (m->flags & (HILL_DUPLICATE | HILL_TRACK_POINT)) { continue; } @@ -154,6 +174,7 @@ GipfelWidget::draw() { center_y + m->label_y + y()); } + /* markers */ for (i=0; i<marker->get_num(); i++) { m = marker->get(i); @@ -163,6 +184,24 @@ GipfelWidget::draw() { draw_flag(center_x + m->x + x(), center_y + m->y + y(), NULL); } + /* track */ + if (track_points && track_points->get_num() >= 1) { + int last_x, last_y, last_initialized = 0; + + fl_color(FL_RED); + for (i=1; i<track_points->get_num(); i++) { + if (last_initialized) { + fl_line(center_x + x() + last_x, + center_y + y() + last_y, + center_x + x() + track_points->get(i)->x, + center_y + y() + track_points->get(i)->y); + } + last_x = track_points->get(i)->x; + last_y = track_points->get(i)->y; + last_initialized++; + } + } + fl_pop_clip(); } @@ -182,7 +221,7 @@ GipfelWidget::set_labels(Hills *v) { for (i=0; i<v->get_num(); i++) { m = v->get(i); - if (m->duplicate) { + if (m->flags & HILL_DUPLICATE) { continue; } @@ -193,7 +232,7 @@ GipfelWidget::set_labels(Hills *v) { for (j=0; j<v->get_num() && j < i; j++) { n = v->get(j); - if (n->duplicate) { + if (n->flags & HILL_DUPLICATE) { continue; } @@ -380,7 +419,7 @@ 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_sort->get_num(); i++) { - if (h_sort->get(i)->duplicate) { + if (h_sort->get(i)->flags & HILL_DUPLICATE) { continue; } menuitems[j].text = h_sort->get(i)->name; |