X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/846b21edf57e7aeb83e84ee68e9f61c5981fbacd..fbd7cb02a511ff869d74aa4e758203a1cd340962:/src/selectiontoggle.cpp diff --git a/src/selectiontoggle.cpp b/src/selectiontoggle.cpp index 7a3f0ef56..b9b79def0 100644 --- a/src/selectiontoggle.cpp +++ b/src/selectiontoggle.cpp @@ -19,9 +19,11 @@ #include "selectiontoggle.h" +#include #include #include #include +#include #include #include @@ -36,11 +38,14 @@ SelectionToggle::SelectionToggle(QWidget* parent) : m_icon(), m_fadingTimeLine(0) { + setFocusPolicy(Qt::NoFocus); parent->installEventFilter(this); resize(sizeHint()); - m_icon = KIconLoader::global()->loadIcon("dialog-ok", - KIconLoader::NoGroup, - KIconLoader::SizeSmall); + setIconOverlay(isChecked()); + connect(this, SIGNAL(toggled(bool)), + this, SLOT(setIconOverlay(bool))); + connect(KGlobalSettings::self(), SIGNAL(iconChanged(int)), + this, SLOT(refreshIcon())); } SelectionToggle::~SelectionToggle() @@ -54,21 +59,21 @@ QSize SelectionToggle::sizeHint() const void SelectionToggle::reset() { - m_item = KFileItem(); + m_url = KUrl(); hide(); } -void SelectionToggle::setFileItem(const KFileItem& item) +void SelectionToggle::setUrl(const KUrl& url) { - m_item = item; - if (!item.isNull()) { + m_url = url; + if (!url.isEmpty()) { startFading(); } } -KFileItem SelectionToggle::fileItem() const +KUrl SelectionToggle::url() const { - return m_item; + return m_url; } void SelectionToggle::setVisible(bool visible) @@ -101,6 +106,8 @@ void SelectionToggle::enterEvent(QEvent* event) m_fadingTimeLine->stop(); } m_fadingValue = 255; + setToolTip(isChecked() ? i18nc("@info:tooltip", "Deselect Item") : + i18nc("@info:tooltip", "Select Item")); update(); } @@ -115,7 +122,24 @@ void SelectionToggle::paintEvent(QPaintEvent* event) { QPainter painter(this); painter.setClipRect(event->rect()); + painter.setRenderHint(QPainter::Antialiasing); + + // draw an alpha blended circle as background + const QPalette& palette = parentWidget()->palette(); + + const QBrush& backgroundBrush = palette.brush(QPalette::Normal, QPalette::Window); + QColor background = backgroundBrush.color(); + background.setAlpha(m_fadingValue / 2); + painter.setBrush(background); + const QBrush& foregroundBrush = palette.brush(QPalette::Normal, QPalette::WindowText); + QColor foreground = foregroundBrush.color(); + foreground.setAlpha(m_fadingValue / 4); + painter.setPen(foreground); + + painter.drawEllipse(0, 0, width(), height()); + + // draw the icon overlay if (m_isHovered) { KIconEffect iconEffect; QPixmap activeIcon = iconEffect.apply(m_icon, KIconLoader::Desktop, KIconLoader::ActiveState); @@ -146,11 +170,28 @@ void SelectionToggle::setFadingValue(int value) update(); } +void SelectionToggle::setIconOverlay(bool checked) +{ + const char* icon = checked ? "list-remove" : "list-add"; + m_icon = KIconLoader::global()->loadIcon(icon, + KIconLoader::NoGroup, + KIconLoader::SizeSmall); + update(); +} + +void SelectionToggle::refreshIcon() +{ + setIconOverlay(isChecked()); +} + void SelectionToggle::startFading() { Q_ASSERT(m_fadingTimeLine == 0); - m_fadingTimeLine = new QTimeLine(2000, this); + const bool animate = KGlobalSettings::graphicEffectsLevel() & KGlobalSettings::SimpleAnimationEffects; + const int duration = animate ? 600 : 1; + + m_fadingTimeLine = new QTimeLine(duration, this); connect(m_fadingTimeLine, SIGNAL(frameChanged(int)), this, SLOT(setFadingValue(int))); m_fadingTimeLine->setFrameRange(0, 255);