/***************************************************************************
- * Copyright (C) 2008 by Peter Penz <peter.penz@gmx.at> *
+ * Copyright (C) 2008 by Peter Penz <peter.penz19@gmail.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
#include "selectiontoggle.h"
-#include <kglobalsettings.h>
-#include <kicon.h>
-#include <kiconloader.h>
-#include <kiconeffect.h>
-#include <klocale.h>
+#include <KGlobalSettings>
+#include <KIcon>
+#include <KIconLoader>
+#include <KIconEffect>
+#include <KLocale>
+#include <QApplication>
#include <QPainter>
#include <QPaintEvent>
#include <QRect>
#include <QTimer>
#include <QTimeLine>
+#include <KDebug>
+
SelectionToggle::SelectionToggle(QWidget* parent) :
QAbstractButton(parent),
m_isHovered(false),
m_leftMouseButtonPressed(false),
m_fadingValue(0),
+ m_margin(0),
m_icon(),
m_fadingTimeLine(0)
{
}
}
+void SelectionToggle::setMargin(int margin)
+{
+ if (margin != m_margin) {
+ m_margin = margin;
+ update();
+ }
+}
+
+int SelectionToggle::margin() const
+{
+ return m_margin;
+}
+
KUrl SelectionToggle::url() const
{
return m_url;
bool SelectionToggle::eventFilter(QObject* obj, QEvent* event)
{
- 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;
- }
+ if ((obj == parent()) && (event->type() == QEvent::MouseMove) && 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;
}
return QAbstractButton::eventFilter(obj, event);
// if the mouse cursor is above the selection toggle, display
// it immediately without fading timer
m_isHovered = true;
- if (m_fadingTimeLine != 0) {
+ if (m_fadingTimeLine) {
m_fadingTimeLine->stop();
}
m_fadingValue = 255;
void SelectionToggle::leaveEvent(QEvent* event)
{
QAbstractButton::leaveEvent(event);
+
m_isHovered = false;
update();
}
painter.setClipRect(event->rect());
// draw the icon overlay
+ const QPoint pos(m_margin, m_margin);
if (m_isHovered) {
- KIconEffect iconEffect;
- QPixmap activeIcon = iconEffect.apply(m_icon, KIconLoader::Desktop, KIconLoader::ActiveState);
- painter.drawPixmap(0, 0, activeIcon);
+ KIconEffect *iconEffect = KIconLoader::global()->iconEffect();
+ QPixmap activeIcon = iconEffect->apply(m_icon, KIconLoader::Desktop, KIconLoader::ActiveState);
+ painter.drawPixmap(pos, activeIcon);
} else {
if (m_fadingValue < 255) {
// apply an alpha mask respecting the fading value to the icon
const QColor color(m_fadingValue, m_fadingValue, m_fadingValue);
alphaMask.fill(color);
icon.setAlphaChannel(alphaMask);
- painter.drawPixmap(0, 0, icon);
+ painter.drawPixmap(pos, icon);
} else {
// no fading is required
- painter.drawPixmap(0, 0, m_icon);
+ painter.drawPixmap(pos, m_icon);
}
}
+
}
void SelectionToggle::setFadingValue(int value)
{
m_fadingValue = value;
if (m_fadingValue >= 255) {
- Q_ASSERT(m_fadingTimeLine != 0);
+ Q_ASSERT(m_fadingTimeLine);
m_fadingTimeLine->stop();
}
update();
void SelectionToggle::setIconOverlay(bool checked)
{
const char* icon = checked ? "list-remove" : "list-add";
+ const int size = qMin(width() - 2 * m_margin, height() - 2 * m_margin);
m_icon = KIconLoader::global()->loadIcon(icon,
KIconLoader::NoGroup,
- qMin(width(), height()));
+ size);
update();
}
void SelectionToggle::startFading()
{
- Q_ASSERT(m_fadingTimeLine == 0);
+ Q_ASSERT(!m_fadingTimeLine);
const bool animate = KGlobalSettings::graphicEffectsLevel() & KGlobalSettings::SimpleAnimationEffects;
const int duration = animate ? 600 : 1;
void SelectionToggle::stopFading()
{
- if (m_fadingTimeLine != 0) {
+ if (m_fadingTimeLine) {
m_fadingTimeLine->stop();
delete m_fadingTimeLine;
m_fadingTimeLine = 0;