Files

222 lines
6.1 KiB
C++

/******************************************************************************
QtAV Player Demo: this file is part of QtAV examples
Copyright (C) 2012-2016 Wang Bin <wbsecg1@gmail.com>
* This file is part of QtAV
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <QUrl>
QT_BEGIN_NAMESPACE
class QWidgetAction;
class QToolButton;
QT_END_NAMESPACE
namespace QtAV {
class AudioOutput;
class AVError;
class AVPlayer;
class AVClock;
class VideoRenderer;
class LibAVFilterAudio;
class LibAVFilterVideo;
class SubtitleFilter;
class VideoPreviewWidget;
class DynamicShaderObject;
class GLSLFilter;
}
QT_BEGIN_NAMESPACE
class QMenu;
class QTimeEdit;
class QVBoxLayout;
class QLabel;
class QPushButton;
class QSpinBox;
class QTimeEdit;
QT_END_NAMESPACE
class Button;
class Slider;
class PlayList;
class DecoderConfigPage;
class VideoEQConfigPage;
class StatisticsView;
class OSDFilter;
class AVFilterSubtitle;
class Preview;
class MainWindow : public QWidget
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void setAudioBackends(const QStringList& backends);
bool setRenderer(QtAV::VideoRenderer* renderer);
void setVideoDecoderNames(const QStringList& vd);
public slots:
void play(const QString& name);
void play(const QUrl& url);
void openFile();
void togglePlayPause();
void showNextOSD();
signals:
void ready();
private slots:
void stopUnload();
void about();
void help();
void openUrl();
void initAudioTrackMenu();
void updateChannelMenu();
void switchAspectRatio(QAction* action);
void toggleRepeat(bool);
void setRepeateMax(int);
void changeVO(QAction* action);
void changeChannel(QAction* action);
void changeAudioTrack(QAction* action);
void onTVMenuClick();
void playOnlineVideo(QAction *action);
void onPlayListClick(const QString& key, const QString& value);
void processPendingActions();
void initPlayer();
void setupUi();
void onSpinBoxChanged(double v);
void onStartPlay();
void onStopPlay();
void onPaused(bool p);
void onSpeedChange(qreal speed);
void setFrameRate();
void seek();
void seek(int);
void showHideVolumeBar();
void setVolume();
void tryHideControlBar();
void tryShowControlBar();
void showInfo();
void onPositionChange(qint64 pos);
void repeatAChanged(const QTime& t);
void repeatBChanged(const QTime& t);
void onTimeSliderHover(int pos, int value);
void onTimeSliderLeave();
void handleError(const QtAV::AVError& e);
void onMediaStatusChanged();
void onBufferProgress(qreal percent);
void onVideoEQEngineChanged();
void onBrightnessChanged(int b);
void onContrastChanged(int c);
void onHueChanged(int h);
void onSaturationChanged(int s);
void onSeekFinished(qint64 pos);
void onCaptureConfigChanged();
void onAVFilterVideoConfigChanged();
void onAVFilterAudioConfigChanged();
void onBufferValueChanged();
void onAbortOnTimeoutChanged();
void onUserShaderChanged();
void donate();
void setup();
void handleFullscreenChange();
void toggoleSubtitleEnabled(bool value);
void toggleSubtitleAutoLoad(bool value);
void openSubtitle();
void setSubtitleCharset(const QString& charSet);
void setSubtitleEngine(const QString& value);
void changeClockType(QAction* action);
void syncVolumeUi(qreal value);
protected:
virtual void closeEvent(QCloseEvent *e);
virtual void resizeEvent(QResizeEvent *);
virtual void timerEvent(QTimerEvent *);
virtual void keyPressEvent(QKeyEvent *e);
virtual void keyReleaseEvent(QKeyEvent *e);
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void wheelEvent(QWheelEvent *e);
private:
void workaroundRendererSize();
private:
bool mIsReady, mHasPendingPlay;
bool mControlOn;
int mCursorTimer;
int mShowControl; //0: can hide, 1: show and playing, 2: always show(not playing)
int mRepeateMax;
QStringList mAudioBackends;
QVBoxLayout *mpPlayerLayout;
QWidget *mpControl;
QLabel *mpCurrent, *mpEnd;
QLabel *mpTitle;
QLabel *mpSpeed;
Slider *mpTimeSlider, *mpVolumeSlider;
QToolButton *mpVolumeBtn;
QToolButton *mpPlayPauseBtn;
QToolButton *mpStopBtn, *mpForwardBtn, *mpBackwardBtn;
QToolButton *mpOpenBtn;
QToolButton *mpInfoBtn, *mpMenuBtn, *mpSetupBtn, *mpCaptureBtn;
QMenu *mpMenu;
QAction *mpVOAction, *mpARAction; //remove mpVOAction if vo.id() is supported
QAction *mpRepeatEnableAction;
QWidgetAction *mpRepeatAction;
QSpinBox *mpRepeatBox;
QTimeEdit *mpRepeatA, *mpRepeatB;
QAction *mpAudioTrackAction;
QMenu *mpAudioTrackMenu;
QMenu *mpChannelMenu;
QAction *mpChannelAction;
QList<QAction*> mVOActions;
QtAV::AVClock *mpClock;
QtAV::AVPlayer *mpPlayer;
QtAV::VideoRenderer *mpRenderer;
QtAV::LibAVFilterVideo *mpVideoFilter;
QtAV::LibAVFilterAudio *mpAudioFilter;
QString mFile;
QString mTitle;
QLabel *mpPreview;
DecoderConfigPage *mpDecoderConfigPage;
VideoEQConfigPage *mpVideoEQ;
PlayList *mpPlayList, *mpHistory;
QPointF mGlobalMouse;
StatisticsView *mpStatisticsView;
OSDFilter *mpOSD;
QtAV::SubtitleFilter *mpSubtitle;
QtAV::VideoPreviewWidget *m_preview;
QtAV::DynamicShaderObject *m_shader;
QtAV::GLSLFilter *m_glsl;
};
#endif // MAINWINDOW_H