diff options
| -rw-r--r-- | src/ui/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/ui/button.cpp | 5 | ||||
| -rw-r--r-- | src/ui/button.h | 3 | ||||
| -rw-r--r-- | src/ui/cursorimage.cpp | 99 | ||||
| -rw-r--r-- | src/ui/cursorimage.h | 7 | ||||
| -rw-r--r-- | src/ui/display.cpp | 14 | ||||
| -rw-r--r-- | src/ui/eqslider.cpp | 2 | ||||
| -rw-r--r-- | src/ui/eqtitlebar.cpp | 15 | ||||
| -rw-r--r-- | src/ui/eqtitlebar.h | 1 | ||||
| -rw-r--r-- | src/ui/eqwidget.cpp | 4 | ||||
| -rw-r--r-- | src/ui/listwidget.cpp | 16 | ||||
| -rw-r--r-- | src/ui/listwidget.h | 3 | ||||
| -rw-r--r-- | src/ui/playlist.cpp | 24 | ||||
| -rw-r--r-- | src/ui/playlist.h | 1 | ||||
| -rw-r--r-- | src/ui/playlistcontrol.cpp | 8 | ||||
| -rw-r--r-- | src/ui/playlistcontrol.h | 2 | ||||
| -rw-r--r-- | src/ui/playlistslider.cpp | 2 | ||||
| -rw-r--r-- | src/ui/playlisttitlebar.cpp | 9 | ||||
| -rw-r--r-- | src/ui/positionbar.cpp | 2 | ||||
| -rw-r--r-- | src/ui/skin.cpp | 59 | ||||
| -rw-r--r-- | src/ui/skin.h | 45 | ||||
| -rw-r--r-- | src/ui/textscroller.cpp | 1 | ||||
| -rw-r--r-- | src/ui/titlebar.cpp | 13 | ||||
| -rw-r--r-- | src/ui/ui.pro | 288 | ||||
| -rw-r--r-- | src/ui/volumebar.cpp | 1 |
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) |
