X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fcanvastreestore.cpp;h=f49d7a3e4c8f04856d5634c02e40ef36df71d5be;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=4a4ea6f45a74e7274ed7b1e2085be95bd8131744;hpb=3a3c4bca3a17137bec5d7960560934b91ef4146e;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/canvastreestore.cpp b/synfig-studio/trunk/src/gtkmm/canvastreestore.cpp index 4a4ea6f..f49d7a3 100644 --- a/synfig-studio/trunk/src/gtkmm/canvastreestore.cpp +++ b/synfig-studio/trunk/src/gtkmm/canvastreestore.cpp @@ -1,20 +1,22 @@ -/* === S I N F G =========================================================== */ +/* === S Y N F I G ========================================================= */ /*! \file canvastreestore.cpp ** \brief Template File ** -** $Id: canvastreestore.cpp,v 1.1.1.1 2005/01/07 03:34:35 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2008 Chris Moore ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. ** \endlegal */ /* ========================================================================= */ @@ -29,23 +31,25 @@ #endif #include "canvastreestore.h" -#include -#include "iconcontroler.h" -#include -#include +#include +#include "iconcontroller.h" +#include +#include #include -#include +#include #include "cellrenderer_value.h" #include "cellrenderer_timetrack.h" #include +#include "general.h" + #endif /* === U S I N G =========================================================== */ using namespace std; using namespace etl; -using namespace sinfg; +using namespace synfig; using namespace studio; /* === M A C R O S ========================================================= */ @@ -63,7 +67,7 @@ static CanvasTreeStore::Model& ModelHack() return *model; } -CanvasTreeStore::CanvasTreeStore(etl::loose_handle canvas_interface_): +CanvasTreeStore::CanvasTreeStore(etl::loose_handle canvas_interface_): Gtk::TreeStore(ModelHack()), canvas_interface_ (canvas_interface_) { @@ -74,13 +78,13 @@ CanvasTreeStore::~CanvasTreeStore() } void -CanvasTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int column, Glib::ValueBase& value)const +CanvasTreeStore::get_value_vfunc(const Gtk::TreeModel::iterator& iter, int column, Glib::ValueBase& value)const { if(column==model.value.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); - Glib::Value x; + Glib::Value x; g_value_init(x.gobj(),x.value_type()); if(!value_desc) @@ -95,69 +99,69 @@ CanvasTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colu x.set((*value_desc.get_value_node())(canvas_interface()->get_time())); else { - sinfg::error(__FILE__":%d: Unable to figure out value",__LINE__); + synfig::error(__FILE__":%d: Unable to figure out value",__LINE__); return; } - + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } else if(column==model.is_value_node.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); Glib::Value x; g_value_init(x.gobj(),x.value_type()); x.set(value_desc && value_desc.is_value_node()); - + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } else if(column==model.is_shared.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); Glib::Value x; g_value_init(x.gobj(),x.value_type()); x.set(value_desc.is_value_node() && value_desc.get_value_node()->rcount()>1); - + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } else if(column==model.is_exported.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); Glib::Value x; g_value_init(x.gobj(),x.value_type()); x.set(value_desc.is_value_node() && value_desc.get_value_node()->is_exported()); - + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } else if(column==model.is_canvas.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); Glib::Value x; g_value_init(x.gobj(),x.value_type()); x.set(!value_desc && (Canvas::Handle)(*iter)[model.canvas]); - + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } else if(column==model.id.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); Glib::Value x; g_value_init(x.gobj(),x.value_type()); @@ -167,28 +171,28 @@ CanvasTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colu else if(!value_desc && Canvas::Handle((*iter)[model.canvas])) x.set(Canvas::Handle((*iter)[model.canvas])->get_id()); else - return Gtk::TreeStore::get_value_vfunc(iter,column,value); - + return Gtk::TreeStore::get_value_vfunc(iter,column,value); + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } else if(column==model.is_editable.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); Glib::Value x; g_value_init(x.gobj(),x.value_type()); - x.set(!value_desc.is_value_node() || sinfgapp::is_editable(value_desc.get_value_node())); - + x.set(!value_desc.is_value_node() || synfigapp::is_editable(value_desc.get_value_node())); + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } else if(column==model.type.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); Glib::Value x; g_value_init(x.gobj(),x.value_type()); @@ -203,21 +207,21 @@ CanvasTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colu { if(!value_desc.is_value_node() || value_desc.get_value_node()->get_name()=="constant") { - x.set(ValueBase::type_name(value_desc.get_value_type())); + x.set(ValueBase::type_local_name(value_desc.get_value_type())); } else { x.set(value_desc.get_value_node()->get_local_name()); } } - + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } else if(column==model.label.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); Glib::Value x; g_value_init(x.gobj(),x.value_type()); @@ -232,9 +236,9 @@ CanvasTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colu x.set(canvas->get_id()); else if(!canvas->get_name().empty()) - x.set(canvas->get_name()); + x.set(canvas->get_name()); else - x.set(_("[Unnamed]")); + x.set(_("[Unnamed]")); x.set(_("Canvas")); } return Gtk::TreeStore::get_value_vfunc(iter,column,value); @@ -242,29 +246,29 @@ CanvasTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colu else { ValueNode::Handle value_node=value_desc.get_value_node(); - + // Setup the row's label if(value_node->get_id().empty()) - x.set(Glib::ustring((*iter)[model.name])); + x.set(Glib::ustring((*iter)[model.name])); else if(Glib::ustring((*iter)[model.name]).empty()) x.set(value_node->get_id()); else - x.set(Glib::ustring((*iter)[model.name])+" ("+value_node->get_id()+')'); + x.set(Glib::ustring((*iter)[model.name])+" ("+value_node->get_id()+')'); } - + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } else if(column==model.icon.index()) { - sinfgapp::ValueDesc value_desc((*iter)[model.value_desc]); + synfigapp::ValueDesc value_desc((*iter)[model.value_desc]); if(!value_desc) return Gtk::TreeStore::get_value_vfunc(iter,column,value); Glib::Value > x; g_value_init(x.gobj(),x.value_type()); - + x.set(get_tree_pixbuf(value_desc.get_value_type())); g_value_init(value.gobj(),x.value_type()); @@ -275,7 +279,7 @@ CanvasTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colu } bool -CanvasTreeStore::find_first_value_desc(const sinfgapp::ValueDesc& value_desc, Gtk::TreeIter& iter) +CanvasTreeStore::find_first_value_desc(const synfigapp::ValueDesc& value_desc, Gtk::TreeIter& iter) { iter=children().begin(); while(iter && value_desc!=(*iter)[model.value_desc]) @@ -283,7 +287,8 @@ CanvasTreeStore::find_first_value_desc(const sinfgapp::ValueDesc& value_desc, Gt if(!iter->children().empty()) { Gtk::TreeIter iter2(iter->children().begin()); - if(iter2 && value_desc==(*iter2)[model.value_desc] || find_next_value_desc(value_desc, iter2)) + //! \todo confirm that the && should be done before the || + if((iter2 && value_desc==(*iter2)[model.value_desc]) || find_next_value_desc(value_desc, iter2)) { iter=iter2; return true; @@ -299,15 +304,16 @@ CanvasTreeStore::find_first_value_desc(const sinfgapp::ValueDesc& value_desc, Gt } bool -CanvasTreeStore::find_next_value_desc(const sinfgapp::ValueDesc& value_desc, Gtk::TreeIter& iter) +CanvasTreeStore::find_next_value_desc(const synfigapp::ValueDesc& value_desc, Gtk::TreeIter& iter) { if(!iter) return find_first_value_desc(value_desc,iter); - + if(iter) do { if(!iter->children().empty()) { Gtk::TreeIter iter2(iter->children().begin()); - if(iter2 && value_desc==(*iter2)[model.value_desc] || find_next_value_desc(value_desc, iter2)) + //! \todo confirm that the && should be done before the || + if((iter2 && value_desc==(*iter2)[model.value_desc]) || find_next_value_desc(value_desc, iter2)) { iter=iter2; return true; @@ -325,13 +331,8 @@ CanvasTreeStore::find_next_value_desc(const sinfgapp::ValueDesc& value_desc, Gtk return (bool)iter && value_desc==(*iter)[model.value_desc]; } - - - - - bool -CanvasTreeStore::find_first_value_node(const ValueNode::Handle& value_node, Gtk::TreeIter& iter) +CanvasTreeStore::find_first_value_node(const synfig::ValueNode::Handle& value_node, Gtk::TreeIter& iter) { iter=children().begin(); while(iter && value_node!=(ValueNode::Handle)(*iter)[model.value_node]) @@ -339,7 +340,8 @@ CanvasTreeStore::find_first_value_node(const ValueNode::Handle& value_node, Gtk: if(!iter->children().empty()) { Gtk::TreeIter iter2(iter->children().begin()); - if(iter2 && value_node==(ValueNode::Handle)(*iter2)[model.value_node] || find_next_value_node(value_node, iter2)) + //! \todo confirm that the && should be done before the || + if((iter2 && value_node==(ValueNode::Handle)(*iter2)[model.value_node]) || find_next_value_node(value_node, iter2)) { iter=iter2; return true; @@ -355,15 +357,16 @@ CanvasTreeStore::find_first_value_node(const ValueNode::Handle& value_node, Gtk: } bool -CanvasTreeStore::find_next_value_node(const ValueNode::Handle& value_node, Gtk::TreeIter& iter) +CanvasTreeStore::find_next_value_node(const synfig::ValueNode::Handle& value_node, Gtk::TreeIter& iter) { if(!iter) return find_first_value_node(value_node,iter); - + if(iter) do { if(!iter->children().empty()) { Gtk::TreeIter iter2(iter->children().begin()); - if(iter2 && value_node==(ValueNode::Handle)(*iter2)[model.value_node] || find_next_value_node(value_node, iter2)) + //! \todo confirm that the && should be done before the || + if((iter2 && value_node==(ValueNode::Handle)(*iter2)[model.value_node]) || find_next_value_node(value_node, iter2)) { iter=iter2; return true; @@ -382,16 +385,17 @@ CanvasTreeStore::find_next_value_node(const ValueNode::Handle& value_node, Gtk:: } void -CanvasTreeStore::set_row(Gtk::TreeRow row,sinfgapp::ValueDesc value_desc, bool do_children) +CanvasTreeStore::set_row(Gtk::TreeRow row,synfigapp::ValueDesc value_desc, bool do_children) { Gtk::TreeModel::Children children = row.children(); - while(!children.empty() && erase(children.begin())); + while(!children.empty() && erase(children.begin())) + ; row[model.value_desc]=value_desc; try { //row[model.icon] = get_tree_pixbuf(value_desc.get_value_type()); - + if(value_desc.is_value_node()) { ValueNode::Handle value_node=value_desc.get_value_node(); @@ -401,18 +405,18 @@ CanvasTreeStore::set_row(Gtk::TreeRow row,sinfgapp::ValueDesc value_desc, bool d row[model.value_node] = value_node; //row[model.is_canvas] = false; //row[model.is_value_node] = true; - //row[model.is_editable] = sinfgapp::is_editable(value_node); + //row[model.is_editable] = synfigapp::is_editable(value_node); //row[model.id]=value_node->get_id(); - + // Set the canvas if(value_desc.parent_is_canvas()) row[model.canvas]=value_desc.get_canvas(); else row[model.canvas]=canvas_interface()->get_canvas(); - + LinkableValueNode::Handle linkable; linkable=LinkableValueNode::Handle::cast_dynamic(value_node); - + if(linkable && do_children) { row[model.link_count] = linkable->link_count(); @@ -422,7 +426,7 @@ CanvasTreeStore::set_row(Gtk::TreeRow row,sinfgapp::ValueDesc value_desc, bool d child_row[model.link_id] = i; child_row[model.canvas] = static_cast(row[model.canvas]); child_row[model.name] = linkable->link_local_name(i); - set_row(child_row,sinfgapp::ValueDesc(linkable,i)); + set_row(child_row,synfigapp::ValueDesc(linkable,i)); } } return; @@ -435,13 +439,13 @@ CanvasTreeStore::set_row(Gtk::TreeRow row,sinfgapp::ValueDesc value_desc, bool d return; } } - catch(sinfg::Exception::IDNotFound x) + catch(synfig::Exception::IDNotFound x) { - sinfg::error(__FILE__":%d: IDNotFound thrown",__LINE__); + synfig::error(__FILE__":%d: IDNotFound thrown",__LINE__); erase(row); return; } - + // We should never get to this point assert(0); } @@ -449,7 +453,7 @@ CanvasTreeStore::set_row(Gtk::TreeRow row,sinfgapp::ValueDesc value_desc, bool d void CanvasTreeStore::refresh_row(Gtk::TreeModel::Row &row, bool do_children) { - sinfgapp::ValueDesc value_desc=row[model.value_desc]; + synfigapp::ValueDesc value_desc=row[model.value_desc]; if(value_desc) { @@ -457,52 +461,52 @@ CanvasTreeStore::refresh_row(Gtk::TreeModel::Row &row, bool do_children) (!bool(row[model.is_value_node]) && row[model.link_count]!=0)) { set_row(row,value_desc,do_children); - return; + return; } - + if(row[model.is_value_node]) { ValueNode::Handle value_node(value_desc.get_value_node()); - + if(ValueNode::Handle(row[model.value_node])!=value_node) { rebuild_row(row,do_children); return; } - + //row[model.id]=value_node->get_id(); - + // Setup the row's label /* if(value_node->get_id().empty()) - row[model.label] = Glib::ustring(row[model.name]); + row[model.label] = Glib::ustring(row[model.name]); else if(Glib::ustring(row[model.name]).empty()) row[model.label] = value_node->get_id(); else - row[model.label] = Glib::ustring(row[model.name])+" ("+value_node->get_id()+')'; + row[model.label] = Glib::ustring(row[model.name])+" ("+value_node->get_id()+')'; */ - + LinkableValueNode::Handle linkable; linkable=LinkableValueNode::Handle::cast_dynamic(value_node); if(do_children && linkable && ((int)row[model.link_count] != linkable->link_count())) { // Gtk::TreeModel::Children children = row.children(); // while(!children.empty() && erase(children.begin())); - + set_row(row,value_desc); - return; + return; } } else { - //row[model.label] = Glib::ustring(row[model.name]); + //row[model.label] = Glib::ustring(row[model.name]); //row[model.is_value_node] = false; //row[model.is_editable] = true; } } if(!do_children) - return; - + return; + Gtk::TreeModel::Children children = row.children(); Gtk::TreeModel::Children::iterator iter; @@ -517,7 +521,7 @@ CanvasTreeStore::refresh_row(Gtk::TreeModel::Row &row, bool do_children) void CanvasTreeStore::rebuild_row(Gtk::TreeModel::Row &row, bool do_children) { - sinfgapp::ValueDesc value_desc=(sinfgapp::ValueDesc)row[model.value_desc]; + synfigapp::ValueDesc value_desc=(synfigapp::ValueDesc)row[model.value_desc]; if(value_desc && value_desc.get_value_node()) { @@ -525,14 +529,14 @@ CanvasTreeStore::rebuild_row(Gtk::TreeModel::Row &row, bool do_children) value_node=value_desc.get_value_node(); assert(value_node);if(!value_node)return; - + if(value_node && value_node!=(ValueNode::Handle)row[model.value_node]) { // Gtk::TreeModel::Children children = row.children(); // while(!children.empty() && erase(children.begin())); - + set_row(row,value_desc,do_children); - return; + return; } LinkableValueNode::Handle linkable; @@ -542,34 +546,35 @@ CanvasTreeStore::rebuild_row(Gtk::TreeModel::Row &row, bool do_children) { // Gtk::TreeModel::Children children = row.children(); // while(!children.empty() && erase(children.begin())); - + set_row(row,value_desc); - return; + return; } - + //if(!value_node) // value_node=row[model.value_node]; - + row[model.id]=value_node->get_id(); // Setup the row's label if(value_node->get_id().empty()) - row[model.label] = Glib::ustring(row[model.name]); + row[model.label] = Glib::ustring(row[model.name]); else if(Glib::ustring(row[model.name]).empty()) row[model.label] = value_node->get_id(); else - row[model.label] = Glib::ustring(row[model.name])+" ("+value_node->get_id()+')'; + row[model.label] = Glib::ustring(row[model.name])+" ("+value_node->get_id()+')'; } else { - row[model.label] = Glib::ustring(row[model.name]); + row[model.label] = Glib::ustring(row[model.name]); row[model.is_value_node] = false; row[model.is_editable] = true; Gtk::TreeModel::Children children = row.children(); - while(!children.empty() && erase(children.begin())); + while(!children.empty() && erase(children.begin())) + ; } if(!do_children) - return; + return; Gtk::TreeModel::Children children = row.children(); Gtk::TreeModel::Children::iterator iter; @@ -585,9 +590,9 @@ CellRenderer_ValueBase* CanvasTreeStore::add_cell_renderer_value(Gtk::TreeView::Column* column) { const CanvasTreeStore::Model model; - + CellRenderer_ValueBase* ret; - + ret=Gtk::manage( new CellRenderer_ValueBase() ); column->pack_start(*ret,true); @@ -602,16 +607,16 @@ CellRenderer_TimeTrack* CanvasTreeStore::add_cell_renderer_value_node(Gtk::TreeView::Column* column) { const CanvasTreeStore::Model model; - + CellRenderer_TimeTrack* ret; - + ret = Gtk::manage( new CellRenderer_TimeTrack() ); - + column->pack_start(*ret,true); //column->add_attribute(ret->property_visible(), model.is_value_node); column->add_attribute(ret->property_value_desc(), model.value_desc); column->add_attribute(ret->property_canvas(), model.canvas); - - + + return ret; }