New context menu handler
authorNikolay Tischenko <niktischenko@gmail.com>
Wed, 27 Oct 2010 16:55:19 +0000 (23:55 +0700)
committerNikolay Tischenko <niktischenko@gmail.com>
Wed, 27 Oct 2010 16:55:19 +0000 (23:55 +0700)
src/playerform.cpp
src/playerform.h
src/trackrenderer.cpp
src/trackrenderer.h
src/ui/playerform.ui

index fe08eae..cfe5b1e 100644 (file)
@@ -39,12 +39,14 @@ inline void __fill_list(QStandardItemModel *_model, Playlist playlist) {
        QList<Track> 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<QString> 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());
+}
index 8ed8da2..05555ca 100644 (file)
@@ -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();
index 9a136f0..18aa89c 100644 (file)
 #include <QFontMetrics>
 #include <QSize>
 #include <QColor>
+#include <QStandardItem>
+#include <QApplication>
+#include <QDesktopWidget>
 
+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);
 }
index 8f6797e..620ac98 100644 (file)
@@ -23,6 +23,7 @@
 #include <QAbstractItemDelegate>
 #include "abstractitemrenderer.h"
 #include <QPainter>
+#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
index 5f5c5ba..880b6d7 100644 (file)
           </layout>
          </item>
          <item>
-          <widget class="QListView" name="playlistView">
+          <widget class="QTableView" name="playlistView">
            <property name="contextMenuPolicy">
             <enum>Qt::CustomContextMenu</enum>
            </property>
+           <property name="frameShadow">
+            <enum>QFrame::Sunken</enum>
+           </property>
+           <property name="horizontalScrollBarPolicy">
+            <enum>Qt::ScrollBarAlwaysOff</enum>
+           </property>
+           <property name="autoScroll">
+            <bool>false</bool>
+           </property>
            <property name="editTriggers">
             <set>QAbstractItemView::NoEditTriggers</set>
            </property>
-           <property name="textElideMode">
-            <enum>Qt::ElideLeft</enum>
+           <property name="showDropIndicator" stdset="0">
+            <bool>false</bool>
            </property>
-           <property name="uniformItemSizes">
-            <bool>true</bool>
+           <property name="dragEnabled">
+            <bool>false</bool>
            </property>
-           <property name="wordWrap">
-            <bool>true</bool>
+           <property name="dragDropOverwriteMode">
+            <bool>false</bool>
+           </property>
+           <property name="dragDropMode">
+            <enum>QAbstractItemView::NoDragDrop</enum>
            </property>
+           <property name="selectionMode">
+            <enum>QAbstractItemView::SingleSelection</enum>
+           </property>
+           <property name="selectionBehavior">
+            <enum>QAbstractItemView::SelectRows</enum>
+           </property>
+           <property name="iconSize">
+            <size>
+             <width>50</width>
+             <height>50</height>
+            </size>
+           </property>
+           <property name="showGrid">
+            <bool>false</bool>
+           </property>
+           <property name="cornerButtonEnabled">
+            <bool>false</bool>
+           </property>
+           <attribute name="horizontalHeaderVisible">
+            <bool>false</bool>
+           </attribute>
+           <attribute name="horizontalHeaderStretchLastSection">
+            <bool>true</bool>
+           </attribute>
+           <attribute name="verticalHeaderVisible">
+            <bool>false</bool>
+           </attribute>
+           <attribute name="verticalHeaderDefaultSectionSize">
+            <number>70</number>
+           </attribute>
+           <attribute name="verticalHeaderMinimumSectionSize">
+            <number>70</number>
+           </attribute>
           </widget>
          </item>
         </layout>