]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/statusbarmessagelabel.h
Forwardport 773570:
[dolphin.git] / src / statusbarmessagelabel.h
index 9aa8ac47dfd05d5a7df75ddde1665cac66c7882b..264a3538de657f8a7e6b48db77778e7365d671b7 100644 (file)
 #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 <QtCore/QList>
+#include <QtGui/QPixmap>
+
+#include <QtGui/QWidget>
+
+class QPaintEvent;
+class QResizeEvent;
+class QPushButton;
 class QTimer;
 
 /**
  * @brief Represents a message text label as part of the status bar.
  *
- * Dependant from the given type automatically a corresponding icon
+ * Dependent from the given type automatically a corresponding icon
  * is shown in front of the text. For message texts having the type
  * DolphinStatusBar::Error a dynamic color blending is done to get the
  * attention from the user.
- *
- * @author Peter Penz
  */
 class StatusBarMessageLabel : public QWidget
 {
@@ -48,48 +49,120 @@ public:
     explicit StatusBarMessageLabel(QWidget* parent);
     virtual ~StatusBarMessageLabel();
 
-    void setType(DolphinStatusBar::Type type);
-    DolphinStatusBar::Type type() const { return m_type; }
+    void setMessage(const QString& text, DolphinStatusBar::Type type);
 
-    void setText(const QString& text);
-    const QString& text() const { return m_text; }
+    DolphinStatusBar::Type type() const;
+
+    const QString& text() const;
+
+    void setDefaultText(const QString& text);
+    const QString& defaultText() const;
 
     // TODO: maybe a better approach is possible with the size hint
     void setMinimumTextHeight(int min);
-    int minimumTextHeight() const { return m_minTextHeight; }
+    int minimumTextHeight() const;
+
+    /**
+     * Returns the gap of the width of the current set text to the
+     * width of the message label. A gap <= 0 means that the text
+     * fits into the available width.
+     */
+    int widthGap() const;
 
 protected:
-    /** @see QWidget::paintEvent */
+    /** @see QWidget::paintEvent() */
     virtual void paintEvent(QPaintEvent* event);
 
-    /** @see QWidget::resizeEvent */
+    /** @see QWidget::resizeEvent() */
     virtual void resizeEvent(QResizeEvent* event);
 
 private slots:
     void timerDone();
+
+    /**
+     * Increases the height of the message label so that
+     * the given text fits into given area.
+     */
     void assureVisibleText();
 
+    /**
+     * Returns the available width in pixels for the text.
+     */
+    int availableTextWidth() const;
+
+    /**
+     * Moves the close button to the upper right corner
+     * of the message label.
+     */
+    void updateCloseButtonPosition();
+
+    /**
+     * Closes the currently shown error message and replaces it
+     * by the next pending message.
+     */
+    void closeErrorMessage();
+
 private:
-    enum State {
+    /**
+     * Shows the next pending error message. If no pending message
+     * was in the queue, false is returned.
+     */
+    bool showPendingMessage();
+
+    /**
+     * Resets the message label properties. This is useful when the
+     * result of invoking StatusBarMessageLabel::setMessage() should
+     * not rely on previous states.
+     */
+    void reset();
+
+private:
+    enum State
+    {
         Default,
         Illuminate,
         Illuminated,
         Desaturate
     };
 
+    enum { GeometryTimeout = 100 };
+    enum { BorderGap = 2 };
+
     DolphinStatusBar::Type m_type;
     State m_state;
     int m_illumination;
     int m_minTextHeight;
     QTimer* m_timer;
     QString m_text;
+    QString m_defaultText;
+    QList<QString> m_pendingMessages;
     QPixmap m_pixmap;
+    QPushButton* m_closeButton;
+};
 
-    QColor mixColors(const QColor& c1,
-                     const QColor& c2,
-                     int percent) const;
+inline DolphinStatusBar::Type StatusBarMessageLabel::type() const
+{
+    return m_type;
+}
 
-    int pixmapGap() const { return 3; }
-};
+inline const QString& StatusBarMessageLabel::text() const
+{
+    return m_text;
+}
+
+inline void StatusBarMessageLabel::setDefaultText(const QString& text)
+{
+    m_defaultText = text;
+}
+
+inline const QString& StatusBarMessageLabel::defaultText() const
+{
+    return m_defaultText;
+}
+
+inline int StatusBarMessageLabel::minimumTextHeight() const
+{
+    return m_minTextHeight;
+}
 
 #endif