X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/e66cde6befc204f26a99cf3a0a74ed3b4c7ebb43..b1c9b5126d:/src/statusbarmessagelabel.cpp diff --git a/src/statusbarmessagelabel.cpp b/src/statusbarmessagelabel.cpp index 8f5f2096e..bb7c59d6a 100644 --- a/src/statusbarmessagelabel.cpp +++ b/src/statusbarmessagelabel.cpp @@ -21,7 +21,6 @@ #include "statusbarmessagelabel.h" #include -#include #include #include #include @@ -42,11 +41,7 @@ StatusBarMessageLabel::StatusBarMessageLabel(QWidget* parent) : m_timer(0), m_closeButton(0) { - setMinimumHeight(K3Icon::SizeSmall); - - QPalette palette; - palette.setColor(QPalette::Background, Qt::transparent); - setPalette(palette); + setMinimumHeight(KIconLoader::SizeSmall); m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), @@ -59,7 +54,8 @@ StatusBarMessageLabel::StatusBarMessageLabel(QWidget* parent) : } StatusBarMessageLabel::~StatusBarMessageLabel() -{} +{ +} void StatusBarMessageLabel::setMessage(const QString& text, DolphinStatusBar::Type type) @@ -89,7 +85,8 @@ void StatusBarMessageLabel::setMessage(const QString& text, QPixmap pixmap; switch (type) { case DolphinStatusBar::OperationCompleted: - iconName = "ok"; + iconName = "dialog-ok"; + // "ok" icon should probably be "dialog-success", but we don't have that icon in KDE 4.0 m_closeButton->hide(); break; @@ -122,7 +119,9 @@ void StatusBarMessageLabel::setMinimumTextHeight(int min) if (min != m_minTextHeight) { m_minTextHeight = min; setMinimumHeight(min); - m_closeButton->setFixedHeight(min - borderGap() * 2); + if (m_closeButton->height() > min) { + m_closeButton->setFixedHeight(min); + } } } @@ -137,31 +136,29 @@ void StatusBarMessageLabel::paintEvent(QPaintEvent* /* event */) { QPainter painter(this); - // draw background - QColor backgroundColor = palette().brush(QPalette::Background).color(); - QColor foregroundColor = KColorScheme(QPalette::Active, KColorScheme::View).foreground().color(); if (m_illumination > 0) { - // TODO: are there foreground and background colors available for - // "error messages"? - backgroundColor.setRgb(255, 255, 0, m_illumination); - QColor mixColor(0, 0, 0, m_illumination); - foregroundColor = KColorUtils::overlayColors(foregroundColor, mixColor); + // at this point, a: we are a second label being drawn over the already + // painted status area, so we can be translucent, and b: our palette's + // window color (bg only) seems to be wrong (always black) + KColorScheme scheme(palette().currentColorGroup(), KColorScheme::Window); + QColor backgroundColor = scheme.background(KColorScheme::NegativeBackground).color(); + backgroundColor.setAlpha(qMin(255, m_illumination * 2)); + painter.setBrush(backgroundColor); + painter.setPen(Qt::NoPen); + painter.drawRect(QRect(0, 0, width(), height())); } - painter.setBrush(backgroundColor); - painter.setPen(backgroundColor); - painter.drawRect(QRect(0, 0, width(), height())); // draw pixmap - int x = borderGap(); - int y = (m_minTextHeight - m_pixmap.height()) / 2; + int x = BorderGap; + const int y = (m_minTextHeight - m_pixmap.height()) / 2; if (!m_pixmap.isNull()) { painter.drawPixmap(x, y, m_pixmap); - x += m_pixmap.width() + borderGap(); + x += m_pixmap.width() + BorderGap; } // draw text - painter.setPen(foregroundColor); + painter.setPen(palette().windowText().color()); int flags = Qt::AlignVCenter; if (height() > m_minTextHeight) { flags = flags | Qt::TextWordWrap; @@ -226,15 +223,20 @@ void StatusBarMessageLabel::assureVisibleText() 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, - m_text)); - int requiredHeight = bounds.height(); - if (requiredHeight < m_minTextHeight) { - requiredHeight = m_minTextHeight; + int requiredHeight = m_minTextHeight; + if (m_type != DolphinStatusBar::Default) { + // Calculate the required height of the widget thats + // needed for having a fully visible text. Note that for the default + // statusbar type (e. g. hover information) increasing the text height + // is not wanted, as this might rearrange the layout of items. + + QFontMetrics fontMetrics(font()); + const QRect bounds(fontMetrics.boundingRect(0, 0, availableTextWidth(), height(), + Qt::AlignVCenter | Qt::TextWordWrap, m_text)); + requiredHeight = bounds.height(); + if (requiredHeight < m_minTextHeight) { + requiredHeight = m_minTextHeight; + } } // Increase/decrease the current height of the widget to the @@ -265,14 +267,14 @@ void StatusBarMessageLabel::assureVisibleText() int StatusBarMessageLabel::availableTextWidth() const { const int buttonWidth = (m_type == DolphinStatusBar::Error) ? - m_closeButton->width() + borderGap() : 0; - return width() - m_pixmap.width() - (borderGap() * 4) - buttonWidth; + m_closeButton->width() + BorderGap : 0; + return width() - m_pixmap.width() - (BorderGap * 4) - buttonWidth; } void StatusBarMessageLabel::updateCloseButtonPosition() { - const int x = width() - m_closeButton->width() - borderGap(); - const int y = height() - m_closeButton->height() - borderGap(); + const int x = width() - m_closeButton->width() - BorderGap; + const int y = (height() - m_closeButton->height()) / 2; m_closeButton->move(x, y); }