#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.
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);
+
+ DolphinStatusBar::Type type() const;
- void setText(const QString& text);
- const QString& text() const { return m_text; }
+ 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
*/
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:
+ /**
+ * 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 {
+ enum State
+ {
Default,
Illuminate,
Illuminated,
};
enum { GeometryTimeout = 100 };
+ enum { BorderGap = 2 };
DolphinStatusBar::Type m_type;
State m_state;
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