You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
8.4 KiB
270 lines
8.4 KiB
/*****************************************************************************
|
|
* main_interface.hpp : Main Interface
|
|
****************************************************************************
|
|
* Copyright (C) 2006-2010 VideoLAN and AUTHORS
|
|
* $Id$
|
|
*
|
|
* Authors: Clément Stenac <zorglub@videolan.org>
|
|
* Jean-Baptiste Kempf <jb@videolan.org>
|
|
*
|
|
* 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 2 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, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
|
*****************************************************************************/
|
|
|
|
#ifndef QVLC_MAIN_INTERFACE_H_
|
|
#define QVLC_MAIN_INTERFACE_H_
|
|
|
|
#include "qt.hpp"
|
|
|
|
#include "util/qvlcframe.hpp"
|
|
|
|
#include <QSystemTrayIcon>
|
|
#include <QStackedWidget>
|
|
|
|
#ifdef _WIN32
|
|
# include <shobjidl.h>
|
|
#endif
|
|
|
|
class QSettings;
|
|
class QCloseEvent;
|
|
class QKeyEvent;
|
|
class QLabel;
|
|
class QEvent;
|
|
class VideoWidget;
|
|
class BackgroundWidget;
|
|
class PlaylistWidget;
|
|
class VisualSelector;
|
|
class ControlsWidget;
|
|
class InputControlsWidget;
|
|
class FullscreenControllerWidget;
|
|
class QVBoxLayout;
|
|
class QMenu;
|
|
class QSize;
|
|
class QTimer;
|
|
class StandardPLPanel;
|
|
struct vout_window_t;
|
|
|
|
class MainInterface : public QVLCMW
|
|
{
|
|
Q_OBJECT
|
|
|
|
friend class PlaylistWidget;
|
|
|
|
public:
|
|
/* tors */
|
|
MainInterface( intf_thread_t *);
|
|
virtual ~MainInterface();
|
|
|
|
static const QEvent::Type ToolbarsNeedRebuild;
|
|
|
|
/* Video requests from core */
|
|
WId getVideo( struct vout_window_t *,
|
|
unsigned int i_width, unsigned int i_height, bool );
|
|
void releaseVideo( void );
|
|
int controlVideo( int i_query, va_list args );
|
|
|
|
/* Getters */
|
|
QSystemTrayIcon *getSysTray() { return sysTray; }
|
|
QMenu *getSysTrayMenu() { return systrayMenu; }
|
|
FullscreenControllerWidget* getFullscreenControllerWidget() { return fullscreenControls; }
|
|
enum
|
|
{
|
|
CONTROLS_VISIBLE = 0x1,
|
|
CONTROLS_HIDDEN = 0x2,
|
|
CONTROLS_ADVANCED = 0x4,
|
|
};
|
|
int getControlsVisibilityStatus();
|
|
bool isPlDocked() { return ( b_plDocked != false ); }
|
|
bool isInterfaceFullScreen() { return b_interfaceFullScreen; }
|
|
StandardPLPanel* getPlaylistView();
|
|
|
|
protected:
|
|
void dropEventPlay( QDropEvent* event, bool b_play ) { dropEventPlay(event, b_play, true); }
|
|
void dropEventPlay( QDropEvent *, bool, bool );
|
|
void changeEvent( QEvent * ) Q_DECL_OVERRIDE;
|
|
void dropEvent( QDropEvent *) Q_DECL_OVERRIDE;
|
|
void dragEnterEvent( QDragEnterEvent * ) Q_DECL_OVERRIDE;
|
|
void dragMoveEvent( QDragMoveEvent * ) Q_DECL_OVERRIDE;
|
|
void dragLeaveEvent( QDragLeaveEvent * ) Q_DECL_OVERRIDE;
|
|
void closeEvent( QCloseEvent *) Q_DECL_OVERRIDE;
|
|
void keyPressEvent( QKeyEvent *) Q_DECL_OVERRIDE;
|
|
void wheelEvent( QWheelEvent * ) Q_DECL_OVERRIDE;
|
|
bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
|
|
virtual void toggleUpdateSystrayMenuWhenVisible();
|
|
|
|
protected:
|
|
/* Main Widgets Creation */
|
|
void createMainWidget( QSettings* );
|
|
void createStatusBar();
|
|
void createPlaylist();
|
|
void createResumePanel( QWidget *w );
|
|
|
|
/* Systray */
|
|
void createSystray();
|
|
void initSystray();
|
|
void handleSystray();
|
|
|
|
/* Central StackWidget Management */
|
|
void showTab( QWidget *);
|
|
void showVideo();
|
|
void restoreStackOldWidget();
|
|
|
|
/* */
|
|
void displayNormalView();
|
|
void setMinimalView( bool );
|
|
void setInterfaceFullScreen( bool );
|
|
void computeMinimumSize();
|
|
|
|
/* */
|
|
QSettings *settings;
|
|
QSystemTrayIcon *sysTray;
|
|
QMenu *systrayMenu;
|
|
|
|
QString input_name;
|
|
QVBoxLayout *mainLayout;
|
|
ControlsWidget *controls;
|
|
InputControlsWidget *inputC;
|
|
FullscreenControllerWidget *fullscreenControls;
|
|
|
|
/* Widgets */
|
|
QStackedWidget *stackCentralW;
|
|
|
|
VideoWidget *videoWidget;
|
|
BackgroundWidget *bgWidget;
|
|
PlaylistWidget *playlistWidget;
|
|
//VisualSelector *visualSelector;
|
|
|
|
/* resume panel */
|
|
QWidget *resumePanel;
|
|
QTimer *resumeTimer;
|
|
int64_t i_resumeTime;
|
|
|
|
/* Status Bar */
|
|
QLabel *nameLabel;
|
|
QLabel *cryptedLabel;
|
|
|
|
/* Status and flags */
|
|
QWidget *stackCentralOldWidget;
|
|
QPoint lastWinPosition;
|
|
QSize lastWinSize; /// To restore the same window size when leaving fullscreen
|
|
|
|
QMap<QWidget *, QSize> stackWidgetsSizes;
|
|
|
|
/* Flags */
|
|
unsigned i_notificationSetting; /// Systray Notifications
|
|
bool b_autoresize; ///< persistent resizable window
|
|
bool b_videoEmbedded; ///< Want an external Video Window
|
|
bool b_videoFullScreen; ///< --fullscreen
|
|
bool b_hideAfterCreation;
|
|
bool b_minimalView; ///< Minimal video
|
|
bool b_interfaceFullScreen;
|
|
bool b_pauseOnMinimize;
|
|
bool b_maximizedView;
|
|
|
|
/* States */
|
|
bool playlistVisible; ///< Is the playlist visible ?
|
|
// bool videoIsActive; ///< Having a video now / THEMIM->hasV
|
|
// bool b_visualSelectorEnabled;
|
|
bool b_plDocked; ///< Is the playlist docked ?
|
|
|
|
bool b_hasPausedWhenMinimized;
|
|
bool b_statusbarVisible;
|
|
|
|
static const Qt::Key kc[10]; /* easter eggs */
|
|
int i_kc_offset;
|
|
|
|
public slots:
|
|
void dockPlaylist( bool b_docked = true );
|
|
void toggleMinimalView( bool );
|
|
void togglePlaylist();
|
|
void toggleUpdateSystrayMenu();
|
|
void showUpdateSystrayMenu();
|
|
void hideUpdateSystrayMenu();
|
|
void toggleAdvancedButtons();
|
|
void toggleInterfaceFullScreen();
|
|
void toggleFSC();
|
|
|
|
void setStatusBarVisibility(bool b_visible);
|
|
void setPlaylistVisibility(bool b_visible);
|
|
|
|
/* Manage the Video Functions from the vout threads */
|
|
void getVideoSlot( WId *p_id, struct vout_window_t *,
|
|
unsigned pi_width, unsigned pi_height, bool );
|
|
void releaseVideoSlot( void );
|
|
|
|
void emitBoss();
|
|
void emitRaise();
|
|
|
|
virtual void reloadPrefs();
|
|
void toolBarConfUpdated();
|
|
|
|
protected slots:
|
|
void debug();
|
|
void recreateToolbars();
|
|
void setName( const QString& );
|
|
void setVLCWindowsTitle( const QString& title = "" );
|
|
#if 0
|
|
void visual();
|
|
#endif
|
|
void handleSystrayClick( QSystemTrayIcon::ActivationReason );
|
|
void updateSystrayTooltipName( const QString& );
|
|
void updateSystrayTooltipStatus( int );
|
|
void showCryptedLabel( bool );
|
|
|
|
void handleKeyPress( QKeyEvent * );
|
|
|
|
void showBuffering( float );
|
|
|
|
void resizeStack( int w, int h )
|
|
{
|
|
if( !isFullScreen() && !isMaximized() )
|
|
{
|
|
if( b_minimalView )
|
|
resize( w, h ); /* Oh yes, it shouldn't
|
|
be possible that size() - stackCentralW->size() < 0
|
|
since stackCentralW is contained in the QMW... */
|
|
else
|
|
resize( size() - stackCentralW->size() + QSize( w, h ) );
|
|
}
|
|
debug();
|
|
}
|
|
|
|
void setVideoSize( unsigned int, unsigned int );
|
|
void videoSizeChanged( int, int );
|
|
virtual void setVideoFullScreen( bool );
|
|
void setHideMouse( bool );
|
|
void setVideoOnTop( bool );
|
|
void setBoss();
|
|
void setRaise();
|
|
|
|
void showResumePanel( int64_t);
|
|
void hideResumePanel();
|
|
void resumePlayback();
|
|
|
|
signals:
|
|
void askGetVideo( WId *, struct vout_window_t *, unsigned, unsigned, bool );
|
|
void askReleaseVideo( );
|
|
void askVideoToResize( unsigned int, unsigned int );
|
|
void askVideoSetFullScreen( bool );
|
|
void askHideMouse( bool );
|
|
void askVideoOnTop( bool );
|
|
void minimalViewToggled( bool );
|
|
void fullscreenInterfaceToggled( bool );
|
|
void askToQuit();
|
|
void askBoss();
|
|
void askRaise();
|
|
void kc_pressed(); /* easter eggs */
|
|
};
|
|
|
|
#endif
|
|
|