]> git.sur5r.net Git - minitube/blobdiff - src/standardfeedsview.cpp
New upstream version 3.1
[minitube] / src / standardfeedsview.cpp
index 799e54ddef9e7c2db09d1d793ce917f182602284..9080f1ce0be2beef85219a91bca750f1465f06e7 100644 (file)
@@ -19,58 +19,34 @@ along with Minitube.  If not, see <http://www.gnu.org/licenses/>.
 $END_LICENSE */
 
 #include "standardfeedsview.h"
+#include "mainwindow.h"
+#include "painterutils.h"
 #include "videosourcewidget.h"
 #include "ytcategories.h"
-#include "ytstandardfeed.h"
 #include "ytregions.h"
-#include "mainwindow.h"
-#include "painterutils.h"
-
-namespace The {
-QHash<QString, QAction*>* globalActions();
-}
+#include "ytstandardfeed.h"
 
-StandardFeedsView::StandardFeedsView(QWidget *parent) : View(parent),
-    layout(0) {
-    QPalette p = palette();
-    p.setBrush(QPalette::Window, Qt::black);
-    setPalette(p);
+StandardFeedsView::StandardFeedsView(QWidget *parent) : View(parent), layout(0) {
+    setBackgroundRole(QPalette::Base);
     setAutoFillBackground(true);
 
-    connect(The::globalActions()->value("worldwide-region"), SIGNAL(triggered()),
+    connect(MainWindow::instance()->getAction("worldwideRegion"), SIGNAL(triggered()),
             SLOT(selectWorldwideRegion()));
 
-    connect(The::globalActions()->value("local-region"), SIGNAL(triggered()),
+    connect(MainWindow::instance()->getAction("localRegion"), SIGNAL(triggered()),
             SLOT(selectLocalRegion()));
-
-    /*
-    QAction *regionAction = MainWindow::instance()->getRegionAction();
-    connect(regionAction, SIGNAL(changed()), SLOT(load()));
-    */
 }
 
 void StandardFeedsView::load() {
     setUpdatesEnabled(false);
     YTCategories *youTubeCategories = new YTCategories(this);
-    connect(youTubeCategories, SIGNAL(categoriesLoaded(const QList<YTCategory> &)),
-            SLOT(layoutCategories(const QList<YTCategory> &)));
+    connect(youTubeCategories, SIGNAL(categoriesLoaded(const QVector<YTCategory> &)),
+            SLOT(layoutCategories(const QVector<YTCategory> &)));
     youTubeCategories->loadCategories();
 
-    if (layout) {
-        while (QLayoutItem *item = layout->takeAt(0)) {
-            delete item->widget();
-            delete item;
-        }
-        delete layout;
-    }
+    resetLayout();
 
-    layout = new QGridLayout(this);
-    layout->setMargin(0);
-    layout->setSpacing(1);
-
-    QList<YTStandardFeed*> feeds = getMainFeeds();
-    foreach(YTStandardFeed *feed, feeds)
-        addVideoSourceWidget(feed);
+    addVideoSourceWidget(buildStandardFeed("most_popular", tr("Most Popular")));
 
     YTRegion region = YTRegions::currentRegion();
     QAction *regionAction = MainWindow::instance()->getRegionAction();
@@ -78,9 +54,9 @@ void StandardFeedsView::load() {
     regionAction->setIcon(YTRegions::iconForRegionId(region.id));
 }
 
-void StandardFeedsView::layoutCategories(const QList<YTCategory> &categories) {
+void StandardFeedsView::layoutCategories(const QVector<YTCategory> &categories) {
     QString regionId = YTRegions::currentRegionId();
-    foreach(YTCategory category, categories) {
+    for (const YTCategory &category : categories) {
         // assign a parent to this VideoSource  so it won't be deleted by MediaView
         YTStandardFeed *feed = new YTStandardFeed(this);
         feed->setCategory(category.term);
@@ -94,27 +70,53 @@ void StandardFeedsView::layoutCategories(const QList<YTCategory> &categories) {
 
 void StandardFeedsView::addVideoSourceWidget(VideoSource *videoSource) {
     VideoSourceWidget *w = new VideoSourceWidget(videoSource);
-    connect(w, SIGNAL(activated(VideoSource*)),
-            SIGNAL(activated(VideoSource*)));
+    connect(w, SIGNAL(activated(VideoSource *)), SIGNAL(activated(VideoSource *)));
+    connect(w, SIGNAL(unavailable(VideoSourceWidget *)),
+            SLOT(removeVideoSourceWidget(VideoSourceWidget *)));
     int i = layout->count();
-    static const int cols = 4;
+    const int cols = 5;
     layout->addWidget(w, i / cols, i % cols);
 }
 
-QList<YTStandardFeed*> StandardFeedsView::getMainFeeds() {
-    QList<YTStandardFeed*> feeds;
+void StandardFeedsView::removeVideoSourceWidget(VideoSourceWidget *videoSourceWidget) {
+    qDebug() << videoSourceWidget->getVideoSource()->getName();
+    layout->removeWidget(videoSourceWidget);
+    videoSourceWidget->deleteLater();
+
+    const int layoutCount = layout->count();
+    QVector<QLayoutItem *> items;
+    items.reserve(layoutCount);
+
+    for (int i = layoutCount - 1; i >= 0; i--) {
+        QLayoutItem *item = layout->takeAt(i);
+        if (item && item->widget()) items.append(item);
+    }
 
-    feeds << buildStardardFeed("most_popular", tr("Most Popular"));
-          // << buildStardardFeed("recently_featured", tr("Featured"))
-          // << buildStardardFeed("most_shared", tr("Most Shared"))
-          // << buildStardardFeed("most_discussed", tr("Most Discussed"))
-          // << buildStardardFeed("top_rated", tr("Top Rated"))
-          // << buildStardardFeed("most_popular", tr("All Time Popular"), "all_time");
+    const int itemCount = items.size();
+    const int cols = 4; // itemCount / 3;
+    for (int i = itemCount - 1; i >= 0; i--) {
+        QLayoutItem *item = items.at(i);
+        int index = itemCount - 1 - i;
+        layout->addItem(item, index / cols, index % cols);
+    }
+}
+
+void StandardFeedsView::resetLayout() {
+    if (layout) {
+        while (QLayoutItem *item = layout->takeAt(0)) {
+            delete item->widget();
+            delete item;
+        }
+        delete layout;
+    }
 
-    return feeds;
+    layout = new QGridLayout(this);
+    layout->setMargin(0);
+    layout->setSpacing(0);
 }
 
-YTStandardFeed* StandardFeedsView::buildStardardFeed(const QString &feedId, const QString &label, QString time) {
+YTStandardFeed *
+StandardFeedsView::buildStandardFeed(const QString &feedId, const QString &label, QString time) {
     YTStandardFeed *feed = new YTStandardFeed(this);
     feed->setFeedId(feedId);
     feed->setLabel(label);
@@ -124,19 +126,18 @@ YTStandardFeed* StandardFeedsView::buildStardardFeed(const QString &feedId, cons
 }
 
 void StandardFeedsView::appear() {
-    setFocus();
     if (!layout) {
         update();
         qApp->processEvents();
         load();
     }
     QAction *regionAction = MainWindow::instance()->getRegionAction();
-    MainWindow::instance()->showActionInStatusBar(regionAction, true);
+    MainWindow::instance()->showActionsInStatusBar({regionAction}, true);
 }
 
 void StandardFeedsView::disappear() {
     QAction *regionAction = MainWindow::instance()->getRegionAction();
-    MainWindow::instance()->showActionInStatusBar(regionAction, false);
+    MainWindow::instance()->showActionsInStatusBar({regionAction}, false);
 }
 
 void StandardFeedsView::selectWorldwideRegion() {
@@ -152,4 +153,3 @@ void StandardFeedsView::selectLocalRegion() {
 void StandardFeedsView::paintEvent(QPaintEvent *event) {
     QWidget::paintEvent(event);
 }
-