X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fengineer%2Frouterpanel.cpp;h=5097edaedf84046fc63765322c4cf8d6c1288a7f;hb=d5de37274a309d55706b5077cfcc60ef753fa97d;hp=e69a436d8f10661b97b63d1644d9cd81e2c3de72;hpb=b261812f040caed52bc3de783e8bcb86b222a9ed;p=r2c2.git diff --git a/source/engineer/routerpanel.cpp b/source/engineer/routerpanel.cpp index e69a436..5097eda 100644 --- a/source/engineer/routerpanel.cpp +++ b/source/engineer/routerpanel.cpp @@ -21,7 +21,10 @@ RouterPanel::RouterPanel(Engineer &e, Train &t): engineer(e), train(t), routes(&route_name), - updating(false) + updating(false), + goto_pick(false), + goto_target(0), + goto_highlight(0) { Loader::WidgetMap widgets; DataFile::load(*this, "data/routerpanel.ui", widgets); @@ -72,12 +75,45 @@ void RouterPanel::route_selected(unsigned index) void RouterPanel::goto_clicked() { - engineer.pick(false); - pick_conn = engineer.signal_pick_done.connect(sigc::mem_fun(this, &RouterPanel::goto_pick_done)); + goto_pick = true; + signal_grab_pointer.emit(); } -void RouterPanel::goto_pick_done(Track *track, unsigned) +void RouterPanel::button_press(int x, int y, unsigned btn) { - pick_conn.disconnect(); - train.ai_message(TrainAI::Message("set-destination-block", &track->get_block())); + Panel::button_press(x, y, btn); + + if(goto_pick) + { + signal_ungrab_pointer.emit(); + goto_pick = false; + + delete goto_highlight; + goto_highlight = 0; + + if(goto_target && btn==1) + train.ai_message(TrainAI::Message("set-destination-block", goto_target)); + } +} + +void RouterPanel::pointer_motion(int x, int y) +{ + Panel::pointer_motion(x, y); + + if(goto_pick) + { + int rx = x; + int ry = y; + map_coords_to_ancestor(rx, ry, *find_ancestor()); + Ray ray = engineer.get_main_view().create_ray(rx, ry); + Track *track = engineer.get_layout().pick(ray); + if(track) + { + goto_target = &track->get_block(); + delete goto_highlight; + goto_highlight = new TrackChain3D(engineer.get_layout_3d(), *goto_target); + goto_highlight->set_color(GL::Color(0.7)); + goto_highlight->set_layer(2); + } + } }