]> git.sur5r.net Git - minitube/blobdiff - src/ListModel.cpp
Imported Upstream version 1.7
[minitube] / src / ListModel.cpp
index 644e512fc12f941e43969ddee55fd17f28db254c..468435f8908060b7cabf170de1825183d0792f23 100644 (file)
@@ -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 ) );
+}