[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/libs/plasma
From:       Rob Scheepmaker <r.scheepmaker () student ! utwente ! nl>
Date:       2008-11-03 19:49:15
Message-ID: 1225741755.357817.27359.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 879670 by scheepmaker:

A last couple of api changes before the move to kdelibs:
* in class Extender rename setExtenderAppearance to setAppearance.
* in class ExtenderItem rename moveBackToSource to returnToSource.
* in class ExtenderItem addition of showCloseAction() and hideCloseAction().
... and some minor tweaks in the implementation.



 M  +2 -2      extender.cpp  
 M  +2 -2      extender.h  
 M  +53 -15    extenderitem.cpp  
 M  +12 -1     extenderitem.h  
 M  +4 -4      popupapplet.cpp  
 M  +1 -5      private/extenderapplet.cpp  
 M  +2 -0      private/extenderitem_p.h  


--- trunk/KDE/kdebase/workspace/libs/plasma/extender.cpp #879669:879670
@@ -141,7 +141,7 @@
     return 0;
 }
 
-void Extender::setExtenderAppearance(Appearance appearance)
+void Extender::setAppearance(Appearance appearance)
 {
     if (d->appearance == appearance) {
         return;
@@ -151,7 +151,7 @@
     d->updateBorders();
 }
 
-Extender::Appearance Extender::extenderAppearance() const
+Extender::Appearance Extender::appearance() const
 {
     return d->appearance;
 }
--- trunk/KDE/kdebase/workspace/libs/plasma/extender.h #879669:879670
@@ -142,12 +142,12 @@
          * want to call this function in your applet's constraintsEvent, allthough this is already
          * done for you when using PopupApplet at base class for your applet. Defaults to NoBorders.
          */
-        void setExtenderAppearance(Appearance appearance);
+        void setAppearance(Appearance appearance);
 
         /**
          * @return the current way of rendering extender items that is used.
          */
-        Appearance extenderAppearance() const;
+        Appearance appearance() const;
 
     protected:
         /**
--- trunk/KDE/kdebase/workspace/libs/plasma/extenderitem.cpp #879669:879670
@@ -162,9 +162,8 @@
 {
     widget->setParentItem(this);
 
-    QSizeF iconSize = d->dragger->elementSize("hint-preferred-icon-size");
     QSizeF panelSize(QSizeF(size().width() - d->bgLeft - d->bgRight,
-                     iconSize.height() + d->dragTop + d->dragBottom));
+                     d->iconSize() + d->dragTop + d->dragBottom));
     widget->setPos(QPointF(d->bgLeft + d->dragLeft, panelSize.height() +
                                                     d->bgTop + d->dragTop));
     d->widget = widget;
@@ -308,6 +307,26 @@
     }
 }
 
+void ExtenderItem::showCloseButton()
+{
+    if (d->destroyActionVisibility) {
+        return;
+    }
+
+    d->destroyActionVisibility = true;
+    d->updateToolBox();
+}
+
+void ExtenderItem::hideCloseButton()
+{
+    if (!d->destroyActionVisibility) {
+        return;
+    }
+
+    d->destroyActionVisibility = false;
+    d->updateToolBox();
+}
+
 void ExtenderItem::destroy()
 {
     if (d->mousePressed) {
@@ -387,7 +406,7 @@
     d->extender->d->adjustSize();
 }
 
-void ExtenderItem::moveBackToSource()
+void ExtenderItem::returnToSource()
 {
     if (!d->sourceApplet) {
         return;
@@ -421,7 +440,6 @@
     //set the font for the title.
     Plasma::Theme *theme = Plasma::Theme::defaultTheme();
     QFont font = theme->font(Plasma::Theme::DefaultFont);
-    font.setPointSize(KGlobalSettings::smallestReadableFont().pointSize());
     font.setWeight(QFont::Bold);
 
     //create a pixmap with the title that is faded out at the right side of the titleRect.
@@ -729,6 +747,7 @@
       title(QString()),
       mousePressed(false),
       mouseOver(false),
+      destroyActionVisibility(false),
       expirationTimer(0)
 {
     dragLeft = dragTop = dragRight = dragBottom = 0;
@@ -743,9 +762,8 @@
 //returns a Rect containing the area of the detachable where the draghandle will be drawn.
 QRectF ExtenderItemPrivate::dragHandleRect()
 {
-    QSizeF iconSize = dragger->elementSize("hint-preferred-icon-size");
     QSizeF panelSize(QSizeF(q->size().width() - bgLeft - bgRight,
-                     iconSize.height() + dragTop + dragBottom));
+                     iconSize() + dragTop + dragBottom));
     return QRectF(QPointF(bgLeft, bgTop), panelSize);
 }
 
@@ -801,10 +819,9 @@
     Q_ASSERT(dragger);
     Q_ASSERT(toolboxLayout);
 
-    uint iconHeight = dragger->elementSize("hint-preferred-icon-size").height();
+    uint iconHeight = iconSize();
 
     //TODO: only delete items that actually have to be deleted, current performance is horrible.
-    //clean the layout.
     while (toolboxLayout->count()) {
         QGraphicsLayoutItem *icon = toolboxLayout->itemAt(0);
         QGraphicsWidget *widget = dynamic_cast<QGraphicsWidget*>(icon);
@@ -833,9 +850,21 @@
         returnToSource->setMaximumSize(iconSize);
 
         toolboxLayout->addItem(returnToSource);
-        QObject::connect(returnToSource, SIGNAL(clicked()), q, SLOT(moveBackToSource()));
+        QObject::connect(returnToSource, SIGNAL(clicked()), q, SLOT(returnToSource()));
     }
 
+    //add the close icon if desired.
+    if (destroyActionVisibility) {
+        IconWidget *destroyAction = new IconWidget(q);
+        destroyAction->setSvg("widgets/configuration-icons", "close");
+        QSizeF iconSize = destroyAction->sizeFromIconSize(iconHeight);
+        destroyAction->setMinimumSize(iconSize);
+        destroyAction->setMaximumSize(iconSize);
+
+        toolboxLayout->addItem(destroyAction);
+        QObject::connect(destroyAction, SIGNAL(clicked()), q, SLOT(destroy()));
+    }
+
     toolboxLayout->updateGeometry();
 
     //position the toolbox correctly.
@@ -848,7 +877,7 @@
 {
     QSizeF minimum = toolboxLayout->minimumSize();
     toolbox->setPos(q->size().width() - minimum.width() - bgRight,
-                    ((dragHandleRect().height() + dragTop + dragBottom)/2) -
+                    (dragHandleRect().height()/2) -
                     (minimum.height()/2) + bgTop);
 }
 
@@ -909,8 +938,6 @@
 
 void ExtenderItemPrivate::themeChanged()
 {
-    QSizeF iconSize = dragger->elementSize("hint-preferred-icon-size");
-
     background->setImagePath("widgets/extender-background");
     if (mousePressed) {
         background->setEnabledBorders(FrameSvg::AllBorders);
@@ -923,14 +950,14 @@
     dragger->getMargins(dragLeft, dragTop, dragRight, dragBottom);
 
     QSizeF panelSize(QSizeF(q->size().width() - bgLeft - bgRight,
-                     iconSize.height() + dragTop + dragBottom));
+                     iconSize() + dragTop + dragBottom));
 
     //resize the collapse icon.
-    collapseIcon->resize(collapseIcon->sizeFromIconSize(iconSize.height()));
+    collapseIcon->resize(collapseIcon->sizeFromIconSize(iconSize()));
 
     //reposition the collapse icon based on the new margins and size.
     collapseIcon->setPos(bgLeft + dragLeft,
-                         (panelSize.height() + dragTop + dragBottom)/2 -
+                         panelSize.height()/2 -
                          collapseIcon->size().height()/2 + bgTop);
 
     //reposition the widget based on the new margins.
@@ -956,6 +983,17 @@
     updateToolBox();
 }
 
+qreal ExtenderItemPrivate::iconSize()
+{
+    QSizeF size = dragger->elementSize("hint-preferred-icon-size");
+
+    Plasma::Theme *theme = Plasma::Theme::defaultTheme();
+    QFont font = theme->font(Plasma::Theme::DefaultFont);
+    QFontMetrics fm(font);
+
+    return qMax(size.height(), (qreal) fm.height());
+}
+
 uint ExtenderItemPrivate::s_maxExtenderItemId = 0;
 
 } // namespace Plasma
--- trunk/KDE/kdebase/workspace/libs/plasma/extenderitem.h #879669:879670
@@ -216,8 +216,19 @@
         /**
          * Returns the extender item to its source applet.
          */
-        void moveBackToSource();
+        void returnToSource();
 
+        /**
+         * Shows a close button in this item's drag handle. By default a close button will not be
+         * shown.
+         */
+        void showCloseButton();
+
+        /**
+         * Hides the close button in this item's drag handle.
+         */
+        void hideCloseButton();
+
     protected:
         void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
 
--- trunk/KDE/kdebase/workspace/libs/plasma/popupapplet.cpp #879669:879670
@@ -186,7 +186,7 @@
             if (gWidget) {
                 Extender *extender = qobject_cast<Extender*>(gWidget);
                 if (extender) {
-                    extender->setExtenderAppearance(Extender::NoBorders);
+                    extender->setAppearance(Extender::NoBorders);
                 }
 
                 lay->addItem(gWidget);
@@ -242,11 +242,11 @@
                     Extender *extender = qobject_cast<Extender*>(gWidget);
                     if (extender) {
                         if (q->formFactor() == MediaCenter || q->formFactor() == Planar) {
-                            extender->setExtenderAppearance(Extender::NoBorders);
+                            extender->setAppearance(Extender::NoBorders);
                         } else if (q->location() == TopEdge) {
-                            extender->setExtenderAppearance(Extender::TopDownStacked);
+                            extender->setAppearance(Extender::TopDownStacked);
                         } else {
-                            extender->setExtenderAppearance(Extender::BottomUpStacked);
+                            extender->setAppearance(Extender::BottomUpStacked);
                         }
                     }
 
--- trunk/KDE/kdebase/workspace/libs/plasma/private/extenderapplet.cpp #879669:879670
@@ -37,14 +37,10 @@
 void ExtenderApplet::init()
 {
     QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(this);
-    layout->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
-    layout->setContentsMargins(0, 0, 0, 0);
     layout->setSpacing(0);
     setLayout(layout);
 
-    qreal left, top, right, bottom;
-    getContentsMargins(&left, &top, &right, &bottom);
-    extender()->setExtenderAppearance(Plasma::Extender::NoBorders);
+    extender()->setAppearance(Plasma::Extender::NoBorders);
     extender()->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
 
     connect(extender(), SIGNAL(itemDetached(Plasma::ExtenderItem*)),
--- trunk/KDE/kdebase/workspace/libs/plasma/private/extenderitem_p.h #879669:879670
@@ -56,6 +56,7 @@
         Applet *hostApplet() const;
         void themeChanged();
         void sourceAppletRemoved();
+        qreal iconSize();
 
         ExtenderItem *q;
 
@@ -90,6 +91,7 @@
 
         bool mousePressed;
         bool mouseOver;
+        bool destroyActionVisibility;
 
         QTimer *expirationTimer;
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic