#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)
setIconOverlay(isChecked());
connect(this, SIGNAL(toggled(bool)),
this, SLOT(setIconOverlay(bool)));
+ connect(KGlobalSettings::self(), SIGNAL(iconChanged(int)),
+ this, SLOT(refreshIcon()));
}
SelectionToggle::~SelectionToggle()
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);
}
m_fadingTimeLine->stop();
}
m_fadingValue = 255;
+ setToolTip(isChecked() ? i18nc("@info:tooltip", "Deselect Item") :
+ i18nc("@info:tooltip", "Select Item"));
update();
}
update();
}
+void SelectionToggle::mousePressEvent(QMouseEvent* event)
+{
+ QAbstractButton::mousePressEvent(event);
+ m_leftMouseButtonPressed = (event->buttons() & Qt::LeftButton);
+}
+
+void SelectionToggle::mouseReleaseEvent(QMouseEvent* event)
+{
+ QAbstractButton::mouseReleaseEvent(event);
+ m_leftMouseButtonPressed = (event->buttons() & Qt::LeftButton);
+}
+
void SelectionToggle::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
update();
}
+void SelectionToggle::refreshIcon()
+{
+ setIconOverlay(isChecked());
+}
+
void SelectionToggle::startFading()
{
Q_ASSERT(m_fadingTimeLine == 0);
const bool animate = KGlobalSettings::graphicEffectsLevel() & KGlobalSettings::SimpleAnimationEffects;
- const int duration = animate ? 1500 : 1;
+ const int duration = animate ? 600 : 1;
m_fadingTimeLine = new QTimeLine(duration, this);
connect(m_fadingTimeLine, SIGNAL(frameChanged(int)),