#define MAX_ITEMS 10
static const QString recentKeywordsKey = "recentKeywords";
+static const QString recentChannelsKey = "recentChannels";
ListModel::ListModel(QWidget *parent) : QAbstractListModel(parent) {
youtubeSearch = 0;
m_activeVideo = 0;
m_activeRow = -1;
skip = 1;
+
+ hoveredRow = -1;
+ authorHovered = false;
+ authorPressed = false;
}
ListModel::~ListModel() {
case ActiveTrackRole:
return video == m_activeVideo;
case Qt::DisplayRole:
- case Qt::StatusTipRole:
return video->title();
- /*
- case Qt::ToolTipRole:
-
- QString tooltip;
- if (!element.firstChildElement().text().isEmpty()) {
- tooltip.append(QString("<b>").append(element.firstChildElement().text()).append("</b><br/>"));
- }
- if (!fromDate.isEmpty()) {
- tooltip.append("<i>Pubblicato il</i> ").append(fromDate);
- }
- if (!toDate.isEmpty()) {
- tooltip.append("<br/><i>Scadenza</i>: ").append(toDate);
- }
- tooltip.append("<br/><i>Tipo</i>: ").append(typeName)
- .append("<br/><i>Id</i>: ").appen QFont boldFont;
- boldFont.setBold(true);d(id);
- return tooltip;
- */
-
- // case StreamUrlRole:
- // return video->streamUrl();
+ case HoveredItemRole:
+ return hoveredRow == index.row();
+ case AuthorHoveredRole:
+ return authorHovered;
+ case AuthorPressedRole:
+ return authorPressed;
}
return QVariant();
m_activeRow = row;
m_activeVideo = videoAt(row);
- // setStateOfRow( row, Item::Played );
-
int oldactiverow = m_activeRow;
if ( rowExists( oldactiverow ) )
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 );
// update the message item
emit dataChanged( createIndex( MAX_ITEMS, 0 ), createIndex( MAX_ITEMS, columnCount() - 1 ) );
+
+ if (!youtubeSearch->getSuggestions().isEmpty()) {
+ emit haveSuggestions(youtubeSearch->getSuggestions());
+ }
}
void ListModel::searchError(QString message) {
// 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();
- QSettings settings;
- QStringList keywords = settings.value(recentKeywordsKey).toStringList();
- keywords.removeAll(query);
- keywords.prepend(query);
- while (keywords.size() > 10)
- keywords.removeLast();
- settings.setValue(recentKeywordsKey, keywords);
+ 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);
+ }
+
+ // 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);
+ }
+
}
}
QList<Video*> originalList(videos);
QList<Video*> delitems;
foreach (QModelIndex index, indexes) {
+ if (index.row() >= originalList.size()) continue;
Video* video = originalList.at(index.row());
int idx = videos.indexOf(video);
if (idx != -1) {
}
void ListModel::move(QModelIndexList &indexes, bool up) {
-
QList<Video*> movedVideos;
foreach (QModelIndex index, indexes) {
int row = index.row();
+ if (row >= videos.size()) continue;
// qDebug() << "index row" << row;
Video *video = videoAt(row);
movedVideos << video;
}
- int counter = 1;
+ int end=up ? -1 : rowCount()-1, mod=up ? -1 : 1;
foreach (Video *video, movedVideos) {
int row = rowForVideo(video);
+ if (row+mod==end) { end=row; continue; }
// qDebug() << "video row" << row;
removeRows(row, 1, QModelIndex());
videos.insert(row, video);
endInsertRows();
- counter++;
}
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 ) );
+}