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)
{
Skin *skin = Skin::getInstance ();
m_mw = parent;
connect (dynamic_cast<MainWindow *>(parent)->getSkin (),
SIGNAL (skinChanged (Skin *)),
this,
SLOT (setPixmaps (Skin *)));
connect (skin, SIGNAL (skinChanged (Skin *)),
this, SLOT (setPixmaps (Skin *)));
}
void

View file

@ -8,17 +8,6 @@ MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent)
setWindowFlags(Qt::FramelessWindowHint);
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
*/
@ -43,7 +32,8 @@ MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent)
MainWindow::~MainWindow ()
{
delete skin;
delete Skin::getInstance ();
delete XMMSHandler::getInstance();
}
void
@ -65,11 +55,6 @@ MainWindow::switchDisplay ()
}
Skin *
MainWindow::getSkin(void)
{
return skin;
}
void
MainWindow::togglePL (void)
@ -91,7 +76,7 @@ main (int argc, char **argv)
MainWindow *mw = new MainWindow (NULL);
PlaylistWindow *playlistwin = new PlaylistWindow (NULL, mw->getSkin ());
PlaylistWindow *playlistwin = new PlaylistWindow (NULL);
/*
* Now that everything is initialized
@ -103,7 +88,7 @@ main (int argc, char **argv)
settings.setValue ("skin/path", "./CleanAMP/");
}
mw->getSkin ()->setSkin (settings.value("skin/path").toString ());
Skin::getInstance()->setSkin (settings.value("skin/path").toString ());
mw->show ();
mw->setPL (playlistwin);

View file

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

View file

@ -33,20 +33,16 @@ NumberDisplay::setPixmaps (Skin *skin)
void
NumberDisplay::setNumber (uint n1, uint n2)
{
if (m_n1 == n1 && m_n2 == n2) {
/* Do nothing */
return;
if (m_n1 != n1 || m_n2 != n2) {
Skin *skin = Skin::getInstance ();
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 ()
{
}

View file

@ -3,19 +3,11 @@
PixWidget::PixWidget (QWidget *parent) : QWidget (parent)
{
Skin *s;
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 ();
}
Skin *skin = Skin::getInstance();
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)
{
Skin *skin = Skin::getInstance ();
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->move (0, 0);
}
@ -70,12 +75,13 @@ PlaylistScroller::paintEvent (QPaintEvent *event)
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);
connect (m_skin, SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *)));
connect (skin, SIGNAL (skinChanged (Skin *)),
this, SLOT (setPixmaps(Skin *)));
setActive (underMouse ());
@ -127,7 +133,6 @@ PlaylistWindow::mouseMoveEvent (QMouseEvent *event)
void
PlaylistWindow::setPixmaps (Skin *skin)
{
m_skin = skin;
setActive (m_active);
resize (size().width(), size().height());
}
@ -148,35 +153,33 @@ PlaylistWindow::leaveEvent (QEvent *event)
void
PlaylistWindow::setActive (bool active)
{
Skin *skin = Skin::getInstance ();
m_active = active;
if (!m_skin) {
return;
}
m_corner3 = m_skin->getPls (Skin::PLS_LCBAR);
m_corner4 = m_skin->getPls (Skin::PLS_RCBAR);
m_corner3 = skin->getPls (Skin::PLS_LCBAR);
m_corner4 = skin->getPls (Skin::PLS_RCBAR);
if (active) {
m_corner1 = m_skin->getPls (Skin::PLS_CORNER_UL_0);
m_corner2 = m_skin->getPls (Skin::PLS_CORNER_UR_0);
m_titlebar = m_skin->getPls (Skin::PLS_TBAR_0);
m_tfill = m_skin->getPls (Skin::PLS_TFILL_0);
m_bfill = m_skin->getPls (Skin::PLS_BFILL_0);
m_lfill = m_skin->getPls (Skin::PLS_LFILL_0);
m_rfill = m_skin->getPls (Skin::PLS_RFILL_0);
m_rfill2 = m_skin->getPls (Skin::PLS_RFILL2_0);
m_rfill3 = m_skin->getPls (Skin::PLS_RFILL3_0);
m_corner1 = skin->getPls (Skin::PLS_CORNER_UL_0);
m_corner2 = skin->getPls (Skin::PLS_CORNER_UR_0);
m_titlebar = skin->getPls (Skin::PLS_TBAR_0);
m_tfill = skin->getPls (Skin::PLS_TFILL_0);
m_bfill = skin->getPls (Skin::PLS_BFILL_0);
m_lfill = skin->getPls (Skin::PLS_LFILL_0);
m_rfill = skin->getPls (Skin::PLS_RFILL_0);
m_rfill2 = skin->getPls (Skin::PLS_RFILL2_0);
m_rfill3 = skin->getPls (Skin::PLS_RFILL3_0);
} else {
m_corner1 = m_skin->getPls (Skin::PLS_CORNER_UL_1);
m_corner2 = m_skin->getPls (Skin::PLS_CORNER_UR_1);
m_titlebar = m_skin->getPls (Skin::PLS_TBAR_1);
m_tfill = m_skin->getPls (Skin::PLS_TFILL_1);
m_bfill = m_skin->getPls (Skin::PLS_BFILL_1);
m_lfill = m_skin->getPls (Skin::PLS_LFILL_1);
m_rfill = m_skin->getPls (Skin::PLS_RFILL_1);
m_rfill2 = m_skin->getPls (Skin::PLS_RFILL2_1);
m_rfill3 = m_skin->getPls (Skin::PLS_RFILL3_1);
m_corner1 = skin->getPls (Skin::PLS_CORNER_UL_1);
m_corner2 = skin->getPls (Skin::PLS_CORNER_UR_1);
m_titlebar = skin->getPls (Skin::PLS_TBAR_1);
m_tfill = skin->getPls (Skin::PLS_TFILL_1);
m_bfill = skin->getPls (Skin::PLS_BFILL_1);
m_lfill = skin->getPls (Skin::PLS_LFILL_1);
m_rfill = skin->getPls (Skin::PLS_RFILL_1);
m_rfill2 = skin->getPls (Skin::PLS_RFILL2_1);
m_rfill3 = skin->getPls (Skin::PLS_RFILL3_1);
}
update ();

View file

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

View file

@ -42,9 +42,11 @@ PlaylistItem::text (void)
PlaylistList::PlaylistList (QWidget *parent) : QWidget (parent)
{
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_fontmetrics = NULL;
m_items = new QList<PlaylistItem *>;
@ -52,12 +54,17 @@ PlaylistList::PlaylistList (QWidget *parent) : QWidget (parent)
m_itemmap = new QHash<uint, PlaylistItem *>;
m_offset = 0;
connect (xmmsh, SIGNAL(playlistList(QList<uint>)), this, SLOT(playlistList(QList<uint>)));
connect (xmmsh, SIGNAL(currentID(uint)), this, SLOT(currentID(uint)));
connect (xmmsh, SIGNAL(playlistList(QList<uint>)),
this, SLOT(playlistList(QList<uint>)));
connect (xmmsh, SIGNAL(currentID(uint)),
this, SLOT(currentID(uint)));
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>)),
this, SLOT(playlistChanged(QHash<QString, QString>)));
this, SLOT(playlistChanged(QHash<QString, QString>)));
}
void

View file

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

3
Skin.h
View file

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

View file

@ -53,11 +53,14 @@ SkinList::SkinList (QWidget *parent) : QListWidget (parent)
void
SkinList::changeSkin (QListWidgetItem *item)
{
Skin *skin = Skin::getInstance ();
QSettings settings;
SkinChooser *sc = dynamic_cast<SkinChooser *>(window());
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());
}

View file

@ -43,7 +43,7 @@ BarButton::mouseMoveEvent (QMouseEvent *event)
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_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->move (0, 0);
connect (m_button, SIGNAL(clicked ()), mw->getHandler (), SLOT (setPlaytime ()));
connect (m_button, SIGNAL(clicked ()),
xmmsh, SLOT (setPlaytime ()));
if (m_vertical) {
m_pix = size().width()-m_button->size().width();

View file

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

View file

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

View file

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

View file

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