-
-static void
-set_waypoint_model(std::set<synfig::Waypoint, std::less<UniqueID> > waypoints, Waypoint::Model model, etl::loose_handle<synfigapp::CanvasInterface> canvas_interface)
-{
- // Create the action group
- synfigapp::Action::PassiveGrouper group(canvas_interface->get_instance().get(),_("Change Waypoint Group"));
-
- std::set<synfig::Waypoint, std::less<UniqueID> >::const_iterator iter;
- for(iter=waypoints.begin();iter!=waypoints.end();++iter)
- {
- Waypoint waypoint(*iter);
- waypoint.apply_model(model);
-
- synfigapp::Action::Handle action(synfigapp::Action::create("waypoint_set"));
-
- assert(action);
-
- action->set_param("canvas",canvas_interface->get_canvas());
- action->set_param("canvas_interface",canvas_interface);
-
- action->set_param("waypoint",waypoint);
- action->set_param("value_node",waypoint.get_parent_value_node());
-
- if(!canvas_interface->get_instance()->perform_action(action))
- {
- group.cancel();
- return;
- }
- }
-}
-
-void
-CellRenderer_TimeTrack::show_timepoint_menu(const etl::handle<synfig::Node>& node, const synfig::Time& time, Side side)
-{
- std::set<synfig::Waypoint, std::less<UniqueID> > waypoint_set;
- int n;
- n=synfig::waypoint_collect(waypoint_set,time,node);
-
- Gtk::Menu* menu(manage(new Gtk::Menu()));
-
- // Create the interpolation method menu
- if(!waypoint_set.empty())
- {
- Gtk::Menu* interp_menu(manage(new Gtk::Menu()));
- Waypoint::Model model;
-
- if(side==SIDE_LEFT)model.set_before(INTERPOLATION_TCB);
- else model.set_after(INTERPOLATION_TCB);
- interp_menu->items().push_back(Gtk::Menu_Helpers::MenuElem(_("TCB"),
- sigc::bind(
- sigc::ptr_fun(set_waypoint_model),
- waypoint_set,
- model,
- canvas_interface()
- )
- ));
-
- if(side==SIDE_LEFT)model.set_before(INTERPOLATION_LINEAR);
- else model.set_after(INTERPOLATION_LINEAR);
- interp_menu->items().push_back(Gtk::Menu_Helpers::MenuElem(_("Linear"),
- sigc::bind(
- sigc::ptr_fun(set_waypoint_model),
- waypoint_set,
- model,
- canvas_interface()
- )
- ));
-
- if(side==SIDE_LEFT)model.set_before(INTERPOLATION_HALT);
- else model.set_after(INTERPOLATION_HALT);
- interp_menu->items().push_back(Gtk::Menu_Helpers::MenuElem(_("Ease"),
- sigc::bind(
- sigc::ptr_fun(set_waypoint_model),
- waypoint_set,
- model,
- canvas_interface()
- )
- ));
-
- if(side==SIDE_LEFT)model.set_before(INTERPOLATION_CONSTANT);
- else model.set_after(INTERPOLATION_CONSTANT);
- interp_menu->items().push_back(Gtk::Menu_Helpers::MenuElem(_("Constant"),
- sigc::bind(
- sigc::ptr_fun(set_waypoint_model),
- waypoint_set,
- model,
- canvas_interface()
- )
- ));
-
-
- menu->items().push_back(
- Gtk::Menu_Helpers::MenuElem(
- side==SIDE_LEFT?_("Change \"In\" Interp."):_("Change \"Out\" Interp."),
- *interp_menu
- )
- );
- }
-
- menu->items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-jump-to"),
- sigc::bind(
- sigc::mem_fun(
- *canvas_interface(),
- &synfigapp::CanvasInterface::set_time
- ),
- time
- )
- ));
-
- if(!waypoint_set.empty())
- {
- if(waypoint_set.size()==1)
- {
- delete menu;
- menu=0;
- signal_waypoint_clicked_(" ",*waypoint_set.begin(),2);
- return;
- }
- else
- synfig::info("Too many waypoints under me");
- }
- else
- synfig::info("ZERO waypoints under me");
-
- if(menu)menu->popup(3,gtk_get_current_event_time());
-}