diff options
| author | Markus Engel <markus.engel@tum.de> | 2012-08-18 23:40:03 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2012-08-18 23:40:03 +0000 |
| commit | 72f9ed8e6a94b65a3fbc9582179e6e72330ff144 (patch) | |
| tree | a184e42560c22bec9b4c9e2f9cf2cdc9be2183f7 /src/sp-switch.cpp | |
| parent | As all subclasses of SPShape now have "virtual pads" with correct inheritance... (diff) | |
| download | inkscape-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.cpp | 67 |
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)) { |
