From 306a3865d4874417df3ce35e5a1792d194a0a1c6 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Sat, 30 Jul 2005 16:59:09 +0100 Subject: initial track support --- src/GipfelWidget.cxx | 55 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 8 deletions(-) (limited to 'src/GipfelWidget.cxx') 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; iget_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; iget_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; iget_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; iget_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; iget_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; jget_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; iget_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; -- cgit v1.2.3