Commit 5aebc3b8 authored by Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf

Qt4 - Main Interface: Advanced buttons are correctly integrated, cosmetic,

      cleanup and fixes.
parent ac443292
......@@ -209,27 +209,54 @@ void VisualSelector::next()
}
/**********************************************************************
* More controls
* TEH controls
**********************************************************************/
#define setupSmallButton( aButton ){ \
aButton->setMaximumSize( QSize( 26, 26 ) ); \
aButton->setMinimumSize( QSize( 26, 26 ) ); \
aButton->setIconSize( QSize( 20, 20 ) ); }
AdvControlsWidget::AdvControlsWidget( intf_thread_t *_p_i ) :
QFrame( NULL ), p_intf( _p_i )
{
QHBoxLayout *layout = new QHBoxLayout( this );
layout->setMargin( 0 );
QHBoxLayout *advLayout = new QHBoxLayout( this );
advLayout->setMargin( 0 );
advLayout->setSpacing( 0 );
normalButton = new QPushButton( "N" );
BUTTON_SET_ACT( normalButton, "N", qtr( "Normal rate" ), normal() );
layout->addWidget( normalButton );
normalButton->setMaximumWidth( 35 );
layout->addItem( new QSpacerItem( 100,20,
QSizePolicy::Expanding, QSizePolicy::Minimum ) );
/* FIXME A to B function */
ABButton = new QPushButton( "AB" );
ABButton->setMaximumSize( QSize( 26, 26 ) );
ABButton->setIconSize( QSize( 20, 20 ) );
advLayout->addWidget( ABButton );
BUTTON_SET_ACT( ABButton, "AB", qtr( "A to B" ), normal() );
snapshotButton = new QPushButton( "S" );
snapshotButton->setMaximumSize( QSize( 26, 26 ) );
snapshotButton->setIconSize( QSize( 20, 20 ) );
advLayout->addWidget( snapshotButton );
BUTTON_SET_ACT( snapshotButton, "S", qtr( "Take a snapshot" ), snapshot() );
layout->addWidget( snapshotButton );
snapshotButton->setMaximumWidth( 35 );
//FIXME Frame by frame function
frameButton = new QPushButton( "Fr" );
frameButton->setMaximumSize( QSize( 26, 26 ) );
frameButton->setIconSize( QSize( 20, 20 ) );
advLayout->addWidget( frameButton );
BUTTON_SET_ACT( frameButton, "Fr", qtr( "Frame by Frame" ), frame() );
/* FIXME Record function */
recordButton = new QPushButton( "R" );
recordButton->setMaximumSize( QSize( 26, 26 ) );
recordButton->setIconSize( QSize( 20, 20 ) );
advLayout->addWidget( recordButton );
BUTTON_SET_ACT( recordButton, "R", qtr( "Record" ), record() );
normalButton = new QPushButton( "N" );
normalButton->setMaximumSize( QSize( 26, 26 ) );
normalButton->setIconSize( QSize( 20, 20 ) );
advLayout->addWidget( normalButton );
BUTTON_SET_ACT( normalButton, "N", qtr( "Normal rate" ), normal() );
}
AdvControlsWidget::~AdvControlsWidget()
......@@ -239,12 +266,15 @@ AdvControlsWidget::~AdvControlsWidget()
void AdvControlsWidget::enableInput( bool enable )
{
// slowerButton->setEnabled( enable );
ABButton->setEnabled( enable );
recordButton->setEnabled( enable );
normalButton->setEnabled( enable );
// fasterButton->setEnabled( enable );
}
void AdvControlsWidget::enableVideo( bool enable )
{
snapshotButton->setEnabled( enable );
frameButton->setEnabled( enable );
//fullscreenButton->setEnabled( enable );
}
......@@ -261,12 +291,24 @@ void AdvControlsWidget::fullscreen()
{
}
ControlsWidget::ControlsWidget( intf_thread_t *_p_i ) :
void AdvControlsWidget::frame(){}
void AdvControlsWidget::record(){}
/*****************************
* DA Control Widget !
*****************************/
ControlsWidget::ControlsWidget( intf_thread_t *_p_i, bool b_advControls ) :
QFrame( NULL ), p_intf( _p_i )
{
//QSize size( 500, 200 );
//resize( size );
controlLayout = new QGridLayout( this );
#if 1 || DEBUG_COLOR
QPalette palette2;
palette2.setColor(this->backgroundRole(), Qt::magenta);
setPalette(palette2);
#endif
/** The main Slider **/
slider = new InputSlider( Qt::Horizontal, NULL );
......@@ -290,33 +332,42 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i ) :
fasterButton->setMaximumSize( QSize( 26, 20 ) );
/** TODO: Insert here the AdvControls Widget
* and add - A->B button
* - frame by frame
* - record button
* and put the snapshot in the same QFrame
* Then fix all the size issues in main_interface.cpp
**/
/* advanced Controls handling */
b_advancedVisible = b_advControls;
advControls = new AdvControlsWidget( p_intf );
controlLayout->addWidget( advControls, 1, 3, 2, 5, Qt::AlignBottom );
if( !b_advancedVisible ) advControls->hide();
//THIS should be removed. need_components_update = true;
/** Disc and Menus handling */
discFrame = new QFrame( this );
QHBoxLayout *discLayout = new QHBoxLayout( discFrame );
QPushButton *menuButton = new QPushButton( discFrame );
discLayout->addWidget( menuButton );
QHBoxLayout *discLayout = new QHBoxLayout( discFrame );
discLayout->setSpacing( 0 );
discLayout->setMargin( 0 );
QPushButton *prevSectionButton = new QPushButton( discFrame );
setupSmallButton( prevSectionButton );
discLayout->addWidget( prevSectionButton );
QPushButton *menuButton = new QPushButton( discFrame );
setupSmallButton( menuButton );
discLayout->addWidget( menuButton );
QPushButton *nextSectionButton = new QPushButton( discFrame );
setupSmallButton( nextSectionButton );
discLayout->addWidget( nextSectionButton );
controlLayout->addWidget( discFrame, 1, 13, 1, 4 );
controlLayout->addWidget( discFrame, 1, 10, 2, 4, Qt::AlignBottom );
BUTTON_SET_IMG( prevSectionButton, "", previous.png, "" );
BUTTON_SET_IMG( nextSectionButton, "", next.png, "" );
BUTTON_SET_IMG( menuButton, "", previous.png, "" );
discFrame->hide();
//discFrame->hide();
/* Change the navigation button display when the IM navigation changes */
CONNECT( THEMIM->getIM(), navigationChanged( int ),
......@@ -345,7 +396,7 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i ) :
playButton->setMaximumSize( QSize( 45, 45 ) );
playButton->setIconSize( QSize( 30, 30 ) );
controlLayout->addWidget( playButton, 2, 0, 2, 2 );
controlLayout->addWidget( playButton, 2, 0, 2, 2, Qt::AlignBottom );
/** Prev + Stop + Next Block **/
QHBoxLayout *controlButLayout = new QHBoxLayout;
......@@ -354,24 +405,21 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i ) :
/* Prev */
QPushButton *prevButton = new QPushButton;
prevButton->setSizePolicy( sizePolicy );
prevButton->setMaximumSize( QSize( 26, 26 ) );
prevButton->setIconSize( QSize( 20, 20 ) );
setupSmallButton( prevButton );
controlButLayout->addWidget( prevButton );
/* Stop */
QPushButton *stopButton = new QPushButton;
stopButton->setSizePolicy( sizePolicy );
stopButton->setMaximumSize( QSize( 26, 26 ) );
stopButton->setIconSize( QSize( 20, 20 ) );
setupSmallButton( stopButton );
controlButLayout->addWidget( stopButton );
/* next */
QPushButton *nextButton = new QPushButton;
nextButton->setSizePolicy( sizePolicy );
nextButton->setMaximumSize( QSize( 26, 26 ) );
nextButton->setIconSize( QSize( 20, 20 ) );
setupSmallButton( nextButton );
controlButLayout->addWidget( nextButton );
......@@ -392,13 +440,12 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i ) :
/** Fullscreen/Visualisation **/
fullscreenButton = new QPushButton( "F" );
BUTTON_SET_ACT( fullscreenButton, "F", qtr( "Fullscreen" ), fullscreen() );
fullscreenButton->setMaximumSize( QSize( 26, 26 ) );
setupSmallButton( fullscreenButton );
controlLayout->addWidget( fullscreenButton, 3, 10 );
/** Playlist Button **/
playlistButton = new QPushButton;
playlistButton->setMaximumSize( QSize( 26, 26 ) );
playlistButton->setIconSize( QSize( 20, 20 ) );
setupSmallButton( playlistButton );
controlLayout->addWidget( playlistButton, 3, 11 );
......@@ -406,13 +453,14 @@ ControlsWidget::ControlsWidget( intf_thread_t *_p_i ) :
QPushButton *extSettingsButton = new QPushButton( "F" );
BUTTON_SET_ACT( extSettingsButton, "Ex", qtr( "Extended Settings" ),
extSettings() );
extSettingsButton->setMaximumSize( QSize( 26, 26 ) );
setupSmallButton( extSettingsButton );
controlLayout->addWidget( extSettingsButton, 3, 12 );
/** Preferences **/
QPushButton *prefsButton = new QPushButton( "P" );
BUTTON_SET_ACT( prefsButton, "P", qtr( "Preferences / Settings" ), prefs() );
prefsButton->setMaximumSize( QSize( 26, 26 ) );
BUTTON_SET_ACT( prefsButton, "P", qtr( "Preferences / Settings" ),
prefs() );
setupSmallButton( prefsButton );
controlLayout->addWidget( prefsButton, 3, 13 );
/* Volume */
......@@ -458,6 +506,7 @@ void ControlsWidget::play()
if( playlist_IsEmpty( THEPL ) )
{
/* The playlist is empty, open a file requester */
msg_Dbg( p_intf, "Nothing to play yet, open a file" );
THEDP->openFileDialog();
setStatus( 0 );
return;
......@@ -528,6 +577,9 @@ void ControlsWidget::updateOnTimer()
volumeSlider->setValue( i_volume );
b_my_volume = false;
}
enableInput( THEMIM->getIM()->hasInput() );
enableVideo( THEMIM->getIM()->hasVideo() );
}
/* FIXME */
......@@ -580,14 +632,35 @@ void ControlsWidget::enableInput( bool enable )
slowerButton->setEnabled( enable );
slider->setEnabled( enable );
fasterButton->setEnabled( enable );
/* Advanced Buttons too */
advControls->enableInput( enable );
}
void ControlsWidget::enableVideo( bool enable )
{
// TODO Later make the fullscreenButton toggle Visualisation and so on.
fullscreenButton->setEnabled( enable );
/* Advanced Buttons too */
advControls->enableVideo( enable );
}
void ControlsWidget::toggleAdvanced()
{
if( !VISIBLE( advControls ) )
{
advControls->show();
b_advancedVisible = true;
}
else
{
advControls->hide();
b_advancedVisible = false;
}
//FIXME connect this one :D
emit advancedControlsShowed( b_advancedVisible ); // doComponentsUpdate();
}
/**********************************************************************
* Playlist Widget. The embedded playlist
......
......@@ -114,12 +114,14 @@ public:
void enableVideo( bool );
private:
intf_thread_t *p_intf;
QPushButton *normalButton;
QPushButton *snapshotButton;
QPushButton *normalButton, *recordButton, *ABButton;
QPushButton *snapshotButton, *frameButton;
private slots:
void normal();
void snapshot();
void fullscreen();
void frame();
void record();
};
class InputSlider;
......@@ -130,7 +132,7 @@ class ControlsWidget : public QFrame
{
Q_OBJECT
public:
ControlsWidget( intf_thread_t *);
ControlsWidget( intf_thread_t *, bool );
virtual ~ControlsWidget();
QPushButton *playlistButton;
......@@ -145,13 +147,16 @@ protected:
friend class MainInterface;
friend class VolumeClickHandler;
private:
intf_thread_t *p_intf;
QFrame *discFrame;
QGridLayout *controlLayout;
intf_thread_t *p_intf;
QFrame *discFrame;
QGridLayout *controlLayout;
InputSlider *slider;
QPushButton *prevSectionButton, *nextSectionButton, *menuButton;
QPushButton *playButton, *fullscreenButton;
QPushButton *slowerButton, *fasterButton;
QPushButton *prevSectionButton, *nextSectionButton, *menuButton;
QPushButton *playButton, *fullscreenButton;
QPushButton *slowerButton, *fasterButton;
AdvControlsWidget *advControls;
bool b_advancedVisible;
private slots:
void play();
void stop();
......@@ -163,6 +168,9 @@ private slots:
void prefs();
void faster();
void slower();
void toggleAdvanced();
signals:
void advancedControlsShowed( bool );
};
class VolumeClickHandler : public QObject
......
......@@ -52,11 +52,9 @@
#define PREF_H 121
#else
#define PREF_W 450
#define PREF_H 125
#define PREF_H 160
#endif
#define VISIBLE(i) (i && i->isVisible())
#define SET_WIDTH(i,j) i->widgetSize.setWidth(j)
#define SET_HEIGHT(i,j) i->widgetSize.setHeight(j)
#define SET_WH( i,j,k) i->widgetSize.setWidth(j); i->widgetSize.setHeight(k);
......@@ -93,8 +91,6 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
need_components_update = false;
bgWidget = NULL; videoWidget = NULL; playlistWidget = NULL;
embeddedPlaylistWasActive = videoIsActive = false;
bool b_createSystray = false;
input_name = "";
/**
......@@ -119,31 +115,24 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
/* Set the other interface settings */
playlistEmbeddedFlag = settings->value("playlist-embedded", true).toBool();
advControlsEnabled= settings->value( "adv-controls", false ).toBool();
visualSelectorEnabled= settings->value( "visual-selector", false ).toBool();
#if DEBUG_COLOR
QPalette palette2;
palette2.setColor(this->backgroundRole(), Qt::magenta);
setPalette(palette2);
#endif
/**
* UI design
**/
/**************************
* UI and Widgets design
**************************/
setVLCWindowsTitle();
handleMainUi( settings );
/* Menu Bar */
QVLCMenu::createMenuBar( this, p_intf, playlistEmbeddedFlag,
advControlsEnabled, visualSelectorEnabled );
isAdvancedVisible(), visualSelectorEnabled );
/* Status Bar */
/**
* TODO: clicking on the elapsed time should switch to the remaining time
**/
/**
* TODO: do we add a label for the current Volume
* TODO: do we add a label for the current Volume ?
**/
timeLabel = new QLabel;
nameLabel = new QLabel;
......@@ -160,16 +149,25 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
CONNECT( timeLabel, customContextMenuRequested( QPoint ),
this, showTimeMenu( QPoint ) );
/* Systray */
/**********************
* Systray Management *
**********************/
sysTray = NULL;
bool b_createSystray = false;
bool b_systrayAvailable = QSystemTrayIcon::isSystemTrayAvailable();
if( config_GetInt( p_intf, "qt-start-minimized") )
{
hide();
b_createSystray = true;
if( b_systrayAvailable ){
b_createSystray = true;
hide(); //FIXME
}
else msg_Warn( p_intf, "You can't minize if you haven't a system "
"tray bar" );
}
if( config_GetInt( p_intf, "qt-system-tray") )
b_createSystray = true;
if (QSystemTrayIcon::isSystemTrayAvailable() && b_createSystray )
if( b_systrayAvailable && b_createSystray )
createSystray();
/* Init input manager */
......@@ -177,30 +175,35 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
ON_TIMEOUT( updateOnTimer() );
/**
* CONNECTs
* Various CONNECTs
**/
/* Connect the input manager to the GUI elements it manages */
/* It is also connected to the control->slider */
/* It is also connected to the control->slider, see the ControlsWidget */
CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ),
this, setDisplay( float, int, int ) );
/* Naming in the controller */
/** Connects on nameChanged() */
/* Naming in the controller statusbar */
CONNECT( THEMIM->getIM(), nameChanged( QString ), this,
setName( QString ) );
/* and in the systray */
if( sysTray )
{
CONNECT( THEMIM->getIM(), nameChanged( QString ), this,
updateSystrayTooltipName( QString ) );
}
/* and in the title of the controller */
if( config_GetInt( p_intf, "qt-name-in-title" ) )
{
CONNECT( THEMIM->getIM(), nameChanged( QString ), this,
setVLCWindowsTitle( QString ) );
}
/* PLAY_STATUS */
/** CONNECTS on PLAY_STATUS **/
/* Status on the main controller */
CONNECT( THEMIM->getIM(), statusChanged( int ), this, setStatus( int ) );
/* and in the systray */
if( sysTray )
{
CONNECT( THEMIM->getIM(), statusChanged( int ), this,
......@@ -238,7 +241,7 @@ MainInterface::~MainInterface()
}
settings->setValue( "playlist-embedded", playlistEmbeddedFlag );
settings->setValue( "adv-controls", advControlsEnabled );
settings->setValue( "adv-controls", isAdvancedVisible() );
settings->setValue( "pos", pos() );
settings->endGroup();
delete settings;
......@@ -272,6 +275,7 @@ void MainInterface::setVLCWindowsTitle( QString aTitle )
void MainInterface::handleMainUi( QSettings *settings )
{
/* Create the main Widget and the mainLayout */
QWidget *main = new QWidget( this );
mainLayout = new QVBoxLayout( main );
setCentralWidget( main );
......@@ -280,36 +284,24 @@ void MainInterface::handleMainUi( QSettings *settings )
main->setContentsMargins( 0, 0, 0, 0 );
mainLayout->setMargin( 0 );
/* CONTROLS */
controls = new ControlsWidget( p_intf );
/* Create the CONTROLS Widget */
controls = new ControlsWidget( p_intf,
settings->value( "adv-controls", false ).toBool() );
/* Configure the UI */
/* Configure the Controls */
BUTTON_SET_IMG( controls->playlistButton, "" , playlist_icon.png,
playlistEmbeddedFlag ? qtr( "Show playlist" ) :
qtr( "Open playlist" ) );
BUTTONACT( controls->playlistButton, playlist() );
#if DEBUG_COLOR
QPalette palette;
palette.setColor(main->backgroundRole(), Qt::green);
main->setPalette(palette);
#endif
playlistEmbeddedFlag ? qtr( "Show playlist" ) :
qtr( "Open playlist" ) );
BUTTONACT( controls->playlistButton, togglePlaylist() );
/* Add the controls Widget */
/* Add the controls Widget to the main Widget */
mainLayout->addWidget( controls );
/* Set initial size */
resize ( PREF_W, PREF_H );
/* Set initial size */
resize( PREF_W, PREF_H );
addSize = QSize( mainLayout->margin() * 2, PREF_H );
/* advanced Controls handling */
advControls = new AdvControlsWidget( p_intf );
mainLayout->insertWidget( 0, advControls );
advControls->updateGeometry();
if( !advControlsEnabled ) advControls->hide();
need_components_update = true;
/* Visualisation */
visualSelector = new VisualSelector( p_intf );
mainLayout->insertWidget( 0, visualSelector );
......@@ -343,7 +335,7 @@ void MainInterface::handleMainUi( QSettings *settings )
}
/**********************************************************************
* Handling of the components
* Handling of sizing of the components
**********************************************************************/
void MainInterface::calculateInterfaceSize()
{
......@@ -371,10 +363,10 @@ void MainInterface::calculateInterfaceSize()
}
if( VISIBLE( visualSelector ) )
height += visualSelector->height();
if( VISIBLE( advControls) )
/* if( VISIBLE( advControls) )
{
height += advControls->sizeHint().height();
}
}*/
mainSize = QSize( width + addSize.width(), height + addSize.height() );
}
......@@ -394,6 +386,7 @@ void MainInterface::resizeEvent( QResizeEvent *e )
playlistWidget->updateGeometry();
}
}
/****************************************************************************
* Small right-click menus
****************************************************************************/
......@@ -411,139 +404,9 @@ void MainInterface::showTimeMenu( QPoint pos )
menu.exec( QCursor::pos() );
}
/*****************************************************************************
* Systray Icon and Systray Menu
*****************************************************************************/
/**
* Create a SystemTray icon and a menu that would go with it.
* Connects to a click handler on the icon.
**/
void MainInterface::createSystray()
{
QIcon iconVLC = QIcon( QPixmap( ":/vlc128.png" ) );
sysTray = new QSystemTrayIcon( iconVLC, this );
sysTray->setToolTip( qtr( "VLC media player" ));
systrayMenu = new QMenu( qtr( "VLC media player" ), this );
systrayMenu->setIcon( iconVLC );
QVLCMenu::updateSystrayMenu( this, p_intf, true );
sysTray->show();
CONNECT( sysTray, activated( QSystemTrayIcon::ActivationReason ),
this, handleSystrayClick( QSystemTrayIcon::ActivationReason ) );
}
/**
* Update the menu of the Systray Icon.
* May be unneedded, since it just calls QVLCMenu::update
* FIXME !!!
**/
void MainInterface::updateSystrayMenu( int status )
{
QVLCMenu::updateSystrayMenu( this, p_intf ) ;
}
/**
* Updates the Systray Icon's menu and toggle the main interface
*/
void MainInterface::toggleUpdateSystrayMenu()
{
if( isHidden() )
{
show();
activateWindow();
}
else
{
#ifdef WIN32
/* check if any visible window is above vlc in the z-order,
* but ignore the ones always on top */
WINDOWINFO wi;
HWND hwnd;
wi.cbSize = sizeof( WINDOWINFO );
for( hwnd = GetNextWindow( internalWinId(), GW_HWNDPREV );
hwnd && !IsWindowVisible( hwnd );
hwnd = GetNextWindow( hwnd, GW_HWNDPREV ) );
if( !hwnd || !GetWindowInfo( hwnd, &wi ) ||
(wi.dwExStyle&WS_EX_TOPMOST) )
#else
if( isActiveWindow() )
#endif
{
hide();
}
else
{
activateWindow();
}
}
QVLCMenu::updateSystrayMenu( this, p_intf );
}
void MainInterface::handleSystrayClick(
QSystemTrayIcon::ActivationReason reason )
{
switch( reason )
{
case QSystemTrayIcon::Trigger:
toggleUpdateSystrayMenu();
break;
case QSystemTrayIcon::MiddleClick:
sysTray->showMessage( qtr( "VLC media player" ),
qtr( "Control menu for the player" ),
QSystemTrayIcon::Information, 4000 );
break;
}
}
/**
* Updates the name of the systray Icon tooltip.
* Doesn't check if the systray exists, check before you call it.
* FIXME !!! Fusion with next function ?
**/
void MainInterface::updateSystrayTooltipName( QString name )
{
if( name.isEmpty() )
{
sysTray->setToolTip( qtr( "VLC media player" ) );
}
else
{
sysTray->setToolTip( name );
sysTray->showMessage( qtr( "VLC media player" ), name,
QSystemTrayIcon::NoIcon, 4000 );
}
}
/**
* Updates the status of the systray Icon tooltip.
* Doesn't check if the systray exists, check before you call it.
**/
void MainInterface::updateSystrayTooltipStatus( int i_status )
{
switch( i_status )
{
case 0:
{
sysTray->setToolTip( qtr( "VLC media player" ) );
break;
}
case PLAYING_S:
{
sysTray->setToolTip( input_name );
//+ " - " + qtr( "Playing" ) );
break;
}
case PAUSE_S:
{
sysTray->setToolTip( input_name + " - "
+ qtr( "Paused") );
break;
}
}
}
/****************************************************************************
* Video Handling
****************************************************************************/
void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x,
int *pi_y, unsigned int *pi_width,
unsigned int *pi_height )
......@@ -650,44 +513,15 @@ int MainInterface::controlVideo( void *p_window, int i_query, va_list args )
return i_ret;
}
void MainInterface::advanced()
{
if( !VISIBLE( advControls ) )
{
advControls->show();
advControlsEnabled = true;
}
else
{
advControls->hide();
advControlsEnabled = false;
}
doComponentsUpdate();
}
void MainInterface::visual()
{
if( !VISIBLE( visualSelector) )
{
visualSelector->show();
if( !THEMIM->getIM()->hasVideo() )
{
/* Show the background widget */
}
visualSelectorEnabled = true;
}
else
{
/* Stop any currently running visualization */
visualSelector->hide();
visualSelectorEnabled = false;
}
doComponentsUpdate();
}
void MainInterface::playlist()
/*****************************************************************************
* Playlist, Visualisation and Menus handling
*****************************************************************************/
/**
* Toggle the playlist widget or dialog
**/
void MainInterface::togglePlaylist()
{
// Toggle the playlist dialog
// Toggle the playlist dialog if not embedded and return
if( !playlistEmbeddedFlag )
{
if( playlistWidget )
......@@ -698,6 +532,7 @@ void MainInterface::playlist()
return;
}
// Create the playlist Widget and destroy the existing dialog
if( !playlistWidget )
{
PlaylistDialog::killInstance();
......@@ -709,6 +544,8 @@ void MainInterface::playlist()
if(bgWidget)
CONNECT( playlistWidget, artSet( QString ), bgWidget, setArt(QString) );
}
// And toggle visibility
if( VISIBLE( playlistWidget ) )
{
playlistWidget->hide();
......@@ -733,15 +570,8 @@ void MainInterface::playlist()
}
if( VISIBLE( bgWidget ) ) bgWidget->hide();
}
doComponentsUpdate();
}
/* Video widget cannot do this synchronously as it runs in another thread */
/* Well, could it, actually ? Probably dangerous ... */
void MainInterface::doComponentsUpdate()
{
calculateInterfaceSize();
resize( mainSize );
doComponentsUpdate();
}
void MainInterface::undockPlaylist()
......@@ -755,7 +585,7 @@ void MainInterface::undockPlaylist()
playlistEmbeddedFlag = false;
menuBar()->clear();
QVLCMenu::createMenuBar( this, p_intf, false, advControlsEnabled,
QVLCMenu::createMenuBar( this, p_intf, false, isAdvancedVisible(),
visualSelectorEnabled);
if( videoIsActive )
......@@ -770,6 +600,28 @@ void MainInterface::undockPlaylist()
}
}
#if 0
void MainInterface::visual()
{
if( !VISIBLE( visualSelector) )
{
visualSelector->show();
if( !THEMIM->getIM()->hasVideo() )
{
/* Show the background widget */
}
visualSelectorEnabled = true;
}
else
{
/* Stop any currently running visualization */
visualSelector->hide();
visualSelectorEnabled = false;
}
doComponentsUpdate();
}
#endif
void MainInterface::toggleMenus()
{
if( menuBar()->isVisible() ) menuBar()->hide();
......@@ -777,31 +629,203 @@ void MainInterface::toggleMenus()
msg_Dbg( p_intf, "I was there: \\_o<~~ coin coin" );
}
void MainInterface::customEvent( QEvent *event )
/* Video widget cannot do this synchronously as it runs in another thread */
/* Well, could it, actually ? Probably dangerous ... */
void MainInterface::doComponentsUpdate()
{
if( event->type() == PLDockEvent_Type )
calculateInterfaceSize();
resize( mainSize );
}
void MainInterface::toggleAdvanced()
{
controls->toggleAdvanced();
}
bool MainInterface::isAdvancedVisible()
{
return controls->b_advancedVisible;
}
/************************************************************************
* Other stuff
************************************************************************/
void MainInterface::setDisplay( float pos, int time, int length )
{
char psz_length[MSTRTIME_MAX_SIZE], psz_time[MSTRTIME_MAX_SIZE];
secstotimestr( psz_length, length );
secstotimestr( psz_time, time );
QString title;
title.sprintf( "%s/%s", psz_time, psz_length );
timeLabel->setText( " "+title+" " );
}
void MainInterface::setName( QString name )
{
input_name = name;
nameLabel->setText( " " + name+" " );
}
void MainInterface::setStatus( int status )
{
controls->setStatus( status );
if( sysTray )
updateSystrayMenu( status );
}
void MainInterface::updateOnTimer()
{
/* \todo Make this event-driven */
if( intf_ShouldDie( p_intf ) )
{
PlaylistDialog::killInstance();
playlistEmbeddedFlag = true;
menuBar()->clear();
QVLCMenu::createMenuBar(this, p_intf, true, advControlsEnabled,
visualSelectorEnabled);
playlist();
QApplication::closeAllWindows();
QApplication::quit();
}
else if ( event->type() == SetVideoOnTopEvent_Type )
if( need_components_update )
{
SetVideoOnTopQtEvent* p_event = (SetVideoOnTopQtEvent*)event;
if( p_event->OnTop() )
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
doComponentsUpdate();
need_components_update = false;
}
controls->updateOnTimer();
}
/*****************************************************************************
* Systray Icon and Systray Menu
*****************************************************************************/
/**
* Create a SystemTray icon and a menu that would go with it.
* Connects to a click handler on the icon.
**/
void MainInterface::createSystray()
{
QIcon iconVLC = QIcon( QPixmap( ":/vlc128.png" ) );
sysTray = new QSystemTrayIcon( iconVLC, this );
sysTray->setToolTip( qtr( "VLC media player" ));
systrayMenu = new QMenu( qtr( "VLC media player" ), this );
systrayMenu->setIcon( iconVLC );
QVLCMenu::updateSystrayMenu( this, p_intf, true );
sysTray->show();
CONNECT( sysTray, activated( QSystemTrayIcon::ActivationReason ),
this, handleSystrayClick( QSystemTrayIcon::ActivationReason ) );
}
/**
* Update the menu of the Systray Icon.
* May be unneedded, since it just calls QVLCMenu::update
* FIXME !!!
**/
void MainInterface::updateSystrayMenu( int status )
{
QVLCMenu::updateSystrayMenu( this, p_intf ) ;
}
/**
* Updates the Systray Icon's menu and toggle the main interface
*/
void MainInterface::toggleUpdateSystrayMenu()
{
if( isHidden() )
{
show();
activateWindow();
}
else
{
#ifdef WIN32
/* check if any visible window is above vlc in the z-order,
* but ignore the ones always on top */
WINDOWINFO wi;
HWND hwnd;
wi.cbSize = sizeof( WINDOWINFO );
for( hwnd = GetNextWindow( internalWinId(), GW_HWNDPREV );
hwnd && !IsWindowVisible( hwnd );
hwnd = GetNextWindow( hwnd, GW_HWNDPREV ) );
if( !hwnd || !GetWindowInfo( hwnd, &wi ) ||
(wi.dwExStyle&WS_EX_TOPMOST) )
#else
if( isActiveWindow() )
#endif
{
hide();
}
else
setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint);
show(); /* necessary to apply window flags?? */
{
activateWindow();
}
}
QVLCMenu::updateSystrayMenu( this, p_intf );
}
void MainInterface::handleSystrayClick(
QSystemTrayIcon::ActivationReason reason )
{
switch( reason )
{
case QSystemTrayIcon::Trigger:
toggleUpdateSystrayMenu();
break;
case QSystemTrayIcon::MiddleClick:
sysTray->showMessage( qtr( "VLC media player" ),
qtr( "Control menu for the player" ),
QSystemTrayIcon::Information, 4000 );
break;
}
}
/**
* Updates the name of the systray Icon tooltip.
* Doesn't check if the systray exists, check before you call it.
* FIXME !!! Fusion with next function ?
**/
void MainInterface::updateSystrayTooltipName( QString name )
{
if( name.isEmpty() )
{
sysTray->setToolTip( qtr( "VLC media player" ) );
}
else
{
sysTray->setToolTip( name );
sysTray->showMessage( qtr( "VLC media player" ), name,
QSystemTrayIcon::NoIcon, 4000 );
}
}
/**
* Updates the status of the systray Icon tooltip.
* Doesn't check if the systray exists, check before you call it.
**/
void MainInterface::updateSystrayTooltipStatus( int i_status )
{
switch( i_status )
{
case 0:
{
sysTray->setToolTip( qtr( "VLC media player" ) );
break;
}
case PLAYING_S:
{
sysTray->setToolTip( input_name );
//+ " - " + qtr( "Playing" ) );
break;
}
case PAUSE_S:
{
sysTray->setToolTip( input_name + " - "
+ qtr( "Paused") );
break;
}
}
}
/************************************************************************
* D&D
* D&D Events
************************************************************************/
void MainInterface::dropEvent(QDropEvent *event)
{
......@@ -847,8 +871,30 @@ void MainInterface::dragLeaveEvent(QDragLeaveEvent *event)
}
/************************************************************************
* Other stuff
* Events stuff
************************************************************************/
void MainInterface::customEvent( QEvent *event )
{
if( event->type() == PLDockEvent_Type )
{
PlaylistDialog::killInstance();
playlistEmbeddedFlag = true;
menuBar()->clear();
QVLCMenu::createMenuBar(this, p_intf, true, isAdvancedVisible(),
visualSelectorEnabled);
togglePlaylist();
}
else if ( event->type() == SetVideoOnTopEvent_Type )
{
SetVideoOnTopQtEvent* p_event = (SetVideoOnTopQtEvent*)event;
if( p_event->OnTop() )
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
else
setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint);
show(); /* necessary to apply window flags?? */
}
}
void MainInterface::keyPressEvent( QKeyEvent *e )
{
int i_vlck = qtEventToVLCKey( e );
......@@ -868,58 +914,15 @@ void MainInterface::wheelEvent( QWheelEvent *e )
e->accept();
}
void MainInterface::setDisplay( float pos, int time, int length )
{
char psz_length[MSTRTIME_MAX_SIZE], psz_time[MSTRTIME_MAX_SIZE];
secstotimestr( psz_length, length );
secstotimestr( psz_time, time );
QString title;
title.sprintf( "%s/%s", psz_time, psz_length );
timeLabel->setText( " "+title+" " );
}
void MainInterface::setName( QString name )
{
input_name = name;
nameLabel->setText( " " + name+" " );
}
void MainInterface::setStatus( int status )
{
controls->setStatus( status );
if( sysTray )
updateSystrayMenu( status );
}
void MainInterface::updateOnTimer()
{
/* \todo Make this event-driven */
// TO MOVE TO controls
advControls->enableInput( THEMIM->getIM()->hasInput() );
controls->enableInput( THEMIM->getIM()->hasInput() );
advControls->enableVideo( THEMIM->getIM()->hasVideo() );
controls->enableVideo( THEMIM->getIM()->hasVideo() );
if( intf_ShouldDie( p_intf ) )
{
QApplication::closeAllWindows();
QApplication::quit();
}
if( need_components_update )
{
doComponentsUpdate();
need_components_update = false;
}
controls->updateOnTimer();
}
void MainInterface::closeEvent( QCloseEvent *e )
{
hide();
vlc_object_kill( p_intf );
}
/*****************************************************************************
* Callbacks
*****************************************************************************/
static int InteractCallback( vlc_object_t *p_this,
const char *psz_var, vlc_value_t old_val,
vlc_value_t new_val, void *param )
......
......@@ -25,7 +25,6 @@
#ifndef _MAIN_INTERFACE_H_
#define _MAIN_INTERFACE_H_
#include "qt4.hpp"
#include "util/qvlcframe.hpp"
......@@ -54,14 +53,16 @@ class MainInterface : public QVLCMW
public:
MainInterface( intf_thread_t *);
virtual ~MainInterface();
void *requestVideo( vout_thread_t *p_nvout, int *pi_x,
int *pi_y, unsigned int *pi_width,
unsigned int *pi_height );
void releaseVideo( void *);
void releaseVideo( void * );
int controlVideo( void *p_window, int i_query, va_list args );
QSystemTrayIcon *getSysTray() { return sysTray; };
QMenu *getSysTrayMenu() { return systrayMenu; };
bool isAdvancedVisible();
protected:
void resizeEvent( QResizeEvent * );
void dropEvent( QDropEvent *);
......@@ -69,18 +70,18 @@ protected:
void dragMoveEvent( QDragMoveEvent * );
void dragLeaveEvent( QDragLeaveEvent * );
void closeEvent( QCloseEvent *);
//Ui::MainInterfaceUI ui;
friend class VolumeClickHandler;
private:
QSettings *settings;
QSize mainSize, addSize;
QSystemTrayIcon *sysTray;
QMenu *systrayMenu;
QString input_name;
QVBoxLayout *mainLayout;
ControlsWidget *controls;
bool need_components_update;
QSettings *settings;
QSize mainSize, addSize;
QSystemTrayIcon *sysTray;
QMenu *systrayMenu;
QString input_name;
QVBoxLayout *mainLayout;
ControlsWidget *controls;
bool need_components_update;
void calculateInterfaceSize();
void handleMainUi( QSettings* );
void handleSystray();
......@@ -92,20 +93,17 @@ private:
virtual void keyPressEvent( QKeyEvent *);
virtual void wheelEvent( QWheelEvent * );
bool embeddedPlaylistWasActive;
bool videoIsActive;
QSize savedVideoSize;
bool embeddedPlaylistWasActive;
bool videoIsActive;
QSize savedVideoSize;
BackgroundWidget *bgWidget;
VisualSelector *visualSelector;
AdvControlsWidget *advControls;
PlaylistWidget *playlistWidget;
bool playlistEmbeddedFlag;
bool videoEmbeddedFlag;
bool alwaysVideoFlag;
bool advControlsEnabled;
bool visualSelectorEnabled;
InputManager *main_input_manager;
......@@ -119,17 +117,19 @@ private:
public slots:
void undockPlaylist();
void toggleMenus();
void playlist();
void togglePlaylist();
void toggleUpdateSystrayMenu();
void toggleAdvanced();
private slots:
void updateOnTimer();
void setStatus( int );
void setName( QString );
void setVLCWindowsTitle( QString title = "" );
void setDisplay( float, int, int );
void updateOnTimer();
#if 0
void visual();
void advanced();
void handleSystrayClick( QSystemTrayIcon::ActivationReason );
#endif
void handleSystrayClick( QSystemTrayIcon::ActivationReason );
void updateSystrayMenu( int );
void updateSystrayTooltipName( QString );
void updateSystrayTooltipStatus( int );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment