]> git.sur5r.net Git - minitube/blobdiff - src/aboutview.cpp
Upload 3.9.3-2 to unstable
[minitube] / src / aboutview.cpp
index 92d6638c804cd589b78753ab71d464235ab8ce1b..e60c173bdac0a082181e3055230d9ebb9b6a4ee2 100644 (file)
@@ -27,108 +27,185 @@ $END_LICENSE */
 #include "activation.h"
 #endif
 #ifdef APP_MAC
-#include "macutils.h"
 #include "mac_startup.h"
+#include "macutils.h"
 #endif
+#include "appwidget.h"
+#include "clickablelabel.h"
+#include "fontutils.h"
+#include "iconutils.h"
+#include "mainwindow.h"
+
+#ifdef UPDATER
+#include "updater.h"
+#include "waitingspinnerwidget.h"
+#endif
+
+AboutView::AboutView(QWidget *parent) : View(parent) {
+    const int padding = 30;
+    const char *buildYear = __DATE__ + 7;
 
-AboutView::AboutView(QWidget *parent) : QWidget(parent) {
+    setBackgroundRole(QPalette::Base);
+    setForegroundRole(QPalette::Text);
+    setAutoFillBackground(true);
 
-    QBoxLayout *hLayout = new QHBoxLayout(this);
-    hLayout->setAlignment(Qt::AlignCenter);
-    hLayout->setMargin(30);
-    hLayout->setSpacing(30);
+    QBoxLayout *verticalLayout = new QVBoxLayout(this);
+    verticalLayout->setMargin(0);
+    verticalLayout->setSpacing(0);
 
-    QLabel *logo = new QLabel(this);
-    logo->setPixmap(QPixmap(":/images/app.png"));
-    hLayout->addWidget(logo, 0, Qt::AlignTop);
+    QBoxLayout *aboutlayout = new QHBoxLayout();
+    verticalLayout->addLayout(aboutlayout, 1);
+    aboutlayout->setAlignment(Qt::AlignCenter);
+    aboutlayout->setMargin(padding);
+    aboutlayout->setSpacing(padding);
+
+    ClickableLabel *logo = new ClickableLabel();
+    auto setLogoPixmap = [logo] {
+        logo->setPixmap(IconUtils::pixmap(":/images/app.png", logo->devicePixelRatioF()));
+    };
+    setLogoPixmap();
+    connect(window()->windowHandle(), &QWindow::screenChanged, this, setLogoPixmap);
+
+    connect(logo, &ClickableLabel::clicked, MainWindow::instance(), &MainWindow::visitSite);
+    aboutlayout->addWidget(logo, 0, Qt::AlignTop);
 
     QBoxLayout *layout = new QVBoxLayout();
     layout->setAlignment(Qt::AlignCenter);
-    layout->setSpacing(30);
-    hLayout->addLayout(layout);
+    layout->setSpacing(padding);
+    layout->setMargin(padding / 2);
+    aboutlayout->addLayout(layout);
+
+    QColor lightTextColor = palette().text().color();
+#ifdef APP_MAC
+    lightTextColor.setAlphaF(.75);
+#endif
+#ifdef APP_MAC
+    QColor linkColor = mac::accentColor();
+#else
+    QColor linkColor = palette().highlight().color();
+#endif
 
-    QString info = "<html><style>a { color: palette(text); text-decoration: none; font-weight: bold }</style><body>"
-            "<h1 style='font-weight:normal'>" + QString(Constants::NAME) + "</h1>"
-            "<p>" + tr("There's life outside the browser!") + "</p>"
-            "<p>" + tr("Version %1").arg(Constants::VERSION) + "</p>"
-            + QString("<p><a href=\"%1/\">%1</a></p>").arg(Constants::WEBSITE);
+    QString info = "<html><style>"
+                   "body { color: " +
+                   lightTextColor.name(QColor::HexArgb) +
+                   "; } "
+                   "h1 { color: palette(text); font-weight: 100; } "
+                   "a { color: " +
+                   linkColor.name(QColor::HexArgb) +
+                   "; text-decoration: none; font-weight: normal; }"
+                   "</style><body>";
+
+    info += "<h1>" + QString(Constants::NAME) +
+            "</h1>"
+            "<p>" +
+            tr("There's life outside the browser!") +
+            "</p>"
+            "<p>" +
+            tr("Version %1").arg(Constants::VERSION) + "</p>" +
+            QString("<p><a href=\"%1/\">%1</a></p>").arg(Constants::WEBSITE);
 
 #ifdef APP_ACTIVATION
-    if (Activation::instance().isActivated())
-        info += "<p>" + tr("Licensed to: %1").arg("<b>" + Activation::instance().getEmail() + "</b>");
+    QString email = Activation::instance().getEmail();
+    if (!email.isEmpty()) info += "<p>" + tr("Licensed to: %1").arg("<b>" + email + "</b>");
 #endif
 
 #ifndef APP_EXTRA
-    info += "<p>" +  tr("%1 is Free Software but its development takes precious time.").arg(Constants::NAME) + "<br/>"
-            + tr("Please <a href='%1'>donate</a> to support the continued development of %2.")
-            .arg(QString(Constants::WEBSITE).append("#donate"), Constants::NAME) + "</p>";
+    info += "<p>" +
+            tr("%1 is Free Software but its development takes precious time.")
+                    .arg(Constants::NAME) +
+            "<br/>" +
+            tr("Please <a href='%1'>donate</a> to support the continued development of %2.")
+                    .arg(QString(Constants::WEBSITE).append("#donate"), Constants::NAME) +
+            "</p>";
 #endif
 
-    info += "<p>" + tr("You may want to try my other apps as well:") + "</p>"
-            "<ul>"
-
-            "<li>" + tr("%1, a YouTube music player")
-            .arg("<a href='http://flavio.tordini.org/musictube'>Musictube</a>")
-            + "</li>"
-
-            "<li>" + tr("%1, a music player")
-            .arg("<a href='http://flavio.tordini.org/musique'>Musique</a>")
-            + "</li>"
-
-            "</ul>"
+    info += "<p>" +
+            tr("Translate %1 to your native language using %2")
+                    .arg(Constants::NAME)
+                    .arg("<a href='http://www.transifex.net/projects/p/" +
+                         QString(Constants::UNIX_NAME) + "/'>Transifex</a>") +
+            "</p>";
 
-            "<p>" + tr("Translate %1 to your native language using %2").arg(Constants::NAME)
-            .arg("<a href='http://www.transifex.net/projects/p/" + QString(Constants::UNIX_NAME) + "/'>Transifex</a>")
-            + "</p>"
+    info += "<p>" +
+            tr("Powered by %1")
+                    .arg("<a href='https://" + QLatin1String(Constants::ORG_DOMAIN) +
+                         "/opensource'>" + tr("Open-source software") + "</a>") +
+            "</p>";
 
-            "<p>"
-            + tr("Icon designed by %1.").arg("<a href='http://www.kolorguild.com/'>David Nel</a>")
-            "</p>"
+    info += "<p>" +
+            tr("Icon designed by %1.").arg("<a href='http://www.kolorguild.co.za/'>David Nel</a>") +
+            "</p>"
 
-        #ifndef APP_EXTRA
-            "<p>" + tr("Released under the <a href='%1'>GNU General Public License</a>")
-            .arg("http://www.gnu.org/licenses/gpl.html") + "</p>"
-        #endif
-            "<p>&copy; 2009-2014 " + Constants::ORG_NAME + "</p>"
+#ifndef APP_EXTRA
+            "<p>" +
+            tr("Released under the <a href='%1'>GNU General Public License</a>")
+                    .arg("http://www.gnu.org/licenses/gpl.html") +
+            "</p>"
+#endif
+            "<p>&copy; " +
+            buildYear + " " + Constants::ORG_NAME +
+            "</p>"
             "</body></html>";
+
     QLabel *infoLabel = new QLabel(info, this);
     infoLabel->setOpenExternalLinks(true);
     infoLabel->setWordWrap(true);
     layout->addWidget(infoLabel);
 
+#ifdef UPDATER
+    int capHeight = fontMetrics().capHeight();
+
+    QBoxLayout *updateLayout = new QHBoxLayout();
+    updateLayout->setMargin(0);
+    updateLayout->setSpacing(capHeight);
+    updateLayout->setAlignment(Qt::AlignLeft);
+
+    auto spinner = new WaitingSpinnerWidget(this, false, false);
+    spinner->setColor(palette().windowText().color());
+    spinner->setLineLength(capHeight / 2);
+    spinner->setNumberOfLines(spinner->lineLength() * 2);
+    spinner->setInnerRadius(spinner->lineLength());
+    auto spinnerStartStop = [spinner](auto status) {
+        if (status == Updater::Status::DownloadingUpdate)
+            spinner->start();
+        else
+            spinner->stop();
+    };
+    connect(&Updater::instance(), &Updater::statusChanged, this, spinnerStartStop);
+    updateLayout->addWidget(spinner);
+    spinnerStartStop(Updater::instance().getStatus());
+
+    updateLayout->addWidget(Updater::instance().getLabel());
+
+    layout->addLayout(updateLayout);
+#endif
+
     QLayout *buttonLayout = new QHBoxLayout();
     buttonLayout->setMargin(0);
-    buttonLayout->setSpacing(0);
     buttonLayout->setAlignment(Qt::AlignLeft);
 
-    closeButton = new QPushButton(tr("&Close"));
+#ifdef UPDATER
+    buttonLayout->addWidget(Updater::instance().getButton());
+#endif
+
+    closeButton = new QPushButton(tr("&Close"), this);
     closeButton->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
     closeButton->setDefault(true);
-    connect(closeButton, SIGNAL(clicked()), parent, SLOT(goBack()));
+    closeButton->setShortcut(Qt::Key_Escape);
+    closeButton->setFocus();
+    connect(closeButton, SIGNAL(clicked()), MainWindow::instance(), SLOT(goBack()));
     buttonLayout->addWidget(closeButton);
 
     layout->addLayout(buttonLayout);
-}
 
-void AboutView::paintEvent(QPaintEvent * /*event*/) {
-#if defined(APP_MAC) | defined(APP_WIN)
-    QBrush brush;
-    if (window()->isActiveWindow()) {
-        brush = QBrush(QColor(0xdd, 0xe4, 0xeb));
-    } else {
-        brush = palette().window();
-    }
-    QPainter painter(this);
-    painter.fillRect(0, 0, width(), height(), brush);
+#ifndef APP_WIN_STORE
+    verticalLayout->addWidget(new AppsWidget());
 #endif
 }
 
 void AboutView::appear() {
-#ifdef APP_MAC
-    mac::uncloseWindow(window()->winId());
-#ifdef APP_ACTIVATION
-    mac::CheckForUpdates();
-#endif
-#endif
     closeButton->setFocus();
+#ifdef UPDATER
+    Updater::instance().checkWithoutUI();
+#endif
 }