X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2FListModel.cpp;h=468435f8908060b7cabf170de1825183d0792f23;hb=3c8c537559e6bef5f019196b0989e95863ddd3ee;hp=1c146eec728e1fbf0eedf47397f0c167c3586b78;hpb=e536746e91459fb3a7735f36caee77f299c765e2;p=minitube diff --git a/src/ListModel.cpp b/src/ListModel.cpp old mode 100755 new mode 100644 index 1c146ee..468435f --- a/src/ListModel.cpp +++ b/src/ListModel.cpp @@ -3,6 +3,7 @@ #define MAX_ITEMS 10 static const QString recentKeywordsKey = "recentKeywords"; +static const QString recentChannelsKey = "recentChannels"; ListModel::ListModel(QWidget *parent) : QAbstractListModel(parent) { youtubeSearch = 0; @@ -11,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() { @@ -79,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(); @@ -112,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 ); @@ -197,22 +215,39 @@ 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(); - if (query.startsWith("http://")) { - // Save the video title - query += "|" + videos.first()->title(); + if (!query.isEmpty() && !searchParams->isTransient()) { + if (query.startsWith("http://")) { + // Save the video title + query += "|" + videos.first()->title(); + } + QStringList keywords = settings.value(recentKeywordsKey).toStringList(); + keywords.removeAll(query); + keywords.prepend(query); + while (keywords.size() > 10) + keywords.removeLast(); + settings.setValue(recentKeywordsKey, keywords); } - QSettings settings; - QStringList keywords = settings.value(recentKeywordsKey).toStringList(); - keywords.removeAll(query); - keywords.prepend(query); - while (keywords.size() > 10) - keywords.removeLast(); - settings.setValue(recentKeywordsKey, keywords); + + // save channel + QString channel = searchParams->author(); + if (!channel.isEmpty() && !searchParams->isTransient()) { + QSettings settings; + QStringList channels = settings.value(recentChannelsKey).toStringList(); + channels.removeAll(channel); + channels.prepend(channel); + while (channels.size() > 10) + channels.removeLast(); + settings.setValue(recentChannelsKey, channels); + } + } } @@ -388,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 ) ); +}