diff --git a/TODO b/TODO index 3725759..25eda83 100644 --- a/TODO +++ b/TODO @@ -5,9 +5,8 @@ Todo: * ApplicationConfig * Balance * Playlist - + Display Playtime + + Make displayed Information configurable + Add scrollbuttons to slider - + Make drag and drop work again * Jump entry to dialog * drag and drop outside viewport * jump to entry when it's played. diff --git a/lib/playlistmodel.cpp b/lib/playlistmodel.cpp index 7e47e35..90b25bb 100644 --- a/lib/playlistmodel.cpp +++ b/lib/playlistmodel.cpp @@ -32,10 +32,12 @@ PlaylistModel::PlaylistModel (QObject *parent, XClient *client, const QString &n // m_columns.append ("#"); m_columns.append ("Artist"); m_columns.append ("Title"); + m_columns.append ("Duration"); // m_colfallback.append (""); m_colfallback.append (""); m_colfallback.append ("url"); + m_colfallback.append (""); m_cached_size.append (QSize ()); m_cached_size.append (QSize ()); diff --git a/src/equalizer/equalizerwindow.cpp b/src/equalizer/equalizerwindow.cpp index e9aed81..9863a4c 100644 --- a/src/equalizer/equalizerwindow.cpp +++ b/src/equalizer/equalizerwindow.cpp @@ -40,8 +40,22 @@ EqualizerWindow::EqualizerWindow (QWidget *parent) : QMainWindow (parent) setFixedSize (275, 116); } -EqualizerWindow::~EqualizerWindow (void) +void +EqualizerWindow::hideEvent (QHideEvent *event) { + QSettings s; + s.setValue ("equalizer/visible", false); + + emit visibilityChanged (false); +} + +void +EqualizerWindow::showEvent (QShowEvent *event) +{ + QSettings s; + s.setValue ("equalizer/visible", true); + + emit visibilityChanged (true); } void diff --git a/src/equalizer/equalizerwindow.h b/src/equalizer/equalizerwindow.h index 3d11196..38716c2 100644 --- a/src/equalizer/equalizerwindow.h +++ b/src/equalizer/equalizerwindow.h @@ -21,6 +21,8 @@ class QWidget; class QMouseEvent; class QMoveEvent; +class QHideEvent; +class QShowEvent; class MainWindow; class EqualizerWidget; @@ -30,13 +32,21 @@ class EqualizerWindow : public QMainWindow Q_OBJECT public: EqualizerWindow(QWidget *parent); - ~EqualizerWindow(); + ~EqualizerWindow() {} + + signals: + void visibilityChanged(bool visible); + + public slots: + void setEnabled (void); + + protected: + void hideEvent (QHideEvent *event); + void showEvent (QShowEvent *event); void mouseMoveEvent(QMouseEvent *); void mousePressEvent(QMouseEvent *); void moveEvent(QMoveEvent *event); - public slots: - void setEnabled (void); private: MainWindow *m_mw; diff --git a/src/main.cpp b/src/main.cpp index a0854af..34b4d11 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,10 +16,7 @@ #include "XMMSHandler.h" #include "mainwindow.h" -// #include "playlistwindow.h" -#include "equalizerwindow.h" #include "Skin.h" -//TODO: change to xclient.h sometime later #ifdef HAVE_SERVERBROWSER #include "Serverbrowser.h" @@ -50,8 +47,6 @@ main (int argc, char **argv) MainWindow *mw = new MainWindow (NULL); - EqualizerWindow *eqwin = new EqualizerWindow (mw); - /* * Now that everything is initialized * open the skin and send the @@ -65,21 +60,6 @@ main (int argc, char **argv) Skin::getInstance()->setSkin (settings.value("skin/path").toString ()); mw->show (); - mw->setEQ (eqwin); - - if (!settings.contains ("equalizer/pos")) - settings.setValue ("equalizer/pos", QPoint (mw->pos().x(), - mw->pos().y()+mw->size().height())); - eqwin->move (settings.value("equalizer/pos").toPoint ()); - - if (!settings.contains ("equalizer/hidden")) - settings.setValue ("equalizer/hidden", true); - - if (settings.value("equalizer/hidden").toBool ()) - eqwin->hide (); - else - eqwin->show (); - #ifdef HAVE_SERVERBROWSER ServerBrowserWindow *browser = new ServerBrowserWindow (mw); diff --git a/src/mainwindow/maindisplay.cpp b/src/mainwindow/maindisplay.cpp index 4f2f9c6..ec7eadc 100644 --- a/src/mainwindow/maindisplay.cpp +++ b/src/mainwindow/maindisplay.cpp @@ -29,6 +29,7 @@ #include "PlayStatus.h" #include "VolumeSlider.h" #include "playlistwindow.h" +#include "equalizerwindow.h" #include "clutterbar.h" #include @@ -216,6 +217,16 @@ MainDisplay::SetupToggleButtons (void) { QSettings s; + m_eq = new ToggleButton (this, Skin::EQ_ON_0, Skin::EQ_ON_1, + Skin::EQ_OFF_0, Skin::EQ_OFF_1); + m_eq->move(219, 58); + m_eq->setChecked (m_mw->getEQ ()->isVisible ()); + connect (m_eq, SIGNAL (toggled (bool)), + m_mw->getEQ (), SLOT (setVisible (bool))); + connect (m_mw->getEQ (), SIGNAL (visibilityChanged (bool)), + m_eq, SLOT (setChecked (bool))); + m_eq->setEnabled(false); // FIXME: Disabled for now, equalizer doesn't work yet + m_pls = new ToggleButton (this, Skin::PLS_ON_0, Skin::PLS_ON_1, Skin::PLS_OFF_0, Skin::PLS_OFF_1); m_pls->move(242, 58); @@ -226,15 +237,6 @@ MainDisplay::SetupToggleButtons (void) m_pls, SLOT (setChecked (bool))); - m_eq = new ToggleButton (this, Skin::EQ_ON_0, Skin::EQ_ON_1, - Skin::EQ_OFF_0, Skin::EQ_OFF_1); - m_eq->move(219, 58); - if (!s.value ("equalizer/hidden").toBool ()) - m_eq->toggle (); - m_eq->setEnabled(false); // FIXME: Disabled for now, equalizer doesn't work yet - - connect (m_eq, SIGNAL(clicked()), this, SLOT(toggleEQ())); - m_shuffle = new ToggleButton (this, Skin::SHUFFLE_ON_0, Skin::SHUFFLE_ON_1, Skin::SHUFFLE_OFF_0, Skin::SHUFFLE_OFF_1); m_shuffle->move(164, 89); @@ -243,14 +245,9 @@ MainDisplay::SetupToggleButtons (void) m_repeat = new ToggleButton (this, Skin::REPEAT_ON_0, Skin::REPEAT_ON_1, Skin::REPEAT_OFF_0, Skin::REPEAT_OFF_1); m_repeat->move(210, 89); - m_repeat->setEnabled(false); // FIXME: Disabled button for now, not yet implemented +// m_repeat->setEnabled(false); // FIXME: Disabled button for now, not yet implemented } -void -MainDisplay::toggleEQ (void) -{ - m_mw->toggleEQ(false); -} void MainDisplay::toggleTime (void) @@ -290,6 +287,3 @@ MainDisplay::SetupPushButtons (void) } -MainDisplay::~MainDisplay (void) -{ -} diff --git a/src/mainwindow/maindisplay.h b/src/mainwindow/maindisplay.h index be82876..9d5f517 100644 --- a/src/mainwindow/maindisplay.h +++ b/src/mainwindow/maindisplay.h @@ -31,19 +31,6 @@ class MainDisplay; #include #include "Display.h" -/* -#include "TitleBar.h" -#include "Button.h" -#include "TextBar.h" -#include "NumberDisplay.h" -#include "TimeDisplay.h" -#include "SmallNumberDisplay.h" -#include "StereoMono.h" -#include "Slider.h" -#include "PlayStatus.h" -#include "VolumeSlider.h" -#include "MainWindow.h" -*/ class Button; class ToggleButton; @@ -57,14 +44,12 @@ class PlayStatus; class MainWindow; class ClutterBar; -class MainDisplay : public SkinDisplay +class MainDisplay : public SkinDisplay { Q_OBJECT public: MainDisplay (QWidget *parent); - ~MainDisplay (); - ToggleButton *GetPls() {return m_pls;}; - ToggleButton *GetEq() {return m_eq;}; + ~MainDisplay () {} TextScroller *m_text; TimeDisplay *m_time; @@ -76,7 +61,7 @@ class MainDisplay : public SkinDisplay PosBar *m_posbar; Slider *m_vslider; Slider *m_bslider; - + PlayStatus *m_playstatus; MainWindow *getMW(void) { return m_mw; } @@ -87,7 +72,6 @@ class MainDisplay : public SkinDisplay void setStatus (Xmms::Playback::Status status); void setPlaytime (uint32_t time); void setMediainfo (const Xmms::PropDict &); - void toggleEQ(void); void toggleTime(void); void updateVolume (uint volume); void setVolume (int volume); diff --git a/src/mainwindow/mainwindow.cpp b/src/mainwindow/mainwindow.cpp index ebb66d6..8b49bdb 100644 --- a/src/mainwindow/mainwindow.cpp +++ b/src/mainwindow/mainwindow.cpp @@ -48,20 +48,30 @@ MainWindow::MainWindow (QWidget *parent) : QMainWindow (parent) setShaded (!isShaded ()); /* - * Setup PlaylistWindow + * initialize EqualizerWindow + */ + m_equalizer = new EqualizerWindow (this); + if (!s.contains ("equalizer/pos")) { + s.setValue ("equalizer/pos", QPoint (pos ().x (), + pos ().y ()+size ().height ())); + } + m_equalizer->move (s.value ("equalizer/pos").toPoint ()); + m_equalizer->setVisible (s.value ("equalizer/visible", false).toBool ()); + + /* + * initialtize PlaylistWindow */ m_playlistwin = new PlaylistWindow (this); if (!s.contains ("playlist/pos")) { - s.setValue ("playlist/pos", QPoint (pos().x(), - pos().y()+size().height())); + s.setValue ("playlist/pos", QPoint (pos ().x (), + pos ().y ()+size ().height ())); } - m_playlistwin->move (s.value("playlist/pos").toPoint ()); + m_playlistwin->move (s.value ("playlist/pos").toPoint ()); // FIXME: this should be done in PlaylistWindow. // But promoe segfaults if done so - m_playlistwin->setVisible (s.value("playlist/visible", - false).toBool ()); + m_playlistwin->setVisible (s.value("playlist/visible", false).toBool ()); - /* + /* * The MainDisplay is the mainwindow non-shaded mode */ m_display = new MainDisplay (this); @@ -121,22 +131,3 @@ MainWindow::moveEvent (QMoveEvent *event) s.setValue ("mainwindow/pos", pos ()); } -void -MainWindow::toggleEQ (bool UpdateButton) -{ - QSettings s; - - if(UpdateButton) - { - getMD()->GetEq()->toggle(); - } - - if (s.value ("equalizer/hidden").toBool ()) { - m_equalizer->move (s.value("equalizer/pos").toPoint ()); - m_equalizer->show (); - s.setValue ("equalizer/hidden", false); - } else { - m_equalizer->hide (); - s.setValue ("equalizer/hidden", true); - } -} diff --git a/src/mainwindow/mainwindow.h b/src/mainwindow/mainwindow.h index bb13043..1eaf7f1 100644 --- a/src/mainwindow/mainwindow.h +++ b/src/mainwindow/mainwindow.h @@ -36,13 +36,12 @@ class MainWindow : public QMainWindow MainDisplay *getMD () { return m_display; } ShadedDisplay *getSD () { return m_shaded; } PlaylistWindow *getPL () { return m_playlistwin; } + EqualizerWindow *getEQ () { return m_equalizer; } - void setEQ (EqualizerWindow *e) { m_equalizer = e; } void raisePL (void); void moveEvent (QMoveEvent *event); - void toggleEQ (bool UpdateButton); bool isTimemodeReverse(void) { QSettings s; return s.value("MainWindow/timemodereverse").toBool(); } void setTimemodeReverse(bool b) { QSettings s; return s.setValue("MainWindow/timemodereverse",b); } diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index 2b02477..fa3eb82 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include @@ -60,17 +61,33 @@ PlaylistDelegate::paint( QPainter *painter, const QStyleOptionViewItem& option, /* generate string */ //TODO Add album and playtime QVariant tmp; - QString s = QString ("%1. ").arg (index.row () + 1); + QModelIndex m; + QRect r = option.rect; + QString s; + // Get playtime and if it exists, draw it + m = index.sibling (index.row (), 2); + tmp = m.data (); + if (tmp.isValid ()) { + int seconds = tmp.toInt () / 1000; + s = QString ("%1:%2").arg (seconds / 60, 2) + .arg (seconds % 60, 2, 10, QLatin1Char ('0')); + painter->drawText (r, Qt::AlignVCenter | Qt::AlignRight, s); + // now adjust der paintrectangle for the remaining text + r.setWidth (r.width () - option.fontMetrics.width (s)); + } + + // now build String for Artis Title and Position + s = QString ("%1. ").arg (index.row () + 1); tmp = index.data (); if (tmp.isValid ()) s.append (tmp.toString ()).append (" - "); - QModelIndex m = index.sibling (index.row (), 1); + m = index.sibling (index.row (), 1); tmp = m.data (); if (tmp.isValid ()) s.append (tmp.toString ()); - s = option.fontMetrics.elidedText(s, Qt::ElideRight, option.rect.width()); + s = option.fontMetrics.elidedText(s, Qt::ElideRight, r.width()); - painter->drawText (option.rect, Qt::AlignVCenter, s); + painter->drawText (r, Qt::AlignVCenter, s); painter->restore (); } diff --git a/src/playlist/playlistwindow.h b/src/playlist/playlistwindow.h index 8ac2e8d..89969b9 100644 --- a/src/playlist/playlistwindow.h +++ b/src/playlist/playlistwindow.h @@ -48,7 +48,7 @@ class PlaylistWindow : public QMainWindow { public slots: void switchDisplay (void); - protected slots: + protected: void hideEvent (QHideEvent *event); void showEvent (QShowEvent *event); void mousePressEvent (QMouseEvent *event);