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(""));
}
}
_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()));
_current_playlist = _lib->getCurrentPlaylist();
_player->setPlaylist(_current_playlist);
__fill_list(_model, _current_playlist);
+ ui->playlistView->setColumnWidth(0, 50);
}
}
}
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) {
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);
}
_player->play();
}
}
+
+void PlayerForm::_process_dbl_click(QModelIndex) {
+ _custom_context_menu_requested(ui->playlistView->rect().center());
+}
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();
#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);
}
#include <QAbstractItemDelegate>
#include "abstractitemrenderer.h"
#include <QPainter>
+#include "someplayer.h"
class TrackRenderer : public AbstractItemRenderer
{
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const;
+
+private:
+ QString _icons_theme;
};
#endif // TRACKRENDERER_H
</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>