X-Git-Url: https://git.sur5r.net/?p=minitube;a=blobdiff_plain;f=src%2FListModel.cpp;h=468435f8908060b7cabf170de1825183d0792f23;hp=644e512fc12f941e43969ddee55fd17f28db254c;hb=3c8c537559e6bef5f019196b0989e95863ddd3ee;hpb=57c25e20a8f10a98a18dbc2b64ce55cf87d4fd7c diff --git a/src/ListModel.cpp b/src/ListModel.cpp index 644e512..468435f 100644 --- a/src/ListModel.cpp +++ b/src/ListModel.cpp @@ -12,6 +12,10 @@ ListModel::ListModel(QWidget *parent) : QAbstractListModel(parent) { m_activeVideo = 0; m_activeRow = -1; skip = 1; + + hoveredRow = -1; + authorHovered = false; + authorPressed = false; } ListModel::~ListModel() { @@ -80,6 +84,12 @@ QVariant ListModel::data(const QModelIndex &index, int role) const { return video == m_activeVideo; case Qt::DisplayRole: return video->title(); + case HoveredItemRole: + return hoveredRow == index.row(); + case AuthorHoveredRole: + return authorHovered; + case AuthorPressedRole: + return authorPressed; } return QVariant(); @@ -113,6 +123,13 @@ int ListModel::nextRow() const { return -1; } +int ListModel::previousRow() const { + int prevRow = m_activeRow - 1; + if (rowExists(prevRow)) + return prevRow; + return -1; +} + Video* ListModel::videoAt( int row ) const { if ( rowExists( row ) ) return videos.at( row ); @@ -198,8 +215,11 @@ void ListModel::addVideo(Video* video) { // first result! if (videos.size() == 1) { - // autoplay - setActiveRow(0); + + // manualplay + QSettings settings; + if (!settings.value("manualplay", false).toBool()) + setActiveRow(0); // save keyword QString query = searchParams->keywords(); @@ -208,7 +228,6 @@ void ListModel::addVideo(Video* video) { // Save the video title query += "|" + videos.first()->title(); } - QSettings settings; QStringList keywords = settings.value(recentKeywordsKey).toStringList(); keywords.removeAll(query); keywords.prepend(query); @@ -404,3 +423,48 @@ void ListModel::move(QModelIndexList &indexes, bool up) { emit needSelectionFor(movedVideos); } + +/* row hovering */ + +void ListModel::setHoveredRow(int row) { + int oldRow = hoveredRow; + hoveredRow = row; + emit dataChanged( createIndex( oldRow, 0 ), createIndex( oldRow, columnCount() - 1 ) ); + emit dataChanged( createIndex( hoveredRow, 0 ), createIndex( hoveredRow, columnCount() - 1 ) ); +} + +void ListModel::clearHover() { + emit dataChanged( createIndex( hoveredRow, 0 ), createIndex( hoveredRow, columnCount() - 1 ) ); + hoveredRow = -1; +} + +/* clickable author */ + +void ListModel::enterAuthorHover() { + if (authorHovered) return; + authorHovered = true; + updateAuthor(); +} + +void ListModel::exitAuthorHover() { + if (!authorHovered) return; + authorHovered = false; + updateAuthor(); + setHoveredRow(hoveredRow); +} + +void ListModel::enterAuthorPressed() { + if (authorPressed) return; + authorPressed = true; + updateAuthor(); +} + +void ListModel::exitAuthorPressed() { + if (!authorPressed) return; + authorPressed = false; + updateAuthor(); +} + +void ListModel::updateAuthor() { + emit dataChanged( createIndex( hoveredRow, 0 ), createIndex( hoveredRow, columnCount() - 1 ) ); +}