summaryrefslogtreecommitdiffstats
path: root/src/sp-switch.cpp
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2012-08-18 23:40:03 +0000
committerMarkus Engel <markus.engel@tum.de>2012-08-18 23:40:03 +0000
commit72f9ed8e6a94b65a3fbc9582179e6e72330ff144 (patch)
treea184e42560c22bec9b4c9e2f9cf2cdc9be2183f7 /src/sp-switch.cpp
parentAs all subclasses of SPShape now have "virtual pads" with correct inheritance... (diff)
downloadinkscape-72f9ed8e6a94b65a3fbc9582179e6e72330ff144.tar.gz
inkscape-72f9ed8e6a94b65a3fbc9582179e6e72330ff144.zip
Added "virtual pad" to SPGroup and SPSwitch. There was some weird try by someone else.
SPGroup should work as expected, SPSwitch may still be buggy. (bzr r11608.1.16)
Diffstat (limited to 'src/sp-switch.cpp')
-rw-r--r--src/sp-switch.cpp67
1 files changed, 35 insertions, 32 deletions
diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp
index 500e43c9c..2c98c54fc 100644
--- a/src/sp-switch.cpp
+++ b/src/sp-switch.cpp
@@ -30,7 +30,7 @@ static void sp_switch_init (SPSwitch *group);
static SPGroupClass * parent_class;
-GType CSwitch::getType (void)
+GType SPSwitch::getType (void)
{
static GType switch_type = 0;
if (!switch_type) {
@@ -56,24 +56,27 @@ sp_switch_class_init (SPSwitchClass *) {
parent_class = (SPGroupClass *)g_type_class_ref (SP_TYPE_GROUP);
}
-static void sp_switch_init (SPSwitch *group)
-{
- if (group->group)
- delete group->group;
-
- group->group = new CSwitch(group);
+CSwitch::CSwitch(SPSwitch* sw) : CGroup(sw) {
+ this->spswitch = sw;
}
-CSwitch::CSwitch(SPGroup *group) : CGroup(group), _cached_item(NULL) {
+CSwitch::~CSwitch() {
}
-CSwitch::~CSwitch() {
- _releaseLastItem(_cached_item);
+static void sp_switch_init (SPSwitch *sw)
+{
+ sw->cswitch = new CSwitch(sw);
+ sw->cgroup = sw->cswitch;
+ sw->clpeitem = sw->cswitch;
+ sw->citem = sw->cswitch;
+ sw->cobject = sw->cswitch;
+
+ sw->_cached_item = 0;
}
-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;
}
@@ -81,9 +84,9 @@ SPObject *CSwitch::_evaluateFirst() {
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();
@@ -96,28 +99,28 @@ GSList *CSwitch::_childList(bool add_ref, SPObject::Action action) {
return g_slist_prepend (NULL, child);
}
-gchar *CSwitch::getDescription() {
- gint len = getItemCount();
+gchar *CSwitch::onDescription() {
+ gint len = this->spgroup->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);
}
-void CSwitch::onChildAdded(Inkscape::XML::Node *) {
- _reevaluate(true);
+void CSwitch::onChildAdded(Inkscape::XML::Node* child, Inkscape::XML::Node* ref) {
+ this->spswitch->_reevaluate(true);
}
-void CSwitch::onChildRemoved(Inkscape::XML::Node *) {
- _reevaluate();
+void CSwitch::onRemoveChild(Inkscape::XML::Node *) {
+ this->spswitch->_reevaluate();
}
void CSwitch::onOrderChanged (Inkscape::XML::Node *, Inkscape::XML::Node *, Inkscape::XML::Node *)
{
- _reevaluate();
+ this->spswitch->_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;
@@ -138,29 +141,29 @@ 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 = _childList(false, SPObject::ActionShow);
+ GSList *l = this->_childList(false, SPObject::ActionShow);
while (l) {
SPObject *o = SP_OBJECT (l->data);
if (SP_IS_ITEM (o)) {