#ifndef MAINWINDOW_H
#define MAINWINDOW_H
-#include <QtGui>
-#if QT_VERSION >= 0x050000
#include <QtWidgets>
-#endif
-#ifdef APP_PHONON
-#include <phonon/audiooutput.h>
-#include <phonon/volumeslider.h>
-#include <phonon/mediaobject.h>
-#include <phonon/seekslider.h>
-#endif
+#include "media.h"
+
+class View;
class HomeView;
class MediaView;
class DownloadView;
+
class SearchLineEdit;
-class UpdateChecker;
class SearchParams;
class VideoSource;
class Suggestion;
+class ToolbarMenu;
class MainWindow : public QMainWindow {
-
Q_OBJECT
public:
- static MainWindow* instance();
+ static MainWindow *instance();
MainWindow();
-#ifdef APP_PHONON_SEEK
- Phonon::SeekSlider* getSeekSlider() { return seekSlider; }
-#else
- QSlider* getSlider() { return slider; }
-#endif
-#ifdef APP_PHONON
- Phonon::AudioOutput* getAudioOutput() { return audioOutput; }
- Phonon::VolumeSlider *getVolumeSlider() { return volumeSlider; }
-#endif
- QLabel *getCurrentTimeLabel() { return currentTime; }
+
+ QSlider *getSeekSlider() { return seekSlider; }
+ QSlider *getVolumeSlider() { return volumeSlider; }
+
+ QLabel *getCurrentTimeLabel() { return currentTimeLabel; }
void readSettings();
void writeSettings();
static void printHelp();
- MediaView* getMediaView() { return mediaView; }
- QToolButton* getRegionButton() { return regionButton; }
- QAction* getRegionAction() { return regionAction; }
+ QStackedWidget *getViews() { return views; }
+ MediaView *getMediaView() { return mediaView; }
+ HomeView *getHomeView() { return homeView; }
+ QAction *getRegionAction() { return regionAction; }
SearchLineEdit *getToolbarSearch() { return toolbarSearch; }
- void showActionInStatusBar(QAction*, bool show);
+ void setupAction(QAction *action);
+ QAction *getAction(const char *name);
+ void addNamedAction(const QByteArray &name, QAction *action);
+
+ QMenu *getMenu(const char *name);
+
+ void showActionsInStatusBar(const QVector<QAction *> &actions, bool show);
void setStatusBarVisibility(bool show);
void adjustStatusBarVisibility();
+ void hideToolbar();
+ void showToolbar();
+
+#ifdef APP_ACTIVATION
+ void showActivationView();
+#endif
+
public slots:
- void showHome(bool transition = true);
+ void showHome();
void showMedia(SearchParams *params);
void showMedia(VideoSource *videoSource);
void showRegionsView();
void quit();
void suggestionAccepted(Suggestion *suggestion);
void search(const QString &query);
+ bool canGoBack() { return history.size() > 1; }
void goBack();
void showMessage(const QString &message);
-#ifdef APP_ACTIVATION
- void showActivationView(bool transition = true);
- void showActivationDialog();
- void buy();
- void hideBuyAction();
-#endif
+ void hideMessage();
+ void handleError(const QString &message);
bool isReallyFullScreen();
- bool isCompact() { return m_compact; }
+ bool isCompact() { return compactModeActive; }
+ void missingKeyWarning();
+ void visitSite();
+ void setDefinitionMode(const QString &definitionName);
signals:
void currentTimeChanged(const QString &s);
+ void viewChanged();
protected:
void changeEvent(QEvent *e);
void dragEnterEvent(QDragEnterEvent *e);
void dropEvent(QDropEvent *e);
void resizeEvent(QResizeEvent *e);
- void moveEvent(QMoveEvent *e);
+ void leaveEvent(QEvent *e);
+ void enterEvent(QEvent *e);
private slots:
void lazyInit();
- void checkForUpdate();
- void gotNewVersion(const QString &version);
- void visitSite();
void donate();
void reportIssue();
void about();
- void fullscreen();
+ void toggleFullscreen();
void updateUIForFullscreen();
void compactView(bool enable);
void stop();
-#ifdef APP_PHONON
- void stateChanged(Phonon::State newState, Phonon::State oldState);
-#endif
void searchFocus();
- void tick(qint64 time);
- void totalTimeChanged(qint64 time);
- void setDefinitionMode(const QString &definitionName);
void toggleDefinitionMode();
void clearRecentKeywords();
- // volume shortcuts
+ // media
+ void stateChanged(Media::State state);
+ void tick(qint64 time);
+
void volumeUp();
void volumeDown();
- void volumeMute();
+ void toggleVolumeMute();
void volumeChanged(qreal newVolume);
void volumeMutedChanged(bool muted);
- // fullscreen toolbar
- void showFullscreenToolbar(bool show);
- void showFullscreenPlaylist(bool show);
-
- void setManualPlay(bool enabled);
void updateDownloadMessage(const QString &);
void downloadsFinished();
void toggleDownloads(bool show);
+ void setManualPlay(bool enabled);
void floatOnTop(bool, bool showAction = true);
- void adjustWindowSizeChanged(bool enabled);
-
void showStopAfterThisInStatusBar(bool show);
+ void hideFullscreenUI();
- void hideMouse();
+ void toggleMenuVisibility();
+ void toggleMenuVisibilityWithMessage();
+ void toggleToolbarMenu();
#ifdef APP_MAC_STORE
void rateOnAppStore();
#endif
private:
-#ifdef APP_PHONON
- void initPhonon();
-#endif
+ void initMedia();
void createActions();
void createMenus();
- void createToolBars();
+ void createToolBar();
void createStatusBar();
- void showWidget(QWidget*, bool transition = true);
+ void showView(View *view, bool transition = false);
static QString formatTime(qint64 duration);
bool confirmQuit();
- void simpleUpdateDialog(const QString &version);
bool needStatusBar();
void adjustMessageLabelPosition();
- UpdateChecker *updateChecker;
+ QHash<QByteArray, QAction *> actionMap;
+ QHash<QByteArray, QMenu *> menuMap;
// view mechanism
QStackedWidget *views;
- QStack<QWidget*> history;
- QList<QAction*> viewActions;
+ QStack<View *> history;
// view widgets
HomeView *homeView;
MediaView *mediaView;
- QWidget *aboutView;
- QWidget *downloadView;
- QWidget *regionsView;
+ View *aboutView;
+ View *downloadView;
+ View *regionsView;
+ View *subscriptionImportView = nullptr;
// actions
QAction *backAct;
QToolBar *mainToolBar;
SearchLineEdit *toolbarSearch;
QToolBar *statusToolBar;
- QToolButton *regionButton;
QAction *regionAction;
-
- // phonon
-#ifdef APP_PHONON
-#ifdef APP_PHONON_SEEK
- Phonon::SeekSlider *seekSlider;
-#else
- QSlider *slider;
-#endif
- Phonon::VolumeSlider *volumeSlider;
- Phonon::MediaObject *mediaObject;
- Phonon::AudioOutput *audioOutput;
-#endif
- QLabel *currentTime;
- // QLabel *totalTime;
-
- bool fullscreenFlag;
- bool m_maximized;
- QTimer *mouseTimer;
- bool m_compact;
+ QSlider *seekSlider;
+ QSlider *volumeSlider;
+ QLabel *currentTimeLabel;
+
+ bool fullScreenActive;
+ bool maximizedBeforeFullScreen;
+ bool menuVisibleBeforeFullScreen;
+ QTimer *fullscreenTimer;
+ bool compactModeActive;
+ bool menuVisibleBeforeCompactMode;
bool initialized;
QLabel *messageLabel;
QTimer *messageTimer;
+ ToolbarMenu *toolbarMenu;
+ QToolButton *toolbarMenuButton;
+
+ Media *media;
};
#endif