X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fkeyframetreestore.cpp;h=345fec5e18a2af0469d67568fd19616bca7539a4;hb=c3ad95144d148602f672e95ddda1f18fc35502f8;hp=c22da5f61bbc14453ff083d8572fc4964ffb9b74;hpb=ce408de81ca266b1f334ee9bc6c8fb7ba1492ed4;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/keyframetreestore.cpp b/synfig-studio/trunk/src/gtkmm/keyframetreestore.cpp index c22da5f..345fec5 100644 --- a/synfig-studio/trunk/src/gtkmm/keyframetreestore.cpp +++ b/synfig-studio/trunk/src/gtkmm/keyframetreestore.cpp @@ -2,7 +2,7 @@ /*! \file keyframetreestore.cpp ** \brief Template File ** -** $Id: keyframetreestore.cpp,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $ +** $Id$ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley @@ -73,13 +73,13 @@ struct _keyframe_iterator Gtk::TreeModel::iterator keyframe_iter_2_model_iter(synfig::KeyframeList::iterator iter,int index) { Gtk::TreeModel::iterator ret; - + _keyframe_iterator*& data(static_cast<_keyframe_iterator*&>(ret->gobj()->user_data)); data=new _keyframe_iterator(); data->ref_count=1; data->iter=iter; data->index=index; - + return ret; } */ @@ -111,7 +111,7 @@ public: gobject_(0) { } - + TreeRowReferenceHack(const Glib::RefPtr& model, const Gtk::TreeModel::Path& path): gobject_ ( gtk_tree_row_reference_new(model->gobj(), const_cast(path.gobj())) ) { @@ -120,7 +120,7 @@ public: TreeRowReferenceHack(const TreeRowReferenceHack &x): gobject_ ( x.gobject_?gtk_tree_row_reference_copy(x.gobject_):0 ) { - + } void swap(TreeRowReferenceHack & other) @@ -137,13 +137,13 @@ public: swap(temp); return *this; } - + ~TreeRowReferenceHack() { if(gobject_) gtk_tree_row_reference_free(gobject_); } - + Gtk::TreeModel::Path get_path() { return Gtk::TreeModel::Path(gtk_tree_row_reference_get_path(gobject_),false); } GtkTreeRowReference *gobj() { return gobject_; } }; @@ -166,7 +166,7 @@ KeyframeTreeStore_Class::init() if(!gtype_) { class_init_func_ = &KeyframeTreeStore_Class::class_init_function; - + const GTypeInfo derived_info = { sizeof(GObjectClass), @@ -180,7 +180,7 @@ KeyframeTreeStore_Class::init() 0, NULL }; - + gtype_ = g_type_register_static(G_TYPE_OBJECT, "KeyframeTreeStore", &derived_info, GTypeFlags(0)); Gtk::TreeModel::add_interface(get_type()); } @@ -188,7 +188,7 @@ KeyframeTreeStore_Class::init() } void -KeyframeTreeStore_Class::class_init_function(gpointer g_class, gpointer class_data) +KeyframeTreeStore_Class::class_init_function(gpointer /*g_class*/, gpointer /*class_data*/) { // ??? } @@ -223,7 +223,7 @@ KeyframeTreeStore::create(etl::loose_handle canvas_i void KeyframeTreeStore::reset_stamp() { - stamp_=time(0)+reinterpret_cast(this); + stamp_=time(0)+reinterpret_cast(this); } /* @@ -232,7 +232,7 @@ KeyframeTreeStore::reset_path_table() { Gtk::TreeModel::Children::iterator iter; const Gtk::TreeModel::Children children(children()); - path_table_.clear(); + path_table_.clear(); for(iter = children.begin(); iter != children.end(); ++iter) { Gtk::TreeModel::Row row(*iter); @@ -258,7 +258,7 @@ KeyframeTreeStore::iterator_sane(const Gtk::TreeModel::iterator& iter)const } inline void -KeyframeTreeStore::dump_iterator(const GtkTreeIter* gtk_iter, const Glib::ustring &name)const +KeyframeTreeStore::dump_iterator(const GtkTreeIter* /*gtk_iter*/, const Glib::ustring &/*name*/)const { #if 0 if(!gtk_iter) @@ -292,10 +292,10 @@ int KeyframeTreeStore::time_sorter(const Gtk::TreeModel::iterator &rhs,const Gtk::TreeModel::iterator &lhs) { const Model model; - + _keyframe_iterator *rhs_iter(static_cast<_keyframe_iterator*>(rhs->gobj()->user_data)); _keyframe_iterator *lhs_iter(static_cast<_keyframe_iterator*>(lhs->gobj()->user_data)); - + Time diff(rhs_iter->iter->get_time()-lhs_iter->iter->get_time()); if(diff<0) return -1; @@ -323,117 +323,55 @@ KeyframeTreeStore::set_value_impl(const Gtk::TreeModel::iterator& row, int colum } _keyframe_iterator *iter(static_cast<_keyframe_iterator*>(row.gobj()->user_data)); - + try { if(column==model.time_delta.index()) - { + { Glib::Value x; g_value_init(x.gobj(),model.time.type()); g_value_copy(value.gobj(),x.gobj()); - + Time new_delta(x.get()); if(new_delta<=Time::zero()+Time::epsilon()) { // Bad value return; } - + Time old_delta((*row)[model.time_delta]); if(old_delta<=Time::zero()+Time::epsilon()) { // Bad old delta return; } + // row(row) on the next line is bad - don't use it, because it leaves 'row' uninitialised //Gtk::TreeModel::iterator row(row); //row++; //if(!row)return; - + Time change_delta(new_delta-old_delta); - + if(change_delta<=Time::zero()+Time::epsilon() &&change_delta>=Time::zero()-Time::epsilon()) { // Not an error, just no change return; } - - // New Method + { Keyframe keyframe((*row)[model.keyframe]); synfigapp::Action::Handle action(synfigapp::Action::create("keyframe_set_delta")); - + if(!action)return; - + action->set_param("canvas",canvas_interface()->get_canvas()); action->set_param("canvas_interface",canvas_interface()); action->set_param("keyframe",keyframe); action->set_param("delta",change_delta); - + canvas_interface()->get_instance()->perform_action(action); } - - - if(0) - { // Old Method The slowest method EVER!!! - OneMoment one_moment; - - // Create the action group - synfigapp::Action::PassiveGrouper group(canvas_interface()->get_instance().get(),_("Adjust Time")); - synfigapp::PushMode push_mode(canvas_interface(), synfigapp::MODE_NORMAL); - - Gtk::TreeModel::iterator iter(row); - if(change_delta<0) - { - //DEBUGPOINT(); - KeyframeList keyframe_list(get_canvas()->keyframe_list()); - synfig::KeyframeList::iterator iter(keyframe_list.find((*row)[model.keyframe])); - //DEBUGPOINT(); - for(;iter!=keyframe_list.end();++iter) - { - //DEBUGPOINT(); - synfig::Keyframe keyframe(*iter); - - keyframe.set_time(keyframe.get_time()+change_delta); - - synfigapp::Action::Handle action(synfigapp::Action::create("keyframe_set")); - - if(!action)return; - - action->set_param("canvas",canvas_interface()->get_canvas()); - action->set_param("canvas_interface",canvas_interface()); - action->set_param("keyframe",keyframe); - - canvas_interface()->get_instance()->perform_action(action); - } - } - else - { - //DEBUGPOINT(); - KeyframeList keyframe_list(get_canvas()->keyframe_list()); - synfig::KeyframeList::reverse_iterator end(keyframe_list.find((*row)[model.keyframe])); - synfig::KeyframeList::reverse_iterator iter(keyframe_list.rbegin()); - //end++; - //DEBUGPOINT(); - for(;iter!=end;++iter) - { - //DEBUGPOINT(); - synfig::Keyframe keyframe(*iter); - - keyframe.set_time(keyframe.get_time()+change_delta); - - synfigapp::Action::Handle action(synfigapp::Action::create("keyframe_set")); - - if(!action)return; - - action->set_param("canvas",canvas_interface()->get_canvas()); - action->set_param("canvas_interface",canvas_interface()); - action->set_param("keyframe",keyframe); - - canvas_interface()->get_instance()->perform_action(action); - } - } - } - + return; } else @@ -449,16 +387,16 @@ KeyframeTreeStore::set_value_impl(const Gtk::TreeModel::iterator& row, int colum synfig::info("KeyframeTreeStore::set_value_impl():old_time=%s",keyframe.get_time().get_string().c_str()); keyframe.set_time(x.get()); synfig::info("KeyframeTreeStore::set_value_impl():new_time=%s",keyframe.get_time().get_string().c_str()); - + synfigapp::Action::Handle action(synfigapp::Action::create("keyframe_set")); - + if(!action) return; - + action->set_param("canvas",canvas_interface()->get_canvas()); action->set_param("canvas_interface",canvas_interface()); action->set_param("keyframe",keyframe); - + canvas_interface()->get_instance()->perform_action(action); } else if(column==model.description.index()) @@ -470,14 +408,14 @@ KeyframeTreeStore::set_value_impl(const Gtk::TreeModel::iterator& row, int colum keyframe.set_description(x.get()); synfigapp::Action::Handle action(synfigapp::Action::create("keyframe_set")); - + if(!action) return; - + action->set_param("canvas",canvas_interface()->get_canvas()); action->set_param("canvas_interface",canvas_interface()); action->set_param("keyframe",keyframe); - + canvas_interface()->get_instance()->perform_action(action); } else if(column==model.keyframe.index()) @@ -492,7 +430,7 @@ KeyframeTreeStore::set_value_impl(const Gtk::TreeModel::iterator& row, int colum catch(std::exception x) { g_warning(x.what()); - } + } } Gtk::TreeModelFlags @@ -524,7 +462,7 @@ KeyframeTreeStore::iter_next_vfunc (const iterator& xiter, iterator& iter_next) return false; _keyframe_iterator *next(new _keyframe_iterator()); - iter_next.gobj()->user_data=static_cast(next); + iter_next.gobj()->user_data=static_cast(next); next->ref_count=1; next->index=iter->index+1; next->iter=iter->iter; @@ -532,8 +470,8 @@ KeyframeTreeStore::iter_next_vfunc (const iterator& xiter, iterator& iter_next) if(next->iter==canvas_interface()->get_canvas()->keyframe_list().end()) return false; - - iter_next.gobj()->stamp=stamp_; + + iter_next.gobj()->stamp=stamp_; return true; } @@ -549,9 +487,9 @@ KeyframeTreeStore::iter_next_vfunc (GtkTreeIter* gtk_iter) // If we are already at the end, then we are very invalid if(iter->iter==canvas_interface()->get_canvas()->keyframe_list().end()) return false; - + ++(iter->iter); - + if(iter->iter==canvas_interface()->get_canvas()->keyframe_list().end()) { --(iter->iter); @@ -572,16 +510,16 @@ KeyframeTreeStore::iter_children_vfunc (GtkTreeIter* gtk_iter, const GtkTreeIter clear_iterator(gtk_iter); return false; } - + _keyframe_iterator *iter(new _keyframe_iterator()); iter->ref_count=1; iter->index=0; iter->iter=canvas_interface()->get_canvas()->keyframe_list().begin(); - + gtk_iter->user_data=static_cast(iter); - gtk_iter->stamp=stamp_; + gtk_iter->stamp=stamp_; - return true; + return true; } bool @@ -602,7 +540,7 @@ KeyframeTreeStore::iter_n_children_vfunc (const GtkTreeIter* parent) if(parent) return 0; - + return canvas_interface()->get_canvas()->keyframe_list().size(); } */ @@ -646,8 +584,8 @@ KeyframeTreeStore::iter_nth_root_child_vfunc (int n, iterator& xiter)const } ++iter->iter; } - xiter.gobj()->user_data=static_cast(iter); - xiter.gobj()->stamp=stamp_; + xiter.gobj()->user_data=static_cast(iter); + xiter.gobj()->stamp=stamp_; return true; } @@ -665,7 +603,7 @@ KeyframeTreeStore::iter_nth_child_vfunc (GtkTreeIter* gtk_iter, const GtkTreeIte } - + _keyframe_iterator *iter(new _keyframe_iterator()); iter->ref_count=1; iter->index=n; @@ -681,9 +619,9 @@ KeyframeTreeStore::iter_nth_child_vfunc (GtkTreeIter* gtk_iter, const GtkTreeIte } ++iter->iter; } - + gtk_iter->user_data=static_cast(iter); - gtk_iter->stamp=stamp_; + gtk_iter->stamp=stamp_; return true; } @@ -718,7 +656,7 @@ KeyframeTreeStore::unref_node_vfunc (iterator& xiter)const if(!iter->ref_count) { delete iter; - + // Make this iterator invalid gtk_iter->stamp=0; } @@ -735,7 +673,7 @@ KeyframeTreeStore::get_path_vfunc (const TreeModel::iterator& gtk_iter)const return path; _keyframe_iterator *iter(static_cast<_keyframe_iterator*>(gtk_iter->gobj()->user_data)); - + path.append_index(iter->index); return path; @@ -783,7 +721,7 @@ KeyframeTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& gtk_iter, in { Glib::Value x; g_value_init(x.gobj(),x.value_type()); - + synfig::Keyframe prev_keyframe(*iter->iter); synfig::Keyframe keyframe; { @@ -798,7 +736,7 @@ KeyframeTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& gtk_iter, in } keyframe=*tmp; } - + Time delta(0); try { delta=keyframe.get_time()-prev_keyframe.get_time(); @@ -836,15 +774,15 @@ KeyframeTreeStore::find_row(const synfig::Keyframe &keyframe) const GtkTreeIter *gtk_iter(row.gobj()); if(!iterator_sane(gtk_iter)) throw std::runtime_error(_("Unable to find Keyframe in table")); - + _keyframe_iterator *iter(static_cast<_keyframe_iterator*>(gtk_iter->user_data)); - + synfig::KeyframeList &keyframe_list(canvas_interface()->get_canvas()->keyframe_list()); if(keyframe_list.empty()) throw std::runtime_error(_("There are no keyframes n this canvas")); iter->index=0; - + for(iter->iter=keyframe_list.begin();iter->iter!=keyframe_list.end() && *iter->iter!=keyframe;++iter->iter) { iter->index++; @@ -862,7 +800,7 @@ KeyframeTreeStore::add_keyframe(Keyframe keyframe) Gtk::TreeRow row(find_row(keyframe)); dump_iterator(row.gobj(),"add_keyframe,row"); Gtk::TreePath path(get_path(row)); - + row_inserted(path,row); old_keyframe_list=get_canvas()->keyframe_list(); @@ -872,7 +810,7 @@ KeyframeTreeStore::add_keyframe(Keyframe keyframe) catch(std::exception x) { g_warning(x.what()); - } + } } void @@ -881,7 +819,7 @@ KeyframeTreeStore::remove_keyframe(Keyframe keyframe) try { if(1) - { + { Gtk::TreeRow row(find_row(keyframe)); dump_iterator(row,"remove_keyframe,row"); Gtk::TreePath path(get_path(row)); @@ -898,7 +836,7 @@ KeyframeTreeStore::remove_keyframe(Keyframe keyframe) { DEBUGPOINT(); g_warning(x.what()); - } + } } void @@ -912,7 +850,7 @@ KeyframeTreeStore::change_keyframe(Keyframe keyframe) unsigned int old_index(0); synfig::KeyframeList::iterator iter; for(old_index=0,iter=old_keyframe_list.begin();iter!=old_keyframe_list.end() && (UniqueID)*iter!=(UniqueID)keyframe;++iter,old_index++); - + if(iter!=old_keyframe_list.end() && new_index!=old_index) { DEBUGPOINT(); @@ -925,22 +863,22 @@ KeyframeTreeStore::change_keyframe(Keyframe keyframe) { new_order.erase(new_order.begin()+new_index); new_order.insert(new_order.begin()+old_index,new_index); - + //new_order[old_index]= - + rows_reordered (Path(), iterator(), &new_order[0]); } old_keyframe_list=get_canvas()->keyframe_list(); - + row=find_row(keyframe); } dump_iterator(row,"change_keyframe,row"); - row_changed(get_path(row),row); + row_changed(get_path(row),row); } catch(std::exception x) { DEBUGPOINT(); g_warning(x.what()); - } + } }