diff --git a/src/qprojectM/src/QPlaylistModel.cpp b/src/qprojectM/src/QPlaylistModel.cpp index 37f97c81d..c3497c00f 100644 --- a/src/qprojectM/src/QPlaylistModel.cpp +++ b/src/qprojectM/src/QPlaylistModel.cpp @@ -1,24 +1,78 @@ #include "QPlaylistModel.hpp" +#include QPlaylistModel::QPlaylistModel(projectM & _projectM, QObject * parent): QAbstractTableModel(parent), m_projectM(_projectM) { + m_ratings = QVector(rowCount(), 3); +} +bool QPlaylistModel::setData(const QModelIndex & index, const QVariant & value, int role) { + if (role == QPlaylistModel::RatingRole) { + //QAbstractTableModel::setData(index, ratingToIcon(value.toInt()), Qt::DecorationRole); + //std::cerr << "here" << std::endl; + m_ratings[index.row()] = value.toInt(); + emit(dataChanged(index, index)); + return true; + } + else + return QAbstractTableModel::setData(index, value, role); + +} + +QVariant QPlaylistModel::ratingToIcon(int rating) const { + switch (rating) { + case 0: + return QVariant(QIcon(":/images/icons/face0.png")); + case 1: + return QVariant(QIcon(":/images/icons/face1.png")); + case 2: + return QVariant(QIcon(":/images/icons/face2.png")); + case 3: + return QVariant(QIcon(":/images/icons/face3.png")); + case 4: + return QVariant(QIcon(":/images/icons/face4.png")); + case 5: + return QVariant(QIcon(":/images/icons/face5.png")); + default: + return QVariant(QIcon(":/images/icons/face0.png")); + } } QVariant QPlaylistModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const { - if (role == Qt::DisplayRole) - return QVariant(QString(m_projectM.getPresetName(index.row()).c_str())); - else if (role == QPlaylistModel::URLInfoRole) - return QVariant(QString(m_projectM.getPresetURL(index.row()).c_str())); - return QVariant(); + switch (role) { + case Qt::DisplayRole: + if (index.column() == 0) + return QVariant(QString(m_projectM.getPresetName(index.row()).c_str())); + else + return ratingToIcon(m_ratings[index.row()]); + + case Qt::DecorationRole: + if (index.column() == 1) + return ratingToIcon(m_ratings[index.row()]); + else + return QVariant(); + case QPlaylistModel::RatingRole: + return QVariant(m_ratings[index.row()]); + + case QPlaylistModel::URLInfoRole: + return QVariant(QString(m_projectM.getPresetURL(index.row()).c_str())); + default: + return QVariant(); + } } QVariant QPlaylistModel::headerData ( int section, Qt::Orientation orientation, int role) const { - if ((section == 0) && (role == Qt::DisplayRole)) +// if ((section == 0) && (role == Qt::SizeHintRole)) { +// return QVariant(200); +// } else if ((section == 1) && (role == Qt::SizeHintRole)) { +// return QVariant(50); + if ((section == 0) && (role == Qt::DisplayRole)) return QString(tr("Preset")); + else if ((section == 1) && (role == Qt::DisplayRole)) + return QString(tr("Rating")); else return QAbstractTableModel::headerData(section, orientation, role); } @@ -32,14 +86,15 @@ int QPlaylistModel::columnCount ( const QModelIndex & parent = QModelIndex() ) c // eventually add ratings here so size should be 2 if (rowCount() > 0) - return 1; + return 2; else return 0; } -void QPlaylistModel::appendRow (const QString & presetURL, const QString & presetName) { +void QPlaylistModel::appendRow (const QString & presetURL, const QString & presetName, int rating) { beginInsertRows(QModelIndex(), rowCount(), rowCount()); m_projectM.addPresetURL(presetURL.toStdString(), presetName.toStdString()); + m_ratings.push_back(rating); endInsertRows(); } @@ -47,11 +102,13 @@ void QPlaylistModel::appendRow (const QString & presetURL, const QString & prese void QPlaylistModel::removeRow (int index) { beginRemoveRows(QModelIndex(), index, index); m_projectM.removePreset(index); + m_ratings.remove(index); endRemoveRows(); } void QPlaylistModel::clear() { beginRemoveRows(QModelIndex(), 0, rowCount()-1); m_projectM.clearPlaylist(); + m_ratings.clear(); endRemoveRows(); } diff --git a/src/qprojectM/src/QPlaylistModel.hpp b/src/qprojectM/src/QPlaylistModel.hpp index 22ee9eb20..3d13c8ab5 100644 --- a/src/qprojectM/src/QPlaylistModel.hpp +++ b/src/qprojectM/src/QPlaylistModel.hpp @@ -26,6 +26,7 @@ #include "libprojectM/projectM.hpp" #include +#include class QPlaylistModel : public QAbstractTableModel { @@ -33,10 +34,12 @@ public: static const int URLInfoRole = 1000; +static const int RatingRole = 1001; QPlaylistModel(projectM & _projectM, QObject * parent = 0); ~QPlaylistModel() { } +bool setData(const QModelIndex & index, const QVariant & value, int role=Qt::EditRole); -void appendRow (const QString & presetURL, const QString & presetName); +void appendRow (const QString & presetURL, const QString & presetName, int rating = 3); void removeRow (int index); QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; @@ -48,7 +51,8 @@ int columnCount ( const QModelIndex & parent) const ; private: + QVariant ratingToIcon(int rating) const; projectM & m_projectM; - + QVector m_ratings; }; #endif diff --git a/src/qprojectM/src/QProjectM_MainWindow.cpp b/src/qprojectM/src/QProjectM_MainWindow.cpp index eca1cd1b2..4c55ef048 100644 --- a/src/qprojectM/src/QProjectM_MainWindow.cpp +++ b/src/qprojectM/src/QProjectM_MainWindow.cpp @@ -48,10 +48,7 @@ QProjectM_MainWindow::QProjectM_MainWindow(const std::string & config_file) connect(m_QProjectMWidget, SIGNAL(projectM_Initialized()), this, SLOT(postProjectM_Initialize())); - ui.tableView->setVerticalHeader(0); -// ui.tableView->setModel(playlistModel); - m_QProjectMWidget->makeCurrent(); m_QProjectMWidget->setFocus(); @@ -107,6 +104,17 @@ void QProjectM_MainWindow::postProjectM_Initialize() { connect(ui.tableView, SIGNAL(activated(const QModelIndex &)), this, SLOT(selectPlaylistItem(const QModelIndex &))); + connect(ui.tableView, SIGNAL(clicked(const QModelIndex &)), + this, SLOT(changeRating(const QModelIndex &))); + +} + +void QProjectM_MainWindow::changeRating(const QModelIndex & index) { + if (index.column() == 0) + return; + + playlistModel->setData + (index, (playlistModel->data(index, QPlaylistModel::RatingRole).toInt()+1) % 6, QPlaylistModel::RatingRole); } void QProjectM_MainWindow::keyReleaseEvent ( QKeyEvent * e ) { @@ -198,7 +206,7 @@ void QProjectM_MainWindow::open() //playlistModel->setHeaderData(0, Qt::Horizontal, tr("Preset"));//, Qt::DisplayRole); } - +//void QAbstractItemView::clicked ( const QModelIndex & index ) [signal] void QProjectM_MainWindow::refreshPlaylist() { StringPairVector * stringPairs = new StringPairVector(); @@ -211,23 +219,28 @@ void QProjectM_MainWindow::refreshPlaylist() { } historyHash.insert(QString(), stringPairs); + QHeaderView * hHeader = new QHeaderView(Qt::Horizontal, this); QHeaderView * vHeader = new QHeaderView(Qt::Vertical, this); - //hHeader-> hHeader->setClickable(false); hHeader->setSortIndicatorShown(false); //hHeader->setSortIndicator(1, Qt::AscendingOrder); - hHeader->setStretchLastSection(true); - + hHeader->setStretchLastSection(false); + ui.tableView->setVerticalHeader(vHeader); ui.tableView->setHorizontalHeader(hHeader); + + hHeader->resizeSection(0, 200); + hHeader->setResizeMode(0, QHeaderView::Stretch); + hHeader->setResizeMode(1, QHeaderView::Fixed); + hHeader->resizeSection(1, 25); + // playlistModel->setHeaderData(0, Qt::Horizontal, tr("Preset"));//, Qt::DisplayRole); vHeader->hide(); - - //playlistModel->setHeaderData(0, Qt::Vertical, 1000, Qt::SizeHintRole); +// playlistModel->setHeaderData(0, Qt::Horizontal, 200, Qt::SizeHintRole); //playlistModel->setHeaderData(1, Qt::Horizontal, tr("Rating"));//, Qt::DisplayRole); //playlistModel->setHeaderData(2, Qt::Horizontal, tr("Preset"));//, Qt::DisplayRole); diff --git a/src/qprojectM/src/QProjectM_MainWindow.hpp b/src/qprojectM/src/QProjectM_MainWindow.hpp index bfd3dff0c..123ae6eb2 100644 --- a/src/qprojectM/src/QProjectM_MainWindow.hpp +++ b/src/qprojectM/src/QProjectM_MainWindow.hpp @@ -224,6 +224,8 @@ private slots: void postProjectM_Initialize(); void updatePlaylistSelection(bool hardCut, unsigned int index); void selectPlaylistItem(const QModelIndex & index); + void changeRating(const QModelIndex & index); + void updateFilteredPlaylist(const QString & text); private: diff --git a/src/qprojectM/src/application.qrc b/src/qprojectM/src/application.qrc index 4710df732..42823b8a8 100644 --- a/src/qprojectM/src/application.qrc +++ b/src/qprojectM/src/application.qrc @@ -1,5 +1,11 @@ + images/icons/face0.png + images/icons/face1.png + images/icons/face2.png + images/icons/face3.png + images/icons/face4.png + images/icons/face5.png images/icons/hi16-action-projectm_add_playlist.png images/icons/hi16-action-projectm_lock.png images/icons/hi16-action-projectm_playlist_clear.png