]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/selectiontoggle.cpp
Rename "Destination" to "Link Destination" as suggested by Frank Reininghaus
[dolphin.git] / src / selectiontoggle.cpp
index eb02edcb274bb4209c462844431a28a0eacade76..6608b582126f072e2e2c0b6d26794f1dfe64ef08 100644 (file)
 
 #include "selectiontoggle.h"
 
+#include <kglobalsettings.h>
 #include <kicon.h>
 #include <kiconloader.h>
 #include <kiconeffect.h>
+#include <klocale.h>
 
 #include <QPainter>
 #include <QPaintEvent>
 SelectionToggle::SelectionToggle(QWidget* parent) :
     QAbstractButton(parent),
     m_isHovered(false),
+    m_leftMouseButtonPressed(false),
     m_fadingValue(0),
     m_icon(),
     m_fadingTimeLine(0)
 {
+    setFocusPolicy(Qt::NoFocus);
     parent->installEventFilter(this);
     resize(sizeHint());
     setIconOverlay(isChecked());
     connect(this, SIGNAL(toggled(bool)),
             this, SLOT(setIconOverlay(bool)));
+    connect(KGlobalSettings::self(), SIGNAL(iconChanged(int)),
+            this, SLOT(refreshIcon()));
 }
 
 SelectionToggle::~SelectionToggle()
@@ -84,9 +90,27 @@ void SelectionToggle::setVisible(bool visible)
 
 bool SelectionToggle::eventFilter(QObject* obj, QEvent* event)
 {
-    if ((obj == parent()) && (event->type() == QEvent::Leave)) {
-        hide();
+    if (obj == parent()) {
+        switch (event->type()) {
+        case QEvent::Leave:
+            hide();
+            break;
+
+        case QEvent::MouseMove:
+            if (m_leftMouseButtonPressed) {
+                // Don't forward mouse move events to the viewport,
+                // otherwise a rubberband selection will be shown when
+                // clicking on the selection toggle and moving the mouse
+                // above the viewport.
+                return true;
+            }
+            break;
+
+        default:
+            break;
+        }
     }
+
     return QAbstractButton::eventFilter(obj, event);
 }
 
@@ -101,6 +125,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();
 }
 
@@ -111,26 +137,28 @@ void SelectionToggle::leaveEvent(QEvent* event)
     update();
 }
 
-void SelectionToggle::paintEvent(QPaintEvent* event)
+void SelectionToggle::mousePressEvent(QMouseEvent* event)
 {
-    QPainter painter(this);
-    painter.setClipRect(event->rect());
-    painter.setRenderHint(QPainter::Antialiasing);
-
-    // draw an alpha blended circle as background
-    const QPalette& palette = parentWidget()->palette();
+    QAbstractButton::mousePressEvent(event);
+    m_leftMouseButtonPressed = (event->buttons() & Qt::LeftButton);
+}
 
-    const QBrush& backgroundBrush = palette.brush(QPalette::Normal, QPalette::Window);
-    QColor background = backgroundBrush.color();
-    background.setAlpha(m_fadingValue / 2);
-    painter.setBrush(background);
+void SelectionToggle::mouseReleaseEvent(QMouseEvent* event)
+{
+    QAbstractButton::mouseReleaseEvent(event);
+    m_leftMouseButtonPressed = (event->buttons() & Qt::LeftButton);
+}
 
-    const QBrush& foregroundBrush = palette.brush(QPalette::Normal, QPalette::WindowText);
-    QColor foreground = foregroundBrush.color();
-    foreground.setAlpha(m_fadingValue / 4);
-    painter.setPen(foreground);
+void SelectionToggle::resizeEvent(QResizeEvent* event)
+{
+    QAbstractButton::resizeEvent(event);
+    setIconOverlay(isChecked());
+}
 
-    painter.drawEllipse(0, 0, width(), height());
+void SelectionToggle::paintEvent(QPaintEvent* event)
+{
+    QPainter painter(this);
+    painter.setClipRect(event->rect());
 
     // draw the icon overlay
     if (m_isHovered) {
@@ -168,15 +196,23 @@ void SelectionToggle::setIconOverlay(bool checked)
     const char* icon = checked ? "list-remove" : "list-add";
     m_icon = KIconLoader::global()->loadIcon(icon,
                                              KIconLoader::NoGroup,
-                                             KIconLoader::SizeSmall);
+                                             qMin(width(), height()));
     update();
 }
 
+void SelectionToggle::refreshIcon()
+{
+    setIconOverlay(isChecked());
+}
+
 void SelectionToggle::startFading()
 {
     Q_ASSERT(m_fadingTimeLine == 0);
 
-    m_fadingTimeLine = new QTimeLine(1500, 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);