From 943cffa214b8d78ccfa15ff1bebf6057d713d25e Mon Sep 17 00:00:00 2001 From: Nikolay Tischenko Date: Wed, 27 Oct 2010 23:55:19 +0700 Subject: [PATCH] New context menu handler --- src/playerform.cpp | 32 +++++++++++++------ src/playerform.h | 1 + src/trackrenderer.cpp | 82 ++++++++++++++++++++++++++++--------------------- src/trackrenderer.h | 4 +++ src/ui/playerform.ui | 59 ++++++++++++++++++++++++++++++----- 5 files changed, 127 insertions(+), 51 deletions(-) diff --git a/src/playerform.cpp b/src/playerform.cpp index fe08eae..cfe5b1e 100644 --- a/src/playerform.cpp +++ b/src/playerform.cpp @@ -39,12 +39,14 @@ inline void __fill_list(QStandardItemModel *_model, Playlist playlist) { QList tracks = playlist.tracks(); int count = tracks.count(); _model->setRowCount(count); + _model->setColumnCount(2); QTime time; for (int i = 0; i < count; i++) { TrackMetadata meta = tracks.at(i).metadata(); time.setHMS(0, meta.length()/60, meta.length() % 60); QString t = meta.title()+"#_#"+meta.artist()+"#_#"+meta.album()+"#_#"+time.toString("mm:ss"); - _model->setItem(i, 0, new QStandardItem(t)); + _model->setItem(i, 1, new QStandardItem(t)); + _model->setItem(i, 0, new QStandardItem("")); } } @@ -103,13 +105,15 @@ PlayerForm::PlayerForm(Library* lib, QWidget *parent) : _track_renderer = new TrackRenderer(this); _track_renderer->setActiveRow(-1); _track_renderer->setSearchRow(-1); + ui->playlistView->setItemDelegateForColumn(1, _track_renderer); ui->playlistView->setItemDelegateForColumn(0, _track_renderer); _tag_resolver = new TagResolver(this); connect(ui->libraryButton, SIGNAL(clicked()), this, SLOT(_library())); connect(ui->viewButton, SIGNAL(clicked()), this, SLOT(_toggle_view())); - connect(ui->playlistView, SIGNAL(clicked(QModelIndex)), this, SLOT(_process_click(QModelIndex))); + connect(ui->playlistView, SIGNAL(activated(QModelIndex)), this, SLOT(_process_click(QModelIndex))); + connect(ui->playlistView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(_process_dbl_click(QModelIndex))); connect(ui->playpauseButton, SIGNAL(clicked()), _player, SLOT(toggle())); connect(ui->nextButton, SIGNAL(clicked()), _player, SLOT(next())); connect(ui->stopButton, SIGNAL(clicked()), _player, SLOT(stop())); @@ -164,6 +168,7 @@ void PlayerForm::reload(bool reread) { _current_playlist = _lib->getCurrentPlaylist(); _player->setPlaylist(_current_playlist); __fill_list(_model, _current_playlist); + ui->playlistView->setColumnWidth(0, 50); } } @@ -183,13 +188,17 @@ void PlayerForm::_toggle_view() { } void PlayerForm::_process_click(QModelIndex index) { - int id = index.row(); - _player->stop(); - _player->setTrackId(id); - _player->play(); - _track_renderer->setActiveRow(id); - ui->playlistView->hide(); - ui->playlistView->show(); + if (index.column() == 1) { + int id = index.row(); + _player->stop(); + _player->setTrackId(id); + _player->play(); + _track_renderer->setActiveRow(id); + } else { + _custom_context_menu_requested(ui->playlistView->rect().center()); + } +// ui->playlistView->hide(); +// ui->playlistView->show(); } void PlayerForm::_track_changed(Track track) { @@ -351,6 +360,7 @@ void PlayerForm::addFiles(QList files) { void PlayerForm::_track_decoded(Track track) { _current_playlist.addTrack(track); __fill_list(_model, _current_playlist); + ui->playlistView->setColumnWidth(0, 50); _lib->saveCurrentPlaylist(_current_playlist); _player->setPlaylist(_current_playlist); } @@ -568,3 +578,7 @@ void PlayerForm::play(Track track) { _player->play(); } } + +void PlayerForm::_process_dbl_click(QModelIndex) { + _custom_context_menu_requested(ui->playlistView->rect().center()); +} diff --git a/src/playerform.h b/src/playerform.h index 8ed8da2..05555ca 100644 --- a/src/playerform.h +++ b/src/playerform.h @@ -83,6 +83,7 @@ private slots: void _library(); void _toggle_view(); void _process_click(QModelIndex); + void _process_dbl_click(QModelIndex); void _track_changed(Track); void _tick(int, int); void _slider_released(); diff --git a/src/trackrenderer.cpp b/src/trackrenderer.cpp index 9a136f0..18aa89c 100644 --- a/src/trackrenderer.cpp +++ b/src/trackrenderer.cpp @@ -22,54 +22,66 @@ #include #include #include +#include +#include +#include +using namespace SomePlayer::Storage; TrackRenderer::TrackRenderer(QObject *parent) : AbstractItemRenderer(parent) { + Config config; + _icons_theme = config.getValue("ui/iconstheme").toString(); } void TrackRenderer::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { - QString value = index.data().toString(); - QStringList meta = value.split("#_#"); + if (index.column() == 0) { + int x1, y1, x2, y2; + option.rect.getCoords(&x1, &y1, &x2, &y2); + painter->drawImage(x1, y1 + 5, QImage(":/icons/"+_icons_theme+"/more_l.png")); + } else { + QString value = index.data().toString(); + QStringList meta = value.split("#_#"); - QFont f = painter->font(); - QFont fp = painter->font(); + QFont f = painter->font(); + QFont fp = painter->font(); - int x1, y1, x2, y2; - option.rect.getCoords(&x1, &y1, &x2, &y2); + int x1, y1, x2, y2; + option.rect.getCoords(&x1, &y1, &x2, &y2); - QPen pen = painter->pen(); - QPen npen (QColor::fromRgb(80, 130, 255, 50)); - QPen apen (QColor::fromRgb(255, 255, 255, 128)); - QPen spen (QColor::fromRgb(100, 150, 220)); - QPen sspen (QColor::fromRgb(100, 220, 150)); + QPen pen = painter->pen(); + QPen npen (QColor::fromRgb(80, 130, 255, 50)); + QPen apen (QColor::fromRgb(255, 255, 255, 128)); + QPen spen (QColor::fromRgb(100, 150, 220)); + QPen sspen (QColor::fromRgb(100, 220, 150)); - f.setBold(false); - painter->setPen(npen); - painter->drawLine(x1, y1, x2, y1); - if (index.row() == _search_row) { - f.setBold(true); - painter->setPen(sspen); - } else if (index.row() == _active_row) { - f.setBold(true); - painter->setPen(spen); - } else { + f.setBold(false); + painter->setPen(npen); + painter->drawLine(x1, y1, x2, y1); + if (index.row() == _search_row) { + f.setBold(true); + painter->setPen(sspen); + } else if (index.row() == _active_row) { + f.setBold(true); + painter->setPen(spen); + } else { + painter->setPen(pen); + } + painter->setFont(f); + painter->drawText(x1+10, y1 + 1*(y2-y1)/2, meta[0]); + fp.setBold(false); + fp.setPointSize(f.pointSize()*3/4); + painter->setFont(fp); + painter->setPen(apen); + painter->drawText(x1+10, y1 + 3*(y2-y1)/5, (x2-x1)-100, 2*fp.pointSize(), Qt::AlignAbsolute, QString("%1 (%2)").arg(meta[2]).arg(meta[1])); + painter->drawText(x2-60, y1 + 3*(y2-y1)/5, 55, 2*fp.pointSize(), Qt::AlignAbsolute, QString("%1").arg(meta[3])); + painter->setPen(npen); + painter->drawLine(x1, y2, x2, y2); + painter->setFont(f); painter->setPen(pen); } - painter->setFont(f); - painter->drawText(x1+10, y1 + 1*(y2-y1)/2, meta[0]); - fp.setBold(false); - fp.setPointSize(f.pointSize()*3/4); - painter->setFont(fp); - painter->setPen(apen); - painter->drawText(x1+10, y1 + 3*(y2-y1)/5, (x2-x1)-100, 2*fp.pointSize(), Qt::AlignAbsolute, QString("%1 (%2)").arg(meta[2]).arg(meta[1])); - painter->drawText(x2-60, y1 + 3*(y2-y1)/5, 55, 2*fp.pointSize(), Qt::AlignAbsolute, QString("%1").arg(meta[3])); - painter->setPen(npen); - painter->drawLine(x1, y2, x2, y2); - painter->setFont(f); - painter->setPen(pen); } -QSize TrackRenderer::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &/*index*/) const { - return QSize(option.rect.width(), 80); +QSize TrackRenderer::sizeHint(const QStyleOptionViewItem &/*option*/, const QModelIndex &/*index*/) const { + return QSize(QApplication::desktop()->geometry().width(), 80); } diff --git a/src/trackrenderer.h b/src/trackrenderer.h index 8f6797e..620ac98 100644 --- a/src/trackrenderer.h +++ b/src/trackrenderer.h @@ -23,6 +23,7 @@ #include #include "abstractitemrenderer.h" #include +#include "someplayer.h" class TrackRenderer : public AbstractItemRenderer { @@ -34,6 +35,9 @@ public: QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; + +private: + QString _icons_theme; }; #endif // TRACKRENDERER_H diff --git a/src/ui/playerform.ui b/src/ui/playerform.ui index 5f5c5ba..880b6d7 100644 --- a/src/ui/playerform.ui +++ b/src/ui/playerform.ui @@ -113,22 +113,67 @@ - + Qt::CustomContextMenu + + QFrame::Sunken + + + Qt::ScrollBarAlwaysOff + + + false + QAbstractItemView::NoEditTriggers - - Qt::ElideLeft + + false - - true + + false - - true + + false + + + QAbstractItemView::NoDragDrop + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + + 50 + 50 + + + + false + + + false + + + false + + + true + + + false + + + 70 + + + 70 + -- 1.7.9.5