kwin/desktopchangeosd.h
Arthur Arlt c1c883a8a7 Introduce new signal configChanged() to Workspace
To get rid of direct method calls and numerous #ifdefs a new signal
configChanged() is introduced to class Workspace. Every module
which is interested in reloading the configuration is needed to connect to
this signal.
Initially this is done for the reconfiguration of DesktopChangeOSD().
2011-07-15 22:05:38 +02:00

176 lines
4.3 KiB
C++

/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2009 Martin Gräßlin <kde@martin-graesslin.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
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#ifndef DESKTOPCHANGEOSD_H
#define DESKTOPCHANGEOSD_H
#include <QGraphicsView>
#include <QGraphicsItem>
#include <QTimer>
#include <KDE/Plasma/FrameSvg>
#include <KDE/Plasma/Theme>
#include <KDE/Plasma/WindowEffects>
#include <QWeakPointer>
class QGraphicsScene;
class QPropertyAnimation;
namespace KWin
{
class Workspace;
class DesktopChangeText : public QGraphicsItem
{
public:
DesktopChangeText(Workspace* ws);
~DesktopChangeText();
enum { Type = UserType + 2 };
inline void setWidth(float width) {
m_width = width;
};
inline void setHeight(float height) {
m_height = height;
};
virtual QRectF boundingRect() const;
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*);
inline virtual int type() const {
return Type;
};
private:
Workspace* m_wspace;
float m_width;
float m_height;
};
class DesktopChangeOSD : public QGraphicsView
{
Q_OBJECT
public:
DesktopChangeOSD(Workspace* ws);
~DesktopChangeOSD();
inline Plasma::FrameSvg* itemFrame() {
return &m_item_frame;
};
inline int& getDelayTime() {
return m_delayTime;
};
protected:
virtual void hideEvent(QHideEvent*);
virtual void drawBackground(QPainter* painter, const QRectF& rect);
private:
void resize();
Workspace* m_wspace;
Plasma::FrameSvg m_frame;
Plasma::FrameSvg m_item_frame;
QGraphicsScene* m_scene;
bool m_active;
QTimer m_delayedHideTimer;
bool m_show;
int m_delayTime;
bool m_textOnly;
private Q_SLOTS:
void desktopChanged(int old);
void numberDesktopsChanged();
void reconfigure();
};
class DesktopChangeItem : public QObject, public QGraphicsItem
{
Q_OBJECT
Q_PROPERTY(qreal arrowValue READ arrowValue WRITE setArrowValue)
Q_PROPERTY(qreal highLightValue READ highLightValue WRITE setHighLightValue)
Q_INTERFACES(QGraphicsItem)
public:
DesktopChangeItem(Workspace* ws, DesktopChangeOSD* parent, int desktop);
~DesktopChangeItem();
enum { Type = UserType + 1 };
void startDesktopHighLightAnimation(int time);
void stopDesktopHighLightAnimation();
inline void setWidth(float width) {
m_width = width;
};
inline void setHeight(float height) {
m_height = height;
};
inline int desktop() const {
return m_desktop;
};
virtual QRectF boundingRect() const;
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*);
inline virtual int type() const {
return Type;
};
enum Arrow {
NONE,
LEFT,
RIGHT,
UP,
DOWN
};
void setArrow(Arrow arrow, int start_delay, int hide_delay);
qreal arrowValue() const;
qreal highLightValue() const;
protected slots:
void setArrowValue(qreal value);
void setHighLightValue(qreal value);
private slots:
void showArrow();
void hideArrow();
void arrowAnimationFinished();
private:
Workspace* m_wspace;
DesktopChangeOSD* m_parent;
int m_desktop;
float m_width;
float m_height;
QTimer m_delayed_show_arrow_timer;
QTimer m_delayed_hide_arrow_timer;
Arrow m_arrow;
bool m_arrowShown;
bool m_fadeInArrow;
bool m_fadeInHighLight;
qreal m_arrowValue;
qreal m_highLightValue;
QWeakPointer<QPropertyAnimation> m_arrowAnimation;
QWeakPointer<QPropertyAnimation> m_highLightAnimation;
};
}
#endif // DESKTOPCHANGEOSD_H