mirror of
https://invent.kde.org/system/dolphin
synced 2024-07-04 17:30:55 +00:00
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... svn path=/trunk/playground/utils/dolphin/; revision=628642
This commit is contained in:
parent
e181654494
commit
7495dabc15
|
@ -52,9 +52,12 @@ DolphinStatusBar::DolphinStatusBar(DolphinView* parent) :
|
|||
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&)));
|
||||
|
|
|
@ -604,6 +604,8 @@ void DolphinView::loadDirectory(const KUrl& url)
|
|||
|
||||
startDirLister(url);
|
||||
emit urlChanged(url);
|
||||
|
||||
m_statusBar->clear();
|
||||
}
|
||||
|
||||
void DolphinView::triggerItem(const QModelIndex& index)
|
||||
|
@ -870,7 +872,7 @@ void DolphinView::createView()
|
|||
// delete current view
|
||||
QAbstractItemView* view = itemView();
|
||||
if (view != 0) {
|
||||
m_topLayout->remove(view);
|
||||
m_topLayout->removeWidget(view);
|
||||
view->close();
|
||||
view->deleteLater();
|
||||
m_iconsView = 0;
|
||||
|
|
|
@ -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 @@ StatusBarMessageLabel::StatusBarMessageLabel(QWidget* parent) :
|
|||
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 @@ StatusBarMessageLabel::~StatusBarMessageLabel()
|
|||
|
||||
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 @@ void StatusBarMessageLabel::setType(DolphinStatusBar::Type type)
|
|||
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 @@ void StatusBarMessageLabel::paintEvent(QPaintEvent* /* event */)
|
|||
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 @@ void StatusBarMessageLabel::paintEvent(QPaintEvent* /* event */)
|
|||
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 @@ void StatusBarMessageLabel::paintEvent(QPaintEvent* /* event */)
|
|||
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 @@ void StatusBarMessageLabel::timerDone()
|
|||
}
|
||||
else {
|
||||
m_state = Illuminated;
|
||||
m_timer->start(1000);
|
||||
m_timer->start(5000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -200,6 +215,8 @@ 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,
|
||||
|
@ -208,13 +225,38 @@ void StatusBarMessageLabel::assureVisibleText()
|
|||
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 @@ QColor StatusBarMessageLabel::mixColors(const QColor& c1,
|
|||
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"
|
||||
|
|
|
@ -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 @@ private slots:
|
|||
*/
|
||||
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 @@ private:
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue
Block a user