From fa4fc01a310f0644e9e82ef45f99fcd2d2b824a7 Mon Sep 17 00:00:00 2001 From: Daniel Svensson Date: Mon, 27 Feb 2006 18:00:00 +0100 Subject: [PATCH] Singletonify Skin class --- Display.cpp | 8 +++--- MainWindow.cpp | 23 +++------------- MainWindow.h | 5 ---- NumberDisplay.cpp | 18 +++++-------- PixWidget.cpp | 16 +++-------- Playlist.cpp | 61 ++++++++++++++++++++++-------------------- Playlist.h | 5 +--- PlaylistList.cpp | 19 ++++++++----- Skin.cpp | 10 +++++++ Skin.h | 3 +++ SkinChooser.cpp | 5 +++- Slider.cpp | 6 +++-- SmallNumberDisplay.cpp | 12 +++------ SmallNumberDisplay.h | 2 -- TextBar.cpp | 23 +++++++++------- TextBar.h | 2 -- 16 files changed, 103 insertions(+), 115 deletions(-) diff --git a/Display.cpp b/Display.cpp index 6e3ccd0..079f18b 100644 --- a/Display.cpp +++ b/Display.cpp @@ -3,12 +3,12 @@ SkinDisplay::SkinDisplay (QWidget *parent) : QWidget(parent) { + Skin *skin = Skin::getInstance (); + m_mw = parent; - connect (dynamic_cast(parent)->getSkin (), - SIGNAL (skinChanged (Skin *)), - this, - SLOT (setPixmaps (Skin *))); + connect (skin, SIGNAL (skinChanged (Skin *)), + this, SLOT (setPixmaps (Skin *))); } void diff --git a/MainWindow.cpp b/MainWindow.cpp index 0bcbb76..c72e71d 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -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); diff --git a/MainWindow.h b/MainWindow.h index 6aac6b1..b3b2c80 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -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; diff --git a/NumberDisplay.cpp b/NumberDisplay.cpp index fc56cfa..906b38f 100644 --- a/NumberDisplay.cpp +++ b/NumberDisplay.cpp @@ -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 () { } - - diff --git a/PixWidget.cpp b/PixWidget.cpp index 4daa702..5143a6f 100644 --- a/PixWidget.cpp +++ b/PixWidget.cpp @@ -3,19 +3,11 @@ PixWidget::PixWidget (QWidget *parent) : QWidget (parent) { - Skin *s; - MainWindow *mw = dynamic_cast(window ()); - if (!mw) { - PlaylistWindow *pl = dynamic_cast(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 *))); } diff --git a/Playlist.cpp b/Playlist.cpp index 1c9351b..845715c 100644 --- a/Playlist.cpp +++ b/Playlist.cpp @@ -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 (); diff --git a/Playlist.h b/Playlist.h index 3129dd2..2d5b8cd 100644 --- a/Playlist.h +++ b/Playlist.h @@ -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; diff --git a/PlaylistList.cpp b/PlaylistList.cpp index 8cb32c9..81de50f 100644 --- a/PlaylistList.cpp +++ b/PlaylistList.cpp @@ -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(window ()); - connect (pl->getSkin (), SIGNAL (skinChanged (Skin *)), this, SLOT (setPixmaps(Skin *))); m_font = NULL; m_fontmetrics = NULL; m_items = new QList; @@ -52,12 +54,17 @@ PlaylistList::PlaylistList (QWidget *parent) : QWidget (parent) m_itemmap = new QHash; m_offset = 0; - connect (xmmsh, SIGNAL(playlistList(QList)), this, SLOT(playlistList(QList))); - connect (xmmsh, SIGNAL(currentID(uint)), this, SLOT(currentID(uint))); + connect (xmmsh, SIGNAL(playlistList(QList)), + this, SLOT(playlistList(QList))); + + connect (xmmsh, SIGNAL(currentID(uint)), + this, SLOT(currentID(uint))); + connect (xmmsh, SIGNAL(mediainfoChanged(uint, QHash)), - this, SLOT(mediainfoChanged(uint, QHash))); + this, SLOT(mediainfoChanged(uint, QHash))); + connect (xmmsh, SIGNAL(playlistChanged(QHash)), - this, SLOT(playlistChanged(QHash))); + this, SLOT(playlistChanged(QHash))); } void diff --git a/Skin.cpp b/Skin.cpp index ab9aa97..6daf3d5 100644 --- a/Skin.cpp +++ b/Skin.cpp @@ -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) { diff --git a/Skin.h b/Skin.h index 71be846..edd9d33 100644 --- a/Skin.h +++ b/Skin.h @@ -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); diff --git a/SkinChooser.cpp b/SkinChooser.cpp index cdc20ca..7c6d258 100644 --- a/SkinChooser.cpp +++ b/SkinChooser.cpp @@ -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(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()); } diff --git a/Slider.cpp b/Slider.cpp index 8d57b48..c047726 100644 --- a/Slider.cpp +++ b/Slider.cpp @@ -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(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(); diff --git a/SmallNumberDisplay.cpp b/SmallNumberDisplay.cpp index 2de452c..a7841af 100644 --- a/SmallNumberDisplay.cpp +++ b/SmallNumberDisplay.cpp @@ -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 (); diff --git a/SmallNumberDisplay.h b/SmallNumberDisplay.h index e3a271f..2bb9386 100644 --- a/SmallNumberDisplay.h +++ b/SmallNumberDisplay.h @@ -24,8 +24,6 @@ class SmallNumberDisplay : public PixWidget int m_w; void drawNumber (void); - - Skin *m_skin; }; #endif diff --git a/TextBar.cpp b/TextBar.cpp index b56fa92..93b417c 100644 --- a/TextBar.cpp +++ b/TextBar.cpp @@ -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, diff --git a/TextBar.h b/TextBar.h index 535d110..4937879 100644 --- a/TextBar.h +++ b/TextBar.h @@ -45,8 +45,6 @@ class TextScroller : public QWidget QTimer *m_timer; - Skin *m_skin; - void drawBitmapFont (const QString &text); void drawQtFont (const QString &text); };