Remove .gitignore do nothing is ignored.
[synfig.git] / synfig-studio / trunk / src / gtkmm / canvastreestore.cpp
index 4a4ea6f..f49d7a3 100644 (file)
@@ -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
 */
 /* ========================================================================= */
 #endif
 
 #include "canvastreestore.h"
-#include <sinfg/valuenode.h>
-#include "iconcontroler.h"
-#include <sinfg/valuenode_timedswap.h>
-#include <sinfg/valuenode_animated.h>
+#include <synfig/valuenode.h>
+#include "iconcontroller.h"
+#include <synfig/valuenode_timedswap.h>
+#include <synfig/valuenode_animated.h>
 #include <gtkmm/button.h>
-#include <sinfgapp/instance.h>
+#include <synfigapp/instance.h>
 #include "cellrenderer_value.h"
 #include "cellrenderer_timetrack.h"
 #include <ETL/clock>
 
+#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<sinfgapp::CanvasInterface> canvas_interface_):
+CanvasTreeStore::CanvasTreeStore(etl::loose_handle<synfigapp::CanvasInterface> 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<sinfg::ValueBase> x;
+               Glib::Value<synfig::ValueBase> 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<bool> 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<bool> 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<bool> 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<bool> 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<Glib::ustring> 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<bool> 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<Glib::ustring> 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<Glib::ustring> 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<Glib::RefPtr<Gdk::Pixbuf> > 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<Canvas::Handle>(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;
 }