Singletonify Skin class

This commit is contained in:
Daniel Svensson 2006-02-27 18:00:00 +01:00
parent 4e46089c01
commit fa4fc01a31
16 changed files with 103 additions and 115 deletions

View file

@ -3,12 +3,12 @@
SkinDisplay::SkinDisplay (QWidget *parent) : QWidget(parent) SkinDisplay::SkinDisplay (QWidget *parent) : QWidget(parent)
{ {
Skin *skin = Skin::getInstance ();
m_mw = parent; m_mw = parent;
connect (dynamic_cast<MainWindow *>(parent)->getSkin (), connect (skin, SIGNAL (skinChanged (Skin *)),
SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps (Skin *)));
this,
SLOT (setPixmaps (Skin *)));
} }
void void

View file

@ -8,17 +8,6 @@ MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent)
setWindowFlags(Qt::FramelessWindowHint); setWindowFlags(Qt::FramelessWindowHint);
setGeometry(100, 100, 275, 116); setGeometry(100, 100, 275, 116);
/*
* Initialize the Handler that will
* update the display and the buttons
*/
m_handler = XMMSHandler::getInstance();
/*
* Initialize skin, but don't open one
*/
skin = new Skin ();
/* /*
* The MainDisplay is the mainwindow non-shaded mode * The MainDisplay is the mainwindow non-shaded mode
*/ */
@ -43,7 +32,8 @@ MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent)
MainWindow::~MainWindow () MainWindow::~MainWindow ()
{ {
delete skin; delete Skin::getInstance ();
delete XMMSHandler::getInstance();
} }
void void
@ -65,11 +55,6 @@ MainWindow::switchDisplay ()
} }
Skin *
MainWindow::getSkin(void)
{
return skin;
}
void void
MainWindow::togglePL (void) MainWindow::togglePL (void)
@ -91,7 +76,7 @@ main (int argc, char **argv)
MainWindow *mw = new MainWindow (NULL); MainWindow *mw = new MainWindow (NULL);
PlaylistWindow *playlistwin = new PlaylistWindow (NULL, mw->getSkin ()); PlaylistWindow *playlistwin = new PlaylistWindow (NULL);
/* /*
* Now that everything is initialized * Now that everything is initialized
@ -103,7 +88,7 @@ main (int argc, char **argv)
settings.setValue ("skin/path", "./CleanAMP/"); settings.setValue ("skin/path", "./CleanAMP/");
} }
mw->getSkin ()->setSkin (settings.value("skin/path").toString ()); Skin::getInstance()->setSkin (settings.value("skin/path").toString ());
mw->show (); mw->show ();
mw->setPL (playlistwin); mw->setPL (playlistwin);

View file

@ -28,9 +28,6 @@ class MainWindow : public QMainWindow
MainWindow (QWidget *parent); MainWindow (QWidget *parent);
~MainWindow (void); ~MainWindow (void);
Skin *getSkin (void);
XMMSHandler *getHandler () { return m_handler; }
MainDisplay *getMD () { return m_display; } MainDisplay *getMD () { return m_display; }
ShadedDisplay *getSD () { return m_shaded; } ShadedDisplay *getSD () { return m_shaded; }
@ -43,9 +40,7 @@ class MainWindow : public QMainWindow
private: private:
bool m_isshaded; bool m_isshaded;
Skin *skin;
XMMSHandler *m_handler;
MainDisplay *m_display; MainDisplay *m_display;
ShadedDisplay *m_shaded; ShadedDisplay *m_shaded;
PlaylistWindow *m_playlistwin; PlaylistWindow *m_playlistwin;

View file

@ -33,20 +33,16 @@ NumberDisplay::setPixmaps (Skin *skin)
void void
NumberDisplay::setNumber (uint n1, uint n2) NumberDisplay::setNumber (uint n1, uint n2)
{ {
if (m_n1 == n1 && m_n2 == n2) { if (m_n1 != n1 || m_n2 != n2) {
/* Do nothing */ Skin *skin = Skin::getInstance ();
return;
m_n1 = n1;
m_n2 = n2;
setPixmaps (skin);
} }
MainWindow *mw = (MainWindow *)((SkinDisplay *)parent ())->getMW();
m_n1 = n1;
m_n2 = n2;
setPixmaps (mw->getSkin());
} }
NumberDisplay::~NumberDisplay () NumberDisplay::~NumberDisplay ()
{ {
} }

View file

@ -3,19 +3,11 @@
PixWidget::PixWidget (QWidget *parent) : QWidget (parent) PixWidget::PixWidget (QWidget *parent) : QWidget (parent)
{ {
Skin *s; Skin *skin = Skin::getInstance();
MainWindow *mw = dynamic_cast<MainWindow *>(window ());
if (!mw) {
PlaylistWindow *pl = dynamic_cast<PlaylistWindow*>(window ());
if (!pl) {
qDebug ("What are you?!");
}
s = pl->getSkin ();
} else {
s = mw->getSkin ();
}
m_pixmap = QPixmap(0,0); m_pixmap = QPixmap(0,0);
connect (s, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *)));
connect (skin, SIGNAL (skinChanged (Skin *)),
this, SLOT (setPixmaps(Skin *)));
} }

View file

@ -39,8 +39,13 @@ dragButton::mouseMoveEvent (QMouseEvent *event)
PlaylistScroller::PlaylistScroller (PlaylistWindow *parent) : QWidget (parent) PlaylistScroller::PlaylistScroller (PlaylistWindow *parent) : QWidget (parent)
{ {
Skin *skin = Skin::getInstance ();
m_pixmap = QPixmap(0,0); m_pixmap = QPixmap(0,0);
connect (parent->getSkin(), SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *)));
connect (skin, SIGNAL (skinChanged (Skin *)),
this, SLOT (setPixmaps(Skin *)));
m_button = new PlaylistScrollButton (this, Skin::PLS_SCROLL_0, Skin::PLS_SCROLL_1); m_button = new PlaylistScrollButton (this, Skin::PLS_SCROLL_0, Skin::PLS_SCROLL_1);
m_button->move (0, 0); m_button->move (0, 0);
} }
@ -70,12 +75,13 @@ PlaylistScroller::paintEvent (QPaintEvent *event)
paint.end (); paint.end ();
} }
PlaylistWindow::PlaylistWindow (QWidget *parent, Skin *skin) : QMainWindow (parent) PlaylistWindow::PlaylistWindow (QWidget *parent) : QMainWindow (parent)
{ {
m_skin = skin; Skin *skin = Skin::getInstance ();
setWindowFlags (Qt::FramelessWindowHint); setWindowFlags (Qt::FramelessWindowHint);
connect (m_skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); connect (skin, SIGNAL (skinChanged (Skin *)),
this, SLOT (setPixmaps(Skin *)));
setActive (underMouse ()); setActive (underMouse ());
@ -127,7 +133,6 @@ PlaylistWindow::mouseMoveEvent (QMouseEvent *event)
void void
PlaylistWindow::setPixmaps (Skin *skin) PlaylistWindow::setPixmaps (Skin *skin)
{ {
m_skin = skin;
setActive (m_active); setActive (m_active);
resize (size().width(), size().height()); resize (size().width(), size().height());
} }
@ -148,35 +153,33 @@ PlaylistWindow::leaveEvent (QEvent *event)
void void
PlaylistWindow::setActive (bool active) PlaylistWindow::setActive (bool active)
{ {
Skin *skin = Skin::getInstance ();
m_active = active; m_active = active;
if (!m_skin) { m_corner3 = skin->getPls (Skin::PLS_LCBAR);
return; m_corner4 = skin->getPls (Skin::PLS_RCBAR);
}
m_corner3 = m_skin->getPls (Skin::PLS_LCBAR);
m_corner4 = m_skin->getPls (Skin::PLS_RCBAR);
if (active) { if (active) {
m_corner1 = m_skin->getPls (Skin::PLS_CORNER_UL_0); m_corner1 = skin->getPls (Skin::PLS_CORNER_UL_0);
m_corner2 = m_skin->getPls (Skin::PLS_CORNER_UR_0); m_corner2 = skin->getPls (Skin::PLS_CORNER_UR_0);
m_titlebar = m_skin->getPls (Skin::PLS_TBAR_0); m_titlebar = skin->getPls (Skin::PLS_TBAR_0);
m_tfill = m_skin->getPls (Skin::PLS_TFILL_0); m_tfill = skin->getPls (Skin::PLS_TFILL_0);
m_bfill = m_skin->getPls (Skin::PLS_BFILL_0); m_bfill = skin->getPls (Skin::PLS_BFILL_0);
m_lfill = m_skin->getPls (Skin::PLS_LFILL_0); m_lfill = skin->getPls (Skin::PLS_LFILL_0);
m_rfill = m_skin->getPls (Skin::PLS_RFILL_0); m_rfill = skin->getPls (Skin::PLS_RFILL_0);
m_rfill2 = m_skin->getPls (Skin::PLS_RFILL2_0); m_rfill2 = skin->getPls (Skin::PLS_RFILL2_0);
m_rfill3 = m_skin->getPls (Skin::PLS_RFILL3_0); m_rfill3 = skin->getPls (Skin::PLS_RFILL3_0);
} else { } else {
m_corner1 = m_skin->getPls (Skin::PLS_CORNER_UL_1); m_corner1 = skin->getPls (Skin::PLS_CORNER_UL_1);
m_corner2 = m_skin->getPls (Skin::PLS_CORNER_UR_1); m_corner2 = skin->getPls (Skin::PLS_CORNER_UR_1);
m_titlebar = m_skin->getPls (Skin::PLS_TBAR_1); m_titlebar = skin->getPls (Skin::PLS_TBAR_1);
m_tfill = m_skin->getPls (Skin::PLS_TFILL_1); m_tfill = skin->getPls (Skin::PLS_TFILL_1);
m_bfill = m_skin->getPls (Skin::PLS_BFILL_1); m_bfill = skin->getPls (Skin::PLS_BFILL_1);
m_lfill = m_skin->getPls (Skin::PLS_LFILL_1); m_lfill = skin->getPls (Skin::PLS_LFILL_1);
m_rfill = m_skin->getPls (Skin::PLS_RFILL_1); m_rfill = skin->getPls (Skin::PLS_RFILL_1);
m_rfill2 = m_skin->getPls (Skin::PLS_RFILL2_1); m_rfill2 = skin->getPls (Skin::PLS_RFILL2_1);
m_rfill3 = m_skin->getPls (Skin::PLS_RFILL3_1); m_rfill3 = skin->getPls (Skin::PLS_RFILL3_1);
} }
update (); update ();

View file

@ -59,11 +59,10 @@ class PlaylistWindow : public QMainWindow {
Q_OBJECT Q_OBJECT
public: public:
PlaylistWindow (QWidget *parent, Skin *skin); PlaylistWindow (QWidget *parent);
~PlaylistWindow () {} ~PlaylistWindow () {}
void setActive (bool); void setActive (bool);
Skin *getSkin (void) { return m_skin; }
public slots: public slots:
void setPixmaps (Skin *skin); void setPixmaps (Skin *skin);
@ -92,8 +91,6 @@ class PlaylistWindow : public QMainWindow {
bool m_active; bool m_active;
Skin *m_skin;
int m_diffx; int m_diffx;
int m_diffy; int m_diffy;

View file

@ -42,9 +42,11 @@ PlaylistItem::text (void)
PlaylistList::PlaylistList (QWidget *parent) : QWidget (parent) PlaylistList::PlaylistList (QWidget *parent) : QWidget (parent)
{ {
XMMSHandler *xmmsh = XMMSHandler::getInstance (); XMMSHandler *xmmsh = XMMSHandler::getInstance ();
Skin *skin = Skin::getInstance ();
connect (skin, SIGNAL (skinChanged (Skin *)),
this, SLOT (setPixmaps(Skin *)));
PlaylistWindow *pl = dynamic_cast<PlaylistWindow*>(window ());
connect (pl->getSkin (), SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *)));
m_font = NULL; m_font = NULL;
m_fontmetrics = NULL; m_fontmetrics = NULL;
m_items = new QList<PlaylistItem *>; m_items = new QList<PlaylistItem *>;
@ -52,12 +54,17 @@ PlaylistList::PlaylistList (QWidget *parent) : QWidget (parent)
m_itemmap = new QHash<uint, PlaylistItem *>; m_itemmap = new QHash<uint, PlaylistItem *>;
m_offset = 0; m_offset = 0;
connect (xmmsh, SIGNAL(playlistList(QList<uint>)), this, SLOT(playlistList(QList<uint>))); connect (xmmsh, SIGNAL(playlistList(QList<uint>)),
connect (xmmsh, SIGNAL(currentID(uint)), this, SLOT(currentID(uint))); this, SLOT(playlistList(QList<uint>)));
connect (xmmsh, SIGNAL(currentID(uint)),
this, SLOT(currentID(uint)));
connect (xmmsh, SIGNAL(mediainfoChanged(uint, QHash<QString, QString>)), connect (xmmsh, SIGNAL(mediainfoChanged(uint, QHash<QString, QString>)),
this, SLOT(mediainfoChanged(uint, QHash<QString, QString>))); this, SLOT(mediainfoChanged(uint, QHash<QString, QString>)));
connect (xmmsh, SIGNAL(playlistChanged(QHash<QString, QString>)), connect (xmmsh, SIGNAL(playlistChanged(QHash<QString, QString>)),
this, SLOT(playlistChanged(QHash<QString, QString>))); this, SLOT(playlistChanged(QHash<QString, QString>)));
} }
void void

View file

@ -1,5 +1,15 @@
#include "Skin.h" #include "Skin.h"
Skin *Skin::singleton = NULL;
Skin *Skin::getInstance (void)
{
if (!singleton) {
singleton = new Skin ();
}
return singleton;
}
Skin::Skin (void) Skin::Skin (void)
{ {

3
Skin.h
View file

@ -15,6 +15,7 @@ class Skin : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
static Skin *getInstance (void);
Skin (); Skin ();
~Skin(); ~Skin();
@ -191,6 +192,8 @@ class Skin : public QWidget
PLS_RCBAR PLS_RCBAR
}; };
private: private:
static Skin *singleton;
QPixmap *Skin::getPixmap (string file); QPixmap *Skin::getPixmap (string file);
void Parse (string file); void Parse (string file);
void BuildLetterMap (void); void BuildLetterMap (void);

View file

@ -53,11 +53,14 @@ SkinList::SkinList (QWidget *parent) : QListWidget (parent)
void void
SkinList::changeSkin (QListWidgetItem *item) SkinList::changeSkin (QListWidgetItem *item)
{ {
Skin *skin = Skin::getInstance ();
QSettings settings; QSettings settings;
SkinChooser *sc = dynamic_cast<SkinChooser *>(window()); SkinChooser *sc = dynamic_cast<SkinChooser *>(window());
qDebug ("change skin to %s", qPrintable (item->text())); qDebug ("change skin to %s", qPrintable (item->text()));
sc->getMW()->getSkin ()->setSkin (QDir::homePath()+"/.xmms2/clients/promoe/skins/"+item->text());
skin->setSkin (QDir::homePath()+"/.xmms2/clients/promoe/skins/"+item->text());
settings.setValue ("skin/path", QDir::homePath()+"/.xmms2/clients/promoe/skins/"+item->text()); settings.setValue ("skin/path", QDir::homePath()+"/.xmms2/clients/promoe/skins/"+item->text());
} }

View file

@ -43,7 +43,7 @@ BarButton::mouseMoveEvent (QMouseEvent *event)
Slider::Slider (QWidget *parent, uint bg, uint bnormal, uint bpressed, bool vertical) : PixWidget (parent) Slider::Slider (QWidget *parent, uint bg, uint bnormal, uint bpressed, bool vertical) : PixWidget (parent)
{ {
MainWindow *mw = dynamic_cast<MainWindow *>(window ()); XMMSHandler *xmmsh = XMMSHandler::getInstance ();
m_bg = bg; m_bg = bg;
m_vertical = vertical; m_vertical = vertical;
@ -55,7 +55,9 @@ Slider::Slider (QWidget *parent, uint bg, uint bnormal, uint bpressed, bool vert
m_button = new BarButton (this, bnormal, bpressed); m_button = new BarButton (this, bnormal, bpressed);
m_button->move (0, 0); m_button->move (0, 0);
connect (m_button, SIGNAL(clicked ()), mw->getHandler (), SLOT (setPlaytime ()));
connect (m_button, SIGNAL(clicked ()),
xmmsh, SLOT (setPlaytime ()));
if (m_vertical) { if (m_vertical) {
m_pix = size().width()-m_button->size().width(); m_pix = size().width()-m_button->size().width();

View file

@ -11,7 +11,6 @@ SmallNumberDisplay::SmallNumberDisplay (QWidget *parent, int w) : PixWidget (par
void void
SmallNumberDisplay::setPixmaps (Skin *skin) SmallNumberDisplay::setPixmaps (Skin *skin)
{ {
m_skin = skin;
drawNumber (); drawNumber ();
} }
@ -29,21 +28,18 @@ SmallNumberDisplay::setNumber (int num, int len)
void void
SmallNumberDisplay::drawNumber () SmallNumberDisplay::drawNumber ()
{ {
Skin *skin = Skin::getInstance ();
if (!m_skin) {
return;
}
QPainter paint; QPainter paint;
paint.begin (&m_pixmap); paint.begin (&m_pixmap);
paint.drawPixmap (m_pixmap.rect (), paint.drawPixmap (m_pixmap.rect (),
m_skin->getItem (Skin::TEXTBG), skin->getItem (Skin::TEXTBG),
m_pixmap.rect ()); m_pixmap.rect ());
for (int i = 0; i < m_num; i++) { for (int i = 0; i < m_num; i++) {
paint.drawPixmap (QRect (i*5, 0, 4, 6), paint.drawPixmap (QRect (i*5, 0, 4, 6),
m_skin->getLetter (m_nums[i]), skin->getLetter (m_nums[i]),
m_skin->getLetter (m_nums[i]).rect ()); skin->getLetter (m_nums[i]).rect ());
} }
paint.end (); paint.end ();

View file

@ -24,8 +24,6 @@ class SmallNumberDisplay : public PixWidget
int m_w; int m_w;
void drawNumber (void); void drawNumber (void);
Skin *m_skin;
}; };
#endif #endif

View file

@ -4,11 +4,10 @@
TextScroller::TextScroller (QWidget *parent, uint w, uint h) : QWidget (parent) TextScroller::TextScroller (QWidget *parent, uint w, uint h) : QWidget (parent)
{ {
Skin *skin = Skin::getInstance ();
MainWindow *mw = (MainWindow *)((SkinDisplay *)parent)->getMW(); connect (skin, SIGNAL (skinChanged (Skin *)),
m_skin = mw->getSkin(); this, SLOT (setPixmaps(Skin *)));
connect (m_skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *)));
m_h = h; m_h = h;
m_w = w; m_w = w;
@ -75,6 +74,8 @@ TextScroller::setText (const QString &text)
void void
TextScroller::drawBitmapFont (const QString &text) TextScroller::drawBitmapFont (const QString &text)
{ {
Skin *skin = Skin::getInstance ();
int width = text.length() * 6; int width = text.length() * 6;
QString (temp) = text.toLower (); QString (temp) = text.toLower ();
@ -93,9 +94,9 @@ TextScroller::drawBitmapFont (const QString &text)
paint.begin (&m_pixmap); paint.begin (&m_pixmap);
paint.fillRect (m_pixmap.rect(), Qt::white); paint.fillRect (m_pixmap.rect(), Qt::white);
for (uint i = 0; i < strlen (t); i++) { for (uint i = 0; i < strlen (t); i++) {
QPixmap p = m_skin->getLetter (t[i]); QPixmap p = skin->getLetter (t[i]);
if (!p) { if (!p) {
p = m_skin->getLetter(' '); p = skin->getLetter(' ');
} }
paint.drawPixmap (QRect (i * 6, m_y, 4, 6), paint.drawPixmap (QRect (i * 6, m_y, 4, 6),
@ -110,7 +111,9 @@ TextScroller::drawBitmapFont (const QString &text)
void void
TextScroller::drawQtFont (const QString &text) TextScroller::drawQtFont (const QString &text)
{ {
QFont font(m_skin->getPLeditValue ("font")); Skin *skin = Skin::getInstance ();
QFont font(skin->getPLeditValue ("font"));
font.setPixelSize (m_fontsize); font.setPixelSize (m_fontsize);
QFontMetrics fM(font); QFontMetrics fM(font);
@ -132,12 +135,12 @@ TextScroller::drawQtFont (const QString &text)
QPainter paint; QPainter paint;
paint.begin (&m_pixmap); paint.begin (&m_pixmap);
paint.drawPixmap (m_pixmap.rect (), paint.drawPixmap (m_pixmap.rect (),
m_skin->getItem (Skin::TEXTBG), skin->getItem (Skin::TEXTBG),
m_skin->getItem (Skin::TEXTBG).rect ()); skin->getItem (Skin::TEXTBG).rect ());
paint.setFont (font); paint.setFont (font);
QColor c; QColor c;
c.setNamedColor (m_skin->getPLeditValue ("normal")); c.setNamedColor (skin->getPLeditValue ("normal"));
paint.setPen (c); paint.setPen (c);
paint.drawText (m_pixmap.rect (), paint.drawText (m_pixmap.rect (),
Qt::AlignLeft | Qt::AlignVCenter, Qt::AlignLeft | Qt::AlignVCenter,

View file

@ -45,8 +45,6 @@ class TextScroller : public QWidget
QTimer *m_timer; QTimer *m_timer;
Skin *m_skin;
void drawBitmapFont (const QString &text); void drawBitmapFont (const QString &text);
void drawQtFont (const QString &text); void drawQtFont (const QString &text);
}; };