diff options
| author | Tavmjong Bah <tavmjong@free.fr> | 2017-02-04 10:22:35 +0000 |
|---|---|---|
| committer | tavmjong-free <tavmjong@free.fr> | 2017-02-04 10:22:35 +0000 |
| commit | 2a84c87bd1c6850a9bb9ad5b39f82d1dacb4b94d (patch) | |
| tree | 96d622a4e1cb20e4e86b8a7fc38dd8d72cc9356c /src/document.cpp | |
| parent | Disable rotate guides in doc rotation (diff) | |
| parent | Add some more comments to improve code understanding (diff) | |
| download | inkscape-2a84c87bd1c6850a9bb9ad5b39f82d1dacb4b94d.tar.gz inkscape-2a84c87bd1c6850a9bb9ad5b39f82d1dacb4b94d.zip | |
Merge in GSoC style dialog. (Work in progress.)
(bzr r15471)
Diffstat (limited to 'src/document.cpp')
| -rw-r--r-- | src/document.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/document.cpp b/src/document.cpp index 8072ec53d..57208582a 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -1053,6 +1053,60 @@ sigc::connection SPDocument::connectIdChanged(gchar const *id, return priv->id_changed_signals[g_quark_from_string(id)].connect(slot); } +void _getObjectsByClassRecursive(Glib::ustring const &klass, SPObject *parent, std::vector<SPObject *> &objects) +{ + if (parent) { + Glib::ustring class_attribute; + char const *temp = parent->getAttribute("class"); + if (temp) { + class_attribute = temp; + } + + if (class_attribute.find( klass ) != std::string::npos) { + objects.push_back( parent ); + } + + // Check children + for (auto& child : parent->children) { + _getObjectsByClassRecursive( klass, &child, objects ); + } + } +} + +std::vector<SPObject *> SPDocument::getObjectsByClass(Glib::ustring const &klass) const +{ + std::vector<SPObject *> objects; + g_return_val_if_fail(!klass.empty(), objects); + + _getObjectsByClassRecursive(klass, root, objects); + return objects; +} + +void _getObjectsByElementRecursive(Glib::ustring const &element, SPObject *parent, + std::vector<SPObject *> &objects) +{ + if (parent) { + Glib::ustring prefixed = "svg:" + element; + if (parent->getRepr()->name() == prefixed) { + objects.push_back(parent); + } + + // Check children + for (auto& child : parent->children) { + _getObjectsByElementRecursive(element, &child, objects); + } + } +} + +std::vector<SPObject *> SPDocument::getObjectsByElement(Glib::ustring const &element) const +{ + std::vector<SPObject *> objects; + g_return_val_if_fail(!element.empty(), objects); + + _getObjectsByElementRecursive(element, root, objects); + return objects; +} + void SPDocument::bindObjectToRepr(Inkscape::XML::Node *repr, SPObject *object) { if (object) { |
