- 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", static_cast<const TrackChain *>(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<GLtk::Root>());
+ Ray ray = engineer.get_main_view().create_ray(rx, ry);
+ Track *track = engineer.get_layout().pick<Track>(ray);
+ if(track && &track->get_block()!=goto_target)
+ {
+ 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);
+ }
+ }