diff --git a/PlaylistList.cpp b/PlaylistList.cpp index 78b4b88..e731235 100644 --- a/PlaylistList.cpp +++ b/PlaylistList.cpp @@ -9,8 +9,6 @@ PlaylistItem::PlaylistItem (PlaylistList *pl, uint id) { m_pl = pl; m_id = id; - m_isactive = false; - m_isselected = false; m_req = false; pl->addItem (this); } @@ -126,19 +124,12 @@ PlaylistList::currentID (uint id) { PlaylistItem *i = m_itemmap->value (id); if (!i) { + m_active = -1; return; } - i->setActive (true); + + m_active = m_items->indexOf (i); - i = m_itemmap->value (m_active); - if (!i) { - update (); - m_active = id; - return; - } - i->setActive (false); - - m_active = id; update (); } @@ -208,34 +199,90 @@ PlaylistList::mousePressEvent (QMouseEvent *event) if (o < i) { for (int y = o; y <= i; y++) { m_selected->append (y); - m_items->value(y)->setSelected (true); } } else { for (int y = i; y <= o; y++) { m_selected->append (y); - m_items->value(y)->setSelected (true); } } } else { m_selected->append (i); - m_items->value(i)->setSelected (true); } } else if (event->modifiers () & Qt::ControlModifier) { - m_items->value(i)->setSelected (true); - m_selected->append (i); - } else { - for (int y = 0; y < m_selected->count(); y++) { - m_items->value(m_selected->value(y))->setSelected (false); + if (m_selected->contains (i)) { + m_selected->removeAll (i); + } else { + m_selected->append (i); + } + } else { + if (m_selected->contains (i)) { + m_selected->clear(); + } else { + m_selected->clear(); + m_selected->append(i); } - m_selected->clear(); - - m_items->value(i)->setSelected (true); - m_selected->append(i); } update (); } +void +PlaylistList::keyPressEvent (QKeyEvent *event) +{ + + XMMSHandler *xmmsh = XMMSHandler::getInstance (); + + switch (event->key ()) { + case Qt::Key_Down: + { + int i = m_selected->last (); + i ++; + if (i > m_items->count ()) + i = m_items->count (); + m_selected->clear (); + m_selected->append (i); + + update (); + } + break; + case Qt::Key_Up: + { + int i = m_selected->last (); + i --; + if (i < 0) + i = 0; + m_selected->clear (); + m_selected->append (i); + + update (); + } + break; + case Qt::Key_Backspace: + case Qt::Key_Delete: + { + qSort (*m_selected); + for (int i = m_selected->count (); i > 0; i --) { + qDebug ("%d", m_selected->value (i)); + xmmsh->playlistRemove (m_selected->value (i)); + } + m_selected->clear (); + } + break; + case Qt::Key_A: + { + if (event->modifiers() == Qt::ControlModifier) { + m_selected->clear (); + for (int i = 0; i < m_items->count (); i ++) { + m_selected->append (i); + } + update (); + } + } + break; + } + +} + void PlaylistList::paintEvent (QPaintEvent *event) { @@ -261,29 +308,23 @@ PlaylistList::paintEvent (QPaintEvent *event) for (i = sitem; i < eitem; i++) { r.setRect(0, (getFontH()*(i-sitem)) - mod, size().width(), getFontH()); - /* - if (event->rect().contains (r)) { - */ - PlaylistItem *item = m_items->value (i); - q = QString::number (i + 1) + ". " + item->text (); + PlaylistItem *item = m_items->value (i); + q = QString::number (i + 1) + ". " + item->text (); - if (item->getSelected ()) { - paint.fillRect (r, QBrush (m_color_selected)); - } else { - paint.eraseRect (r); - } - - if (item->getActive ()) { - paint.setPen (QPen (m_color_active)); - paint.drawText (r, q); - paint.setPen (QPen (m_color_normal)); - } else { - paint.drawText (r, q); - } - - /* + if (m_selected->contains (i)) { + paint.fillRect (r, QBrush (m_color_selected)); + } else { + paint.eraseRect (r); } - */ + + if (m_active == i) { + paint.setPen (QPen (m_color_active)); + paint.drawText (r, q); + paint.setPen (QPen (m_color_normal)); + } else { + paint.drawText (r, q); + } + } if ((getFontH()*(i-sitem) - mod) < size().height()) { diff --git a/PlaylistList.h b/PlaylistList.h index 8978d78..e62450a 100644 --- a/PlaylistList.h +++ b/PlaylistList.h @@ -30,6 +30,7 @@ class PlaylistList : public QWidget { void paintEvent (QPaintEvent *event); void mousePressEvent (QMouseEvent *event); void mouseDoubleClickEvent (QMouseEvent *event); + void keyPressEvent (QKeyEvent *event); void mouseMoveEvent (QMouseEvent *event) {} @@ -56,22 +57,13 @@ class PlaylistItem { QString text (void); - void setActive (bool b) { m_isactive = b; } - bool getActive (void) { return m_isactive; } - - void setSelected (bool b) { m_isselected = b; } - bool getSelected (void) { return m_isselected; } - uint getID (void) { return m_id; } - void setText (QString s) { m_text = s; } private: uint m_id; PlaylistList *m_pl; - bool m_isactive; - bool m_isselected; bool m_req; QString m_text; }; diff --git a/TextBar.cpp b/TextBar.cpp index 93b417c..4893fbc 100644 --- a/TextBar.cpp +++ b/TextBar.cpp @@ -54,7 +54,7 @@ TextScroller::addOffset () m_x2_off = 0; } - update(); + repaint (); m_timer->start (40); } diff --git a/XMMSHandler.h b/XMMSHandler.h index 11a40f7..94cd1cb 100644 --- a/XMMSHandler.h +++ b/XMMSHandler.h @@ -28,6 +28,7 @@ class XMMSHandler : public QObject, public sigc::trackable { void playlistAddURL (QString); void playlistClear (void); + void playlistRemove (uint pos) { delete m_xmmsc->playlist_remove (pos); } const XMMSClient *getXMMS () { return m_xmmsc; }