]> git.sur5r.net Git - minitube/blobdiff - src/MainWindow.cpp
Imported Upstream version 2.0
[minitube] / src / MainWindow.cpp
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
deleted file mode 100644 (file)
index e5d78d2..0000000
+++ /dev/null
@@ -1,1484 +0,0 @@
-#include "MainWindow.h"
-#include "spacer.h"
-#include "constants.h"
-#include "iconloader/qticonloader.h"
-#include "global.h"
-#include "videodefinition.h"
-#include "fontutils.h"
-#include "globalshortcuts.h"
-#ifdef Q_WS_X11
-#include "gnomeglobalshortcutbackend.h"
-#endif
-#ifdef Q_WS_MAC
-#include "mac_startup.h"
-#include "macfullscreen.h"
-#include "macsupport.h"
-#include "macutils.h"
-#endif
-#ifndef Q_WS_X11
-#include "extra.h"
-#endif
-#include "downloadmanager.h"
-#include "youtubesuggest.h"
-#include "updatechecker.h"
-#ifdef APP_DEMO
-#include "demostartupview.h"
-#endif
-#include "temporary.h"
-#ifdef APP_MAC
-#include "searchlineedit_mac.h"
-#else
-#include "searchlineedit.h"
-#endif
-#include <iostream>
-
-static MainWindow *singleton = 0;
-
-MainWindow* MainWindow::instance() {
-    if (!singleton) singleton = new MainWindow();
-    return singleton;
-}
-
-MainWindow::MainWindow() :
-        updateChecker(0),
-        aboutView(0),
-        downloadView(0),
-        mediaObject(0),
-        audioOutput(0),
-        m_fullscreen(false) {
-
-    singleton = this;
-
-    // views mechanism
-    history = new QStack<QWidget*>();
-    views = new QStackedWidget(this);
-    setCentralWidget(views);
-
-    // views
-    searchView = new SearchView(this);
-    connect(searchView, SIGNAL(search(SearchParams*)), this, SLOT(showMedia(SearchParams*)));
-    views->addWidget(searchView);
-
-    mediaView = new MediaView(this);
-    mediaView->setEnabled(false);
-    views->addWidget(mediaView);
-
-    // build ui
-    createActions();
-    createMenus();
-    createToolBars();
-    createStatusBar();
-
-    initPhonon();
-    mediaView->setSlider(seekSlider);
-    mediaView->setMediaObject(mediaObject);
-
-    // remove that useless menu/toolbar context menu
-    this->setContextMenuPolicy(Qt::NoContextMenu);
-
-    // mediaView init stuff thats needs actions
-    mediaView->initialize();
-
-    // event filter to block ugly toolbar tooltips
-    qApp->installEventFilter(this);
-
-    setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
-
-    // restore window position
-    readSettings();
-
-    // fix stacked widget minimum size
-    for (int i = 0; i < views->count(); i++) {
-        QWidget* view = views->widget(i);
-        if (view) view->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
-    }
-    setMinimumWidth(0);
-
-    // show the initial view
-#ifdef APP_DEMO
-        QWidget *demoStartupView = new DemoStartupView(this);
-        views->addWidget(demoStartupView);
-        showWidget(demoStartupView);
-#else
-    showSearch();
-#endif
-
-    // Global shortcuts
-    GlobalShortcuts &shortcuts = GlobalShortcuts::instance();
-#ifdef Q_WS_X11
-    if (GnomeGlobalShortcutBackend::IsGsdAvailable())
-        shortcuts.setBackend(new GnomeGlobalShortcutBackend(&shortcuts));
-#endif
-#ifdef Q_WS_MAC
-    mac::MacSetup();
-#endif
-    connect(&shortcuts, SIGNAL(PlayPause()), pauseAct, SLOT(trigger()));
-    connect(&shortcuts, SIGNAL(Stop()), this, SLOT(stop()));
-    connect(&shortcuts, SIGNAL(Next()), skipAct, SLOT(trigger()));
-    connect(&shortcuts, SIGNAL(Previous()), skipBackwardAct, SLOT(trigger()));
-    // connect(&shortcuts, SIGNAL(StopAfter()), The::globalActions()->value("stopafterthis"), SLOT(toggle()));
-
-    connect(DownloadManager::instance(), SIGNAL(statusMessageChanged(QString)),
-            SLOT(updateDownloadMessage(QString)));
-    connect(DownloadManager::instance(), SIGNAL(finished()),
-            SLOT(downloadsFinished()));
-
-    setAcceptDrops(true);
-
-    mouseTimer = new QTimer(this);
-    mouseTimer->setInterval(5000);
-    mouseTimer->setSingleShot(true);
-    connect(mouseTimer, SIGNAL(timeout()), SLOT(hideMouse()));
-
-    QTimer::singleShot(0, this, SLOT(checkForUpdate()));
-
-}
-
-MainWindow::~MainWindow() {
-    delete history;
-}
-
-void MainWindow::changeEvent(QEvent* event) {
-#ifdef APP_MAC
-    if (event->type() == QEvent::WindowStateChange) {
-        The::globalActions()->value("minimize")->setEnabled(!isMinimized());
-    }
-#endif
-    QMainWindow::changeEvent(event);
-}
-
-bool MainWindow::eventFilter(QObject *obj, QEvent *event) {
-
-    if (m_fullscreen && event->type() == QEvent::MouseMove) {
-
-        QMouseEvent *mouseEvent = static_cast<QMouseEvent*> (event);
-        const int x = mouseEvent->pos().x();
-        const QString className = QString(obj->metaObject()->className());
-        const bool isHoveringVideo = (className == "QGLWidget") || (className == "VideoAreaWidget");
-
-        // qDebug() << obj << mouseEvent->pos() << isHoveringVideo << mediaView->isPlaylistVisible();
-
-        if (mediaView->isPlaylistVisible()) {
-            if (isHoveringVideo && x > 5) mediaView->setPlaylistVisible(false);
-        } else {
-            if (isHoveringVideo && x >= 0 && x < 5) mediaView->setPlaylistVisible(true);
-        }
-
-#ifndef APP_MAC
-        const int y = mouseEvent->pos().y();
-        if (mainToolBar->isVisible()) {
-            if (isHoveringVideo && y > 5) mainToolBar->setVisible(false);
-        } else {
-            if (isHoveringVideo && y >= 0 && y < 5) mainToolBar->setVisible(true);
-        }
-#endif
-
-        // show the normal cursor
-        unsetCursor();
-        // then hide it again after a few seconds
-        mouseTimer->start();
-
-    }
-
-    if (event->type() == QEvent::ToolTip) {
-        // kill tooltips
-        return true;
-    }
-    // standard event processing
-    return QMainWindow::eventFilter(obj, event);
-}
-
-void MainWindow::createActions() {
-
-    QMap<QString, QAction*> *actions = The::globalActions();
-
-    stopAct = new QAction(QtIconLoader::icon("media-playback-stop"), tr("&Stop"), this);
-    stopAct->setStatusTip(tr("Stop playback and go back to the search view"));
-    stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
-    stopAct->setEnabled(false);
-    actions->insert("stop", stopAct);
-    connect(stopAct, SIGNAL(triggered()), this, SLOT(stop()));
-
-    skipBackwardAct = new QAction(
-                QtIconLoader::icon("media-skip-backward"),
-                tr("P&revious"), this);
-    skipBackwardAct->setStatusTip(tr("Go back to the previous track"));
-    skipBackwardAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Left));
-#if QT_VERSION >= 0x040600
-    skipBackwardAct->setPriority(QAction::LowPriority);
-#endif
-    skipBackwardAct->setEnabled(false);
-    actions->insert("previous", skipBackwardAct);
-    connect(skipBackwardAct, SIGNAL(triggered()), mediaView, SLOT(skipBackward()));
-
-    skipAct = new QAction(QtIconLoader::icon("media-skip-forward"), tr("S&kip"), this);
-    skipAct->setStatusTip(tr("Skip to the next video"));
-    skipAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_Right) << QKeySequence(Qt::Key_MediaNext));
-    skipAct->setEnabled(false);
-    actions->insert("skip", skipAct);
-    connect(skipAct, SIGNAL(triggered()), mediaView, SLOT(skip()));
-
-    pauseAct = new QAction(QtIconLoader::icon("media-playback-pause"), tr("&Pause"), this);
-    pauseAct->setStatusTip(tr("Pause playback"));
-    pauseAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Space) << QKeySequence(Qt::Key_MediaPlay));
-    pauseAct->setEnabled(false);
-    actions->insert("pause", pauseAct);
-    connect(pauseAct, SIGNAL(triggered()), mediaView, SLOT(pause()));
-
-    fullscreenAct = new QAction(QtIconLoader::icon("view-fullscreen"), tr("&Full Screen"), this);
-    fullscreenAct->setStatusTip(tr("Go full screen"));
-    QList<QKeySequence> fsShortcuts;
-#ifdef APP_MAC
-    fsShortcuts << QKeySequence(Qt::CTRL + Qt::META + Qt::Key_F);
-#else
-    fsShortcuts << QKeySequence(Qt::Key_F11) << QKeySequence(Qt::ALT + Qt::Key_Return);
-#endif
-    fullscreenAct->setShortcuts(fsShortcuts);
-    fullscreenAct->setShortcutContext(Qt::ApplicationShortcut);
-#if QT_VERSION >= 0x040600
-    fullscreenAct->setPriority(QAction::LowPriority);
-#endif
-    actions->insert("fullscreen", fullscreenAct);
-    connect(fullscreenAct, SIGNAL(triggered()), this, SLOT(fullscreen()));
-
-    compactViewAct = new QAction(tr("&Compact Mode"), this);
-    compactViewAct->setStatusTip(tr("Hide the playlist and the toolbar"));
-#ifdef APP_MAC
-    compactViewAct->setShortcut(QKeySequence(Qt::CTRL + Qt::META + Qt::Key_C));
-#else
-    compactViewAct->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_C));
-#endif
-    compactViewAct->setCheckable(true);
-    compactViewAct->setChecked(false);
-    compactViewAct->setEnabled(false);
-    actions->insert("compactView", compactViewAct);
-    connect(compactViewAct, SIGNAL(toggled(bool)), this, SLOT(compactView(bool)));
-
-    webPageAct = new QAction(tr("Open the &YouTube Page"), this);
-    webPageAct->setStatusTip(tr("Go to the YouTube video page and pause playback"));
-    webPageAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Y));
-    webPageAct->setEnabled(false);
-    actions->insert("webpage", webPageAct);
-    connect(webPageAct, SIGNAL(triggered()), mediaView, SLOT(openWebPage()));
-
-    copyPageAct = new QAction(tr("Copy the YouTube &Link"), this);
-    copyPageAct->setStatusTip(tr("Copy the current video YouTube link to the clipboard"));
-    copyPageAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L));
-    copyPageAct->setEnabled(false);
-    actions->insert("pagelink", copyPageAct);
-    connect(copyPageAct, SIGNAL(triggered()), mediaView, SLOT(copyWebPage()));
-
-    copyLinkAct = new QAction(tr("Copy the Video Stream &URL"), this);
-    copyLinkAct->setStatusTip(tr("Copy the current video stream URL to the clipboard"));
-    copyLinkAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_U));
-    copyLinkAct->setEnabled(false);
-    actions->insert("videolink", copyLinkAct);
-    connect(copyLinkAct, SIGNAL(triggered()), mediaView, SLOT(copyVideoLink()));
-
-    findVideoPartsAct = new QAction(tr("Find Video &Parts"), this);
-    findVideoPartsAct->setStatusTip(tr("Find other video parts hopefully in the right order"));
-    findVideoPartsAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P));
-    findVideoPartsAct->setEnabled(false);
-    connect(findVideoPartsAct, SIGNAL(triggered()), mediaView, SLOT(findVideoParts()));
-    actions->insert("findVideoParts", findVideoPartsAct);
-
-    removeAct = new QAction(tr("&Remove"), this);
-    removeAct->setStatusTip(tr("Remove the selected videos from the playlist"));
-    removeAct->setShortcuts(QList<QKeySequence>() << QKeySequence("Del") << QKeySequence("Backspace"));
-    removeAct->setEnabled(false);
-    actions->insert("remove", removeAct);
-    connect(removeAct, SIGNAL(triggered()), mediaView, SLOT(removeSelected()));
-
-    moveUpAct = new QAction(tr("Move &Up"), this);
-    moveUpAct->setStatusTip(tr("Move up the selected videos in the playlist"));
-    moveUpAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Up));
-    moveUpAct->setEnabled(false);
-    actions->insert("moveUp", moveUpAct);
-    connect(moveUpAct, SIGNAL(triggered()), mediaView, SLOT(moveUpSelected()));
-
-    moveDownAct = new QAction(tr("Move &Down"), this);
-    moveDownAct->setStatusTip(tr("Move down the selected videos in the playlist"));
-    moveDownAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Down));
-    moveDownAct->setEnabled(false);
-    actions->insert("moveDown", moveDownAct);
-    connect(moveDownAct, SIGNAL(triggered()), mediaView, SLOT(moveDownSelected()));
-
-    clearAct = new QAction(tr("&Clear Recent Searches"), this);
-    clearAct->setMenuRole(QAction::ApplicationSpecificRole);
-    clearAct->setShortcuts(QList<QKeySequence>()
-                           << QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Delete)
-                           << QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Backspace));
-    clearAct->setStatusTip(tr("Clear the search history. Cannot be undone."));
-    clearAct->setEnabled(true);
-    actions->insert("clearRecentKeywords", clearAct);
-    connect(clearAct, SIGNAL(triggered()), SLOT(clearRecentKeywords()));
-
-    quitAct = new QAction(tr("&Quit"), this);
-    quitAct->setMenuRole(QAction::QuitRole);
-    quitAct->setShortcut(QKeySequence(QKeySequence::Quit));
-    quitAct->setStatusTip(tr("Bye"));
-    actions->insert("quit", quitAct);
-    connect(quitAct, SIGNAL(triggered()), SLOT(quit()));
-
-    siteAct = new QAction(tr("&Website"), this);
-    siteAct->setShortcut(QKeySequence::HelpContents);
-    siteAct->setStatusTip(tr("%1 on the Web").arg(Constants::NAME));
-    actions->insert("site", siteAct);
-    connect(siteAct, SIGNAL(triggered()), this, SLOT(visitSite()));
-
-#if !defined(APP_MAC) && !defined(APP_WIN)
-    donateAct = new QAction(tr("Make a &Donation"), this);
-    donateAct->setStatusTip(tr("Please support the continued development of %1").arg(Constants::NAME));
-    actions->insert("donate", donateAct);
-    connect(donateAct, SIGNAL(triggered()), this, SLOT(donate()));
-#endif
-
-    aboutAct = new QAction(tr("&About"), this);
-    aboutAct->setMenuRole(QAction::AboutRole);
-    aboutAct->setStatusTip(tr("Info about %1").arg(Constants::NAME));
-    actions->insert("about", aboutAct);
-    connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
-
-    // Invisible actions
-
-    searchFocusAct = new QAction(this);
-    searchFocusAct->setShortcut(QKeySequence::Find);
-    searchFocusAct->setStatusTip(tr("Search"));
-    actions->insert("search", searchFocusAct);
-    connect(searchFocusAct, SIGNAL(triggered()), this, SLOT(searchFocus()));
-    addAction(searchFocusAct);
-
-    volumeUpAct = new QAction(this);
-    volumeUpAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_Plus));
-    actions->insert("volume-up", volumeUpAct);
-    connect(volumeUpAct, SIGNAL(triggered()), this, SLOT(volumeUp()));
-    addAction(volumeUpAct);
-
-    volumeDownAct = new QAction(this);
-    volumeDownAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_Minus));
-    actions->insert("volume-down", volumeDownAct);
-    connect(volumeDownAct, SIGNAL(triggered()), this, SLOT(volumeDown()));
-    addAction(volumeDownAct);
-
-    volumeMuteAct = new QAction(this);
-    volumeMuteAct->setIcon(QtIconLoader::icon("audio-volume-high"));
-    volumeMuteAct->setStatusTip(tr("Mute volume"));
-    volumeMuteAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_E));
-    actions->insert("volume-mute", volumeMuteAct);
-    connect(volumeMuteAct, SIGNAL(triggered()), SLOT(volumeMute()));
-    addAction(volumeMuteAct);
-
-    QAction *definitionAct = new QAction(this);
-    definitionAct->setIcon(QtIconLoader::icon("video-display"));
-    definitionAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_D));
-    /*
-    QMenu *definitionMenu = new QMenu(this);
-    foreach (QString definition, VideoDefinition::getDefinitionNames()) {
-        definitionMenu->addAction(definition);
-    }
-    definitionAct->setMenu(definitionMenu);
-    */
-    actions->insert("definition", definitionAct);
-    connect(definitionAct, SIGNAL(triggered()), SLOT(toggleDefinitionMode()));
-    addAction(definitionAct);
-
-    QAction *action;
-
-    action = new QAction(QtIconLoader::icon("media-playback-start"), tr("&Manually Start Playing"), this);
-    action->setStatusTip(tr("Manually start playing videos"));
-    action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_B));
-    action->setCheckable(true);
-    connect(action, SIGNAL(toggled(bool)), SLOT(setManualPlay(bool)));
-    actions->insert("manualplay", action);
-
-    action = new QAction(tr("&Downloads"), this);
-    action->setStatusTip(tr("Show details about video downloads"));
-    action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_J));
-    action->setCheckable(true);
-    action->setIcon(QtIconLoader::icon("go-down"));
-    action->setVisible(false);
-    connect(action, SIGNAL(toggled(bool)), SLOT(toggleDownloads(bool)));
-    actions->insert("downloads", action);
-
-    action = new QAction(tr("&Download"), this);
-    action->setStatusTip(tr("Download the current video"));
-#ifndef APP_NO_DOWNLOADS
-    action->setShortcut(QKeySequence::Save);
-#endif
-    action->setIcon(QtIconLoader::icon("go-down"));
-    action->setEnabled(false);
-#if QT_VERSION >= 0x040600
-    action->setPriority(QAction::LowPriority);
-#endif
-    connect(action, SIGNAL(triggered()), mediaView, SLOT(downloadVideo()));
-    actions->insert("download", action);
-
-    /*
-    action = new QAction(tr("&Snapshot"), this);
-    action->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_S));
-    actions->insert("snapshot", action);
-    connect(action, SIGNAL(triggered()), mediaView, SLOT(snapshot()));
-    */
-
-    QString shareTip = tr("Share the current video using %1");
-
-    action = new QAction("&Twitter", this);
-    action->setStatusTip(shareTip.arg("Twitter"));
-    actions->insert("twitter", action);
-    connect(action, SIGNAL(triggered()), mediaView, SLOT(shareViaTwitter()));
-
-    action = new QAction("&Facebook", this);
-    action->setStatusTip(shareTip.arg("Facebook"));
-    actions->insert("facebook", action);
-    connect(action, SIGNAL(triggered()), mediaView, SLOT(shareViaFacebook()));
-
-    action = new QAction("&Buffer", this);
-    action->setStatusTip(shareTip.arg("Buffer"));
-    actions->insert("buffer", action);
-    connect(action, SIGNAL(triggered()), mediaView, SLOT(shareViaBuffer()));
-
-    action = new QAction(tr("&Email"), this);
-    action->setStatusTip(shareTip.arg(tr("Email")));
-    actions->insert("email", action);
-    connect(action, SIGNAL(triggered()), mediaView, SLOT(shareViaEmail()));
-
-    action = new QAction(tr("&Close"), this);
-    action->setShortcut(QKeySequence(QKeySequence::Close));
-    actions->insert("close", action);
-    connect(action, SIGNAL(triggered()), SLOT(close()));
-
-    action = new QAction(Constants::NAME, this);
-    action->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_1));
-    actions->insert("restore", action);
-    connect(action, SIGNAL(triggered()), SLOT(restore()));
-
-    action = new QAction(QtIconLoader::icon("go-top"), tr("&Float on Top"), this);
-    action->setCheckable(true);
-    actions->insert("ontop", action);
-    connect(action, SIGNAL(toggled(bool)), SLOT(floatOnTop(bool)));
-
-    action = new QAction(QtIconLoader::icon("media-playback-stop"), tr("&Stop After This Video"), this);
-    action->setShortcut(QKeySequence(Qt::SHIFT + Qt::Key_Escape));
-    action->setCheckable(true);
-    action->setEnabled(false);
-    actions->insert("stopafterthis", action);
-    connect(action, SIGNAL(toggled(bool)), SLOT(showStopAfterThisInStatusBar(bool)));
-
-    action = new QAction(tr("&Report an Issue..."), this);
-    actions->insert("report-issue", action);
-    connect(action, SIGNAL(triggered()), SLOT(reportIssue()));
-
-    action = new QAction(tr("&Refine Search..."), this);
-    action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_R));
-    action->setCheckable(true);
-    actions->insert("refine-search", action);
-
-    // common action properties
-    foreach (QAction *action, actions->values()) {
-
-        // add actions to the MainWindow so that they work
-        // when the menu is hidden
-        addAction(action);
-
-        // never autorepeat.
-        // unexperienced users tend to keep keys pressed for a "long" time
-        action->setAutoRepeat(false);
-
-        // set to something more meaningful then the toolbar text
-        if (!action->statusTip().isEmpty())
-            action->setToolTip(action->statusTip());
-
-        // show keyboard shortcuts in the status bar
-        if (!action->shortcut().isEmpty())
-            action->setStatusTip(action->statusTip() + " (" + action->shortcut().toString(QKeySequence::NativeText) + ")");
-
-        // no icons in menus
-        action->setIconVisibleInMenu(false);
-
-    }
-
-}
-
-void MainWindow::createMenus() {
-
-    QMap<QString, QMenu*> *menus = The::globalMenus();
-
-    fileMenu = menuBar()->addMenu(tr("&Application"));
-#ifdef APP_DEMO
-    QAction* action = new QAction(tr("Buy %1...").arg(Constants::NAME), this);
-    action->setMenuRole(QAction::ApplicationSpecificRole);
-    connect(action, SIGNAL(triggered()), SLOT(buy()));
-    fileMenu->addAction(action);
-#endif
-    fileMenu->addAction(clearAct);
-#ifndef APP_MAC
-    fileMenu->addSeparator();
-#endif
-    fileMenu->addAction(quitAct);
-
-    QMenu* playbackMenu = menuBar()->addMenu(tr("&Playback"));
-    menus->insert("playback", playbackMenu);
-    playbackMenu->addAction(pauseAct);
-    playbackMenu->addAction(stopAct);
-    playbackMenu->addAction(The::globalActions()->value("stopafterthis"));
-    playbackMenu->addSeparator();
-    playbackMenu->addAction(skipAct);
-    playbackMenu->addAction(skipBackwardAct);
-    playbackMenu->addSeparator();
-    playbackMenu->addAction(The::globalActions()->value("manualplay"));
-#ifdef APP_MAC
-    MacSupport::dockMenu(playbackMenu);
-#endif
-
-    playlistMenu = menuBar()->addMenu(tr("&Playlist"));
-    menus->insert("playlist", playlistMenu);
-    playlistMenu->addAction(removeAct);
-    playlistMenu->addSeparator();
-    playlistMenu->addAction(moveUpAct);
-    playlistMenu->addAction(moveDownAct);
-    playlistMenu->addSeparator();
-    playlistMenu->addAction(The::globalActions()->value("refine-search"));
-
-    QMenu* videoMenu = menuBar()->addMenu(tr("&Video"));
-    menus->insert("video", videoMenu);
-    videoMenu->addAction(findVideoPartsAct);
-    videoMenu->addSeparator();
-    videoMenu->addAction(webPageAct);
-    videoMenu->addSeparator();
-#ifndef APP_NO_DOWNLOADS
-    videoMenu->addAction(The::globalActions()->value("download"));
-    // videoMenu->addAction(copyLinkAct);
-#endif
-    // videoMenu->addAction(The::globalActions()->value("snapshot"));
-
-    QMenu* viewMenu = menuBar()->addMenu(tr("&View"));
-    menus->insert("view", viewMenu);
-    viewMenu->addAction(fullscreenAct);
-    viewMenu->addAction(compactViewAct);
-    viewMenu->addSeparator();
-    viewMenu->addAction(The::globalActions()->value("ontop"));
-
-    QMenu* shareMenu = menuBar()->addMenu(tr("&Share"));
-    menus->insert("share", shareMenu);
-    shareMenu->addAction(copyPageAct);
-    shareMenu->addSeparator();
-    shareMenu->addAction(The::globalActions()->value("twitter"));
-    shareMenu->addAction(The::globalActions()->value("facebook"));
-    shareMenu->addAction(The::globalActions()->value("buffer"));
-    shareMenu->addSeparator();
-    shareMenu->addAction(The::globalActions()->value("email"));
-
-#ifdef APP_MAC
-    MacSupport::windowMenu(this);
-#endif
-
-    helpMenu = menuBar()->addMenu(tr("&Help"));
-    helpMenu->addAction(siteAct);
-#if !defined(APP_MAC) && !defined(APP_WIN)
-    helpMenu->addAction(donateAct);
-#endif
-    helpMenu->addAction(The::globalActions()->value("report-issue"));
-    helpMenu->addAction(aboutAct);
-}
-
-void MainWindow::createToolBars() {
-
-    setUnifiedTitleAndToolBarOnMac(true);
-
-    mainToolBar = new QToolBar(this);
-#if QT_VERSION < 0x040600 | defined(APP_MAC)
-    mainToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly);
-#else
-    mainToolBar->setToolButtonStyle(Qt::ToolButtonFollowStyle);
-#endif
-    mainToolBar->setFloatable(false);
-    mainToolBar->setMovable(false);
-
-#if defined(APP_MAC) | defined(APP_WIN)
-    mainToolBar->setIconSize(QSize(32, 32));
-#endif
-
-    mainToolBar->addAction(stopAct);
-    mainToolBar->addAction(pauseAct);
-    mainToolBar->addAction(skipAct);
-
-    bool addFullScreenAct = true;
-#ifdef Q_WS_MAC
-    addFullScreenAct = !mac::CanGoFullScreen(winId());
-#endif
-    if (addFullScreenAct) mainToolBar->addAction(fullscreenAct);
-
-#ifndef APP_NO_DOWNLOADS
-    mainToolBar->addAction(The::globalActions()->value("download"));
-#endif
-
-    mainToolBar->addWidget(new Spacer());
-
-    QFont smallerFont = FontUtils::small();
-    currentTime = new QLabel(mainToolBar);
-    currentTime->setFont(smallerFont);
-    mainToolBar->addWidget(currentTime);
-
-    mainToolBar->addWidget(new Spacer());
-
-    seekSlider = new Phonon::SeekSlider(this);
-    seekSlider->setIconVisible(false);
-    seekSlider->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
-    mainToolBar->addWidget(seekSlider);
-
-/*
-    mainToolBar->addWidget(new Spacer());
-    slider = new QSlider(this);
-    slider->setOrientation(Qt::Horizontal);
-    slider->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
-    mainToolBar->addWidget(slider);
-*/
-
-    mainToolBar->addWidget(new Spacer());
-
-    totalTime = new QLabel(mainToolBar);
-    totalTime->setFont(smallerFont);
-    mainToolBar->addWidget(totalTime);
-
-    mainToolBar->addWidget(new Spacer());
-
-    mainToolBar->addAction(volumeMuteAct);
-
-    volumeSlider = new Phonon::VolumeSlider(this);
-    volumeSlider->setMuteVisible(false);
-    // qDebug() << volumeSlider->children();
-    // status tip for the volume slider
-    QSlider* volumeQSlider = volumeSlider->findChild<QSlider*>();
-    if (volumeQSlider)
-        volumeQSlider->setStatusTip(tr("Press %1 to raise the volume, %2 to lower it").arg(
-                volumeUpAct->shortcut().toString(QKeySequence::NativeText), volumeDownAct->shortcut().toString(QKeySequence::NativeText)));
-    // this makes the volume slider smaller
-    volumeSlider->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-    mainToolBar->addWidget(volumeSlider);
-
-    mainToolBar->addWidget(new Spacer());
-
-#ifdef APP_MAC
-    SearchWrapper* searchWrapper = new SearchWrapper(this);
-    toolbarSearch = searchWrapper->getSearchLineEdit();
-#else
-    toolbarSearch = new SearchLineEdit(this);
-#endif
-    toolbarSearch->setMinimumWidth(toolbarSearch->fontInfo().pixelSize()*15);
-    toolbarSearch->setSuggester(new YouTubeSuggest(this));
-    connect(toolbarSearch, SIGNAL(search(const QString&)), this, SLOT(startToolbarSearch(const QString&)));
-    connect(toolbarSearch, SIGNAL(suggestionAccepted(const QString&)), SLOT(startToolbarSearch(const QString&)));
-    toolbarSearch->setStatusTip(searchFocusAct->statusTip());
-#ifdef APP_MAC
-    mainToolBar->addWidget(searchWrapper);
-#else
-    mainToolBar->addWidget(toolbarSearch);
-    Spacer* spacer = new Spacer();
-    // spacer->setWidth(4);
-    mainToolBar->addWidget(spacer);
-#endif
-
-    addToolBar(mainToolBar);
-}
-
-void MainWindow::createStatusBar() {
-    QToolBar* toolBar = new QToolBar(this);
-    statusToolBar = toolBar;
-    toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
-    toolBar->setIconSize(QSize(16, 16));
-    toolBar->addAction(The::globalActions()->value("downloads"));
-    toolBar->addAction(The::globalActions()->value("definition"));
-    statusBar()->addPermanentWidget(toolBar);
-    statusBar()->show();
-}
-
-void MainWindow::showStopAfterThisInStatusBar(bool show) {
-    QAction* action = The::globalActions()->value("stopafterthis");
-    showActionInStatusBar(action, show);
-}
-
-void MainWindow::showActionInStatusBar(QAction* action, bool show) {
-    if (show) {
-        statusToolBar->insertAction(statusToolBar->actions().first(), action);
-    } else {
-        statusToolBar->removeAction(action);
-    }
-}
-
-void MainWindow::readSettings() {
-    QSettings settings;
-    if (settings.contains("geometry")) {
-        restoreGeometry(settings.value("geometry").toByteArray());
-#ifdef APP_MAC
-    MacSupport::fixGeometry(this);
-#endif
-    } else {
-        setGeometry(100, 100, 1000, 500);
-    }
-    setDefinitionMode(settings.value("definition", VideoDefinition::getDefinitionNames().first()).toString());
-    audioOutput->setVolume(settings.value("volume", 1).toDouble());
-    audioOutput->setMuted(settings.value("volumeMute").toBool());
-    The::globalActions()->value("manualplay")->setChecked(settings.value("manualplay", false).toBool());
-}
-
-void MainWindow::writeSettings() {
-    QSettings settings;
-
-    settings.setValue("geometry", saveGeometry());
-    mediaView->saveSplitterState();
-
-    settings.setValue("volume", audioOutput->volume());
-    settings.setValue("volumeMute", audioOutput->isMuted());
-    settings.setValue("manualplay", The::globalActions()->value("manualplay")->isChecked());
-}
-
-void MainWindow::goBack() {
-    if ( history->size() > 1 ) {
-        history->pop();
-        QWidget *widget = history->pop();
-        showWidget(widget);
-    }
-}
-
-void MainWindow::showWidget ( QWidget* widget ) {
-
-    if (compactViewAct->isChecked())
-        compactViewAct->toggle();
-
-    setUpdatesEnabled(false);
-
-    // call hide method on the current view
-    View* oldView = dynamic_cast<View *> (views->currentWidget());
-    if (oldView) {
-        oldView->disappear();
-        views->currentWidget()->setEnabled(false);
-    }
-
-    // call show method on the new view
-    View* newView = dynamic_cast<View *> (widget);
-    if (newView) {
-        widget->setEnabled(true);
-        newView->appear();
-        QMap<QString,QVariant> metadata = newView->metadata();
-        QString windowTitle = metadata.value("title").toString();
-        if (windowTitle.length())
-            windowTitle += " - ";
-        setWindowTitle(windowTitle + Constants::NAME);
-        statusBar()->showMessage((metadata.value("description").toString()));
-    }
-
-    stopAct->setEnabled(widget == mediaView);
-    compactViewAct->setEnabled(widget == mediaView);
-    webPageAct->setEnabled(widget == mediaView);
-    copyPageAct->setEnabled(widget == mediaView);
-    copyLinkAct->setEnabled(widget == mediaView);
-    findVideoPartsAct->setEnabled(widget == mediaView);
-    toolbarSearch->setEnabled(widget == searchView || widget == mediaView || widget == downloadView);
-
-    if (widget == searchView) {
-        skipAct->setEnabled(false);
-        The::globalActions()->value("previous")->setEnabled(false);
-        The::globalActions()->value("download")->setEnabled(false);
-        The::globalActions()->value("stopafterthis")->setEnabled(false);
-    }
-
-    The::globalActions()->value("twitter")->setEnabled(widget == mediaView);
-    The::globalActions()->value("facebook")->setEnabled(widget == mediaView);
-    The::globalActions()->value("buffer")->setEnabled(widget == mediaView);
-    The::globalActions()->value("email")->setEnabled(widget == mediaView);
-
-    aboutAct->setEnabled(widget != aboutView);
-    The::globalActions()->value("downloads")->setChecked(widget == downloadView);
-
-    // toolbar only for the mediaView
-    /* mainToolBar->setVisible(
-            (widget == mediaView && !compactViewAct->isChecked())
-            || widget == downloadView
-            ); */
-
-    setUpdatesEnabled(true);
-
-    QWidget *oldWidget = views->currentWidget();
-    if (oldWidget)
-        oldWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
-
-    views->setCurrentWidget(widget);
-    widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-    // adjustSize();
-
-#ifndef Q_WS_X11
-    Extra::fadeInWidget(oldWidget, widget);
-#endif
-
-    history->push(widget);
-}
-
-void MainWindow::about() {
-    if (!aboutView) {
-        aboutView = new AboutView(this);
-        views->addWidget(aboutView);
-    }
-    showWidget(aboutView);
-}
-
-void MainWindow::visitSite() {
-    QUrl url(Constants::WEBSITE);
-    statusBar()->showMessage(QString(tr("Opening %1").arg(url.toString())));
-    QDesktopServices::openUrl(url);
-}
-
-void MainWindow::donate() {
-    QUrl url(QString(Constants::WEBSITE) + "#donate");
-    statusBar()->showMessage(QString(tr("Opening %1").arg(url.toString())));
-    QDesktopServices::openUrl(url);
-}
-
-void MainWindow::reportIssue() {
-    QUrl url("http://flavio.tordini.org/forums/forum/minitube-forums/minitube-troubleshooting");
-    QDesktopServices::openUrl(url);
-}
-
-void MainWindow::quit() {
-#ifdef APP_MAC
-    if (!confirmQuit()) {
-        return;
-    }
-#endif
-    // do not save geometry when in full screen or in compact mode
-    if (!m_fullscreen && !compactViewAct->isChecked()) {
-        writeSettings();
-    }
-    Temporary::deleteAll();
-    qApp->quit();
-}
-
-void MainWindow::closeEvent(QCloseEvent *event) {
-#ifdef APP_MAC
-    mac::closeWindow(winId());
-    event->ignore();
-#else
-    if (!confirmQuit()) {
-        event->ignore();
-        return;
-    }
-    QWidget::closeEvent(event);
-    quit();
-#endif
-}
-
-bool MainWindow::confirmQuit() {
-    if (DownloadManager::instance()->activeItems() > 0) {
-        QMessageBox msgBox(this);
-        msgBox.setIconPixmap(QPixmap(":/images/app.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation));
-        msgBox.setText(tr("Do you want to exit %1 with a download in progress?").arg(Constants::NAME));
-        msgBox.setInformativeText(tr("If you close %1 now, this download will be cancelled.").arg(Constants::NAME));
-        msgBox.setModal(true);
-        // make it a "sheet" on the Mac
-        msgBox.setWindowModality(Qt::WindowModal);
-
-        msgBox.addButton(tr("Close and cancel download"), QMessageBox::RejectRole);
-        QPushButton *waitButton = msgBox.addButton(tr("Wait for download to finish"), QMessageBox::ActionRole);
-
-        msgBox.exec();
-
-        if (msgBox.clickedButton() == waitButton) {
-            return false;
-        }
-    }
-    return true;
-}
-
-void MainWindow::showSearch() {
-    showWidget(searchView);
-    currentTime->clear();
-    totalTime->clear();
-}
-
-void MainWindow::showMedia(SearchParams *searchParams) {
-    mediaView->search(searchParams);
-    showWidget(mediaView);
-}
-
-void MainWindow::stateChanged(Phonon::State newState, Phonon::State /* oldState */) {
-
-    // qDebug() << "Phonon state: " << newState;
-
-    switch (newState) {
-
-    case Phonon::ErrorState:
-        if (mediaObject->errorType() == Phonon::FatalError) {
-            // Do not display because we try to play incomplete video files and sometimes trigger this
-            // We retry automatically (in MediaView) so no need to show it
-            // statusBar()->showMessage(tr("Fatal error: %1").arg(mediaObject->errorString()));
-        } else {
-            statusBar()->showMessage(tr("Error: %1").arg(mediaObject->errorString()));
-        }
-        break;
-
-         case Phonon::PlayingState:
-        pauseAct->setEnabled(true);
-        pauseAct->setIcon(QtIconLoader::icon("media-playback-pause"));
-        pauseAct->setText(tr("&Pause"));
-        pauseAct->setStatusTip(tr("Pause playback") + " (" +  pauseAct->shortcut().toString(QKeySequence::NativeText) + ")");
-        // stopAct->setEnabled(true);
-        break;
-
-         case Phonon::StoppedState:
-        pauseAct->setEnabled(false);
-        // stopAct->setEnabled(false);
-        break;
-
-         case Phonon::PausedState:
-        pauseAct->setEnabled(true);
-        pauseAct->setIcon(QtIconLoader::icon("media-playback-start"));
-        pauseAct->setText(tr("&Play"));
-        pauseAct->setStatusTip(tr("Resume playback") + " (" +  pauseAct->shortcut().toString(QKeySequence::NativeText) + ")");
-        // stopAct->setEnabled(true);
-        break;
-
-         case Phonon::BufferingState:
-         case Phonon::LoadingState:
-        pauseAct->setEnabled(false);
-        currentTime->clear();
-        totalTime->clear();
-        // stopAct->setEnabled(true);
-        break;
-
-         default:
-        ;
-    }
-}
-
-void MainWindow::stop() {
-    mediaView->stop();
-    showSearch();
-}
-
-void MainWindow::resizeEvent(QResizeEvent*) {
-#ifdef Q_WS_MAC
-    if (mac::CanGoFullScreen(winId())) {
-        bool isFullscreen = mac::IsFullScreen(winId());
-        if (isFullscreen != m_fullscreen) {
-            if (compactViewAct->isChecked()) {
-                compactViewAct->setChecked(false);
-                compactView(false);
-            }
-            m_fullscreen = isFullscreen;
-            updateUIForFullscreen();
-        }
-    }
-#endif
-}
-
-void MainWindow::fullscreen() {
-
-    if (compactViewAct->isChecked())
-        compactViewAct->toggle();
-
-#ifdef Q_WS_MAC
-    WId handle = winId();
-    if (mac::CanGoFullScreen(handle)) {
-        mainToolBar->setVisible(true);
-        mac::ToggleFullScreen(handle);
-        return;
-    }
-#endif
-
-    m_fullscreen = !m_fullscreen;
-
-    if (m_fullscreen) {
-        // Enter full screen
-
-        m_maximized = isMaximized();
-
-        // save geometry now, if the user quits when in full screen
-        // geometry won't be saved
-        writeSettings();
-
-#ifdef Q_WS_MAC
-        MacSupport::enterFullScreen(this, views);
-#else
-        mainToolBar->hide();
-        showFullScreen();
-#endif
-
-    } else {
-        // Exit full screen
-
-#ifdef Q_WS_MAC
-        MacSupport::exitFullScreen(this, views);
-#else
-        mainToolBar->show();
-        if (m_maximized) showMaximized();
-        else showNormal();
-#endif
-
-        // Make sure the window has focus
-        activateWindow();
-
-    }
-
-    updateUIForFullscreen();
-
-}
-
-void MainWindow::updateUIForFullscreen() {
-    static QList<QKeySequence> fsShortcuts;
-    static QString fsText;
-
-    if (m_fullscreen) {
-        fsShortcuts = fullscreenAct->shortcuts();
-        fsText = fullscreenAct->text();
-        fullscreenAct->setShortcuts(QList<QKeySequence>(fsShortcuts)
-                                    << QKeySequence(Qt::Key_Escape));
-        fullscreenAct->setText(tr("Leave &Full Screen"));
-    } else {
-        fullscreenAct->setShortcuts(fsShortcuts);
-        fullscreenAct->setText(fsText);
-    }
-
-    // No compact view action when in full screen
-    compactViewAct->setVisible(!m_fullscreen);
-    compactViewAct->setChecked(false);
-
-    // Hide anything but the video
-    mediaView->setPlaylistVisible(!m_fullscreen);
-    statusBar()->setVisible(!m_fullscreen);
-
-#ifndef APP_MAC
-    menuBar()->setVisible(!m_fullscreen);
-#endif
-
-    if (m_fullscreen) {
-        stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_MediaStop));
-    } else {
-        stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
-    }
-
-#ifdef Q_WS_MAC
-    MacSupport::fullScreenActions(The::globalActions()->values(), m_fullscreen);
-#endif
-
-    if (views->currentWidget() == mediaView)
-        mediaView->setFocus();
-
-    if (m_fullscreen) {
-        hideMouse();
-    } else {
-        mouseTimer->stop();
-        unsetCursor();
-    }
-}
-
-void MainWindow::compactView(bool enable) {
-
-    static QList<QKeySequence> compactShortcuts;
-    static QList<QKeySequence> stopShortcuts;
-
-    const static QString key = "compactGeometry";
-    QSettings settings;
-
-#ifndef APP_MAC
-    menuBar()->setVisible(!enable);
-#endif
-
-    if (enable) {
-        setMinimumSize(160, 120);
-#ifdef Q_WS_MAC
-        mac::RemoveFullScreenWindow(winId());
-#endif
-        writeSettings();
-
-        if (settings.contains(key))
-            restoreGeometry(settings.value(key).toByteArray());
-        else
-            resize(320, 240);
-
-        mainToolBar->setVisible(!enable);
-        mediaView->setPlaylistVisible(!enable);
-        statusBar()->setVisible(!enable);
-
-        compactShortcuts = compactViewAct->shortcuts();
-        stopShortcuts = stopAct->shortcuts();
-
-        QList<QKeySequence> newStopShortcuts(stopShortcuts);
-        newStopShortcuts.removeAll(QKeySequence(Qt::Key_Escape));
-        stopAct->setShortcuts(newStopShortcuts);
-        compactViewAct->setShortcuts(QList<QKeySequence>(compactShortcuts) << QKeySequence(Qt::Key_Escape));
-
-        // ensure focus does not end up to the search box
-        // as it would steal the Space shortcut
-        mediaView->setFocus();
-
-    } else {
-        // unset minimum size
-        setMinimumSize(0, 0);
-#ifdef Q_WS_MAC
-        mac::SetupFullScreenWindow(winId());
-#endif
-        settings.setValue(key, saveGeometry());
-        mainToolBar->setVisible(!enable);
-        mediaView->setPlaylistVisible(!enable);
-        statusBar()->setVisible(!enable);
-        readSettings();
-
-        compactViewAct->setShortcuts(compactShortcuts);
-        stopAct->setShortcuts(stopShortcuts);
-    }
-
-    // auto float on top
-    floatOnTop(enable);
-}
-
-void MainWindow::searchFocus() {
-    toolbarSearch->selectAll();
-    toolbarSearch->setFocus();
-}
-
-void MainWindow::initPhonon() {
-    // Phonon initialization
-    if (mediaObject) delete mediaObject;
-    if (audioOutput) delete audioOutput;
-    mediaObject = new Phonon::MediaObject(this);
-    mediaObject->setTickInterval(100);
-    connect(mediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)),
-            this, SLOT(stateChanged(Phonon::State, Phonon::State)));
-    connect(mediaObject, SIGNAL(tick(qint64)), this, SLOT(tick(qint64)));
-    connect(mediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(totalTimeChanged(qint64)));
-    seekSlider->setMediaObject(mediaObject);
-    audioOutput = new Phonon::AudioOutput(Phonon::VideoCategory, this);
-    connect(audioOutput, SIGNAL(volumeChanged(qreal)), this, SLOT(volumeChanged(qreal)));
-    connect(audioOutput, SIGNAL(mutedChanged(bool)), this, SLOT(volumeMutedChanged(bool)));
-    volumeSlider->setAudioOutput(audioOutput);
-    Phonon::createPath(mediaObject, audioOutput);
-}
-
-void MainWindow::tick(qint64 time) {
-    if (time <= 0) {
-        // the "if" is important because tick is continually called
-        // and we don't want to paint the toolbar every 100ms
-        if (!currentTime->text().isEmpty()) currentTime->clear();
-        return;
-    }
-
-    currentTime->setText(formatTime(time));
-
-    // remaining time
-    const qint64 remainingTime = mediaObject->remainingTime();
-    currentTime->setStatusTip(tr("Remaining time: %1").arg(formatTime(remainingTime)));
-
-    /*
-    slider->blockSignals(true);
-    slider->setValue(time/1000);
-    slider->blockSignals(false);
-    */
-}
-
-void MainWindow::totalTimeChanged(qint64 time) {
-    if (time <= 0) {
-        totalTime->clear();
-        return;
-    }
-    totalTime->setText(formatTime(time));
-
-    /*
-    slider->blockSignals(true);
-    slider->setMaximum(time/1000);
-    slider->blockSignals(false);
-    */
-
-}
-
-QString MainWindow::formatTime(qint64 time) {
-    QTime displayTime;
-    displayTime = displayTime.addMSecs(time);
-    QString timeString;
-    // 60 * 60 * 1000 = 3600000
-    if (time > 3600000)
-        timeString = displayTime.toString("h:mm:ss");
-    else
-        timeString = displayTime.toString("m:ss");
-    return timeString;
-}
-
-void MainWindow::volumeUp() {
-    qreal newVolume = volumeSlider->audioOutput()->volume() + .1;
-    if (newVolume > volumeSlider->maximumVolume())
-        newVolume = volumeSlider->maximumVolume();
-    volumeSlider->audioOutput()->setVolume(newVolume);
-}
-
-void MainWindow::volumeDown() {
-    qreal newVolume = volumeSlider->audioOutput()->volume() - .1;
-    if (newVolume < 0)
-        newVolume = 0;
-    volumeSlider->audioOutput()->setVolume(newVolume);
-}
-
-void MainWindow::volumeMute() {
-    volumeSlider->audioOutput()->setMuted(!volumeSlider->audioOutput()->isMuted());
-}
-
-void MainWindow::volumeChanged(qreal newVolume) {
-    // automatically unmute when volume changes
-    if (volumeSlider->audioOutput()->isMuted())
-        volumeSlider->audioOutput()->setMuted(false);
-    statusBar()->showMessage(tr("Volume at %1%").arg((int)(newVolume*100)));
-}
-
-void MainWindow::volumeMutedChanged(bool muted) {
-    if (muted) {
-        volumeMuteAct->setIcon(QtIconLoader::icon("audio-volume-muted"));
-        statusBar()->showMessage(tr("Volume is muted"));
-    } else {
-        volumeMuteAct->setIcon(QtIconLoader::icon("audio-volume-high"));
-        statusBar()->showMessage(tr("Volume is unmuted"));
-    }
-}
-
-void MainWindow::setDefinitionMode(QString definitionName) {
-    QAction *definitionAct = The::globalActions()->value("definition");
-    definitionAct->setText(definitionName);
-    definitionAct->setStatusTip(tr("Maximum video definition set to %1").arg(definitionAct->text())
-                                + " (" +  definitionAct->shortcut().toString(QKeySequence::NativeText) + ")");
-    statusBar()->showMessage(definitionAct->statusTip());
-    QSettings settings;
-    settings.setValue("definition", definitionName);
-}
-
-void MainWindow::toggleDefinitionMode() {
-    QSettings settings;
-    QString currentDefinition = settings.value("definition").toString();
-    QStringList definitionNames = VideoDefinition::getDefinitionNames();
-    int currentIndex = definitionNames.indexOf(currentDefinition);
-    int nextIndex = 0;
-    if (currentIndex != definitionNames.size() - 1) {
-        nextIndex = currentIndex + 1;
-    }
-    QString nextDefinition = definitionNames.at(nextIndex);
-    setDefinitionMode(nextDefinition);
-}
-
-void MainWindow::showFullscreenToolbar(bool show) {
-    if (!m_fullscreen) return;
-    mainToolBar->setVisible(show);
-}
-
-void MainWindow::showFullscreenPlaylist(bool show) {
-    if (!m_fullscreen) return;
-    mediaView->setPlaylistVisible(show);
-}
-
-void MainWindow::clearRecentKeywords() {
-    QSettings settings;
-    settings.remove("recentKeywords");
-    settings.remove("recentChannels");
-    searchView->updateRecentKeywords();
-    searchView->updateRecentChannels();
-    statusBar()->showMessage(tr("Your privacy is now safe"));
-}
-
-void MainWindow::setManualPlay(bool enabled) {
-    QSettings settings;
-    settings.setValue("manualplay", QVariant::fromValue(enabled));
-    showActionInStatusBar(The::globalActions()->value("manualplay"), enabled);
-}
-
-void MainWindow::updateDownloadMessage(QString message) {
-    The::globalActions()->value("downloads")->setText(message);
-}
-
-void MainWindow::downloadsFinished() {
-    The::globalActions()->value("downloads")->setText(tr("&Downloads"));
-    statusBar()->showMessage(tr("Downloads complete"));
-}
-
-void MainWindow::toggleDownloads(bool show) {
-
-    if (show) {
-        stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_MediaStop));
-        The::globalActions()->value("downloads")->setShortcuts(
-                QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_J)
-                << QKeySequence(Qt::Key_Escape));
-    } else {
-        The::globalActions()->value("downloads")->setShortcuts(
-                QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_J));
-        stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
-    }
-
-    if (!downloadView) {
-        downloadView = new DownloadView(this);
-        views->addWidget(downloadView);
-    }
-    if (show) showWidget(downloadView);
-    else goBack();
-}
-
-void MainWindow::startToolbarSearch(QString query) {
-    query = query.trimmed();
-
-    // check for empty query
-    if (query.length() == 0) {
-        return;
-    }
-
-    SearchParams *searchParams = new SearchParams();
-    searchParams->setKeywords(query);
-
-    // go!
-    showMedia(searchParams);
-}
-
-void MainWindow::dragEnterEvent(QDragEnterEvent *event) {
-    if (event->mimeData()->hasFormat("text/uri-list")) {
-        QList<QUrl> urls = event->mimeData()->urls();
-        if (urls.isEmpty())
-            return;
-        QUrl url = urls.first();
-        QString videoId = YouTubeSearch::videoIdFromUrl(url.toString());
-        if (!videoId.isNull())
-            event->acceptProposedAction();
-    }
-}
-
-void MainWindow::dropEvent(QDropEvent *event) {
-    QList<QUrl> urls = event->mimeData()->urls();
-    if (urls.isEmpty())
-        return;
-    QUrl url = urls.first();
-    QString videoId = YouTubeSearch::videoIdFromUrl(url.toString());
-    if (!videoId.isNull()) {
-        setWindowTitle(url.toString());
-        SearchParams *searchParams = new SearchParams();
-        searchParams->setKeywords(videoId);
-        showMedia(searchParams);
-    }
-}
-
-void MainWindow::checkForUpdate() {
-    static const QString updateCheckKey = "updateCheck";
-
-    // check every 24h
-    QSettings settings;
-    uint unixTime = QDateTime::currentDateTime().toTime_t();
-    int lastCheck = settings.value(updateCheckKey).toInt();
-    int secondsSinceLastCheck = unixTime - lastCheck;
-    // qDebug() << "secondsSinceLastCheck" << unixTime << lastCheck << secondsSinceLastCheck;
-    if (secondsSinceLastCheck < 86400) return;
-
-    // check it out
-    if (updateChecker) delete updateChecker;
-    updateChecker = new UpdateChecker();
-    connect(updateChecker, SIGNAL(newVersion(QString)),
-            this, SLOT(gotNewVersion(QString)));
-    updateChecker->checkForUpdate();
-    settings.setValue(updateCheckKey, unixTime);
-
-}
-
-void MainWindow::gotNewVersion(QString version) {
-    if (updateChecker) {
-        delete updateChecker;
-        updateChecker = 0;
-    }
-
-#if defined(APP_DEMO) || defined(APP_MAC_STORE) || defined(APP_USC)
-    return;
-#endif
-
-    QSettings settings;
-    QString checkedVersion = settings.value("checkedVersion").toString();
-    if (checkedVersion == version) return;
-
-    QMessageBox msgBox(this);
-    msgBox.setIconPixmap(QPixmap(":/images/app.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation));
-    msgBox.setText(tr("%1 version %2 is now available.").arg(Constants::NAME, version));
-
-    msgBox.setModal(true);
-    // make it a "sheet" on the Mac
-    msgBox.setWindowModality(Qt::WindowModal);
-
-    QPushButton* laterButton = 0;
-    QPushButton* updateButton = 0;
-
-#if defined(APP_MAC) || defined(APP_WIN)
-    msgBox.setInformativeText(
-                tr("To get the updated version, download %1 again from the link you received via email and reinstall.")
-                .arg(Constants::NAME)
-                );
-    laterButton = msgBox.addButton(tr("Remind me later"), QMessageBox::RejectRole);
-    msgBox.addButton(QMessageBox::Ok);
-#else
-    msgBox.addButton(QMessageBox::Close);
-    updateButton = msgBox.addButton(tr("Update"), QMessageBox::AcceptRole);
-#endif
-
-    msgBox.exec();
-
-    if (msgBox.clickedButton() != laterButton) {
-        settings.setValue("checkedVersion", version);
-    }
-
-    if (updateButton && msgBox.clickedButton() == updateButton) {
-        QDesktopServices::openUrl(QUrl(QLatin1String(Constants::WEBSITE) + "#download"));
-    }
-
-}
-
-void MainWindow::floatOnTop(bool onTop) {
-    showActionInStatusBar(The::globalActions()->value("ontop"), onTop);
-#ifdef APP_MAC
-    mac::floatOnTop(winId(), onTop);
-    return;
-#endif
-    if (onTop) {
-        setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
-        show();
-    } else {
-        setWindowFlags(windowFlags() ^ Qt::WindowStaysOnTopHint);
-        show();
-    }
-}
-
-void MainWindow::restore() {
-#ifdef APP_MAC
-    mac::uncloseWindow(window()->winId());
-#endif
-}
-
-void MainWindow::messageReceived(const QString &message) {
-    if (message == "--toggle-playing") {
-        if (pauseAct->isEnabled()) pauseAct->trigger();
-    } else if (message == "--next") {
-        if (skipAct->isEnabled()) skipAct->trigger();
-    } else if (message == "--previous") {
-        if (skipBackwardAct->isEnabled()) skipBackwardAct->trigger();
-    }  else if (message.startsWith("--")) {
-        MainWindow::printHelp();
-    } else if (!message.isEmpty()) {
-        SearchParams *searchParams = new SearchParams();
-        searchParams->setKeywords(message);
-        showMedia(searchParams);
-    }
-}
-
-void MainWindow::hideMouse() {
-    setCursor(Qt::BlankCursor);
-    mediaView->setPlaylistVisible(false);
-#ifndef APP_MAC
-    mainToolBar->setVisible(false);
-#endif
-}
-
-void MainWindow::printHelp() {
-    QString msg = QString("%1 %2\n\n").arg(Constants::NAME, Constants::VERSION);
-    msg += "Usage: minitube [options]\n";
-    msg += "Options:\n";
-    msg += "  --toggle-playing\t";
-    msg += "Start or pause playback.\n";
-    msg += "  --next\t\t";
-    msg += "Skip to the next video.\n";
-    msg += "  --previous\t\t";
-    msg += "Go back to the previous video.\n";
-    std::cout << msg.toLocal8Bit().data();
-}