summaryrefslogtreecommitdiffstats
path: root/src/sp-switch.cpp
diff options
context:
space:
mode:
authorMatthew Petroff <matthew@mpetroff.net>2013-09-20 17:05:24 +0000
committerMatthew Petroff <matthew@mpetroff.net>2013-09-20 17:05:24 +0000
commit48b4ee48e518d65c3c5e49369a747c2aa4b0081b (patch)
tree7159f8bc67d3f96ae43c42c32cacec6f7813f6fa /src/sp-switch.cpp
parentFix bug in rectangle toolbar. (diff)
parentFix grids after C++ification. Patch from Markus Engel (diff)
downloadinkscape-48b4ee48e518d65c3c5e49369a747c2aa4b0081b.tar.gz
inkscape-48b4ee48e518d65c3c5e49369a747c2aa4b0081b.zip
Merge from trunk.
(bzr r12475.1.29)
Diffstat (limited to 'src/sp-switch.cpp')
-rw-r--r--src/sp-switch.cpp93
1 files changed, 49 insertions, 44 deletions
diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp
index be9866e16..c6dcf17e3 100644
--- a/src/sp-switch.cpp
+++ b/src/sp-switch.cpp
@@ -25,75 +25,76 @@
#include <sigc++/functors/ptr_fun.h>
#include <sigc++/adaptors/bind.h>
-G_DEFINE_TYPE(SPSwitch, sp_switch, SP_TYPE_GROUP);
+#include "sp-factory.h"
-static void
-sp_switch_class_init (SPSwitchClass *)
-{
-}
-
-static void sp_switch_init (SPSwitch *group)
-{
- if (group->group)
- delete group->group;
+namespace {
+ SPObject* createSwitch() {
+ return new SPSwitch();
+ }
- group->group = new CSwitch(group);
+ bool switchRegistered = SPFactory::instance().registerObject("svg:switch", createSwitch);
}
-CSwitch::CSwitch(SPGroup *group) : CGroup(group), _cached_item(NULL) {
+SPSwitch::SPSwitch() : SPGroup() {
+ this->_cached_item = 0;
}
-CSwitch::~CSwitch() {
- _releaseLastItem(_cached_item);
+SPSwitch::~SPSwitch() {
}
-SPObject *CSwitch::_evaluateFirst() {
+SPObject *SPSwitch::_evaluateFirst() {
SPObject *first = 0;
- for (SPObject *child = _group->firstChild() ; child && !first ; child = child->getNext() ) {
+
+ for (SPObject *child = this->firstChild() ; child && !first ; child = child->getNext() ) {
if (SP_IS_ITEM(child) && sp_item_evaluate(SP_ITEM(child))) {
- first = child;
- }
+ first = child;
+ }
}
+
return first;
}
-GSList *CSwitch::_childList(bool add_ref, SPObject::Action action) {
+GSList *SPSwitch::_childList(bool add_ref, SPObject::Action action) {
if ( action != SPObject::ActionGeneral ) {
- return _group->childList(add_ref, action);
+ return this->childList(add_ref, action);
}
SPObject *child = _evaluateFirst();
if (NULL == child)
return NULL;
- if (add_ref)
- g_object_ref (G_OBJECT (child));
+ if (add_ref) {
+ //g_object_ref (G_OBJECT (child));
+ sp_object_ref(child);
+ }
return g_slist_prepend (NULL, child);
}
-gchar *CSwitch::getDescription() {
- gint len = getItemCount();
+const char *SPSwitch::display_name() {
+ return _("Conditional Group");
+}
+
+gchar *SPSwitch::description() {
+ gint len = this->getItemCount();
return g_strdup_printf(
- ngettext("<b>Conditional group</b> of <b>%d</b> object",
- "<b>Conditional group</b> of <b>%d</b> objects",
- len), len);
+ ngettext(_("of <b>%d</b> object"), _("of <b>%d</b> objects"), len), len);
}
-void CSwitch::onChildAdded(Inkscape::XML::Node *) {
- _reevaluate(true);
+void SPSwitch::child_added(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) {
+ this->_reevaluate(true);
}
-void CSwitch::onChildRemoved(Inkscape::XML::Node *) {
- _reevaluate();
+void SPSwitch::remove_child(Inkscape::XML::Node *) {
+ this->_reevaluate();
}
-void CSwitch::onOrderChanged (Inkscape::XML::Node *, Inkscape::XML::Node *, Inkscape::XML::Node *)
+void SPSwitch::order_changed (Inkscape::XML::Node *, Inkscape::XML::Node *, Inkscape::XML::Node *)
{
- _reevaluate();
+ this->_reevaluate();
}
-void CSwitch::_reevaluate(bool /*add_to_drawing*/) {
+void SPSwitch::_reevaluate(bool /*add_to_drawing*/) {
SPObject *evaluated_child = _evaluateFirst();
if (!evaluated_child || _cached_item == evaluated_child) {
return;
@@ -114,39 +115,43 @@ void CSwitch::_reevaluate(bool /*add_to_drawing*/) {
}
_cached_item = evaluated_child;
- _release_connection = evaluated_child->connectRelease(sigc::bind(sigc::ptr_fun(&CSwitch::_releaseItem), this));
+ _release_connection = evaluated_child->connectRelease(sigc::bind(sigc::ptr_fun(&SPSwitch::_releaseItem), this));
- _group->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
+ this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
}
-void CSwitch::_releaseItem(SPObject *obj, CSwitch *selection)
+void SPSwitch::_releaseItem(SPObject *obj, SPSwitch *selection)
{
selection->_releaseLastItem(obj);
}
-void CSwitch::_releaseLastItem(SPObject *obj)
+void SPSwitch::_releaseLastItem(SPObject *obj)
{
- if (NULL == _cached_item || _cached_item != obj)
+ if (NULL == this->_cached_item || this->_cached_item != obj)
return;
- _release_connection.disconnect();
- _cached_item = NULL;
+ this->_release_connection.disconnect();
+ this->_cached_item = NULL;
}
-void CSwitch::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags) {
- SPObject *evaluated_child = _evaluateFirst();
+void SPSwitch::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags) {
+ SPObject *evaluated_child = this->_evaluateFirst();
+
+ GSList *l = this->_childList(false, SPObject::ActionShow);
- GSList *l = _childList(false, SPObject::ActionShow);
while (l) {
SPObject *o = SP_OBJECT (l->data);
+
if (SP_IS_ITEM (o)) {
SPItem * child = SP_ITEM(o);
child->setEvaluated(o == evaluated_child);
Inkscape::DrawingItem *ac = child->invoke_show (drawing, key, flags);
+
if (ac) {
ai->appendChild(ac);
}
}
+
l = g_slist_remove (l, o);
}
}