aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/CMakeLists.txt2
-rw-r--r--src/ui/button.cpp5
-rw-r--r--src/ui/button.h3
-rw-r--r--src/ui/cursorimage.cpp99
-rw-r--r--src/ui/cursorimage.h7
-rw-r--r--src/ui/display.cpp14
-rw-r--r--src/ui/eqslider.cpp2
-rw-r--r--src/ui/eqtitlebar.cpp15
-rw-r--r--src/ui/eqtitlebar.h1
-rw-r--r--src/ui/eqwidget.cpp4
-rw-r--r--src/ui/listwidget.cpp16
-rw-r--r--src/ui/listwidget.h3
-rw-r--r--src/ui/playlist.cpp24
-rw-r--r--src/ui/playlist.h1
-rw-r--r--src/ui/playlistcontrol.cpp8
-rw-r--r--src/ui/playlistcontrol.h2
-rw-r--r--src/ui/playlistslider.cpp2
-rw-r--r--src/ui/playlisttitlebar.cpp9
-rw-r--r--src/ui/positionbar.cpp2
-rw-r--r--src/ui/skin.cpp59
-rw-r--r--src/ui/skin.h45
-rw-r--r--src/ui/textscroller.cpp1
-rw-r--r--src/ui/titlebar.cpp13
-rw-r--r--src/ui/ui.pro288
-rw-r--r--src/ui/volumebar.cpp1
25 files changed, 446 insertions, 180 deletions
diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt
index 41bf816fd..76c8dc3ef 100644
--- a/src/ui/CMakeLists.txt
+++ b/src/ui/CMakeLists.txt
@@ -75,6 +75,7 @@ SET(ui_SRCS
unixdomainsocket.cpp
visualmenu.cpp
volumebar.cpp
+ cursorimage.cpp
)
SET(ui_MOC_HDRS
@@ -124,6 +125,7 @@ SET(ui_MOC_HDRS
unixdomainsocket.h
visualmenu.h
volumebar.h
+ cursorimage.h
)
SET(ui_RCCS images/images.qrc stuff.qrc translations/qmmp_locales.qrc)
diff --git a/src/ui/button.cpp b/src/ui/button.cpp
index 4ec67ac4d..e06ce823f 100644
--- a/src/ui/button.cpp
+++ b/src/ui/button.cpp
@@ -25,13 +25,15 @@
#include "skin.h"
#include <QMouseEvent>
-Button::Button (QWidget *parent, uint normal, uint pressed)
+Button::Button (QWidget *parent, uint normal, uint pressed, uint cursor)
: PixmapWidget (parent)
{
name_normal = normal;
name_pressed = pressed;
+ name_cursor = cursor;
skin = Skin::getPointer();
setON (FALSE);
+ setCursor (skin->getCursor (name_cursor));
connect (skin, SIGNAL (skinChanged()), this, SLOT (updateSkin()));
}
@@ -42,6 +44,7 @@ Button::~Button()
void Button::updateSkin()
{
setPixmap (skin->getButton (name_normal));
+ setCursor (skin->getCursor (name_cursor));
}
void Button::setON (bool on)
diff --git a/src/ui/button.h b/src/ui/button.h
index dea4ecced..ce8651ffe 100644
--- a/src/ui/button.h
+++ b/src/ui/button.h
@@ -31,7 +31,7 @@ class Button : public PixmapWidget
{
Q_OBJECT
public:
- Button(QWidget *parent, uint normal, uint pressed);
+ Button(QWidget *parent, uint normal, uint pressed, uint cursor);
~Button();
@@ -46,6 +46,7 @@ private:
bool m_cursorin;
void setON(bool);
uint name_normal, name_pressed;
+ uint name_cursor;
protected:
void mousePressEvent(QMouseEvent*);
diff --git a/src/ui/cursorimage.cpp b/src/ui/cursorimage.cpp
new file mode 100644
index 000000000..aa51b172d
--- /dev/null
+++ b/src/ui/cursorimage.cpp
@@ -0,0 +1,99 @@
+
+#include <QCursor>
+#include <QString>
+#include <QPixmap>
+#include <QImage>
+#include <QByteArray>
+#include <QFile>
+#include <QBitmap>
+#include <QtDebug>
+#include "cursorimage.h"
+
+QCursor createCursor(QString path)
+{
+ if (path.isEmpty())
+ return QCursor();
+
+ // read file headers
+ QFile curFile(path);
+ curFile.open(QIODevice::ReadOnly);
+ QDataStream curStream(&curFile);
+ curStream.setByteOrder(QDataStream::LittleEndian);
+
+ struct {
+ quint16 zero;
+ quint16 type;
+ quint16 icons;
+ } header2;
+ curStream >> header2.zero >> header2.type >> header2.icons;
+
+ struct {
+ quint8 width;
+ quint8 height;
+ quint8 ncolours;
+ quint8 zero;
+ quint16 xhot;
+ quint16 yhot;
+ quint32 bytes;
+ quint32 dibOffset;
+ } directory2;
+ curStream >> directory2.width >> directory2.height >> directory2.ncolours >> directory2.zero >> directory2.xhot >> directory2.yhot >> directory2.bytes >> directory2.dibOffset;
+
+ curFile.seek(directory2.dibOffset);
+
+ // prepare a .bmp for delegating decoding to qt
+ struct {
+ unsigned char magic[2];
+ quint32 size;
+ quint32 zero;
+ quint32 rdataOffset;
+ } bmpHeader;
+ int bmpHeaderSize = (2+4+4+4);
+ struct {
+ quint32 hdrSize;
+ quint32 width;
+ quint32 height;
+ quint16 planes;
+ quint16 bpp;
+ quint32 compression;
+ quint32 dataSize;
+ quint32 unused1;
+ quint32 unused2;
+ quint32 unused3;
+ quint32 unused4;
+ } dibHeader;
+ int dibHeaderSize = (4+4+4+2+2+4+4+4+4+4+4);
+
+ bmpHeader.magic[0] = 'B'; bmpHeader.magic[1] = 'M';
+ bmpHeader.zero = 0;
+ bmpHeader.size = bmpHeaderSize + directory2.bytes;
+ bmpHeader.rdataOffset = bmpHeaderSize + dibHeaderSize + directory2.ncolours * 4;
+
+ curStream >> dibHeader.hdrSize >> dibHeader.width >> dibHeader.height >> dibHeader.planes >> dibHeader.bpp >> dibHeader.compression >> dibHeader.dataSize >> dibHeader.unused1 >> dibHeader.unused2 >> dibHeader.unused3 >> dibHeader.unused4;
+ dibHeader.height >>= 1;
+
+ // the bmp bytes are in 'bmpData'
+ QByteArray bmpData;
+ QDataStream bmpStream(&bmpData, QIODevice::WriteOnly);
+ bmpStream.setByteOrder(QDataStream::LittleEndian);
+ bmpStream.writeRawData((char*) bmpHeader.magic, 2);
+ bmpStream << bmpHeader.size << bmpHeader.zero << bmpHeader.rdataOffset;
+ bmpStream << dibHeader.hdrSize << dibHeader.width << dibHeader.height << dibHeader.planes << dibHeader.bpp << dibHeader.compression << dibHeader.dataSize << dibHeader.unused1 << dibHeader.unused2 << dibHeader.unused3 << dibHeader.unused4;
+ bmpData.append(curFile.read(directory2.bytes - dibHeaderSize));
+
+ // decode the image into 'pix'
+ int width = directory2.width;
+ int height = directory2.height;
+ QImage image;
+ image.loadFromData(bmpData);
+ //qDebug() << image.rect() << path;
+ QPixmap pix = QPixmap::fromImage(image);
+
+ // now we need the mask (transparency)
+ QByteArray maskData = bmpData.right((width * height) / 8);
+ QImage maskImage = QBitmap::fromData(QSize(width, height), (const uchar*) maskData.constData(), QImage::Format_Mono).toImage().mirrored(FALSE, TRUE);
+ maskImage.invertPixels();
+ pix.setMask(QBitmap::fromImage(maskImage));
+
+ return QCursor(pix, directory2.xhot, directory2.yhot);
+}
diff --git a/src/ui/cursorimage.h b/src/ui/cursorimage.h
new file mode 100644
index 000000000..575335c37
--- /dev/null
+++ b/src/ui/cursorimage.h
@@ -0,0 +1,7 @@
+
+#ifndef CURSORIMAGE_H
+#define CURSORIMAGE_H
+
+QCursor createCursor(QString path);
+
+#endif
diff --git a/src/ui/display.cpp b/src/ui/display.cpp
index 9b035733d..b2d9f3f9c 100644
--- a/src/ui/display.cpp
+++ b/src/ui/display.cpp
@@ -51,32 +51,33 @@ MainDisplay::MainDisplay (QWidget *parent)
{
m_skin = Skin::getPointer();
setPixmap (m_skin->getMain());
+ setCursor(m_skin->getCursor(Skin::CUR_NORMAL));
setMaximumSize (QSize (275,116));
setMinimumSize (QSize (275,116));
m_mw = qobject_cast<MainWindow*>(parent);
- Button *previous = new Button (this, Skin::BT_PREVIOUS_N, Skin::BT_PREVIOUS_P);
+ Button *previous = new Button (this, Skin::BT_PREVIOUS_N, Skin::BT_PREVIOUS_P, Skin::CUR_NORMAL);
previous->move (16, 88);
previous->setToolTip(tr("Previous"));
connect (previous,SIGNAL (clicked()), parent, SLOT (previous()));
- Button *play = new Button (this, Skin::BT_PLAY_N, Skin::BT_PLAY_P);
+ Button *play = new Button (this, Skin::BT_PLAY_N, Skin::BT_PLAY_P, Skin::CUR_NORMAL);
play->move (39, 88);
play->setToolTip(tr("Play"));
connect (play,SIGNAL (clicked()),parent,SLOT (play()));
- Button *pause = new Button (this, Skin::BT_PAUSE_N,Skin::BT_PAUSE_P);
+ Button *pause = new Button (this, Skin::BT_PAUSE_N,Skin::BT_PAUSE_P, Skin::CUR_NORMAL);
pause->move (62, 88);
pause->setToolTip(tr("Pause"));
connect (pause,SIGNAL (clicked()),parent,SLOT (pause()));
- Button *stop = new Button (this, Skin::BT_STOP_N,Skin::BT_STOP_P);
+ Button *stop = new Button (this, Skin::BT_STOP_N,Skin::BT_STOP_P, Skin::CUR_NORMAL);
stop->move (85, 88);
stop->setToolTip(tr("Stop"));
connect (stop,SIGNAL (clicked()),parent,SLOT (stop()));
- Button *next = new Button (this, Skin::BT_NEXT_N,Skin::BT_NEXT_P);
+ Button *next = new Button (this, Skin::BT_NEXT_N,Skin::BT_NEXT_P, Skin::CUR_NORMAL);
next->move (108, 88);
next->setToolTip(tr("Next"));
connect (next,SIGNAL (clicked()),parent,SLOT (next()));
- Button *eject = new Button (this, Skin::BT_EJECT_N,Skin::BT_EJECT_P);
+ Button *eject = new Button (this, Skin::BT_EJECT_N,Skin::BT_EJECT_P, Skin::CUR_NORMAL);
eject->move (136, 89);
eject->setToolTip(tr("Add file"));
connect (eject,SIGNAL (clicked()),parent,SLOT (addFile()));
@@ -222,6 +223,7 @@ void MainDisplay::setVolume(int left, int right)
void MainDisplay::updateSkin()
{
setPixmap (m_skin->getMain());
+ setCursor(m_skin->getCursor(Skin::CUR_NORMAL));
}
void MainDisplay::setSampleRate(quint32 rate)
diff --git a/src/ui/eqslider.cpp b/src/ui/eqslider.cpp
index 5c08c71e3..57cd63a57 100644
--- a/src/ui/eqslider.cpp
+++ b/src/ui/eqslider.cpp
@@ -38,6 +38,7 @@ EqSlider::EqSlider(QWidget *parent)
m_max = 20;
m_old = m_value = 0;
draw(FALSE);
+ setCursor(m_skin->getCursor(Skin::CUR_EQSLID));
}
@@ -116,6 +117,7 @@ void EqSlider::setMax(double m)
void EqSlider::updateSkin()
{
draw(FALSE);
+ setCursor(m_skin->getCursor(Skin::CUR_EQSLID));
}
void EqSlider::draw(bool pressed)
diff --git a/src/ui/eqtitlebar.cpp b/src/ui/eqtitlebar.cpp
index b16a9bd28..d61541a80 100644
--- a/src/ui/eqtitlebar.cpp
+++ b/src/ui/eqtitlebar.cpp
@@ -42,10 +42,10 @@ EqTitleBar::EqTitleBar(QWidget *parent)
m_skin = Skin::getPointer();
m_eq = parentWidget();
m_mw = qobject_cast<MainWindow*>(m_eq->parent());
- m_close = new Button(this, Skin::EQ_BT_CLOSE_N, Skin::EQ_BT_CLOSE_P);
+ m_close = new Button(this, Skin::EQ_BT_CLOSE_N, Skin::EQ_BT_CLOSE_P, Skin::CUR_EQCLOSE);
connect(m_close, SIGNAL(clicked()),m_eq, SIGNAL(closed()));
m_close->move(264,3);
- m_shade = new Button(this, Skin::EQ_BT_SHADE1_N, Skin::EQ_BT_SHADE1_P);
+ m_shade = new Button(this, Skin::EQ_BT_SHADE1_N, Skin::EQ_BT_SHADE1_P, Skin::CUR_EQNORMAL);
connect(m_shade, SIGNAL(clicked()), SLOT(shade()));
m_shade->move(254,3);
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
@@ -55,7 +55,8 @@ EqTitleBar::EqTitleBar(QWidget *parent)
updateMask();
m_align = TRUE;
setActive(FALSE);
- connect(m_skin, SIGNAL(skinChanged()), SLOT(updateMask()));
+ setCursor(m_skin->getCursor(Skin::CUR_EQTITLE));
+ connect(m_skin, SIGNAL(skinChanged()), SLOT(updateSkin()));
}
@@ -149,7 +150,7 @@ void EqTitleBar::shade()
m_eq->setFixedSize(275,14);
setPixmap(m_skin->getEqPart(Skin::EQ_TITLEBAR_SHADED_A));
m_shade->hide();
- m_shade2 = new Button(this, Skin::EQ_BT_SHADE2_N, Skin::EQ_BT_SHADE2_P);
+ m_shade2 = new Button(this, Skin::EQ_BT_SHADE2_N, Skin::EQ_BT_SHADE2_P, Skin::CUR_EQNORMAL);
m_shade2->move(254,3);
connect(m_shade2, SIGNAL(clicked()), SLOT(shade()));
m_shade2->show();
@@ -195,3 +196,9 @@ void EqTitleBar::updateMask()
if (!region.isEmpty())
m_eq->setMask(region);
}
+
+void EqTitleBar::updateSkin()
+{
+ updateMask();
+ setCursor(m_skin->getCursor(Skin::CUR_EQTITLE));
+}
diff --git a/src/ui/eqtitlebar.h b/src/ui/eqtitlebar.h
index 75eec3dfa..d7a58c588 100644
--- a/src/ui/eqtitlebar.h
+++ b/src/ui/eqtitlebar.h
@@ -50,6 +50,7 @@ private slots:
void shade();
void updateVolume();
void updateMask();
+ void updateSkin();
private:
Skin* m_skin;
diff --git a/src/ui/eqwidget.cpp b/src/ui/eqwidget.cpp
index f6b337c95..dd705f4c2 100644
--- a/src/ui/eqwidget.cpp
+++ b/src/ui/eqwidget.cpp
@@ -44,6 +44,7 @@ EqWidget::EqWidget (QWidget *parent)
{
m_skin = Skin::getPointer();
setPixmap (m_skin->getEqPart (Skin::EQ_MAIN));
+ setCursor (m_skin->getCursor (Skin::CUR_EQNORMAL));
//setPixmap(QPixmap(275,116));
m_titleBar = new EqTitleBar (this);
m_titleBar -> move (0,0);
@@ -71,7 +72,7 @@ EqWidget::EqWidget (QWidget *parent)
m_presetsMenu = new QMenu(this);
- m_presetButton = new Button (this, Skin::EQ_BT_PRESETS_N, Skin::EQ_BT_PRESETS_P);
+ m_presetButton = new Button (this, Skin::EQ_BT_PRESETS_N, Skin::EQ_BT_PRESETS_P, Skin::CUR_EQNORMAL);
m_presetButton->move(217,18);
m_presetButton->show();
@@ -126,6 +127,7 @@ void EqWidget::updateSkin()
{
m_titleBar->setActive (FALSE);
setPixmap (m_skin->getEqPart (Skin::EQ_MAIN));
+ setCursor (m_skin->getCursor (Skin::CUR_EQNORMAL));
}
void EqWidget::readSettings()
diff --git a/src/ui/listwidget.cpp b/src/ui/listwidget.cpp
index a97841fba..f9ddacbaa 100644
--- a/src/ui/listwidget.cpp
+++ b/src/ui/listwidget.cpp
@@ -26,6 +26,7 @@
#include <QMenu>
#include <QUrl>
#include <QApplication>
+#include <QHelpEvent>
#include <qmmpui/playlistitem.h>
#include <qmmpui/playlistmodel.h>
@@ -267,6 +268,19 @@ void ListWidget::wheelEvent (QWheelEvent *e)
updateList();
}
+bool ListWidget::event (QEvent *e)
+{
+ if(e->type() == QEvent::ToolTip)
+ {
+ e->accept();
+ QHelpEvent *helpEvent = (QHelpEvent *) e;
+ int row = rowAt(helpEvent->y());
+ qDebug("==== %d", row);
+ return TRUE;
+ }
+ return QWidget::event(e);
+}
+
void ListWidget::updateList()
{
if (m_model->count() < (m_rows+m_first+1) && m_rows< m_model->count())
@@ -439,7 +453,7 @@ void ListWidget::mouseReleaseEvent(QMouseEvent *e)
QWidget::mouseReleaseEvent(e);
}
-int ListWidget::rowAt( int y) const
+int ListWidget::rowAt(int y) const
{
if (y <= 14 && y >= 2 && m_model->count())
return m_first;
diff --git a/src/ui/listwidget.h b/src/ui/listwidget.h
index 1c475c695..6f3774fe6 100644
--- a/src/ui/listwidget.h
+++ b/src/ui/listwidget.h
@@ -99,7 +99,8 @@ protected:
int rowAt(int)const;
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
- void contextMenuEvent ( QContextMenuEvent * event );
+ void contextMenuEvent (QContextMenuEvent * event);
+ bool event (QEvent *e);
private slots:
void updateSkin();
diff --git a/src/ui/playlist.cpp b/src/ui/playlist.cpp
index a3f46a4a0..5abe64510 100644
--- a/src/ui/playlist.cpp
+++ b/src/ui/playlist.cpp
@@ -68,15 +68,15 @@ PlayList::PlayList (QWidget *parent)
setSizeIncrement (25,29);
m_skin = Skin::getPointer();
- m_buttonAdd = new Button (this,Skin::PL_BT_ADD,Skin::PL_BT_ADD);
+ m_buttonAdd = new Button (this,Skin::PL_BT_ADD,Skin::PL_BT_ADD, Skin::CUR_PNORMAL);
m_buttonAdd->move (11,86);
- m_buttonSub = new Button (this,Skin::PL_BT_SUB,Skin::PL_BT_SUB);
+ m_buttonSub = new Button (this,Skin::PL_BT_SUB,Skin::PL_BT_SUB, Skin::CUR_PNORMAL);
m_buttonSub->move (40,86);
- m_selectButton = new Button (this,Skin::PL_BT_SEL,Skin::PL_BT_SEL);
+ m_selectButton = new Button (this,Skin::PL_BT_SEL,Skin::PL_BT_SEL, Skin::CUR_PNORMAL);
m_selectButton->move (70,86);
- m_sortButton= new Button (this,Skin::PL_BT_SORT,Skin::PL_BT_SORT);
+ m_sortButton= new Button (this,Skin::PL_BT_SORT,Skin::PL_BT_SORT, Skin::CUR_PNORMAL);
m_sortButton->move (99,86);
- m_playlistButton = new Button (this,Skin::PL_BT_LST,Skin::PL_BT_LST);
+ m_playlistButton = new Button (this,Skin::PL_BT_LST,Skin::PL_BT_LST, Skin::CUR_PNORMAL);
m_pl_control = new PlaylistControl (this);
m_pl_control->move (0,0);
@@ -96,7 +96,7 @@ PlayList::PlayList (QWidget *parent)
connect (m_plslider, SIGNAL (sliderMoved (int)), m_listWidget, SLOT (scroll (int)));
connect (m_listWidget, SIGNAL (positionChanged (int, int)), m_plslider,
SLOT (setPos (int, int)));
- connect (m_skin, SIGNAL (skinChanged()), this, SLOT (update()));
+ connect (m_skin, SIGNAL (skinChanged()), this, SLOT (updateSkin()));
connect (m_buttonAdd, SIGNAL (clicked()), SLOT (showAddMenu()));
connect (m_buttonSub, SIGNAL (clicked()), SLOT (showSubMenu()));
connect (m_selectButton, SIGNAL (clicked()), SLOT (showSelectMenu()));
@@ -112,6 +112,7 @@ PlayList::PlayList (QWidget *parent)
m_titleBar = new PlayListTitleBar (this);
m_titleBar->move (0,0);
readSettings();
+ setCursor(m_skin->getCursor(Skin::CUR_PNORMAL));
}
@@ -376,7 +377,8 @@ void PlayList::mousePressEvent (QMouseEvent *e)
if ((m_pos.x() > width()-25) && (m_pos.y() > height()-25))
{
m_resize = TRUE;
- setCursor (Qt::SizeFDiagCursor);
+ // TODO if no skinned cursor, the cursor is the default arrow
+ setCursor (m_skin->getCursor (Skin::CUR_PSIZE));
}
else
m_resize = FALSE;
@@ -404,7 +406,7 @@ void PlayList::mouseMoveEvent (QMouseEvent *e)
}
void PlayList::mouseReleaseEvent (QMouseEvent *)
{
- setCursor (Qt::ArrowCursor);
+ setCursor (m_skin->getCursor (Skin::CUR_PNORMAL));
/*if (m_resize)
m_listWidget->updateList();*/
m_resize = FALSE;
@@ -533,3 +535,9 @@ void PlayList::keyPressEvent (QKeyEvent *ke)
if (m_keyboardManager->handleKeyPress (ke))
update();
}
+
+void PlayList::updateSkin()
+{
+ setCursor(m_skin->getCursor(Skin::CUR_PNORMAL)); // TODO shaded
+ update();
+}
diff --git a/src/ui/playlist.h b/src/ui/playlist.h
index 8e527b95a..903828574 100644
--- a/src/ui/playlist.h
+++ b/src/ui/playlist.h
@@ -79,6 +79,7 @@ class PlayList : public QWidget
void showSelectMenu();
void showSortMenu();
void showPlaylistMenu();
+ void updateSkin();
private:
diff --git a/src/ui/playlistcontrol.cpp b/src/ui/playlistcontrol.cpp
index 8f111fe4e..8a2c6a153 100644
--- a/src/ui/playlistcontrol.cpp
+++ b/src/ui/playlistcontrol.cpp
@@ -28,7 +28,7 @@
PlaylistControl::PlaylistControl(QWidget* parent) : PixmapWidget(parent)
{
m_skin = Skin::getPointer();
- connect(m_skin, SIGNAL(skinChanged()), this, SLOT(update()));
+ connect(m_skin, SIGNAL(skinChanged()), this, SLOT(updateSkin()));
}
void PlaylistControl::paintEvent(QPaintEvent *)
@@ -53,3 +53,9 @@ void PlaylistControl::mouseReleaseEvent(QMouseEvent *me)
else if(QRect(49,1,7,7).contains(pt))
emit ejectClicked();
}
+
+void PlaylistControl::updateSkin()
+{
+ setCursor(m_skin->getCursor(Skin::CUR_PNORMAL));
+ update();
+}
diff --git a/src/ui/playlistcontrol.h b/src/ui/playlistcontrol.h
index 26c3871d4..87e7b27f7 100644
--- a/src/ui/playlistcontrol.h
+++ b/src/ui/playlistcontrol.h
@@ -47,6 +47,8 @@ signals:
void ejectClicked();
protected:
Skin* m_skin;
+private slots:
+ void updateSkin();
};
#endif
diff --git a/src/ui/playlistslider.cpp b/src/ui/playlistslider.cpp
index acf824d17..936a4a4ab 100644
--- a/src/ui/playlistslider.cpp
+++ b/src/ui/playlistslider.cpp
@@ -37,6 +37,7 @@ PlayListSlider::PlayListSlider(QWidget *parent)
m_value = 0;
pos = 0;
connect(m_skin, SIGNAL(skinChanged()), this, SLOT(updateSkin()));
+ setCursor(m_skin->getCursor(Skin::CUR_PVSCROLL));
}
@@ -126,6 +127,7 @@ void PlayListSlider::setPos(int p, int max)
void PlayListSlider::updateSkin()
{
update();
+ setCursor(m_skin->getCursor(Skin::CUR_PVSCROLL));
}
int PlayListSlider::convert(int p)
diff --git a/src/ui/playlisttitlebar.cpp b/src/ui/playlisttitlebar.cpp
index 45a529dad..9eafd0690 100644
--- a/src/ui/playlisttitlebar.cpp
+++ b/src/ui/playlisttitlebar.cpp
@@ -29,6 +29,7 @@
#include "playlisttitlebar.h"
#include "skin.h"
+// TODO {shademode, updateskin} -> do we have the shaded cursor
PlayListTitleBar::PlayListTitleBar(QWidget *parent)
: PixmapWidget(parent)
{
@@ -44,10 +45,10 @@ PlayListTitleBar::PlayListTitleBar(QWidget *parent)
m_pl = qobject_cast<PlayList*>(parent);
m_mw = qobject_cast<MainWindow*>(m_pl->parent());
- m_close = new Button(this,Skin::PL_BT_CLOSE_N, Skin::PL_BT_CLOSE_P);
+ m_close = new Button(this,Skin::PL_BT_CLOSE_N, Skin::PL_BT_CLOSE_P, Skin::CUR_PCLOSE);
connect (m_close, SIGNAL(clicked()), m_pl, SIGNAL(closed()));
m_close->move(264,3);
- m_shade = new Button(this, Skin::PL_BT_SHADE1_N, Skin::PL_BT_SHADE1_P);
+ m_shade = new Button(this, Skin::PL_BT_SHADE1_N, Skin::PL_BT_SHADE1_P, Skin::CUR_PWINBUT);
connect(m_shade, SIGNAL(clicked()), SLOT(shade()));
m_shade->move(255,3);
resize(275,20);
@@ -59,6 +60,7 @@ PlayListTitleBar::PlayListTitleBar(QWidget *parent)
shade();
resize(m_pl->width(),height());
m_align = TRUE;
+ setCursor(m_skin->getCursor(Skin::CUR_PTBAR));
}
@@ -220,6 +222,7 @@ void PlayListTitleBar::readSettings()
void PlayListTitleBar::updateSkin()
{
drawPixmap((width()-275)/25);
+ setCursor(m_skin->getCursor(Skin::CUR_PTBAR));
}
void PlayListTitleBar::shade()
@@ -231,7 +234,7 @@ void PlayListTitleBar::shade()
m_height = m_pl->height();
m_pl->setFixedHeight(14);
m_shade->hide();
- m_shade2 = new Button(this, Skin::PL_BT_SHADE2_N, Skin::PL_BT_SHADE2_P);
+ m_shade2 = new Button(this, Skin::PL_BT_SHADE2_N, Skin::PL_BT_SHADE2_P, Skin::CUR_PWSNORM);
m_shade2->move(254,3);
connect(m_shade2, SIGNAL(clicked()), SLOT(shade()));
m_shade2->show();
diff --git a/src/ui/positionbar.cpp b/src/ui/positionbar.cpp
index 423aaee7b..b15a90441 100644
--- a/src/ui/positionbar.cpp
+++ b/src/ui/positionbar.cpp
@@ -41,6 +41,7 @@ PositionBar::PositionBar(QWidget *parent)
m_max = 0;
m_old = m_value = 0;
draw(FALSE);
+ setCursor(m_skin->getCursor(Skin::CUR_POSBAR));
}
@@ -113,6 +114,7 @@ void PositionBar::setMax(qint64 max)
void PositionBar::updateSkin()
{
draw(FALSE);
+ setCursor(m_skin->getCursor(Skin::CUR_POSBAR));
//setPixmap(m_skin->getPosBar());
//setButtonPixmap(Skin::BT_POSBAR_N);
}
diff --git a/src/ui/skin.cpp b/src/ui/skin.cpp
index a14a71bde..becef5e42 100644
--- a/src/ui/skin.cpp
+++ b/src/ui/skin.cpp
@@ -31,6 +31,7 @@
#include <qmmp/qmmp.h>
#include "skin.h"
+#include "cursorimage.h"
Skin *Skin::pointer = 0;
@@ -108,6 +109,7 @@ void Skin::setSkin (const QString& path)
loadVolume();
loadBalance();
loadRegion();
+ loadCursors();
emit skinChanged();
}
@@ -121,6 +123,42 @@ void Skin::loadMain()
delete pixmap;
}
+void Skin::loadCursors()
+{
+ cursors[CUR_NORMAL] = createCursor(getPath("normal"));
+ cursors[CUR_CLOSE] = createCursor(getPath("close"));
+ cursors[CUR_MAINMENU] = createCursor(getPath("mainmenu"));
+ cursors[CUR_MIN] = createCursor(getPath("min"));
+ cursors[CUR_POSBAR] = createCursor(getPath("posbar.cur"));
+ cursors[CUR_SONGNAME] = createCursor(getPath("songname"));
+ cursors[CUR_TITLEBAR] = createCursor(getPath("titlebar.cur"));
+ cursors[CUR_VOLBAL] = createCursor(getPath("volbal"));
+ cursors[CUR_WINBUT] = createCursor(getPath("winbut"));
+
+ cursors[CUR_WSNORMAL] = createCursor(getPath("wsnormal"));
+ cursors[CUR_WSPOSBAR] = createCursor(getPath("wsposbar"));
+
+ cursors[CUR_EQCLOSE] = createCursor(getPath("eqclose"));
+ cursors[CUR_EQNORMAL] = createCursor(getPath("eqnormal"));
+ cursors[CUR_EQSLID] = createCursor(getPath("eqslid"));
+ cursors[CUR_EQTITLE] = createCursor(getPath("eqtitle"));
+
+ cursors[CUR_PCLOSE] = createCursor(getPath("pclose"));
+ cursors[CUR_PNORMAL] = createCursor(getPath("pnormal"));
+ cursors[CUR_PSIZE] = createCursor(getPath("psize"));
+ cursors[CUR_PTBAR] = createCursor(getPath("ptbar"));
+ cursors[CUR_PVSCROLL] = createCursor(getPath("pvscroll"));
+ cursors[CUR_PWINBUT] = createCursor(getPath("pwinbut"));
+
+ cursors[CUR_PWSNORM] = createCursor(getPath("pwsnorm"));
+ cursors[CUR_PWSSIZE] = createCursor(getPath("pwssize"));
+
+ cursors[CUR_VOLBAR] = createCursor(getPath("volbar"));
+ cursors[CUR_WSCLOSE] = createCursor(getPath("wsclose"));
+ cursors[CUR_WSMIN] = createCursor(getPath("wsmin"));
+ cursors[CUR_WSWINBUT] = createCursor(getPath("wswinbut"));
+}
+
void Skin::loadButtons()
{
@@ -304,6 +342,27 @@ QPixmap *Skin::getPixmap (const QString& name)
return 0;
}
+QString Skin::getPath (const QString& name)
+{
+ m_skin_dir.setFilter (QDir::Files | QDir::Hidden | QDir::NoSymLinks);
+ QFileInfoList f = m_skin_dir.entryInfoList();
+ bool nameHasExt = name.contains('.');
+ for (int j = 0; j < f.size(); ++j)
+ {
+ QFileInfo fileInfo = f.at (j);
+ QString fn = fileInfo.fileName().toLower();
+ if (!nameHasExt && fn.section (".",0,0) == name)
+ {
+ return fileInfo.filePath();
+ } else if (nameHasExt && fn == name)
+ {
+ return fileInfo.filePath();
+ }
+ }
+ return "";
+}
+
+
void Skin::loadPLEdit()
{
QString path = findFile("pledit.txt", m_skin_dir);
diff --git a/src/ui/skin.h b/src/ui/skin.h
index 12b5bff23..c50b93743 100644
--- a/src/ui/skin.h
+++ b/src/ui/skin.h
@@ -29,6 +29,7 @@
#include <QPixmap>
#include <QDir>
#include <QRegion>
+#include <QCursor>
@@ -51,6 +52,10 @@ public:
{
return buttons[bt];
};
+ const QCursor getCursor(uint cu) const
+ {
+ return cursors[cu];
+ };
const QPixmap getTitleBar(uint tb) const
{
return titlebar[tb];
@@ -92,7 +97,7 @@ public:
{
return m_ms_parts[n];
};
- const QPixmap getLetter(const QChar& ch)
+ const QPixmap getLetter(const QChar& ch) const
{
return m_letters[ch];
};
@@ -289,12 +294,48 @@ public:
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,
+ };
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&);
@@ -308,6 +349,7 @@ private:
static Skin *pointer;
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;
@@ -329,6 +371,7 @@ private:
void loadMain();
void loadButtons();
+ void loadCursors();
void loadTitleBar();
void loadPosBar();
void loadNumbers();
diff --git a/src/ui/textscroller.cpp b/src/ui/textscroller.cpp
index ef794ec10..5ab6ae601 100644
--- a/src/ui/textscroller.cpp
+++ b/src/ui/textscroller.cpp
@@ -117,6 +117,7 @@ void TextScroller::setText(const QString& text)
void TextScroller::updateSkin()
{
m_color.setNamedColor(m_skin->getPLValue("mbfg"));
+ setCursor(m_skin->getCursor(Skin::CUR_SONGNAME));
}
diff --git a/src/ui/titlebar.cpp b/src/ui/titlebar.cpp
index 7eb8d317e..667513c3e 100644
--- a/src/ui/titlebar.cpp
+++ b/src/ui/titlebar.cpp
@@ -32,6 +32,7 @@
#include "shadedvisual.h"
#include "titlebar.h"
+// TODO skin cursor with shade mode
TitleBar::TitleBar(QWidget *parent)
: PixmapWidget(parent)
{
@@ -42,16 +43,16 @@ TitleBar::TitleBar(QWidget *parent)
m_shaded = FALSE;
m_currentTime = 0;
//buttons
- m_menu = new Button(this,Skin::BT_MENU_N,Skin::BT_MENU_P);
+ m_menu = new Button(this,Skin::BT_MENU_N,Skin::BT_MENU_P, Skin::CUR_MAINMENU);
connect(m_menu,SIGNAL(clicked()),this,SLOT(showMainMenu()));
m_menu->move(6,3);
- m_minimize = new Button(this,Skin::BT_MINIMIZE_N,Skin::BT_MINIMIZE_P);
+ m_minimize = new Button(this,Skin::BT_MINIMIZE_N,Skin::BT_MINIMIZE_P, Skin::CUR_MIN);
m_minimize->move(244,3);
connect(m_minimize, SIGNAL(clicked()), m_mw, SLOT(showMinimized()));
- m_shade = new Button(this,Skin::BT_SHADE1_N,Skin::BT_SHADE1_P);
+ m_shade = new Button(this,Skin::BT_SHADE1_N,Skin::BT_SHADE1_P, Skin::CUR_WINBUT);
m_shade->move(254,3);
connect(m_shade, SIGNAL(clicked()), SLOT(shade()));
- m_close = new Button(this,Skin::BT_CLOSE_N,Skin::BT_CLOSE_P);
+ m_close = new Button(this,Skin::BT_CLOSE_N,Skin::BT_CLOSE_P, Skin::CUR_CLOSE);
m_close->move(264,3);
connect(m_close, SIGNAL(clicked()), m_mw, SLOT(handleCloseRequest()));
setActive(FALSE);
@@ -63,6 +64,7 @@ TitleBar::TitleBar(QWidget *parent)
else
updateMask();
m_align = TRUE;
+ setCursor(m_skin->getCursor(Skin::CUR_TITLEBAR));
}
@@ -142,6 +144,7 @@ void TitleBar::updateSkin()
{
setActive(FALSE);
updateMask();
+ setCursor(m_skin->getCursor(Skin::CUR_TITLEBAR));
}
void TitleBar::showMainMenu()
@@ -158,7 +161,7 @@ void TitleBar::shade()
m_mw->setFixedSize(275,14);
setPixmap(m_skin->getTitleBar(Skin::TITLEBAR_SHADED_A));
m_shade->hide();
- m_shade2 = new Button(this,Skin::BT_SHADE2_N, Skin::BT_SHADE2_P);
+ m_shade2 = new Button(this,Skin::BT_SHADE2_N, Skin::BT_SHADE2_P, Skin::CUR_WSNORMAL);
m_shade2->move(254,3);
connect(m_shade2, SIGNAL(clicked()), SLOT(shade()));
m_shade2->show();
diff --git a/src/ui/ui.pro b/src/ui/ui.pro
index fe38ac8c0..d5ff02cb8 100644
--- a/src/ui/ui.pro
+++ b/src/ui/ui.pro
@@ -1,166 +1,160 @@
# ???? ?????? ? KDevelop ?????????? qmake.
-# -------------------------------------------
+# -------------------------------------------
# ?????????? ???????????? ???????? ???????? ???????: ./src
-# ???? - ??????????: ../bin/mp3player
-
+# ???? - ??????????: ../bin/mp3player
include(../../qmmp.pri)
-
FORMS += ./forms/configdialog.ui \
- ./forms/preseteditor.ui \
- ./forms/jumptotrackdialog.ui \
- ./forms/aboutdialog.ui \
- ./forms/addurldialog.ui
-
+ ./forms/preseteditor.ui \
+ ./forms/jumptotrackdialog.ui \
+ ./forms/aboutdialog.ui \
+ ./forms/addurldialog.ui
HEADERS += mainwindow.h \
- button.h \
- display.h \
- skin.h \
- titlebar.h \
- positionbar.h \
- number.h \
- playlist.h \
- listwidget.h \
- pixmapwidget.h \
- playlisttitlebar.h \
- configdialog.h \
- playlistslider.h \
- dock.h \
- eqwidget.h \
- eqtitlebar.h \
- eqslider.h \
- togglebutton.h \
- eqgraph.h \
- mainvisual.h \
- inlines.h \
- fft.h \
- logscale.h \
- textscroller.h \
- monostereo.h \
- playstatus.h \
- pluginitem.h \
- volumebar.h \
- balancebar.h \
- symboldisplay.h \
- playlistcontrol.h \
- qmmpstarter.h \
- eqpreset.h \
- preseteditor.h \
- jumptotrackdialog.h \
- aboutdialog.h \
- timeindicator.h \
- keyboardmanager.h \
- addurldialog.h \
- skinreader.h \
- visualmenu.h \
- titlebarcontrol.h \
- shadedvisual.h \
- shadedbar.h \
- builtincommandlineoption.h
-
+ button.h \
+ display.h \
+ skin.h \
+ titlebar.h \
+ positionbar.h \
+ number.h \
+ playlist.h \
+ listwidget.h \
+ pixmapwidget.h \
+ playlisttitlebar.h \
+ configdialog.h \
+ playlistslider.h \
+ dock.h \
+ eqwidget.h \
+ eqtitlebar.h \
+ eqslider.h \
+ togglebutton.h \
+ eqgraph.h \
+ mainvisual.h \
+ inlines.h \
+ fft.h \
+ logscale.h \
+ textscroller.h \
+ monostereo.h \
+ playstatus.h \
+ pluginitem.h \
+ volumebar.h \
+ balancebar.h \
+ symboldisplay.h \
+ playlistcontrol.h \
+ qmmpstarter.h \
+ eqpreset.h \
+ preseteditor.h \
+ jumptotrackdialog.h \
+ aboutdialog.h \
+ timeindicator.h \
+ keyboardmanager.h \
+ addurldialog.h \
+ skinreader.h \
+ visualmenu.h \
+ titlebarcontrol.h \
+ shadedvisual.h \
+ shadedbar.h \
+ builtincommandlineoption.h \
+ cursorimage.h
SOURCES += mainwindow.cpp \
- mp3player.cpp \
- button.cpp \
- display.cpp \
- skin.cpp \
- titlebar.cpp \
- positionbar.cpp \
- number.cpp \
- playlist.cpp \
- listwidget.cpp \
- pixmapwidget.cpp \
- playlisttitlebar.cpp \
- configdialog.cpp \
- playlistslider.cpp \
- dock.cpp \
- eqwidget.cpp \
- eqtitlebar.cpp \
- eqslider.cpp \
- togglebutton.cpp \
- eqgraph.cpp \
- mainvisual.cpp \
- fft.c \
- logscale.cpp \
- textscroller.cpp \
- monostereo.cpp \
- playstatus.cpp \
- pluginitem.cpp \
- volumebar.cpp \
- balancebar.cpp \
- symboldisplay.cpp \
- playlistcontrol.cpp \
- qmmpstarter.cpp \
- eqpreset.cpp \
- preseteditor.cpp \
- jumptotrackdialog.cpp \
- aboutdialog.cpp \
- timeindicator.cpp \
- keyboardmanager.cpp \
- addurldialog.cpp \
- skinreader.cpp \
- visualmenu.cpp \
- titlebarcontrol.cpp \
- shadedvisual.cpp \
- shadedbar.cpp \
- builtincommandlineoption.cpp
-
+ mp3player.cpp \
+ button.cpp \
+ display.cpp \
+ skin.cpp \
+ titlebar.cpp \
+ positionbar.cpp \
+ number.cpp \
+ playlist.cpp \
+ listwidget.cpp \
+ pixmapwidget.cpp \
+ playlisttitlebar.cpp \
+ configdialog.cpp \
+ playlistslider.cpp \
+ dock.cpp \
+ eqwidget.cpp \
+ eqtitlebar.cpp \
+ eqslider.cpp \
+ togglebutton.cpp \
+ eqgraph.cpp \
+ mainvisual.cpp \
+ fft.c \
+ logscale.cpp \
+ textscroller.cpp \
+ monostereo.cpp \
+ playstatus.cpp \
+ pluginitem.cpp \
+ volumebar.cpp \
+ balancebar.cpp \
+ symboldisplay.cpp \
+ playlistcontrol.cpp \
+ qmmpstarter.cpp \
+ eqpreset.cpp \
+ preseteditor.cpp \
+ jumptotrackdialog.cpp \
+ aboutdialog.cpp \
+ timeindicator.cpp \
+ keyboardmanager.cpp \
+ addurldialog.cpp \
+ skinreader.cpp \
+ visualmenu.cpp \
+ titlebarcontrol.cpp \
+ shadedvisual.cpp \
+ shadedbar.cpp \
+ builtincommandlineoption.cpp \
+ cursorimage.cpp
win32:HEADERS += ../qmmp/visual.h
-
-unix{
-HEADERS += unixdomainsocket.h
-SOURCES += unixdomainsocket.cpp
+unix {
+ HEADERS += unixdomainsocket.h
+ SOURCES += unixdomainsocket.cpp
}
-#Some conf to redirect intermediate stuff in separate dirs
-UI_DIR =./.build/ui/
-MOC_DIR =./.build/moc/
-OBJECTS_DIR =./.build/obj
-
-
+# Some conf to redirect intermediate stuff in separate dirs
+UI_DIR = ./.build/ui/
+MOC_DIR = ./.build/moc/
+OBJECTS_DIR = ./.build/obj
QT += network
unix:TARGET = ../../bin/qmmp
win32:TARGET = ../../../bin/qmmp
-CONFIG += thread release \
-warn_on
-QMAKE_LIBDIR += ../../lib qmmpui
+CONFIG += thread \
+ release \
+ warn_on
+QMAKE_LIBDIR += ../../lib \
+ qmmpui
LIBS += -Wl,-rpath,../lib
-unix:LIBS += -L../../lib -lqmmp -lqmmpui
-win32:LIBS += -L../../bin -lqmmp0 -lqmmpui0
-
-
+unix:LIBS += -L../../lib \
+ -lqmmp \
+ -lqmmpui
+win32:LIBS += -L../../bin \
+ -lqmmp0 \
+ -lqmmpui0
INCLUDEPATH += ../
RESOURCES = images/images.qrc \
- stuff.qrc
+ stuff.qrc
TEMPLATE = app
-
-unix{
-target.path = /bin
-
-desktop.files = qmmp.desktop \
- qmmp_enqueue.desktop
-desktop.path = /share/applications
-
-icon16.files = images/16x16/qmmp.png
-icon32.files = images/32x32/qmmp.png
-icon48.files = images/48x48/qmmp.png
-
-icon16.path = /share/icons/hicolor/16x16/apps
-icon32.path = /share/icons/hicolor/32x32/apps
-icon48.path = /share/icons/hicolor/48x48/apps
-
-INSTALLS += desktop target icon16 icon32 icon48
+unix {
+ target.path = /bin
+ desktop.files = qmmp.desktop \
+ qmmp_enqueue.desktop
+ desktop.path = /share/applications
+ icon16.files = images/16x16/qmmp.png
+ icon32.files = images/32x32/qmmp.png
+ icon48.files = images/48x48/qmmp.png
+ icon16.path = /share/icons/hicolor/16x16/apps
+ icon32.path = /share/icons/hicolor/32x32/apps
+ icon48.path = /share/icons/hicolor/48x48/apps
+ INSTALLS += desktop \
+ target \
+ icon16 \
+ icon32 \
+ icon48
}
-
RESOURCES += translations/qmmp_locales.qrc
-
TRANSLATIONS = translations/qmmp_ru.ts \
- translations/qmmp_tr.ts \
- translations/qmmp_zh_CN.ts \
- translations/qmmp_cs.ts \
- translations/qmmp_pt_BR.ts \
- translations/qmmp_uk_UA.ts \
- translations/qmmp_zh_TW.ts \
- translations/qmmp_de.ts \
- translations/qmmp_pl_PL.ts \
- translations/qmmp_it.ts \
- translations/qmmp_lt.ts
-
+ translations/qmmp_tr.ts \
+ translations/qmmp_zh_CN.ts \
+ translations/qmmp_cs.ts \
+ translations/qmmp_pt_BR.ts \
+ translations/qmmp_uk_UA.ts \
+ translations/qmmp_zh_TW.ts \
+ translations/qmmp_de.ts \
+ translations/qmmp_pl_PL.ts \
+ translations/qmmp_it.ts \
+ translations/qmmp_lt.ts
diff --git a/src/ui/volumebar.cpp b/src/ui/volumebar.cpp
index 15c7db867..685f049ec 100644
--- a/src/ui/volumebar.cpp
+++ b/src/ui/volumebar.cpp
@@ -109,6 +109,7 @@ void VolumeBar::setMax(int max)
void VolumeBar::updateSkin()
{
draw(FALSE);
+ setCursor(m_skin->getCursor(Skin::CUR_VOLBAL));
}
void VolumeBar::draw(bool pressed)