Added playlist buttons and enabled addDir and addFile

This commit is contained in:
Tobias Rundstrom 2006-03-12 01:19:01 -04:00
parent 0c5593076a
commit 77f9088231
8 changed files with 475 additions and 8 deletions

View file

@ -1,5 +1,4 @@
#include "MainWindow.h"
#include "PixWidget.h"
PixWidget::PixWidget (QWidget *parent) : QWidget (parent)
{

View file

@ -1,12 +1,15 @@
#include "MainWindow.h"
#include "Playlist.h"
#include "PlaylistMenu.h"
#include <QMouseEvent>
#include <QPaintEvent>
#include <QRect>
#include <QIcon>
#include <QApplication>
#include <QSettings>
#include <QFileDialog>
PlaylistScrollButton::PlaylistScrollButton (PlaylistScroller *parent, uint normal, uint pressed) : Button (parent, normal, pressed, true)
{
@ -98,7 +101,7 @@ PlaylistScroller::paintEvent (QPaintEvent *event)
QPainter (paint);
paint.begin (this);
paint.drawPixmap (rect (), m_pixmap, m_pixmap.rect ());
paint.drawPixmap (event->rect (), m_pixmap, m_pixmap.rect ());
paint.end ();
}
@ -142,7 +145,8 @@ PlaylistWindow::PlaylistWindow (QWidget *parent) : QMainWindow (parent)
}
void PlaylistWindow::togglePL (void)
void
PlaylistWindow::togglePL (void)
{
m_mw->togglePL(true);
}
@ -248,11 +252,107 @@ PlaylistWidget::PlaylistWidget (QWidget *parent) : QWidget (parent)
connect (m_list, SIGNAL(sizeChanged(QSize)), this, SLOT(sizeChangedList (QSize)));
m_drag = new dragButton (this);
m_drag->resize (30, 30);
addButtons ();
setMinimumSize (275, 116);
resize (275, 300);
}
void
PlaylistWidget::addButtons (void)
{
PlaylistMenuButton *b;
m_add = new PlaylistMenu (this, Skin::PLS_ADD,
Skin::PLS_ADD_DEC);
b = new PlaylistMenuButton (m_add, Skin::PLS_ADD_URL_0,
Skin::PLS_ADD_URL_1);
connect (b, SIGNAL(activated ()), this, SLOT (menuAddUrl ()));
b = new PlaylistMenuButton (m_add, Skin::PLS_ADD_DIR_0,
Skin::PLS_ADD_DIR_1);
connect (b, SIGNAL(activated ()), this, SLOT (menuAddDir ()));
b = new PlaylistMenuButton (m_add, Skin::PLS_ADD_FIL_0,
Skin::PLS_ADD_FIL_1);
connect (b, SIGNAL(activated ()), this, SLOT (menuAddFile ()));
m_del = new PlaylistMenu (this, Skin::PLS_DEL,
Skin::PLS_DEL_DEC);
b = new PlaylistMenuButton (m_del, Skin::PLS_MSC_BTN_0,
Skin::PLS_MSC_BTN_1);
b = new PlaylistMenuButton (m_del, Skin::PLS_DEL_ALL_0,
Skin::PLS_DEL_ALL_1);
b = new PlaylistMenuButton (m_del, Skin::PLS_DEL_CRP_0,
Skin::PLS_DEL_CRP_1);
b = new PlaylistMenuButton (m_del, Skin::PLS_DEL_FIL_0,
Skin::PLS_DEL_FIL_1);
m_sel = new PlaylistMenu (this, Skin::PLS_SEL,
Skin::PLS_SEL_DEC);
b = new PlaylistMenuButton (m_sel, Skin::PLS_SEL_INV_0,
Skin::PLS_SEL_INV_1);
b = new PlaylistMenuButton (m_sel, Skin::PLS_SEL_NIL_0,
Skin::PLS_SEL_NIL_1);
b = new PlaylistMenuButton (m_sel, Skin::PLS_SEL_ALL_0,
Skin::PLS_SEL_ALL_1);
m_msc = new PlaylistMenu (this, Skin::PLS_MSC,
Skin::PLS_MSC_DEC);
b = new PlaylistMenuButton (m_msc, Skin::PLS_MSC_SRT_0,
Skin::PLS_MSC_SRT_1);
b = new PlaylistMenuButton (m_msc, Skin::PLS_MSC_INF_0,
Skin::PLS_MSC_INF_1);
b = new PlaylistMenuButton (m_msc, Skin::PLS_MSC_OPT_0,
Skin::PLS_MSC_OPT_1);
m_lst = new PlaylistMenu (this, Skin::PLS_LST,
Skin::PLS_LST_DEC);
b = new PlaylistMenuButton (m_lst, Skin::PLS_LST_NEW_0,
Skin::PLS_LST_NEW_1);
b = new PlaylistMenuButton (m_lst, Skin::PLS_LST_SAV_0,
Skin::PLS_LST_SAV_1);
b = new PlaylistMenuButton (m_lst, Skin::PLS_LST_OPN_0,
Skin::PLS_LST_OPN_1);
}
void
PlaylistWidget::menuAddDir ()
{
XMMSHandler *xmmsh = XMMSHandler::getInstance();
QString dir;
dir = QFileDialog::getExistingDirectory (this, "Select files to play",
QDir::homePath ());
QDir d (dir);
d.setFilter (QDir::Files);
QFileInfoList list = d.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
QString fname = fileInfo.filePath();
xmmsh->playlistAddURL ("file://" + fname);
}
}
void
PlaylistWidget::menuAddFile ()
{
XMMSHandler *xmmsh = XMMSHandler::getInstance();
QStringList files;
files = QFileDialog::getOpenFileNames (NULL, "Select files to play",
QDir::homePath(),
"Music (*.mp3 *.ogg *.flac *.wav *.mpc *.mp4)");
for (int i = 0; i < files.count(); i++) {
xmmsh->playlistAddURL ("file://" + files.value(i));
}
}
void
PlaylistWidget::sizeChangedList (QSize s)
{
@ -438,7 +538,12 @@ PlaylistWidget::paintEvent (QPaintEvent *event)
/* drag corner */
m_drag->move (size().width()-30,
size().height()-30);
m_drag->resize (30, 30);
/* move add menu */
m_add->move (11, height() - m_add->height() - 12);
m_del->move (40, height() - m_del->height() - 12);
m_sel->move (69, height() - m_sel->height() - 12);
m_msc->move (98, height() - m_msc->height() - 12);
m_lst->move (width()-22-25, height() - m_lst->height() - 12);
}

View file

@ -1,11 +1,14 @@
#ifndef __PLAYLIST_H__
#define __PLAYLIST_H__
#include "XMMSHandler.h"
#include "Skin.h"
#include "PlaylistList.h"
#include "PixWidget.h"
#include "Button.h"
#include "PlaylistShade.h"
#include "PlaylistMenu.h"
#include <QMainWindow>
#include <QFont>
@ -79,10 +82,15 @@ class PlaylistWidget : public QWidget {
void doScroll (int);
void sizeChangedList (QSize);
void menuAddUrl () {}
void menuAddDir ();
void menuAddFile ();
private:
void resizeEvent (QResizeEvent *event);
void paintEvent (QPaintEvent *event);
void mouseDoubleClickEvent (QMouseEvent *event);
void addButtons (void);
QPixmap m_corner1;
QPixmap m_corner2;
@ -103,6 +111,12 @@ class PlaylistWidget : public QWidget {
PlaylistList *m_list;
PlaylistScroller *m_scroller;
dragButton *m_drag;
PlaylistMenu *m_add;
PlaylistMenu *m_del;
PlaylistMenu *m_sel;
PlaylistMenu *m_msc;
PlaylistMenu *m_lst;
};
@ -122,7 +136,6 @@ class PlaylistWindow : public QMainWindow {
void moveEvent (QMoveEvent *event);
void resizeEvent (QResizeEvent *event);
public slots:
void switchDisplay (void);
void togglePL (void);

144
PlaylistMenu.cpp Normal file
View file

@ -0,0 +1,144 @@
#include "PlaylistMenu.h"
#include <QMouseEvent>
#include <QWidget>
#include <QPoint>
PlaylistMenuButton::PlaylistMenuButton (PlaylistMenu *menu,
uint pix1, uint pix2) : QWidget (menu)
{
m_pixid1 = pix1;
m_pixid2 = pix2;
menu->addButton (this);
m_menu = menu;
setMinimumSize (22, 18);
setMaximumSize (22, 18);
}
PlaylistMenuButton::~PlaylistMenuButton ()
{
m_menu->rmButton (this);
}
void
PlaylistMenuButton::paintEvent (QPaintEvent *event)
{
QPainter p;
p.begin (this);
p.drawPixmap (rect (), m_pixmap, m_pixmap.rect ());
p.end ();
}
void
PlaylistMenuButton::setPixmaps (Skin *skin)
{
m_pixmap1 = skin->getPls (m_pixid1);
m_pixmap2 = skin->getPls (m_pixid2);
m_pixmap = m_pixmap1;
}
PlaylistMenu::PlaylistMenu (QWidget *parent, uint pix,
uint decoration) : PixWidget (parent)
{
setMinimumSize (25, 18);
setMaximumSize (25, 18);
m_expanded = new QWidget (parent);
m_expanded->hide ();
m_decbar = new PlaylistMenuBar (m_expanded, decoration);
m_decbar->move (0, 0);
m_pixid = pix;
}
void
PlaylistMenu::addButton (PlaylistMenuButton *b)
{
int i = m_items.count ();
/* black magic, don't try this at home kids */
b->setParent (m_expanded);
b->move (3, i * 18);
m_items.append (b);
i = m_items.count ();
m_decbar->resize (3, i * 18);
m_expanded->resize (25, i * 18);
}
void
PlaylistMenu::rmButton (PlaylistMenuButton *b)
{
m_items.removeAll (b);
}
void
PlaylistMenu::mousePressEvent (QMouseEvent *event)
{
PlaylistMenuButton *b = m_items.last ();
b->setOver ();
QWidget *w = dynamic_cast<QWidget*>(parent ());
m_expanded->move (pos ().x (),
w->height() - m_expanded->height() - 12);
m_expanded->show ();
}
void
PlaylistMenu::mouseMoveEvent (QMouseEvent *event)
{
int my_y = event->y() + (m_items.count () - 1) * 18;
for (int i = 0; i < m_items.count (); i ++) {
PlaylistMenuButton *b = m_items.value (i);
if (my_y > b->pos().y() &&
my_y < b->pos().y() + 18) {
b->setOver ();
} else {
b->setNoOver ();
}
}
m_expanded->update ();
}
void
PlaylistMenu::mouseReleaseEvent (QMouseEvent *event)
{
int my_y = event->y() + (m_items.count () - 1) * 18;
for (int i = 0; i < m_items.count (); i ++) {
PlaylistMenuButton *b = m_items.value (i);
if (my_y > b->pos().y() &&
my_y < b->pos().y() + 18) {
b->clicked ();
}
}
m_expanded->hide ();
dynamic_cast<QWidget*>(parent ())->update ();
}
void
PlaylistMenu::setPixmaps (Skin *skin)
{
for (int i = 0; i < m_items.count (); i++) {
PlaylistMenuButton *b = m_items.value (i);
if (b) {
b->setPixmaps (skin);
}
}
m_pixmap = skin->getPls (m_pixid);
m_dpixmap = skin->getPls (m_dec);
update ();
}

85
PlaylistMenu.h Normal file
View file

@ -0,0 +1,85 @@
#ifndef __PLAYLISTMENU_H__
#define __PLAYLISTMENU_H__
class PlaylistMenu;
#include "XMMSHandler.h"
#include "Skin.h"
#include "PixWidget.h"
/*
#include <QWidget>
#include <QPixmap>
*/
class PlaylistMenu;
class PlaylistMenuBar : public PixWidget {
Q_OBJECT
public:
PlaylistMenuBar (QWidget *parent, uint id) : PixWidget (parent)
{
m_id = id;
}
public slots:
void setPixmaps (Skin *skin) { m_pixmap = skin->getPls (m_id); }
private:
uint m_id;
};
class PlaylistMenuButton : public QWidget {
Q_OBJECT
public:
PlaylistMenuButton (PlaylistMenu *, uint pix1, uint pix2);
~PlaylistMenuButton ();
void paintEvent (QPaintEvent *event);
void setPixmaps (Skin *skin);
void setOver (void) { m_pixmap = m_pixmap2; }
void setNoOver (void) { m_pixmap = m_pixmap1; }
void clicked (void) { emit activated (); }
signals:
void activated (void);
private:
uint m_pixid1;
uint m_pixid2;
PlaylistMenu *m_menu;
QPixmap m_pixmap1;
QPixmap m_pixmap2;
QPixmap m_pixmap;
};
class PlaylistMenu : public PixWidget {
Q_OBJECT
public:
PlaylistMenu (QWidget *, uint, uint);
~PlaylistMenu () {}
void addButton (PlaylistMenuButton *b);
void rmButton (PlaylistMenuButton *b);
void mousePressEvent (QMouseEvent *event);
void mouseReleaseEvent (QMouseEvent *event);
void mouseMoveEvent (QMouseEvent *);
public slots:
void setPixmaps (Skin *skin);
private:
uint m_pixid;
uint m_dec;
QPixmap m_dpixmap;
QList<PlaylistMenuButton *> m_items;
QWidget *m_expanded;
PlaylistMenuBar *m_decbar;
};
#endif

View file

@ -61,6 +61,70 @@ Skin::BuildPlaylist (void)
m_playlist[PLS_LCBAR] = img->copy(0, 72, 125, 38);
m_playlist[PLS_RCBAR] = img->copy(126, 72, 150, 38);
/* extract the buttons */
m_playlist[PLS_ADD] = img->copy(11, 80, 25, 18);
m_playlist[PLS_ADD_DEC] = img->copy(48, 111, 3, 54);
m_playlist[PLS_ADD_URL_0] = img->copy(0, 111, 22, 18);
m_playlist[PLS_ADD_URL_1] = img->copy(23, 111, 22, 18);
m_playlist[PLS_ADD_DIR_0] = img->copy(0, 130, 22, 18);
m_playlist[PLS_ADD_DIR_1] = img->copy(23, 130, 22, 18);
m_playlist[PLS_ADD_FIL_0] = img->copy(0, 149, 22, 18);
m_playlist[PLS_ADD_FIL_1] = img->copy(23, 149, 22, 18);
/* Delete buttons */
m_playlist[PLS_DEL] = img->copy(40, 80, 25, 18);
m_playlist[PLS_DEL_DEC] = img->copy(100, 111, 3, 72);
m_playlist[PLS_DEL_ALL_0] = img->copy(54, 111, 22, 18);
m_playlist[PLS_DEL_ALL_1] = img->copy(77, 111, 22, 18);
m_playlist[PLS_DEL_CRP_0] = img->copy(54, 130, 22, 18);
m_playlist[PLS_DEL_CRP_1] = img->copy(77, 130, 22, 18);
m_playlist[PLS_DEL_FIL_0] = img->copy(54, 149, 22, 18);
m_playlist[PLS_DEL_FIL_1] = img->copy(77, 149, 22, 18);
/* Select buttons */
m_playlist[PLS_SEL] = img->copy(69, 80, 25, 18);
m_playlist[PLS_SEL_DEC] = img->copy(150, 111, 3, 54);
m_playlist[PLS_SEL_INV_0] = img->copy(104, 111, 22, 18);
m_playlist[PLS_SEL_INV_1] = img->copy(127, 111, 22, 18);
m_playlist[PLS_SEL_NIL_0] = img->copy(104, 130, 22, 18);
m_playlist[PLS_SEL_NIL_1] = img->copy(127, 130, 22, 18);
m_playlist[PLS_SEL_ALL_0] = img->copy(104, 149, 22, 18);
m_playlist[PLS_SEL_ALL_1] = img->copy(127, 149, 22, 18);
/* misc buttons */
m_playlist[PLS_MSC] = img->copy(98, 80, 25, 18);
m_playlist[PLS_MSC_DEC] = img->copy(200, 111, 3, 54);
m_playlist[PLS_MSC_SRT_0] = img->copy(154, 111, 22, 18);
m_playlist[PLS_MSC_SRT_1] = img->copy(177, 111, 22, 18);
m_playlist[PLS_MSC_INF_0] = img->copy(154, 130, 22, 18);
m_playlist[PLS_MSC_INF_1] = img->copy(177, 130, 22, 18);
m_playlist[PLS_MSC_OPT_0] = img->copy(154, 149, 22, 18);
m_playlist[PLS_MSC_OPT_1] = img->copy(177, 149, 22, 18);
/* list buttons */
m_playlist[PLS_LST] = img->copy(229, 80, 25, 18);
m_playlist[PLS_LST_DEC] = img->copy(250, 111, 3, 54);
m_playlist[PLS_LST_NEW_0] = img->copy(204, 111, 22, 18);
m_playlist[PLS_LST_NEW_1] = img->copy(227, 111, 22, 18);
m_playlist[PLS_LST_SAV_0] = img->copy(204, 130, 22, 18);
m_playlist[PLS_LST_SAV_1] = img->copy(227, 130, 22, 18);
m_playlist[PLS_LST_OPN_0] = img->copy(204, 149, 22, 18);
m_playlist[PLS_LST_OPN_1] = img->copy(227, 149, 22, 18);
/* misc button */
m_playlist[PLS_MSC_BTN_0] = img->copy(54, 168, 22, 18);
m_playlist[PLS_MSC_BTN_1] = img->copy(77, 168, 22, 18);
delete img;
}

57
Skin.h
View file

@ -154,14 +154,18 @@ class Skin : public QWidget
PLS_CORNER_UL_1,
PLS_CORNER_UR_0,
PLS_CORNER_UR_1,
PLS_TBAR_0,
PLS_TBAR_1,
PLS_TFILL_0,
PLS_TFILL_1,
PLS_BFILL_0,
PLS_BFILL_1 = PLS_BFILL_0,
PLS_VISMINI_0,
PLS_VISMINI_1 = PLS_VISMINI_0,
PLS_LFILL_0,
PLS_LFILL_1 = PLS_LFILL_0,
PLS_RFILL_0,
@ -170,12 +174,14 @@ class Skin : public QWidget
PLS_RFILL2_1 = PLS_RFILL2_0,
PLS_RFILL3_0,
PLS_RFILL3_1 = PLS_RFILL3_0,
PLS_CLOSE_BTN_0,
PLS_CLOSE_BTN_1,
PLS_SHADE_BTN_0,
PLS_SHADE_BTN_1,
PLS_MAX_BTN_0,
PLS_MAX_BTN_1,
PLS_SCROLL_0,
PLS_SCROLL_1,
PLS_WS_LE_0,
@ -185,8 +191,57 @@ class Skin : public QWidget
PLS_WS_MID_0,
PLS_WS_MID_1 = PLS_WS_MID_0,
PLS_LCBAR,
PLS_RCBAR
PLS_RCBAR,
PLS_MSC_BTN_0,
PLS_MSC_BTN_1,
PLS_ADD,
PLS_ADD_DEC,
PLS_ADD_URL_0,
PLS_ADD_URL_1,
PLS_ADD_DIR_0,
PLS_ADD_DIR_1,
PLS_ADD_FIL_0,
PLS_ADD_FIL_1,
PLS_DEL,
PLS_DEL_DEC,
PLS_DEL_ALL_0,
PLS_DEL_ALL_1,
PLS_DEL_CRP_0,
PLS_DEL_CRP_1,
PLS_DEL_FIL_0,
PLS_DEL_FIL_1,
PLS_SEL,
PLS_SEL_DEC,
PLS_SEL_INV_0,
PLS_SEL_INV_1,
PLS_SEL_NIL_0,
PLS_SEL_NIL_1,
PLS_SEL_ALL_0,
PLS_SEL_ALL_1,
PLS_MSC,
PLS_MSC_DEC,
PLS_MSC_SRT_0,
PLS_MSC_SRT_1,
PLS_MSC_INF_0,
PLS_MSC_INF_1,
PLS_MSC_OPT_0,
PLS_MSC_OPT_1,
PLS_LST,
PLS_LST_DEC,
PLS_LST_NEW_0,
PLS_LST_NEW_1,
PLS_LST_SAV_0,
PLS_LST_SAV_1,
PLS_LST_OPN_0,
PLS_LST_OPN_1
};
private:
Skin() {};
static Skin *singleton;

View file

@ -23,7 +23,8 @@ SOURCES += XmmsQT4.cpp \
SettingsWindow.cpp \
MediaArtistList.cpp \
MediaAlbumList.cpp \
MediaSongList.cpp
MediaSongList.cpp \
PlaylistMenu.cpp
HEADERS += XmmsQT4.h \
PixWidget.h \
@ -50,7 +51,8 @@ HEADERS += XmmsQT4.h \
SettingsWindow.h \
MediaArtistList.h \
MediaAlbumList.h \
MediaSongList.h
MediaSongList.h \
PlaylistMenu.h