diff --git a/synfig-core/src/synfig/layers/layer_switch.cpp b/synfig-core/src/synfig/layers/layer_switch.cpp index 08acb41..81b1541 100644 --- a/synfig-core/src/synfig/layers/layer_switch.cpp +++ b/synfig-core/src/synfig/layers/layer_switch.cpp @@ -29,7 +29,7 @@ # include #endif -#include "layer_switch.h" +#include #include #include @@ -42,6 +42,7 @@ #include #include +#include "layer_switch.h" #endif @@ -69,6 +70,7 @@ SYNFIG_LAYER_SET_CVS_ID(Layer_Switch,"$Id$"); Layer_Switch::Layer_Switch() { param_layer_name=ValueBase(String()); + param_layer_depth=ValueBase(int(-1)); set_param("children_lock",ValueBase(true)); SET_INTERPOLATION_DEFAULTS(); @@ -97,6 +99,11 @@ Layer_Switch::get_param_vocab()const .set_hint("sublayer_name") ); + ret.push_back(ParamDesc("layer_depth") + .set_local_name(_("Active Layer Depth")) + .set_description(_("Uses when layer name is empty. Only layer with specified depth are visible")) + ); + return ret; } @@ -104,6 +111,7 @@ bool Layer_Switch::set_param(const String & param, const ValueBase &value) { IMPORT_VALUE(param_layer_name); + IMPORT_VALUE(param_layer_depth); return Layer_PasteCanvas::set_param(param,value); } @@ -111,6 +119,7 @@ ValueBase Layer_Switch::get_param(const String& param)const { EXPORT_VALUE(param_layer_name); + EXPORT_VALUE(param_layer_depth); EXPORT_NAME(); EXPORT_VERSION(); @@ -122,12 +131,20 @@ Layer::Handle Layer_Switch::get_current_layer()const { Canvas::Handle canvas = get_sub_canvas(); - String n = param_layer_name.get(String()); - if (canvas) - for(IndependentContext i = canvas->get_independent_context(); *i; i++) - if ((*i)->get_description() == n) - return *i; - return NULL; + if (canvas) { + String name = param_layer_name.get(String()); + if (name.empty()) { + int depth = param_layer_depth.get(int()); + for(IndependentContext i = canvas->get_independent_context(); *i; i++) + if ((*i)->get_depth() == depth) + return *i; + } else { + for(IndependentContext i = canvas->get_independent_context(); *i; i++) + if ((*i)->get_description() == name) + return *i; + } + } + return Layer::Handle(); } diff --git a/synfig-core/src/synfig/layers/layer_switch.h b/synfig-core/src/synfig/layers/layer_switch.h index 6606bd0..50b965a 100644 --- a/synfig-core/src/synfig/layers/layer_switch.h +++ b/synfig-core/src/synfig/layers/layer_switch.h @@ -46,6 +46,8 @@ class Layer_Switch : public Layer_PasteCanvas private: //! Parameter: (String) Active Layer Name ValueBase param_layer_name; + //! Parameter: (int) Active Layer Depth + ValueBase param_layer_depth; mutable std::set last_possible_layers; mutable std::set last_existant_layers; diff --git a/synfig-core/src/synfig/loadcanvas.cpp b/synfig-core/src/synfig/loadcanvas.cpp index fcf20ef..505d068 100644 --- a/synfig-core/src/synfig/loadcanvas.cpp +++ b/synfig-core/src/synfig/loadcanvas.cpp @@ -482,19 +482,8 @@ synfig::String CanvasParser::parse_string(xmlpp::Element *element) { assert(element->get_name()=="string"); - if(element->get_children().empty()) - { - warning(element, "Undefined value in "); - return synfig::String(); - } - - if(element->get_child_text()->get_content().empty()) - { - warning(element, "Content element of appears to be empty"); return synfig::String(); - } - return element->get_child_text()->get_content(); } diff --git a/synfig-studio/src/gui/trees/layertreestore.cpp b/synfig-studio/src/gui/trees/layertreestore.cpp index 75d6d22..45baf3b 100644 --- a/synfig-studio/src/gui/trees/layertreestore.cpp +++ b/synfig-studio/src/gui/trees/layertreestore.cpp @@ -868,8 +868,11 @@ LayerTreeStore::set_row_layer(Gtk::TreeRow &row, const synfig::Layer::Handle &ha std::set impossible_existant_layers; if (etl::handle layer_switch = etl::handle::cast_dynamic(handle)) { - layer_switch->get_possible_new_layers(possible_new_layers); - layer_switch->get_impossible_existant_layers(impossible_existant_layers); + if (!layer_switch->get_param("layer_name").get(String()).empty()) + { + layer_switch->get_possible_new_layers(possible_new_layers); + layer_switch->get_impossible_existant_layers(impossible_existant_layers); + } } int index = canvas->size() + possible_new_layers.size(); diff --git a/synfig-studio/src/gui/widgets/widget_sublayer.cpp b/synfig-studio/src/gui/widgets/widget_sublayer.cpp index 0e8c799..e9122c1 100644 --- a/synfig-studio/src/gui/widgets/widget_sublayer.cpp +++ b/synfig-studio/src/gui/widgets/widget_sublayer.cpp @@ -85,6 +85,9 @@ Widget_Sublayer::set_value_desc(const synfigapp::ValueDesc &x) if(canvas) { // Fill the combo with the layers' descriptions + Gtk::TreeModel::Row row = *(enum_TreeModel->append()); + row[enum_model.value] = ""; + row[enum_model.name] = _(""); for(IndependentContext i = canvas->get_independent_context(); *i; i++) { Gtk::TreeModel::Row row = *(enum_TreeModel->append());