X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Flayertreestore.cpp;h=959582ce3888498283237c13542a4db22d9fd650;hb=756c0d29ac1742f231e6615f9a577e574e35a4af;hp=5f75084e6ae72287a9178ec7c7ffc4fa55d1a77b;hpb=ce408de81ca266b1f334ee9bc6c8fb7ba1492ed4;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/layertreestore.cpp b/synfig-studio/trunk/src/gtkmm/layertreestore.cpp index 5f75084..959582c 100644 --- a/synfig-studio/trunk/src/gtkmm/layertreestore.cpp +++ b/synfig-studio/trunk/src/gtkmm/layertreestore.cpp @@ -2,10 +2,11 @@ /*! \file layertreestore.cpp ** \brief Template File ** -** $Id: layertreestore.cpp,v 1.2 2005/01/12 07:03:42 darco Exp $ +** $Id$ ** ** \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,19 @@ #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 "general.h" + #endif /* === U S I N G =========================================================== */ @@ -90,21 +92,21 @@ LayerTreeStore::LayerTreeStore(etl::loose_handle can //canvas_interface()->signal_value_node_replaced().connect(sigc::mem_fun(*this,&studio::LayerTreeStore::on_value_node_replaced)); set_default_sort_func(sigc::ptr_fun(index_sorter)); - + // rebuild(); } LayerTreeStore::~LayerTreeStore() { - synfig::info("LayerTreeStore::~LayerTreeStore()q: Deleted"); - + if (getenv("SYNFIG_DEBUG_DESTRUCTORS")) + synfig::info("LayerTreeStore::~LayerTreeStore(): Deleted"); } int LayerTreeStore::z_sorter(const Gtk::TreeModel::iterator &rhs,const Gtk::TreeModel::iterator &lhs) { const Model model; - + float diff((float)(*rhs)[model.z_depth]-(float)(*lhs)[model.z_depth]); if(diff<0) @@ -118,7 +120,7 @@ int LayerTreeStore::index_sorter(const Gtk::TreeModel::iterator &rhs,const Gtk::TreeModel::iterator &lhs) { const Model model; - + return ((int)(*rhs)[model.index]-(int)(*lhs)[model.index]); } @@ -130,7 +132,7 @@ LayerTreeStore::search_func(const Glib::RefPtr&,int,const Glib::ustri Glib::ustring substr(x.uppercase()); Glib::ustring label((*iter)[model.label]); label=label.uppercase(); - + return label.find(substr)==Glib::ustring::npos; } @@ -152,14 +154,13 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum Glib::Value x; g_value_init(x.gobj(),x.value_type()); - + x.set(layer->get_depth()); - + 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]); @@ -167,14 +168,13 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum Glib::Value x; g_value_init(x.gobj(),x.value_type()); - + x.set(layer->get_z_depth(canvas_interface()->get_time())*1.0001+layer->get_depth()); - + 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]); @@ -183,16 +183,15 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum Glib::Value x; g_value_init(x.gobj(),x.value_type()); x.set(false); - + ValueBase v(layer->get_param("children_lock")); - if(v.same_as(bool())) + if(v.same_type_as(bool())) x.set(v.get(bool())); - + 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 +200,13 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum Glib::Value x; g_value_init(x.gobj(),x.value_type()); + x.set(layer->get_non_empty_description()); - if(!layer->get_description().empty()) - x.set(layer->get_description()); - else - x.set(layer->get_local_name()); - 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]); @@ -223,13 +217,12 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum x.set(layer->get_local_name()); - + g_value_init(value.gobj(),x.value_type()); //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]); @@ -240,13 +233,12 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum x.set(layer->get_canvas()); - + g_value_init(value.gobj(),x.value_type()); //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]); @@ -256,12 +248,11 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum g_value_init(x.gobj(),x.value_type()); x.set(layer->active()); - + 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; @@ -271,7 +262,7 @@ LayerTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int colum //x.set(layer_icon); x.set(get_tree_pixbuf_layer(layer->get_name())); - + g_value_init(value.gobj(),x.value_type()); g_value_copy(x.gobj(),value.gobj()); } @@ -304,52 +295,51 @@ LayerTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column, Glib::Value x; g_value_init(x.gobj(),model.label.type()); g_value_copy(value.gobj(),x.gobj()); - + synfig::Layer::Handle layer((*iter)[model.layer]); if(!layer) return; synfig::String new_desc(x.get()); - + if(new_desc==layer->get_local_name()) new_desc=synfig::String(); if(new_desc==layer->get_description()) return; - + synfigapp::Action::Handle action(synfigapp::Action::create("layer_set_desc")); - + if(!action) return; - + action->set_param("canvas",canvas_interface()->get_canvas()); action->set_param("canvas_interface",canvas_interface()); action->set_param("layer",layer); action->set_param("new_description",synfig::String(x.get())); - + 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]); - + if(!layer)return; Glib::Value x; g_value_init(x.gobj(),model.active.type()); g_value_copy(value.gobj(),x.gobj()); - + synfigapp::Action::Handle action(synfigapp::Action::create("layer_activate")); - + if(!action) return; - + action->set_param("canvas",canvas_interface()->get_canvas()); action->set_param("canvas_interface",canvas_interface()); action->set_param("layer",layer); action->set_param("new_status",bool(x.get())); - + canvas_interface()->get_instance()->perform_action(action); return; } @@ -360,18 +350,18 @@ LayerTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column, catch(std::exception x) { g_warning(x.what()); - } + } } bool -LayerTreeStore::row_draggable_vfunc (const TreeModel::Path& path)const +LayerTreeStore::row_draggable_vfunc (const TreeModel::Path& /*path*/)const { //if(!get_iter(path)) return false; // Gtk::TreeModel::Row row(*get_iter(path)); - + return true; // return (bool)true; } @@ -391,7 +381,7 @@ LayerTreeStore::drag_data_get_vfunc (const TreeModel::Path& path, Gtk::Selection Layer* layer(((Layer::Handle)row[model.layer]).get()); assert(layer); bool included(false); - + //gtk_selection_data_set (selection_data, gdk_atom_intern("LAYER",false), 8, reinterpret_cast(&layer), sizeof(layer)); std::vector layers; @@ -414,14 +404,14 @@ LayerTreeStore::drag_data_get_vfunc (const TreeModel::Path& path, Gtk::Selection if(!included) layers.push_back(layer); selection_data.set("LAYER", 8, reinterpret_cast(&layers.front()), sizeof(void*)*layers.size()); - + return true; } return false; } bool -LayerTreeStore::drag_data_delete_vfunc (const TreeModel::Path& path) +LayerTreeStore::drag_data_delete_vfunc (const TreeModel::Path& /*path*/) { return true; } @@ -434,7 +424,7 @@ LayerTreeStore::row_drop_possible_vfunc (const TreeModel::Path& dest, const Gtk: //synfig::info("possible_drop -- data of type \"%s\"",selection_data.get_data_type()); //synfig::info("possible_drop -- data of target \"%s\"",gdk_atom_name(selection_data->target)); //synfig::info("possible_drop -- selection=\"%s\"",gdk_atom_name(selection_data->selection)); - + //Gtk::TreeModel::Row row(*get_iter(dest)); if(synfig::String(selection_data.get_data_type())=="LAYER" && (bool)true) @@ -450,13 +440,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; } @@ -464,18 +449,18 @@ LayerTreeStore::row_drop_possible_vfunc (const TreeModel::Path& dest, const Gtk: bool LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk::SelectionData& selection_data) { - + //if(!dest_parent.up() || !get_iter(dest)) return false; - + bool ret=false; int i(0); - + //synfig::info("Dropped data of type \"%s\"",selection_data.get_data_type()); //synfig::info("Dropped data of target \"%s\"",gdk_atom_name(selection_data->target)); //synfig::info("Dropped selection=\"%s\"",gdk_atom_name(selection_data->selection)); synfigapp::Action::PassiveGrouper passive_grouper(canvas_interface()->get_instance().get(),_("Move Layers")); - + // Save the selection data synfigapp::SelectionManager::LayerList selected_layer_list=canvas_interface()->get_selection_manager()->get_selected_layers(); @@ -483,21 +468,21 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk { Gtk::TreeModel::Row row; Canvas::Handle dest_canvas; - + int dest_layer_depth=dest.back(); - + TreeModel::Path dest_parent(dest); if(!dest_parent.up() || !get_iter(dest_parent)) { - TreeModel::Path dest(dest); - if(!get_iter(dest)) - dest.prev(); + TreeModel::Path dest_(dest); + if(!get_iter(dest_)) + dest_.prev(); - if(!get_iter(dest)) + if(!get_iter(dest_)) return false; { - row=(*get_iter(dest)); + row=(*get_iter(dest_)); dest_canvas=(Canvas::Handle)(row[model.canvas]); } } @@ -506,25 +491,23 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk row=(*get_iter(dest_parent)); dest_canvas=row[model.contained_canvas]; } - + assert(dest_canvas); - + Layer::Handle dest_layer(row[model.layer]); if(synfig::String(selection_data.get_data_type())=="LAYER")for(unsigned int i=0;i(const_cast(selection_data.get_data()))[i]); assert(src); if(dest_layer==src) continue; - + if(dest_canvas==src->get_canvas() && src->get_depth()get_canvas()) { @@ -532,7 +515,7 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk // dest_layer_depth--; if(dest_canvas==src->get_canvas() && dest_layer_depth==src->get_depth()) continue; - + synfigapp::Action::Handle action(synfigapp::Action::create("layer_move")); action->set_param("canvas",dest_canvas); action->set_param("canvas_interface",canvas_interface()); @@ -540,21 +523,17 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk 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; } continue; } /*else // In this case we need to remove and then add - { - + { + synfigapp::Action::Handle action; action=synfigapp::Action::create("layer_remove"); action->set_param("canvas",Canvas::Handle(src->get_canvas())); @@ -592,26 +571,20 @@ LayerTreeStore::drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk ret=false; return false; } - } + } ret=true; } */ } } - 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); - + return ret; } - - - - - - void LayerTreeStore::rebuild() { @@ -623,7 +596,7 @@ LayerTreeStore::rebuild() // Clear out the current list clear(); - + // Go ahead and and add all the layers std::for_each( canvas_interface()->get_canvas()->rbegin(), canvas_interface()->get_canvas()->rend(), @@ -643,9 +616,9 @@ LayerTreeStore::refresh() etl::clock timer;timer.reset(); Gtk::TreeModel::Children children_(children()); - + Gtk::TreeModel::Children::iterator iter; - + if(!children_.empty()) for(iter = children_.begin(); iter && iter != children_.end(); ++iter) { @@ -661,7 +634,7 @@ LayerTreeStore::refresh_row(Gtk::TreeModel::Row &row) Layer::Handle layer=row[model.layer]; /* { - row[model.name] = layer->get_local_name(); + row[model.name] = layer->get_local_name(); if(layer->get_description().empty()) { row[model.label] = layer->get_local_name(); @@ -669,16 +642,16 @@ LayerTreeStore::refresh_row(Gtk::TreeModel::Row &row) } else { - row[model.label] = layer->get_description(); + row[model.label] = layer->get_description(); row[model.tooltip] = layer->get_local_name(); } } */ - + if(layer->dynamic_param_list().count("z_depth")) row[model.z_depth]=Time::begin(); - // row_changed(get_path(row),row); - + // row_changed(get_path(row),row); + Gtk::TreeModel::Children children = row.children(); Gtk::TreeModel::Children::iterator iter; @@ -695,7 +668,7 @@ void LayerTreeStore::set_row_layer(Gtk::TreeRow &row,synfig::Layer::Handle &handle) { //row[model.id] = handle->get_name(); - //row[model.name] = handle->get_local_name(); + //row[model.name] = handle->get_local_name(); /*if(handle->get_description().empty()) { //row[model.label] = handle->get_local_name(); @@ -703,45 +676,44 @@ LayerTreeStore::set_row_layer(Gtk::TreeRow &row,synfig::Layer::Handle &handle) } else { - //row[model.label] = handle->get_description(); + //row[model.label] = handle->get_description(); row[model.tooltip] = handle->get_local_name(); }*/ - + //row[model.active] = handle->active(); row[model.layer] = handle; //row[model.canvas] = handle->get_canvas(); - //row[model.icon] = layer_icon; + //row[model.icon] = layer_icon; synfig::Layer::ParamList paramlist=handle->get_param_list(); synfig::Layer::Vocab vocab=handle->get_param_vocab(); synfig::Layer::Vocab::iterator iter; - + for(iter=vocab.begin();iter!=vocab.end();++iter) { if(iter->get_hidden()) continue; if(handle->get_param(iter->get_name()).get_type()!=ValueBase::TYPE_CANVAS) continue; - + { Canvas::Handle canvas; canvas=handle->get_param(iter->get_name()).get(canvas); if(!canvas) continue; - + Canvas::reverse_iterator iter; row[model.contained_canvas]=canvas; - + for(iter=canvas->rbegin();iter!=canvas->rend();++iter) { Gtk::TreeRow row_(*(prepend(row.children()))); set_row_layer(row_,*iter); - } + } continue; } - - + /* etl::handle value_node; if(handle.constant()->dynamic_param_list().count(iter->get_name())) @@ -798,14 +770,13 @@ LayerTreeStore::on_layer_removed(synfig::Layer::Handle handle) void LayerTreeStore::on_layer_inserted(synfig::Layer::Handle handle,int depth) -{ +{ if(depth==0) { on_layer_added(handle); return; } - Gtk::TreeModel::Children children_(children()); if(canvas_interface()->get_canvas()!=handle->get_canvas()) { @@ -818,7 +789,7 @@ LayerTreeStore::on_layer_inserted(synfig::Layer::Handle handle,int depth) } children_=iter->children(); } - + Gtk::TreeModel::Children::iterator iter(children_.begin()); while(depth-- && iter) { @@ -830,14 +801,13 @@ LayerTreeStore::on_layer_inserted(synfig::Layer::Handle handle,int depth) return; } } - + Gtk::TreeModel::Row row(*insert(iter)); set_row_layer(row,handle); - } void -LayerTreeStore::on_layer_status_changed(synfig::Layer::Handle handle,bool x) +LayerTreeStore::on_layer_status_changed(synfig::Layer::Handle handle,bool /*x*/) { Gtk::TreeModel::Children::iterator iter; if(find_layer_row(handle,iter)) @@ -851,7 +821,7 @@ LayerTreeStore::on_layer_status_changed(synfig::Layer::Handle handle,bool x) void LayerTreeStore::on_layer_lowered(synfig::Layer::Handle layer) -{ +{ Gtk::TreeModel::Children::iterator iter, iter2; if(find_layer_row(layer,iter)) { @@ -864,15 +834,15 @@ LayerTreeStore::on_layer_lowered(synfig::Layer::Handle layer) rebuild(); return; } - + //Gtk::TreeModel::Row row(*iter); Gtk::TreeModel::Row row2 = *iter2; synfig::Layer::Handle layer2=row2[model.layer]; - + erase(iter2); row2=*insert(iter); - set_row_layer(row2,layer2); - + set_row_layer(row2,layer2); + } else rebuild(); @@ -888,25 +858,25 @@ LayerTreeStore::on_layer_raised(synfig::Layer::Handle layer) if(find_layer_row_(layer, canvas_interface()->get_canvas(), children_, iter,iter2)) { if(iter!=iter2) - { + { //Gtk::TreeModel::Row row = *iter; Gtk::TreeModel::Row row2 = *iter2; synfig::Layer::Handle layer2=row2[model.layer]; - + erase(iter2); iter++; row2=*insert(iter); set_row_layer(row2,layer2); - + return; } } - + rebuild(); } void -LayerTreeStore::on_layer_moved(synfig::Layer::Handle layer,int depth, synfig::Canvas::Handle canvas) +LayerTreeStore::on_layer_moved(synfig::Layer::Handle layer,int depth, synfig::Canvas::Handle /*canvas*/) { on_layer_removed(layer); on_layer_inserted(layer,depth); @@ -925,25 +895,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; + return; } } } - //DEBUGPOINT(); rebuild(); */ } @@ -955,9 +921,9 @@ LayerTreeStore::on_layer_new_description(synfig::Layer::Handle handle,synfig::St if(find_layer_row(handle,iter)) { Gtk::TreeRow row(*iter); - - Layer::Handle layer(row[model.layer]); - + + Layer::Handle layer(row[model.layer]); + if(desc.empty()) { //row[model.label]=layer->get_local_name(); @@ -967,7 +933,7 @@ LayerTreeStore::on_layer_new_description(synfig::Layer::Handle handle,synfig::St //row[model.label]=layer->get_description(); row[model.tooltip]=layer->get_local_name(); } - else + else { rebuild(); } @@ -975,7 +941,7 @@ LayerTreeStore::on_layer_new_description(synfig::Layer::Handle handle,synfig::St bool LayerTreeStore::find_canvas_row_(synfig::Canvas::Handle canvas, synfig::Canvas::Handle parent, Gtk::TreeModel::Children layers, Gtk::TreeModel::Children::iterator &iter) -{ +{ if(canvas==parent) return false; @@ -986,22 +952,22 @@ LayerTreeStore::find_canvas_row_(synfig::Canvas::Handle canvas, synfig::Canvas:: if(canvas==(synfig::Canvas::Handle)row[model.contained_canvas]) return true; } - + iter=children().end(); //return false; } Gtk::TreeModel::Children::iterator iter2; //Gtk::TreeModel::Children::iterator iter3; - + for(iter2 = layers.begin(); iter2 && iter2 != layers.end(); ++iter2) { Gtk::TreeModel::Row row = *iter2; assert((bool)true); - + if(row.children().empty()) continue; - + Canvas::Handle sub_canvas((*row.children().begin())[model.canvas]); if(!sub_canvas) continue; @@ -1009,7 +975,7 @@ LayerTreeStore::find_canvas_row_(synfig::Canvas::Handle canvas, synfig::Canvas:: if(find_canvas_row_(canvas,sub_canvas,iter2->children(),iter)) return true; } - + iter=children().end(); return false; } @@ -1022,10 +988,10 @@ LayerTreeStore::find_canvas_row(synfig::Canvas::Handle canvas, Gtk::TreeModel::C bool -LayerTreeStore::find_layer_row_(const synfig::Layer::Handle &layer, synfig::Canvas::Handle canvas, Gtk::TreeModel::Children layers, Gtk::TreeModel::Children::iterator &iter, Gtk::TreeModel::Children::iterator &prev) +LayerTreeStore::find_layer_row_(const synfig::Layer::Handle &layer, synfig::Canvas::Handle /*canvas*/, Gtk::TreeModel::Children layers, Gtk::TreeModel::Children::iterator &iter, Gtk::TreeModel::Children::iterator &prev) { assert(layer); - + //if(layer->get_canvas()==canvas) { for(iter=prev=layers.begin(); iter && iter != layers.end(); prev=iter++) @@ -1034,30 +1000,29 @@ LayerTreeStore::find_layer_row_(const synfig::Layer::Handle &layer, synfig::Canv if(layer==(synfig::Layer::Handle)row[model.layer]) return true; } - + iter=children().end(); - //DEBUGPOINT(); //return false; } Gtk::TreeModel::Children::iterator iter2; - + for(iter2 = layers.begin(); iter2 && iter2 != layers.end(); ++iter2) { Gtk::TreeModel::Row row = *iter2; assert((bool)true); - + if(row.children().empty()) continue; - + Canvas::Handle canvas((*row.children().begin())[model.canvas]); if(!canvas) continue; - + if(find_layer_row_(layer,canvas,iter2->children(),iter,prev)) return true; } - + iter=children().end(); return false; }