]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/statusbarmessagelabel.cpp
create modal dialogs on stack as David suggested
[dolphin.git] / src / statusbarmessagelabel.cpp
index 11bbea36db113633b78a4bf6312f6f85358b931e..f5c632693801afdfa452dc356886780325417d45 100644 (file)
 #include <kicon.h>
 #include <klocale.h>
 
-#include <QFontMetrics>
-#include <QPainter>
-#include <QPaintEvent>
-#include <QPushButton>
-#include <QPixmap>
-#include <QResizeEvent>
-#include <QTimer>
+#include <QtGui/QFontMetrics>
+#include <QtGui/QPainter>
+#include <QtGui/QKeyEvent>
+#include <QtGui/QPushButton>
+#include <QtGui/QPixmap>
+#include <QtCore/QTimer>
 
 StatusBarMessageLabel::StatusBarMessageLabel(QWidget* parent) :
     QWidget(parent),
@@ -55,28 +54,25 @@ StatusBarMessageLabel::StatusBarMessageLabel(QWidget* parent) :
 }
 
 StatusBarMessageLabel::~StatusBarMessageLabel()
-{
-}
+{}
 
 void StatusBarMessageLabel::setMessage(const QString& text,
                                        DolphinStatusBar::Type type)
 {
+    if ((text == m_text) && (type == m_type)) {
+        return;
+    }
+
     if (m_type == DolphinStatusBar::Error) {
-        // If an error is shown currently, other error messages get queued.
-        // Non-error messages are ignored if there are pending error messages.
         if (type == DolphinStatusBar::Error) {
-            m_pendingMessages.append(text);
-            return;
-        }
-        if ((m_state != Default) || !m_pendingMessages.isEmpty()) {
+            m_pendingMessages.insert(0, m_text);
+        } else if ((m_state != Default) || !m_pendingMessages.isEmpty()) {
+            // a non-error message should not be shown, as there
+            // are other pending error messages in the queue
             return;
         }
     }
 
-    if ((text == m_text) && (type == m_type)) {
-        return;
-    }
-
     m_text = text;
     m_type = type;
 
@@ -87,29 +83,29 @@ void StatusBarMessageLabel::setMessage(const QString& text,
     const char* iconName = 0;
     QPixmap pixmap;
     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:
-            m_closeButton->hide();
-            break;
+    case DolphinStatusBar::OperationCompleted:
+        iconName = "ok";
+        m_closeButton->hide();
+        break;
+
+    case DolphinStatusBar::Information:
+        iconName = "dialog-information";
+        m_closeButton->hide();
+        break;
+
+    case DolphinStatusBar::Error:
+        iconName = "dialog-error";
+        m_timer->start(100);
+        m_state = Illuminate;
+
+        updateCloseButtonPosition();
+        m_closeButton->show();
+        break;
+
+    case DolphinStatusBar::Default:
+    default:
+        m_closeButton->hide();
+        break;
     }
 
     m_pixmap = (iconName == 0) ? QPixmap() : SmallIcon(iconName);
@@ -177,41 +173,39 @@ void StatusBarMessageLabel::resizeEvent(QResizeEvent* event)
 void StatusBarMessageLabel::timerDone()
 {
     switch (m_state) {
-        case Illuminate: {
-            // increase the illumination
-            if (m_illumination < 100) {
-                m_illumination += 20;
-                update();
-            }
-            else {
-                m_state = Illuminated;
-                m_timer->start(5000);
-            }
-            break;
+    case Illuminate: {
+        // increase the illumination
+        if (m_illumination < 100) {
+            m_illumination += 20;
+            update();
+        } else {
+            m_state = Illuminated;
+            m_timer->start(5000);
         }
+        break;
+    }
 
-        case Illuminated: {
-            // start desaturation
-            m_state = Desaturate;
-            m_timer->start(100);
-            break;
-        }
+    case Illuminated: {
+        // start desaturation
+        m_state = Desaturate;
+        m_timer->start(100);
+        break;
+    }
 
-        case Desaturate: {
-            // desaturate
-            if (m_illumination > 0) {
-                m_illumination -= 5;
-                update();
-            }
-            else {
-                m_state = Default;
-                m_timer->stop();
-            }
-            break;
+    case Desaturate: {
+        // desaturate
+        if (m_illumination > 0) {
+            m_illumination -= 5;
+            update();
+        } else {
+            m_state = Default;
+            m_timer->stop();
         }
+        break;
+    }
 
-        default:
-            break;
+    default:
+        break;
     }
 }
 
@@ -225,8 +219,8 @@ void StatusBarMessageLabel::assureVisibleText()
     // needed for having a fully visible text
     QFontMetrics fontMetrics(font());
     const QRect bounds(fontMetrics.boundingRect(0, 0, availableTextWidth(), height(),
-                                                Qt::AlignVCenter | Qt::TextWordWrap,
-                                                m_text));
+                       Qt::AlignVCenter | Qt::TextWordWrap,
+                       m_text));
     int requiredHeight = bounds.height();
     if (requiredHeight < m_minTextHeight) {
         requiredHeight = m_minTextHeight;
@@ -245,8 +239,7 @@ void StatusBarMessageLabel::assureVisibleText()
         }
         setMinimumHeight(minHeight);
         updateGeometry();
-    }
-    else if (minHeight > requiredHeight) {
+    } else if (minHeight > requiredHeight) {
         minHeight -= gap;
         if (minHeight < requiredHeight) {
             minHeight = requiredHeight;