• Skip to content
  • Skip to link menu
KDE 4.3 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • Contact Us
 

Plasma

extendergroup.cpp

Go to the documentation of this file.
00001 /*
00002  * Copyright 2009 by Rob Scheepmaker <r.scheepmaker@student.utwente.nl>
00003  *
00004  * This library is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU Lesser General Public
00006  * License as published by the Free Software Foundation; either
00007  * version 2.1 of the License, or (at your option) any later version.
00008  *
00009  * This library is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  * Lesser General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU Lesser General Public
00015  * License along with this library; if not, write to the Free Software
00016  * Foundation, Inc., 51 Franklin St, Fifth Floor,
00017  * Boston, MA  02110-1301  USA
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 } // Plasma namespace
00195 
00196 #include "extendergroup.moc"

Plasma

Skip menu "Plasma"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.6.1
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal