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 )
{