**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-** Copyright (c) 2007 Chris Moore
+** Copyright (c) 2007, 2008 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
#include <synfigapp/canvasinterface.h>
#include "instance.h"
-#include <synfig/timepointcollect.h>
+#include "general.h"
#endif
CellRenderer_TimeTrack::~CellRenderer_TimeTrack()
{
- synfig::info("CellRenderer_TimeTrack::~CellRenderer_TimeTrack(): deleted");
+ if (getenv("SYNFIG_DEBUG_DESTRUCTORS"))
+ synfig::info("CellRenderer_TimeTrack::~CellRenderer_TimeTrack(): Deleted");
}
void
const synfig::Time get_time_offset_from_vdesc(const synfigapp::ValueDesc &v)
{
#ifdef ADJUST_WAYPOINTS_FOR_TIME_OFFSET
- if(v.get_value_type() != synfig::ValueBase::TYPE_CANVAS)
+ if(getenv("SYNFIG_SHOW_CANVAS_PARAM_WAYPOINTS") ||
+ v.get_value_type() != synfig::ValueBase::TYPE_CANVAS)
return synfig::Time::zero();
synfig::Canvas::Handle canvasparam = v.get_value().get(Canvas::Handle());
//kind of a hack... pointer is ugly
const synfig::Node::time_set *get_times_from_vdesc(const synfigapp::ValueDesc &v)
{
- if(v.get_value_type() == synfig::ValueBase::TYPE_CANVAS)
+ if(!getenv("SYNFIG_SHOW_CANVAS_PARAM_WAYPOINTS") &&
+ v.get_value_type() == synfig::ValueBase::TYPE_CANVAS)
{
synfig::Canvas::Handle canvasparam = v.get_value().get(Canvas::Handle());
Time t_orig = i->get_time();
if(!t_orig.is_valid()) continue;
Time t = t_orig - time_offset;
+ if(t<adjustment->get_lower() || t>adjustment->get_upper()) continue;
//if it found it... (might want to change comparison, and optimize
// sel_times.find to not produce an overall nlogn solution)
bool clickfound = tset && get_closest_time(*tset,actual_time+time_offset,pixel_width*cell_area.get_height(),stime);
etl::handle<synfig::Node> node;
- if(valdesc.get_value(stime).get_type()==ValueBase::TYPE_CANVAS)
+ if(!getenv("SYNFIG_SHOW_CANVAS_PARAM_WAYPOINTS") &&
+ valdesc.get_value(stime).get_type()==ValueBase::TYPE_CANVAS)
{
node=Canvas::Handle(valdesc.get_value(stime).get(Canvas::Handle()));
}
}
if(clickfound && node)
- {
- show_timepoint_menu(node, stime, time_offset, actual_time+time_offset<stime?SIDE_LEFT:SIDE_RIGHT);
- }
+ signal_waypoint_clicked_cellrenderer()(node, stime, time_offset, 2);
}
break;
case GDK_MOTION_NOTIFY:
- //DEBUGPOINT();
//if(selection && dragging)
// selected_time=((float)event->motion.x-(float)cell_area.get_x())/(float)cell_area.get_width()*(adjustment->get_upper()-adjustment->get_lower())+adjustment->get_lower();
return true;
break;
case GDK_BUTTON_RELEASE:
{
- DEBUGPOINT();
-
//selected_time=((float)event->button.x-(float)cell_area.get_x())/(float)cell_area.get_width()*(adjustment->get_upper()-adjustment->get_lower())+adjustment->get_lower();
dragging=false;
/*if(event->button.button==3 && selection)
{
- signal_waypoint_clicked_(path,*selected_waypoint,event->button.button-1);
+ signal_waypoint_clicked_cellrenderer()(path,*selected_waypoint,event->button.button-1);
return true;
}
*/
param_list.add("canvas",canvas_interface()->get_canvas());
param_list.add("canvas_interface",canvas_interface());
- if(sel_value.get_value_type() == synfig::ValueBase::TYPE_CANVAS)
+ if(!getenv("SYNFIG_SHOW_CANVAS_PARAM_WAYPOINTS") &&
+ sel_value.get_value_type() == synfig::ValueBase::TYPE_CANVAS)
{
param_list.add("addcanvas",sel_value.get_value().get(Canvas::Handle()));
}else
if(mode & COPY_MASK) //copy
{
etl::handle<studio::Instance>::cast_static(canvas_interface()->get_instance())
- ->process_action("timepoint_copy", param_list);
+ ->process_action("TimepointsCopy", param_list);
}else if(delmode) //DELETE
{
etl::handle<studio::Instance>::cast_static(canvas_interface()->get_instance())
- ->process_action("timepoint_delete", param_list);
+ ->process_action("TimepointsDelete", param_list);
}else //MOVE
{
etl::handle<studio::Instance>::cast_static(canvas_interface()->get_instance())
- ->process_action("timepoint_move", param_list);
+ ->process_action("TimepointsMove", param_list);
}
//now replace all the selected with the new selected
/*if(value_node && selection)
{
if(selected_time==drag_time && event->button.button!=3)
- signal_waypoint_clicked_(path,*selected_waypoint,event->button.button-1);
+ signal_waypoint_clicked_cellrenderer()(path,*selected_waypoint,event->button.button-1);
else
if(event->button.button==1)
{
+// The following three functions don't get documented correctly by
+// doxygen 1.5.[23] because of a bug with any function whose name
+// begins with 'property'. Fixed in doxygen 1.5.4 apparently. See
+// http://bugzilla.gnome.org/show_bug.cgi?id=471185 .
Glib::PropertyProxy<synfigapp::ValueDesc>
CellRenderer_TimeTrack::property_value_desc()
{
{
canvas_interface_ = h;
}
-
-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, const synfig::Time& time_offset, 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;
-
- // note: each of the following 4 'if' blocks provokes these warnings:
- // /usr/include/sigc++-2.0/sigc++/adaptors/bound_argument.h:57: warning:
- // 'model.synfig::Waypoint::Model::temporal_tension' is used uninitialized in this function
- // 'model.synfig::Waypoint::Model::bias' is used uninitialized in this function
- // 'model.synfig::Waypoint::Model::continuity' is used uninitialized in this function
- // 'model.synfig::Waypoint::Model::tension' is used uninitialized in this function
- // 'model.synfig::Waypoint::Model::priority' is used uninitialized in this function
- // I don't know if that matters or not.
-
- 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 - time_offset
- )
- ));
-
- if(!waypoint_set.empty())
- {
- // attempting to locate the valuenode for the clicked waypoint doesn't work if this is a Canvas parameter,
- // so act as if there were multiple waypoints in that case as a workaround
- if(waypoint_set.size()==1 && !Canvas::Handle::cast_dynamic(node))
- {
- 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());
-}