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

List:       kde-commits
Subject:    playground/utils/dolphin/src
From:       Peter Penz <peter.penz () gmx ! at>
Date:       2007-01-30 19:38:45
Message-ID: 1170185925.757869.6370.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 628642 by ppenz:

Improvements for error messages:
- increase/decrease size on demand and hide progress bar or space information if \
                required
- provide close button

TODO: the code is far from being finished (e. g. no queueing of pending error \
messages, close button looks fugly, ...), but I decided to commit the changes to \
prevent getting an inconsistent state in combination with other commits...

 M  +5 -2      dolphinstatusbar.cpp  
 M  +3 -1      dolphinview.cpp  
 M  +68 -19    statusbarmessagelabel.cpp  
 M  +16 -7     statusbarmessagelabel.h  


--- trunk/playground/utils/dolphin/src/dolphinstatusbar.cpp #628641:628642
@@ -52,9 +52,12 @@
     m_progressBar->hide();
 
     const QSize size(m_progressBar->sizeHint());
+    const int barHeight = size.height();
+
     m_progressBar->setMaximumWidth(200);
-    setMinimumHeight(size.height());
-    m_messageLabel->setMinimumTextHeight(size.height());
+    setMinimumHeight(barHeight);
+    m_messageLabel->setMinimumTextHeight(barHeight);
+    m_spaceInfo->setFixedHeight(barHeight);
 
     connect(parent, SIGNAL(urlChanged(const KUrl&)),
             this, SLOT(updateSpaceInfoContent(const KUrl&)));
--- trunk/playground/utils/dolphin/src/dolphinview.cpp #628641:628642
@@ -604,6 +604,8 @@
 
     startDirLister(url);
     emit urlChanged(url);
+
+    m_statusBar->clear();
 }
 
 void DolphinView::triggerItem(const QModelIndex& index)
@@ -870,7 +872,7 @@
     // delete current view
     QAbstractItemView* view = itemView();
     if (view != 0) {
-        m_topLayout->remove(view);
+        m_topLayout->removeWidget(view);
         view->close();
         view->deleteLater();
         m_iconsView = 0;
--- trunk/playground/utils/dolphin/src/statusbarmessagelabel.cpp #628641:628642
@@ -19,15 +19,19 @@
  ***************************************************************************/
 
 #include "statusbarmessagelabel.h"
-#include <qpainter.h>
-#include <qtimer.h>
-#include <qfontmetrics.h>
-//Added by qt3to4:
+
+#include <kglobalsettings.h>
+#include <kiconloader.h>
+#include <kicon.h>
+#include <klocale.h>
+
+#include <QFontMetrics>
+#include <QPainter>
+#include <QPaintEvent>
+#include <QPushButton>
 #include <QPixmap>
 #include <QResizeEvent>
-#include <QPaintEvent>
-#include <kiconloader.h>
-#include <kglobalsettings.h>
+#include <QTimer>
 
 StatusBarMessageLabel::StatusBarMessageLabel(QWidget* parent) :
     QWidget(parent),
@@ -35,13 +39,17 @@
     m_state(Default),
     m_illumination(0),
     m_minTextHeight(-1),
-    m_timer(0)
+    m_timer(0),
+    m_closeButton(0)
 {
     setMinimumHeight(K3Icon::SizeSmall);
 
     m_timer = new QTimer(this);
     connect(m_timer, SIGNAL(timeout()),
             this, SLOT(timerDone()));
+
+    m_closeButton = new QPushButton(KIcon("close"), QString::null, this);
+    m_closeButton->hide();
 }
 
 StatusBarMessageLabel::~StatusBarMessageLabel()
@@ -50,7 +58,7 @@
 
 void StatusBarMessageLabel::setType(DolphinStatusBar::Type type)
 {
-    if (type != m_type) {
+    if ((type != m_type) || (type == DolphinStatusBar::Error)) {
         m_type = type;
 
         m_timer->stop();
@@ -62,20 +70,27 @@
         switch (type) {
             case DolphinStatusBar::OperationCompleted:
                 iconName = "ok";
+                m_closeButton->hide();
                 break;
 
             case DolphinStatusBar::Information:
                 iconName = "info";
+                m_closeButton->hide();
                 break;
 
             case DolphinStatusBar::Error:
                 iconName = "error";
                 m_timer->start(100);
                 m_state = Illuminate;
+
+                updateCloseButtonPosition();
+                m_closeButton->show();
                 break;
 
             case DolphinStatusBar::Default:
-            default: break;
+            default:
+                m_closeButton->hide();
+                break;
         }
 
         m_pixmap = (iconName == 0) ? QPixmap() : SmallIcon(iconName);
@@ -121,7 +136,7 @@
     QColor backgroundColor(palette().brush(QPalette::Background).color());
     QColor foregroundColor(KGlobalSettings::textColor());
     if (m_illumination > 0) {
-        backgroundColor = mixColors(backgroundColor, QColor(255, 255, 64), \
m_illumination); +        backgroundColor = mixColors(backgroundColor, QColor(255, \
                255, 128), m_illumination);
         foregroundColor = mixColors(foregroundColor, QColor(0, 0, 0), \
m_illumination);  }
     painter.setBrush(backgroundColor);
@@ -129,12 +144,12 @@
     painter.drawRect(QRect(0, 0, width(), height()));
 
     // draw pixmap
-    int x = pixmapGap();
-    int y = (height() - m_pixmap.height()) / 2;
+    int x = borderGap();
+    int y = (m_minTextHeight - m_pixmap.height()) / 2;
 
     if (!m_pixmap.isNull()) {
         painter.drawPixmap(x, y, m_pixmap);
-        x += m_pixmap.width() + pixmapGap();
+        x += m_pixmap.width() + borderGap();
     }
 
     // draw text
@@ -143,7 +158,7 @@
     if (height() > m_minTextHeight) {
         flags = flags | Qt::TextWordWrap;
     }
-    painter.drawText(QRect(x, 0, width() - x, height()), flags, m_text);
+    painter.drawText(QRect(x, 0, availableTextWidth(), height()), flags, m_text);
     painter.end();
 }
 
@@ -164,7 +179,7 @@
             }
             else {
                 m_state = Illuminated;
-                m_timer->start(1000);
+                m_timer->start(5000);
             }
             break;
         }
@@ -200,6 +215,8 @@
         return;
     }
 
+    // calculate the required height of the widget thats
+    // needed for having a fully visible text
     QFontMetrics fontMetrics(font());
     const QRect bounds(fontMetrics.boundingRect(0, 0, availableTextWidth(), \
                height(),
                                                 Qt::AlignVCenter | Qt::TextWordWrap,
@@ -208,13 +225,38 @@
     if (requiredHeight < m_minTextHeight) {
         requiredHeight = m_minTextHeight;
     }
-    setMinimumHeight(requiredHeight);
-    updateGeometry();
+
+    // Increase/decrease the current height of the widget to the
+    // required height. The increasing/decreasing is done in several
+    // steps to have an animation if the height is modified
+    // (see StatusBarMessageLabel::resizeEvent())
+    const int gap = m_minTextHeight / 2;
+    int minHeight = minimumHeight();
+    if (minHeight < requiredHeight) {
+        minHeight += gap;
+        if (minHeight > requiredHeight) {
+            minHeight = requiredHeight;
+        }
+        setMinimumHeight(minHeight);
+        updateGeometry();
+    }
+    else if (minHeight > requiredHeight) {
+        minHeight -= gap;
+        if (minHeight < requiredHeight) {
+            minHeight = requiredHeight;
+        }
+        setMinimumHeight(minHeight);
+        updateGeometry();
+    }
+
+    updateCloseButtonPosition();
 }
 
 int StatusBarMessageLabel::availableTextWidth() const
 {
-    return width() - m_pixmap.width() - pixmapGap() * 2;
+    const int buttonWidth = (m_type == DolphinStatusBar::Error) ?
+                            m_closeButton->width() + borderGap() : 0;
+    return width() - m_pixmap.width() - (borderGap() * 3) - buttonWidth;
 }
 
 QColor StatusBarMessageLabel::mixColors(const QColor& c1,
@@ -228,4 +270,11 @@
     return QColor(red, green, blue);
 }
 
+void StatusBarMessageLabel::updateCloseButtonPosition()
+{
+    const int x = width() - m_closeButton->width();
+    const int y = 2;
+    m_closeButton->move(x, y);
+}
+
 #include "statusbarmessagelabel.moc"
--- trunk/playground/utils/dolphin/src/statusbarmessagelabel.h #628641:628642
@@ -21,13 +21,15 @@
 #ifndef STATUSBARMESSAGELABEL_H
 #define STATUSBARMESSAGELABEL_H
 
-#include <qwidget.h>
-#include <qpixmap.h>
-#include <qstring.h>
-//Added by qt3to4:
-#include <QPaintEvent>
-#include <QResizeEvent>
 #include <dolphinstatusbar.h>
+
+#include <QPixmap>
+#include <QString>
+#include <QWidget>
+
+class QPaintEvent;
+class QResizeEvent;
+class QPushButton;
 class QTimer;
 
 /**
@@ -84,6 +86,12 @@
      */
     int availableTextWidth() const;
 
+    /**
+     * Moves the close button to the upper right corner
+     * of the message label.
+     */
+    void updateCloseButtonPosition();
+
 private:
     enum State {
         Default,
@@ -101,12 +109,13 @@
     QTimer* m_timer;
     QString m_text;
     QPixmap m_pixmap;
+    QPushButton* m_closeButton;
 
     QColor mixColors(const QColor& c1,
                      const QColor& c2,
                      int percent) const;
 
-    int pixmapGap() const { return 3; }
+    int borderGap() const { return 3; }
 };
 
 #endif


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

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