Plasma
extendergroup.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "extendergroup.h"
00021
00022 #include <QAction>
00023 #include <QString>
00024 #include <QList>
00025 #include <QtGui/QGraphicsWidget>
00026
00027 #include "applet.h"
00028 #include "extender.h"
00029 #include "extenderitem.h"
00030 #include "theme.h"
00031
00032 #include "private/extendergroup_p.h"
00033
00034 namespace Plasma
00035 {
00036
00037 ExtenderGroup::ExtenderGroup(Extender *parent, uint groupId)
00038 : ExtenderItem(parent, groupId),
00039 d(new ExtenderGroupPrivate(this))
00040 {
00041 connect(extender(), SIGNAL(itemAttached(Plasma::ExtenderItem*)),
00042 this, SLOT(addItemToGroup(Plasma::ExtenderItem*)));
00043 connect(extender(), SIGNAL(itemDetached(Plasma::ExtenderItem*)),
00044 this, SLOT(removeItemFromGroup(Plasma::ExtenderItem*)));
00045
00046 config().writeEntry("isGroup", true);
00047
00048 QAction *expand = new QAction(this);
00049 expand->setVisible(true);
00050 expand->setToolTip(i18n("Show this group."));
00051 connect(expand, SIGNAL(triggered()), this, SLOT(expandGroup()));
00052 addAction("expand", expand);
00053
00054 QAction *collapse = new QAction(this);
00055 collapse->setVisible(false);
00056 collapse->setToolTip(i18n("Hide this group."));
00057 connect(collapse, SIGNAL(triggered()), this, SLOT(collapseGroup()));
00058 addAction("collapse", collapse);
00059
00060 d->themeChanged();
00061
00062 QString groupName;
00063 foreach (ExtenderItem *item, extender()->attachedItems()) {
00064 groupName = item->config().readEntry("group", "");
00065 if (!groupName.isEmpty() && groupName == name()) {
00066 item->setGroup(this);
00067 }
00068 }
00069
00070 if (items().isEmpty() && d->autoHide && !isDetached()) {
00071 extender()->itemRemovedEvent(this);
00072 hide();
00073 }
00074
00075 if (!config().readEntry("groupCollapsed", true)) {
00076 expandGroup();
00077 }
00078
00079 connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()),
00080 this, SLOT(themeChanged()));
00081 }
00082
00083 ExtenderGroup::~ExtenderGroup()
00084 {
00085 delete d;
00086 }
00087
00088 QList<ExtenderItem*> ExtenderGroup::items() const
00089 {
00090 QList<ExtenderItem*> result;
00091 foreach (ExtenderItem *item, extender()->attachedItems()) {
00092 if (item->group() == this) {
00093 result.append(item);
00094 }
00095 }
00096
00097 return result;
00098 }
00099
00100 bool ExtenderGroup::autoHide() const
00101 {
00102 return d->autoHide;
00103 }
00104
00105 void ExtenderGroup::setAutoHide(bool autoHide)
00106 {
00107 d->autoHide = autoHide;
00108 if (autoHide && items().isEmpty()) {
00109 extender()->itemRemovedEvent(this);
00110 hide();
00111 } else if (!autoHide && !isVisible()) {
00112 extender()->itemAddedEvent(this);
00113 show();
00114 }
00115 }
00116
00117 void ExtenderGroup::expandGroup()
00118 {
00119 d->collapsed = false;
00120 config().writeEntry("groupCollapsed", d->collapsed);
00121 action("collapse")->setVisible(true);
00122 action("expand")->setVisible(false);
00123 foreach (ExtenderItem *item, extender()->attachedItems()) {
00124 if (item->group() == this) {
00125 item->show();
00126 extender()->itemAddedEvent(item);
00127 }
00128 }
00129 }
00130
00131 void ExtenderGroup::collapseGroup()
00132 {
00133 d->collapsed = true;
00134 config().writeEntry("groupCollapsed", d->collapsed);
00135 action("collapse")->setVisible(false);
00136 action("expand")->setVisible(true);
00137 foreach (ExtenderItem *item, extender()->attachedItems()) {
00138 if (item != this && item->group() == this) {
00139 item->hide();
00140 extender()->itemRemovedEvent(item);
00141 }
00142 }
00143 }
00144
00145
00146 ExtenderGroupPrivate::ExtenderGroupPrivate(ExtenderGroup *group)
00147 : q(group),
00148 svg(new Svg(group)),
00149 collapsed(true),
00150 autoHide(true)
00151 {
00152 }
00153
00154 ExtenderGroupPrivate::~ExtenderGroupPrivate()
00155 {
00156 }
00157
00158 void ExtenderGroupPrivate::addItemToGroup(Plasma::ExtenderItem *item)
00159 {
00160 if (item->group() == q) {
00161 if (!q->isVisible() && !q->items().isEmpty()) {
00162 q->extender()->itemAddedEvent(q);
00163 q->show();
00164 }
00165 if (collapsed) {
00166 q->extender()->itemRemovedEvent(item);
00167 item->hide();
00168 } else {
00169 q->extender()->itemAddedEvent(item);
00170 item->show();
00171 }
00172 }
00173 }
00174
00175 void ExtenderGroupPrivate::removeItemFromGroup(Plasma::ExtenderItem *item)
00176 {
00177 if (item->group() == q) {
00178 if (q->items().isEmpty() && autoHide && !q->isDetached()) {
00179 q->extender()->itemRemovedEvent(q);
00180 q->hide();
00181 }
00182 }
00183 }
00184
00185 void ExtenderGroupPrivate::themeChanged()
00186 {
00187 svg->setImagePath("widgets/configuration-icons");
00188 svg->resize();
00189
00190 q->action("expand")->setIcon(QIcon(svg->pixmap("restore")));
00191 q->action("collapse")->setIcon(QIcon(svg->pixmap("collapse")));
00192 }
00193
00194 }
00195
00196 #include "extendergroup.moc"