diff --git a/extenders/extendergroup.cpp b/extenders/extendergroup.cpp index 86f1b1f98..eac33bc27 100644 --- a/extenders/extendergroup.cpp +++ b/extenders/extendergroup.cpp @@ -114,8 +114,38 @@ void ExtenderGroup::setAutoHide(bool autoHide) } } +bool ExtenderGroup::isAutoCollapse() const +{ + return d->autoCollapse; +} + +void ExtenderGroup::setAutoCollapse(bool collapse) +{ + d->autoCollapse = collapse; + if (collapse) { + setCollapsed(d->collapsed); + } +} + +bool ExtenderGroup::isGroupCollapsed() const +{ + return d->collapsed; +} + +void ExtenderGroup::setGroupCollapsed(bool collapsed) +{ + if (collapsed) { + collapseGroup(); + } else { + expandGroup(); + } +} + void ExtenderGroup::expandGroup() { + if (d->autoCollapse) { + setCollapsed(false); + } if (d->collapsed == false) { return; } @@ -134,6 +164,9 @@ void ExtenderGroup::expandGroup() void ExtenderGroup::collapseGroup() { + if (d->autoCollapse) { + setCollapsed(true); + } if (d->collapsed == true) { return; } @@ -155,7 +188,8 @@ ExtenderGroupPrivate::ExtenderGroupPrivate(ExtenderGroup *group) : q(group), svg(new Svg(group)), collapsed(true), - autoHide(true) + autoHide(true), + autoCollapse(true) { } diff --git a/extenders/extendergroup.h b/extenders/extendergroup.h index 9b002e90e..c7f60c73d 100644 --- a/extenders/extendergroup.h +++ b/extenders/extendergroup.h @@ -51,6 +51,8 @@ class PLASMA_EXPORT ExtenderGroup : public ExtenderItem { Q_OBJECT Q_PROPERTY(bool autoHide READ autoHide WRITE setAutoHide) + Q_PROPERTY(bool groupCollapsed READ isGroupCollapsed WRITE setGroupCollapsed) + Q_PROPERTY(bool autoCollapse READ isAutoCollapse WRITE setAutoCollapse) public: /** @@ -72,11 +74,35 @@ class PLASMA_EXPORT ExtenderGroup : public ExtenderItem bool autoHide() const; /** - * @param autoHide whether or not this item hides itself if less then 2 items belong to this group. + * @param autoHide whether or not this item hides itself if less then 2 items belong to this group. The default value is true. */ void setAutoHide(bool autoHide); + /** + * @return if the group is collapsed + * @since 4.4 + */ + bool isGroupCollapsed() const; + + /** + * @return whether or not this item collapses itself when the group gets collapsed + * @since 4.4 + */ + bool isAutoCollapse() const; + + /** + * @param autoCollapse whether or not this item collapses itself when the group gets collapsed, the default value is false + * @since 4.4 + */ + void setAutoCollapse(bool collapse); + public Q_SLOTS: + /** + * expands or collapses this group + * @since 4.4 + */ + void setGroupCollapsed(bool collapsed); + /** * Expands this group to show all ExtenderItems that are contained in this group. */ diff --git a/extenders/extenderitem.cpp b/extenders/extenderitem.cpp index e768700f4..fffb8f056 100644 --- a/extenders/extenderitem.cpp +++ b/extenders/extenderitem.cpp @@ -198,6 +198,7 @@ void ExtenderItem::setWidget(QGraphicsItem *widget) widget->setPos(QPointF(d->bgLeft + d->dragLeft, panelSize.height() + d->bgTop)); d->widget = widget; d->updateSizeHints(); + d->widget->setVisible(!d->collapsed); } QGraphicsItem *ExtenderItem::widget() const diff --git a/private/extendergroup_p.h b/private/extendergroup_p.h index 426a5846c..2a2220cd3 100644 --- a/private/extendergroup_p.h +++ b/private/extendergroup_p.h @@ -41,6 +41,7 @@ class ExtenderGroupPrivate Plasma::Svg *svg; bool collapsed; bool autoHide; + bool autoCollapse; }; }