X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Flayertreestore.cpp;h=16b7fc8cb9f8687ffdcc5ca942f1c59309c410b7;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=7527cc464b98b2c34c805fee56c222d58798fc0b;hpb=95d1a7b35162a6aeabcf0cf3bc724305c166fa8a;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/layertreestore.cpp b/synfig-studio/trunk/src/gtkmm/layertreestore.cpp index 7527cc4..16b7fc8 100644 --- a/synfig-studio/trunk/src/gtkmm/layertreestore.cpp +++ b/synfig-studio/trunk/src/gtkmm/layertreestore.cpp @@ -6,6 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 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 @@ -30,18 +31,20 @@ #endif #include "layertreestore.h" -#include "iconcontroler.h" +#include "iconcontroller.h" #include #include #include #include #include "app.h" #include "instance.h" -#include "iconcontroler.h" +#include #include #include #include +#include "general.h" + #endif /* === U S I N G =========================================================== */ @@ -68,6 +71,7 @@ static LayerTreeStore::Model& ModelHack() LayerTreeStore::LayerTreeStore(etl::loose_handle canvas_interface_): Gtk::TreeStore (ModelHack()), + queued (false), canvas_interface_ (canvas_interface_) { layer_icon=Gtk::Button().render_icon(Gtk::StockID("synfig-layer"),Gtk::ICON_SIZE_SMALL_TOOLBAR); @@ -96,8 +100,8 @@ LayerTreeStore::LayerTreeStore(etl::loose_handle can LayerTreeStore::~LayerTreeStore() { - synfig::info("LayerTreeStore::~LayerTreeStore(): Deleted"); - + if (getenv("SYNFIG_DEBUG_DESTRUCTORS")) + synfig::info("LayerTreeStore::~LayerTreeStore(): Deleted"); } int @@ -158,8 +162,7 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } - else - if(column==model.z_depth.index()) + else if(column==model.z_depth.index()) { synfig::Layer::Handle layer((*iter)[model.layer]); @@ -173,8 +176,7 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } - else - if(column==model.children_lock.index()) + else if(column==model.children_lock.index()) { synfig::Layer::Handle layer((*iter)[model.layer]); @@ -191,8 +193,7 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } - else - if(column==model.label.index()) + else if(column==model.label.index()) { synfig::Layer::Handle layer((*iter)[model.layer]); @@ -201,18 +202,13 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum Glib::Value x; g_value_init(x.gobj(),x.value_type()); - - if(!layer->get_description().empty()) - x.set(layer->get_description()); - else - x.set(layer->get_local_name()); + x.set(layer->get_non_empty_description()); g_value_init(value.gobj(),x.value_type()); //g_value_copy(x.gobj(),value.gobj()); value=x; } - else - if(column==model.tooltip.index()) + else if(column==model.tooltip.index()) { synfig::Layer::Handle layer((*iter)[model.layer]); @@ -228,8 +224,7 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum //g_value_copy(x.gobj(),value.gobj()); value=x; } - else - if(column==model.canvas.index()) + else if(column==model.canvas.index()) { synfig::Layer::Handle layer((*iter)[model.layer]); @@ -245,8 +240,7 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum //g_value_copy(x.gobj(),value.gobj()); value=x; } - else - if(column==model.active.index()) + else if(column==model.active.index()) { synfig::Layer::Handle layer((*iter)[model.layer]); @@ -260,8 +254,7 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } - else - if(column==model.icon.index()) + else if(column==model.icon.index()) { synfig::Layer::Handle layer((*iter)[model.layer]); if(!layer)return; @@ -316,7 +309,7 @@ LayerTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column, if(new_desc==layer->get_description()) return; - synfigapp::Action::Handle action(synfigapp::Action::create("layer_set_desc")); + synfigapp::Action::Handle action(synfigapp::Action::create("LayerSetDesc")); if(!action) return; @@ -329,8 +322,7 @@ LayerTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column, canvas_interface()->get_instance()->perform_action(action); return; } - else - if(column==model.active.index()) + else if(column==model.active.index()) { synfig::Layer::Handle layer((*iter)[model.layer]); @@ -340,7 +332,7 @@ LayerTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column, g_value_init(x.gobj(),model.active.type()); g_value_copy(value.gobj(),x.gobj()); - synfigapp::Action::Handle action(synfigapp::Action::create("layer_activate")); + synfigapp::Action::Handle action(synfigapp::Action::create("LayerActivate")); if(!action) return; @@ -359,7 +351,7 @@ LayerTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column, } catch(std::exception x) { - g_warning(x.what()); + g_warning("%s", x.what()); } } @@ -450,13 +442,8 @@ LayerTreeStore::row_drop_possible_vfunc (const TreeModel::Path& dest, const Gtk: //dest_canvas=(Canvas::Handle)(row[model.canvas]); return true; } - else - { - if((bool)const_cast(this)->get_iter(dest_parent)) - return (bool)(Canvas::Handle)(*const_cast(this)->get_iter(dest_parent))[model.contained_canvas]; - else - return false; - } + else if((bool)const_cast(this)->get_iter(dest_parent)) + return (bool)(Canvas::Handle)(*const_cast(this)->get_iter(dest_parent))[model.contained_canvas]; } return false; } @@ -521,9 +508,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk continue; if(dest_canvas==src->get_canvas() && src->get_depth()get_canvas()) @@ -533,20 +518,16 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk if(dest_canvas==src->get_canvas() && dest_layer_depth==src->get_depth()) continue; - synfigapp::Action::Handle action(synfigapp::Action::create("layer_move")); + synfigapp::Action::Handle action(synfigapp::Action::create("LayerMove")); action->set_param("canvas",dest_canvas); action->set_param("canvas_interface",canvas_interface()); action->set_param("layer",src); action->set_param("new_index",dest_layer_depth); action->set_param("dest_canvas",dest_canvas); if(canvas_interface()->get_instance()->perform_action(action)) - { - //DEBUGPOINT(); ret=true; - } else { - //DEBUGPOINT(); passive_grouper.cancel(); return false; } @@ -556,7 +537,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk { synfigapp::Action::Handle action; - action=synfigapp::Action::create("layer_remove"); + action=synfigapp::Action::create("LayerRemove"); action->set_param("canvas",Canvas::Handle(src->get_canvas())); if(!action->set_param("canvas_interface",App::get_instance(src->get_canvas())->find_canvas_interface(src->get_canvas()))) action->set_param("canvas_interface",canvas_interface()); @@ -568,7 +549,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk return false; } - action=synfigapp::Action::create("layer_add"); + action=synfigapp::Action::create("LayerAdd"); action->set_param("canvas",dest_canvas); action->set_param("canvas_interface",canvas_interface()); action->set_param("new",src); @@ -581,7 +562,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk if(dest_layer_depth!=0) { - action=synfigapp::Action::create("layer_move"); + action=synfigapp::Action::create("LayerMove"); action->set_param("canvas",dest_canvas); action->set_param("canvas_interface",canvas_interface()); action->set_param("layer",src); @@ -598,7 +579,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk */ } } - synfig::info("I suposidly moved %d layers",i); + synfig::info("I supposedly moved %d layers",i); // Reselect the previously selected layers canvas_interface()->get_selection_manager()->set_selected_layers(selected_layer_list); @@ -606,15 +587,31 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk return ret; } - - - - - +void +LayerTreeStore::queue_rebuild() +{ + if (queued) return; + queued = false; + queue_connection.disconnect(); + queue_connection=Glib::signal_timeout().connect( + sigc::bind_return( + sigc::mem_fun(*this,&LayerTreeStore::rebuild), + false + ) + ,150); +} void LayerTreeStore::rebuild() { + if (queued) queued = false; + + // disconnect any subcanvas_changed connections + std::map::iterator iter; + for (iter = subcanvas_changed_connections.begin(); iter != subcanvas_changed_connections.end(); iter++) + iter->second.disconnect(); + subcanvas_changed_connections.clear(); + //etl::clock timer;timer.reset(); //synfig::warning("---------rebuilding layer table---------"); @@ -624,7 +621,7 @@ LayerTreeStore::rebuild() // Clear out the current list clear(); - // Go ahead and and add all the layers + // Go ahead and add all the layers std::for_each( canvas_interface()->get_canvas()->rbegin(), canvas_interface()->get_canvas()->rend(), sigc::mem_fun(*this, &studio::LayerTreeStore::on_layer_added) @@ -741,7 +738,6 @@ LayerTreeStore::set_row_layer(Gtk::TreeRow &row,synfig::Layer::Handle &handle) continue; } - /* etl::handle value_node; if(handle.constant()->dynamic_param_list().count(iter->get_name())) @@ -764,6 +760,12 @@ LayerTreeStore::set_row_layer(Gtk::TreeRow &row,synfig::Layer::Handle &handle) void LayerTreeStore::on_layer_added(synfig::Layer::Handle layer) { + if (etl::handle::cast_dynamic(layer)) + subcanvas_changed_connections[layer] = + (etl::handle::cast_dynamic(layer))->signal_subcanvas_changed().connect( + sigc::mem_fun(*this,&studio::LayerTreeStore::queue_rebuild) + ); + assert(layer); Gtk::TreeRow row; if(canvas_interface()->get_canvas()==layer->get_canvas()) @@ -786,6 +788,11 @@ LayerTreeStore::on_layer_added(synfig::Layer::Handle layer) void LayerTreeStore::on_layer_removed(synfig::Layer::Handle handle) { + if (etl::handle::cast_dynamic(handle)) + { + subcanvas_changed_connections[handle].disconnect(); + subcanvas_changed_connections.erase(handle); + } Gtk::TreeModel::Children::iterator iter; if(find_layer_row(handle,iter)) erase(iter); @@ -805,7 +812,6 @@ LayerTreeStore::on_layer_inserted(synfig::Layer::Handle handle,int depth) return; } - Gtk::TreeModel::Children children_(children()); if(canvas_interface()->get_canvas()!=handle->get_canvas()) { @@ -833,7 +839,6 @@ LayerTreeStore::on_layer_inserted(synfig::Layer::Handle handle,int depth) Gtk::TreeModel::Row row(*insert(iter)); set_row_layer(row,handle); - } void @@ -925,25 +930,21 @@ LayerTreeStore::on_layer_param_changed(synfig::Layer::Handle handle,synfig::Stri } /* - //DEBUGPOINT(); Gtk::TreeModel::Children::iterator iter; if(find_layer_row(handle,iter)) { - //DEBUGPOINT(); Gtk::TreeModel::Children children(iter->children()); for(iter = children.begin(); iter && iter != children.end(); ++iter) { if((Glib::ustring)(*iter)[model.param_name]==param_name) { - //DEBUGPOINT(); Gtk::TreeRow row=*iter; refresh_row(row); return; } } } - //DEBUGPOINT(); rebuild(); */ } @@ -1036,7 +1037,6 @@ LayerTreeStore::find_layer_row_(const synfig::Layer::Handle &layer, synfig::Canv } iter=children().end(); - //DEBUGPOINT(); //return false; }