aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui/skinned/skin.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Ui/skinned/skin.h')
-rw-r--r--src/plugins/Ui/skinned/skin.h390
1 files changed, 390 insertions, 0 deletions
diff --git a/src/plugins/Ui/skinned/skin.h b/src/plugins/Ui/skinned/skin.h
new file mode 100644
index 000000000..adb4b6c20
--- /dev/null
+++ b/src/plugins/Ui/skinned/skin.h
@@ -0,0 +1,390 @@
+/***************************************************************************
+ * Copyright (C) 2007-2009 by Ilya Kotov *
+ * forkotov02@hotmail.ru *
+ * *
+ * Based on Promoe, an XMMS2 Client *
+ * Copyright (C) 2005-2006 by XMMS2 Team *
+ * *
+ * 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, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#ifndef SKIN_H
+#define SKIN_H
+
+#include <QObject>
+#include <QMap>
+#include <QPixmap>
+#include <QDir>
+#include <QRegion>
+#include <QCursor>
+
+class Skin : public QObject
+{
+ Q_OBJECT
+public:
+ Skin(QObject *parent = 0);
+
+ ~Skin();
+
+ static Skin *instance();
+ static QPixmap getPixmap(const QString&, QDir);
+ int ratio()
+ {
+ return m_double_size ? 2 : 1;
+ }
+ const QPixmap getMain() const
+ {
+ return m_main;
+ }
+ const QPixmap getButton(uint bt) const
+ {
+ return buttons[bt];
+ }
+ const QCursor getCursor(uint cu) const
+ {
+ return cursors[cu];
+ }
+ const QPixmap getTitleBar(uint tb) const
+ {
+ return titlebar[tb];
+ }
+ const QPixmap getPosBar() const
+ {
+ return posbar;
+ }
+ const QPixmap getNumber(uint n) const
+ {
+ return m_numbers[n];
+ }
+ /*!
+ * Returns count of numbers in number list.
+ * We need this to check if we have "-" in pixmaps.
+ * if no we should draw it manually.
+ */
+ uint getNumCount(void) const
+ {
+ return m_numbers.count();
+ }
+ const QPixmap getPlPart(uint p) const
+ {
+ return m_pl_parts[p];
+ }
+ const QPixmap getEqPart(uint p) const
+ {
+ return m_eq_parts[p];
+ }
+ const QPixmap getEqSlider(uint n) const
+ {
+ return m_eq_bar[n];
+ }
+ const QPixmap getEqSpline(uint n) const
+ {
+ return m_eq_spline[n];
+ }
+ const QPixmap getMSPart(uint n) const
+ {
+ return m_ms_parts[n];
+ }
+ const QPixmap getLetter(const QChar& ch) const
+ {
+ return m_letters[ch];
+ }
+ const QPixmap getItem(uint n) const
+ {
+ return m_parts[n];
+ }
+ const QPixmap getVolumeBar(int n) const
+ {
+ return m_volume[n];
+ }
+ const QPixmap getBalanceBar(int n) const
+ {
+ return m_balance[n];
+ }
+ const QByteArray getPLValue (QByteArray c) const
+ {
+ return m_pledit_txt[c];
+ }
+ const QColor getVisColor(int n) const
+ {
+ return m_vis_colors[n];
+ }
+ const QRegion getRegion(uint r) const
+ {
+ return m_regions[r];
+ }
+
+ enum Buttons
+ {
+ BT_PREVIOUS_N = 0,
+ BT_PREVIOUS_P,
+ BT_PLAY_N,
+ BT_PLAY_P,
+ BT_PAUSE_N,
+ BT_PAUSE_P,
+ BT_STOP_N,
+ BT_STOP_P,
+ BT_NEXT_N,
+ BT_NEXT_P,
+ BT_EJECT_N,
+ BT_EJECT_P,
+ /*titlebar.* */
+ BT_MENU_N,
+ BT_MENU_P,
+ BT_MINIMIZE_N,
+ BT_MINIMIZE_P,
+ BT_CLOSE_N,
+ BT_CLOSE_P,
+ BT_SHADE1_N,
+ BT_SHADE1_P,
+ BT_SHADE2_N,
+ BT_SHADE2_P,
+ BT_CLOSE_SHADED_N,
+ BT_CLOSE_SHADED_P,
+
+ /* posbar.* */
+ BT_POSBAR_N,
+ BT_POSBAR_P,
+ /* pledit.* */
+ PL_BT_ADD,
+ PL_BT_SUB,
+ PL_BT_SEL,
+ PL_BT_SORT,
+ PL_BT_LST,
+ PL_BT_SCROLL_N,
+ PL_BT_SCROLL_P,
+ PL_BT_CLOSE_N,
+ PL_BT_CLOSE_P,
+ PL_BT_SHADE1_N,
+ PL_BT_SHADE1_P,
+ PL_BT_SHADE2_N,
+ PL_BT_SHADE2_P,
+
+ /* eqmain.* */
+ EQ_BT_BAR_N,
+ EQ_BT_BAR_P,
+ EQ_BT_ON_N,
+ EQ_BT_ON_P,
+ EQ_BT_OFF_N,
+ EQ_BT_OFF_P,
+ EQ_BT_PRESETS_N,
+ EQ_BT_PRESETS_P,
+ EQ_BT_AUTO_1_N,
+ EQ_BT_AUTO_1_P,
+ EQ_BT_AUTO_0_N,
+ EQ_BT_AUTO_0_P,
+ EQ_BT_CLOSE_N,
+ EQ_BT_CLOSE_P,
+ EQ_BT_SHADE1_N,
+
+ /* eq_ex.* */
+ EQ_BT_SHADE1_P,
+ EQ_BT_SHADE2_N,
+ EQ_BT_SHADE2_P,
+
+ /* shufrep.* */
+ BT_EQ_ON_N,
+ BT_EQ_ON_P,
+ BT_EQ_OFF_N,
+ BT_EQ_OFF_P,
+ BT_PL_ON_N,
+ BT_PL_ON_P,
+ BT_PL_OFF_N,
+ BT_PL_OFF_P,
+ BT_PL_CLOSE_N,
+ BT_PL_CLOSE_P,
+ REPEAT_ON_N,
+ REPEAT_ON_P,
+ REPEAT_OFF_N,
+ REPEAT_OFF_P,
+ SHUFFLE_ON_N,
+ SHUFFLE_ON_P,
+ SHUFFLE_OFF_N,
+ SHUFFLE_OFF_P,
+ /* volume.* */
+ BT_VOL_N,
+ BT_VOL_P,
+ /* balance.* */
+ BT_BAL_N,
+ BT_BAL_P,
+ };
+ enum TitleBar
+ {
+ TITLEBAR_A = 0,
+ TITLEBAR_I,
+ TITLEBAR_SHADED_A,
+ TITLEBAR_SHADED_I,
+ };
+ enum PlayList
+ {
+ PL_CORNER_UL_A = 0,
+ PL_CORNER_UL_I,
+ PL_CORNER_UR_A,
+ PL_CORNER_UR_I,
+ PL_TITLEBAR_A,
+ PL_TITLEBAR_I,
+ PL_TFILL1_A,
+ PL_TFILL1_I,
+ PL_TFILL2_A,
+ PL_TFILL2_I,
+ PL_LFILL,
+ PL_RFILL,
+ PL_LSBAR,
+ PL_RSBAR,
+ PL_SFILL1,
+ PL_SFILL2,
+ PL_CONTROL,
+ PL_TITLEBAR_SHADED1_A,
+ PL_TITLEBAR_SHADED1_I,
+ PL_TITLEBAR_SHADED2,
+ PL_TFILL_SHADED,
+ };
+ enum Equalizer
+ {
+ EQ_MAIN = 0,
+ EQ_TITLEBAR_A,
+ EQ_TITLEBAR_I,
+ EQ_GRAPH,
+ EQ_TITLEBAR_SHADED_A,
+ EQ_TITLEBAR_SHADED_I,
+ EQ_VOLUME1,
+ EQ_VOLUME2,
+ EQ_VOLUME3,
+ EQ_BALANCE1,
+ EQ_BALANCE2,
+ EQ_BALANCE3,
+ };
+ enum MonoSter
+ {
+ MONO_A = 0,
+ MONO_I,
+ STEREO_A,
+ STEREO_I,
+ };
+ enum OtherParts
+ {
+ PLAY = 0,
+ PAUSE,
+ STOP,
+ };
+ enum Regions
+ {
+ NORMAL = 0,
+ EQUALIZER,
+ WINDOW_SHADE,
+ EQUALIZER_WS,
+ };
+ enum Cursors
+ {
+ CUR_NORMAL = 0,
+ CUR_CLOSE,
+ CUR_MAINMENU,
+ CUR_MIN,
+ CUR_POSBAR,
+ CUR_SONGNAME,
+ CUR_TITLEBAR,
+ CUR_VOLBAL,
+ CUR_WINBUT,
+
+ CUR_WSNORMAL,
+ CUR_WSPOSBAR,
+
+ CUR_EQCLOSE,
+ CUR_EQNORMAL,
+ CUR_EQSLID,
+ CUR_EQTITLE,
+
+ CUR_PCLOSE,
+ CUR_PNORMAL,
+ CUR_PSIZE,
+ CUR_PTBAR,
+ CUR_PVSCROLL,
+ CUR_PWINBUT,
+
+ CUR_PWSNORM,
+ CUR_PWSSIZE,
+
+ CUR_VOLBAR,
+ CUR_WSCLOSE,
+ CUR_WSMIN,
+ CUR_WSWINBUT,
+ };
+
+public slots:
+ void setSkin(const QString& path);
+ void reloadSkin();
+
+signals:
+ void skinChanged();
+
+private:
+ QPixmap *getPixmap(const QString&);
+ QString getPath(const QString&);
+ const QString findFile(const QString&, QDir);
+ const QString findFile(const QString&, const QString&);
+
+ /*!
+ * As far as there is no standard in skin making we cannot be sure
+ * that all needful images we can find in skin :( This will cause
+ * segfaults and asserts. So to prevent this we need such method
+ * to load pixmap from default skin.
+ */
+ QPixmap *getDummyPixmap(const QString&);
+ QPixmap scalePixmap(const QPixmap &pix, int ratio = 2);
+ static Skin *m_instance;
+ QDir m_skin_dir;
+ QMap<uint, QPixmap> buttons;
+ QMap<uint, QCursor> cursors;
+ QMap<uint, QPixmap> titlebar;
+ QMap<uint, QPixmap> m_pl_parts;
+ QMap<uint, QPixmap> m_eq_parts;
+ QMap<uint, QPixmap> m_ms_parts;
+ QMap<uint, QPixmap> m_parts;
+ QMap<QChar, QPixmap> m_letters;
+ QMap<QByteArray, QByteArray> m_pledit_txt;
+ QMap<uint, QRegion> m_regions;
+ QPixmap m_main;
+ QPixmap posbar;
+ QList<QPixmap> m_numbers;
+ QList<QPixmap> m_eq_bar;
+ QList<QPixmap> m_eq_spline;
+ QList<QPixmap> m_volume;
+ QList<QPixmap> m_balance;
+ QList<QColor> m_vis_colors;
+ bool m_use_cursors;
+ bool m_double_size;
+
+ void loadMain();
+ void loadButtons();
+ void loadCursors();
+ void loadTitleBar();
+ void loadPosBar();
+ void loadNumbers();
+ void loadPlayList();
+ void loadPLEdit();
+ void loadEqMain();
+ void loadEq_ex();
+ void loadVisColor();
+ void loadShufRep();
+ void loadLetters();
+ void loadMonoSter();
+ void loadVolume();
+ void loadBalance();
+ void loadRegion();
+ QRegion createRegion(const QString &path, const QString &key);
+};
+
+#endif