1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
/*
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.
*/
/*
osd.h - Provides an interface to a plain TQWidget, which is independent of KDE (bypassed to X11)
begin: Fre Sep 26 2003
copyright: (C) 2003 by Christian Muehlhaeuser
email: chris@chris.de
*/
#ifndef AMAROK_OSD_H
#define AMAROK_OSD_H
#include "metabundle.h"
#include <kpixmap.h>
#include <tqimage.h>
#include <tqvaluelist.h>
#include <tqwidget.h> //baseclass
class OSDWidget : public QWidget
{
Q_OBJECT
public:
enum Alignment { Left, Middle, Center, Right };
OSDWidget( TQWidget *parent, const char *name = "osd" );
/** resets the colours to defaults */
void unsetColors();
public slots:
/** calls setText() then show(), after setting image if needed */
void show( const TQString &text, TQImage newImage = TQImage::TQImage() );
void ratingChanged( const short rating );
void ratingChanged( const TQString& path, int rating );
void volChanged( unsigned char volume );
/** reimplemented, shows the OSD */
virtual void show();
/**
* For the sake of simplicity, when these settings are
* changed they do not take effect until the next time
* the OSD is shown!
*
* To force an update call show();
*/
void setDuration( int ms ) { m_duration = ms; }
void setTextColor( const TQColor &color ) { setPaletteForegroundColor( color ); }
void setBackgroundColor(const TQColor &color ) { setPaletteBackgroundColor( color ); }
void setOffset( int y ) { m_y = y; }
void setAlignment( Alignment alignment ) { m_alignment = alignment; }
void setImage( const TQImage &image ) { m_cover = image; }
void setScreen( int screen );
void setText( const TQString &text ) { m_text = text; }
void setDrawShadow( const bool b ) { m_drawShadow = b; }
void setTranslucency( const bool b ) { m_translucency = b; }
void setRating( const short rating ) { if ( isEnabled() ) m_rating = rating; }
void setMoodbar( void ) { m_moodbarBundle = MetaBundle(); }
void setMoodbar( const MetaBundle &bundle )
{ m_moodbarBundle = bundle; m_moodbarBundle.moodbar().load(); }
protected:
/** determine new size and position */
TQRect determineMetrics( const uint marginMetric );
/** render OSD */
void render( const uint marginMetric, const TQSize &size );
/** reimplemented */
virtual void mousePressEvent( TQMouseEvent* );
virtual bool event( TQEvent* );
bool useMoodbar( void );
/** distance from screen edge */
static const int MARGIN = 15;
int m_duration;
TQTimer *m_timer;
Alignment m_alignment;
int m_screen;
uint m_y;
bool m_drawShadow;
bool m_translucency;
short m_rating;
unsigned char m_newvolume;
bool m_volume;
TQString m_text;
TQImage m_cover;
// need a whole MetaBundle to draw the moodbar on the fly
MetaBundle m_moodbarBundle;
TQPixmap m_scaledCover;
KPixmap m_screenshot;
TQPixmap m_buffer;
};
class OSDPreviewWidget : public OSDWidget
{
Q_OBJECT
public:
OSDPreviewWidget( TQWidget *parent );
int screen() { return m_screen; }
int alignment() { return m_alignment; }
int y() { return m_y; }
public slots:
void setTextColor( const TQColor &color ) { OSDWidget::setTextColor( color ); doUpdate(); }
void setBackgroundColor(const TQColor &color ) { OSDWidget::setBackgroundColor( color ); doUpdate(); }
void setDrawShadow( bool b ) { OSDWidget::setDrawShadow( b ); doUpdate(); }
void setFont( const TQFont &font ) { OSDWidget::setFont( font ); doUpdate(); }
void setScreen( int screen ) { OSDWidget::setScreen( screen ); doUpdate(); }
void setUseCustomColors( const bool use, const TQColor &fg, const TQColor &bg )
{
if( use ) {
OSDWidget::setTextColor( fg );
OSDWidget::setBackgroundColor( bg );
} else
unsetColors();
doUpdate();
}
private:
inline void doUpdate() { if( isShown() ) show(); }
signals:
void positionChanged();
protected:
void mousePressEvent( TQMouseEvent * );
void mouseReleaseEvent( TQMouseEvent * );
void mouseMoveEvent( TQMouseEvent * );
private:
bool m_dragging;
TQPoint m_dragOffset;
};
namespace Amarok
{
class OSD : public OSDWidget
{
Q_OBJECT
public:
static OSD *instance()
{
static OSD *s_instance = new OSD;
return s_instance;
}
void applySettings();
void show( const MetaBundle &bundle );
public slots:
/**
* When user pushs global shortcut or uses DCOP OSD is toggle
* even if it is disabled()
*/
void forceToggleOSD();
private:
OSD();
private slots:
void slotCoverChanged( const TQString &artist, const TQString &album );
void slotImageChanged( const TQString &remoteURL );
};
}
#endif /*AMAROK_OSD_H*/
|