dialogs/streaminfo \
dialogs/extended \
dialogs/interaction \
- components/equalizer \
+ components/extended_panels \
components/infopanels \
components/preferences_widgets \
components/preferences \
dialogs/errors.moc.cpp \
dialogs/prefs_dialog.moc.cpp \
dialogs/interaction.moc.cpp \
- components/equalizer.moc.cpp \
+ components/extended_panels.moc.cpp \
components/infopanels.moc.cpp \
components/preferences_widgets.moc.cpp \
components/preferences.moc.cpp \
dialogs/messages.cpp \
dialogs/errors.cpp \
dialogs/interaction.cpp \
- components/equalizer.cpp \
+ components/extended_panels.cpp \
components/infopanels.cpp \
components/preferences_widgets.cpp \
components/preferences.cpp \
dialogs/errors.hpp \
dialogs/prefs_dialog.hpp \
dialogs/interaction.hpp \
- components/equalizer.hpp \
+ components/extended_panels.hpp \
components/infopanels.hpp \
components/preferences_widgets.hpp \
components/preferences.hpp \
/*****************************************************************************
- * equalizer.cpp : Equalizer
+ * extended_panels.cpp : Extended controls panels
****************************************************************************
* Copyright (C) 2006 the VideoLAN team
* $Id: preferences.cpp 16643 2006-09-13 12:45:46Z zorglub $
#include <QFont>
#include <QGridLayout>
-#include "components/equalizer.hpp"
+#include "components/extended_panels.hpp"
#include "qt4.hpp"
#include "../../audio_filter/equalizer_presets.h"
#include <vlc_intf_strings.h>
#include <assert.h>
+/**********************************************************************
+ * Equalizer
+ **********************************************************************/
+
static const QString band_frequencies[] =
{
" 60Hz ", " 170 Hz " , " 310 Hz ", " 600 Hz ", " 1 kHz ",
// var_AddCallback( p_aout, "equalizer-bands", EqzCallback, this );
// var_AddCallback( p_aout, "equalizer-preamp", EqzCallback, this );
}
+
+
+/**********************************************************************
+ * Video filters / Adjust
+ **********************************************************************/
+
+/**********************************************************************
+ * Audio filters
+ **********************************************************************/
+
+/**********************************************************************
+ * Extended playbak controls
+ **********************************************************************/
void setPreset(int);
};
+class ExtendedControls: public QWidget
+{
+ Q_OBJECT
+public:
+ ExtendedControls( intf_thread_t *, QWidget * ) {};
+ virtual ~ExtendedControls() {};
+
+private:
+ intf_thread_t *p_intf;
+private slots:
+ void slower() {};
+ void faster() {};
+ void normal() {};
+ void snapshot() {};
+};
+
#endif
#include "pixmaps/art.xpm"
#include <vlc/vout.h>
+#include <QLabel>
+#include <QSpacerItem>
#include <QCursor>
#include <QPushButton>
#include <QHBoxLayout>
QPushButton *nextButton = new QPushButton( "Next");
layout->addWidget( prevButton );
layout->addWidget( nextButton );
+
+ layout->addItem( new QSpacerItem( 40,20,
+ QSizePolicy::Expanding, QSizePolicy::Minimum) );
+ layout->addWidget( new QLabel( qtr("Current visualization:") ) );
+
+ current = new QLabel( qtr( "None" ) );
+ layout->addWidget( current );
+
+ BUTTONACT( prevButton, prev() );
+ BUTTONACT( nextButton, next() );
+
setLayout( layout );
setMaximumHeight( 35 );
}
{
}
+void VisualSelector::prev()
+{
+ char *psz_new = aout_VisualPrev( p_intf );
+ if( psz_new )
+ {
+ current->setText( qfu( psz_new ) );
+ free( psz_new );
+ }
+}
+
+void VisualSelector::next()
+{
+ char *psz_new = aout_VisualNext( p_intf );
+ if( psz_new )
+ {
+ current->setText( qfu( psz_new ) );
+ free( psz_new );
+ }
+}
+
+/**********************************************************************
+ * More controls
+ **********************************************************************/
+ControlsWidget::ControlsWidget( intf_thread_t *_p_i ) :
+ QFrame( NULL ), p_intf( _p_i )
+{
+ QHBoxLayout *layout = new QHBoxLayout( this );
+ layout->setMargin( 0 );
+
+ slowerButton = new QPushButton( "S" );
+ BUTTON_SET_ACT( slowerButton, "S", qtr("Slower" ), slower() );
+ layout->addWidget( slowerButton );
+ slowerButton->setMaximumWidth( 35 );
+
+ normalButton = new QPushButton( "N" );
+ BUTTON_SET_ACT( normalButton, "N", qtr("Normal rate"), normal() );
+ layout->addWidget( normalButton );
+ normalButton->setMaximumWidth( 35 );
+
+ fasterButton = new QPushButton( "F" );
+ BUTTON_SET_ACT( fasterButton, "F", qtr("Faster" ), faster() );
+ layout->addWidget( fasterButton );
+ fasterButton->setMaximumWidth( 35 );
+
+ layout->addItem( new QSpacerItem( 100,20,
+ QSizePolicy::Expanding, QSizePolicy::Minimum) );
+
+ snapshotButton = new QPushButton( "S" );
+ BUTTON_SET_ACT( snapshotButton, "S", qtr("Take a snapshot"), snapshot() );
+ layout->addWidget( snapshotButton );
+ snapshotButton->setMaximumWidth( 35 );
+
+ fullscreenButton = new QPushButton( "F" );
+ BUTTON_SET_ACT( fullscreenButton, "F", qtr("Fullscreen"), fullscreen() );
+ layout->addWidget( fullscreenButton );
+ fullscreenButton->setMaximumWidth( 35 );
+}
+
+ControlsWidget::~ControlsWidget()
+{
+}
+
+void ControlsWidget::enableInput( bool enable )
+{
+ slowerButton->setEnabled( enable );
+ normalButton->setEnabled( enable );
+ fasterButton->setEnabled( enable );
+}
+void ControlsWidget::enableVideo( bool enable )
+{
+ snapshotButton->setEnabled( enable );
+ fullscreenButton->setEnabled( enable );
+}
+
+void ControlsWidget::slower()
+{
+ THEMIM->getIM()->slower();
+}
+
+void ControlsWidget::faster()
+{
+ THEMIM->getIM()->faster();
+}
+
+void ControlsWidget::normal()
+{
+ THEMIM->getIM()->normalRate();
+}
+
+void ControlsWidget::snapshot()
+{
+}
+
+void ControlsWidget::fullscreen()
+{
+}
+
/**********************************************************************
* Playlist Widget. The embedded playlist
**********************************************************************/
virtual ~VisualSelector();
private:
intf_thread_t *p_intf;
+ QLabel *current;
+private slots:
+ void prev();
+ void next();
};
+class QPushButton;
+class ControlsWidget : public QFrame
+{
+ Q_OBJECT
+public:
+ ControlsWidget( intf_thread_t *);
+ virtual ~ControlsWidget();
+ void enableInput( bool );
+ void enableVideo( bool );
+private:
+ intf_thread_t *p_intf;
+ QPushButton *slowerButton, *normalButton, *fasterButton;
+ QPushButton *fullscreenButton, *snapshotButton;
+private slots:
+ void faster();
+ void slower();
+ void normal();
+ void snapshot();
+ void fullscreen();
+};
+
+
/******************** Playlist Widgets ****************/
#include <QModelIndex>
class QSignalMapper;
#include "dialogs/extended.hpp"
#include "dialogs_provider.hpp"
#include "util/qvlcframe.hpp"
-#include "components/equalizer.hpp"
+#include "components/extended_panels.hpp"
#include "qt4.hpp"
ExtendedDialog *ExtendedDialog::instance = NULL;
b_had_audio = b_had_video = b_has_audio = b_has_video = false;
if( p_input )
{
+ vlc_value_t val;
+ var_Change( p_input, "video-es", VLC_VAR_CHOICESCOUNT, &val, NULL );
+ b_has_video = val.i_int > 0;
+ var_Change( p_input, "audio-es", VLC_VAR_CHOICESCOUNT, &val, NULL );
+ b_has_audio = val.i_int > 0;
var_AddCallback( p_input, "audio-es", ChangeAudio, this );
var_AddCallback( p_input, "video-es", ChangeVideo, this );
}
void InputManager::sliderUpdate( float new_pos )
{
- if( p_input && !p_input->b_die && !p_input->b_dead )
+ if( hasInput() )
var_SetFloat( p_input, "position", new_pos );
}
emit statusChanged( state.i_int );
}
+void InputManager::slower()
+{
+ if( hasInput() )
+ var_SetVoid( p_input, "rate-slower" );
+}
+
+void InputManager::faster()
+{
+ if( hasInput() )
+ var_SetVoid( p_input, "rate-faster" );
+}
+
+void InputManager::normalRate()
+{
+ if( hasInput() )
+ var_SetInteger( p_input, "rate", INPUT_RATE_DEFAULT );
+}
+
/**********************************************************************
* MainInputManager implementation. Wrap an input manager and
* take care of updating the main playlist input
#include <QObject>
#include <vlc/vlc.h>
+#include <vlc/input.h>
class InputManager : public QObject
{
virtual ~InputManager();
void delInput();
+ bool hasInput() { return p_input && !p_input->b_dead && !p_input->b_die; }
bool hasAudio() { return b_has_audio; }
bool hasVideo() { return b_has_video; }
bool b_has_audio, b_has_video, b_had_audio, b_had_video;
void update(); ///< Periodic updates
void setInput( input_thread_t * ); ///< Our controlled input changed
void sliderUpdate( float ); ///< User dragged the slider. We get new pos
+ void slower();
+ void faster();
+ void normalRate();
signals:
/// Send new position, new time and new length
void positionUpdated( float , int, int );
#include <assert.h>
#include <vlc_keys.h>
#include <vlc/vout.h>
+#include <aout_internal.h>
#ifdef WIN32
#define PREF_W 410
#define PREF_H 125
#endif
-#define BUTTON_SET( button, image, tooltip ) ui.button##Button->setText(""); \
- ui.button##Button->setIcon( QIcon( ":/pixmaps/"#image ) ); \
- ui.button##Button->setToolTip( tooltip );
-
#define VISIBLE(i) (i && i->isVisible())
#define SET_WIDTH(i,j) i->widgetSize.setWidth(j)
bgWidget = NULL; videoWidget = NULL; playlistWidget = NULL;
embeddedPlaylistWasActive = videoIsActive = false;
+ /* Fetch configuration from settings and vlc config */
+ videoEmbeddedFlag = false;
+ if( config_GetInt( p_intf, "embedded-video" ) )
+ videoEmbeddedFlag = true;
+
+ alwaysVideoFlag = false;
+ if( videoEmbeddedFlag && config_GetInt( p_intf, "qt-always-video" ))
+ alwaysVideoFlag = true;
+
+ playlistEmbeddedFlag = settings->value( "playlist-embedded", true ).
+ toBool();
+ advControlsEnabled= settings->value( "adv-controls", false ).toBool();
+
setWindowTitle( QString::fromUtf8( _("VLC media player") ) );
handleMainUi( settings );
- QVLCMenu::createMenuBar( this, p_intf, playlistEmbeddedFlag );
+ QVLCMenu::createMenuBar( this, p_intf, playlistEmbeddedFlag,
+ advControlsEnabled );
/* Status bar */
timeLabel = new QLabel( 0 );
MainInterface::~MainInterface()
{
- /// \todo Save everything
+ settings->setValue( "playlist-embedded", playlistEmbeddedFlag );
+ settings->setValue( "adv-controls", advControlsEnabled );
+ settings->setValue( "pos", pos() );
+ settings->endGroup();
+ delete settings;
p_intf->b_interaction = VLC_FALSE;
var_DelCallback( p_intf, "interaction", InteractCallback, this );
slider = new InputSlider( Qt::Horizontal, NULL );
ui.hboxLayout->insertWidget( 0, slider );
- BUTTON_SET( prev, previous.png, qtr( "Previous" ) );
- BUTTONACT( ui.prevButton, prev() );
- BUTTON_SET( next, next.png , qtr( "Next" ) );
- BUTTONACT( ui.nextButton, next() );
- BUTTON_SET( play, play.png , qtr( "Play" ) );
- BUTTONACT( ui.playButton, play() );
- BUTTON_SET( stop, stop.png , qtr( "Stop" ) );
- BUTTONACT( ui.stopButton, stop() );
-
- BUTTON_SET( visual, stop.png, qtr( "Audio visualizations" ) );
- BUTTONACT( ui.visualButton, visual() );
+ BUTTON_SET_ACT_I( ui.prevButton, "" , previous.png,
+ qtr("Previous"), prev() );
+ BUTTON_SET_ACT_I( ui.nextButton, "", next.png, qtr("Next"), next() );
+ BUTTON_SET_ACT_I( ui.playButton, "", play.png, qtr("Play"), play() );
+ BUTTON_SET_ACT_I( ui.stopButton, "", stop.png, qtr("Stop"), stop() );
+ BUTTON_SET_ACT_I( ui.visualButton, "", stop.png,
+ qtr( "Audio visualizations" ), visual() );
/* Volume */
ui.volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) );
ui.volMuteLabel->installEventFilter(h);
ui.volumeSlider->setFocusPolicy( Qt::NoFocus );
- /* Fetch configuration from settings and vlc config */
- videoEmbeddedFlag = false;
- if( config_GetInt( p_intf, "embedded-video" ) )
- videoEmbeddedFlag = true;
-
- alwaysVideoFlag = false;
- if( videoEmbeddedFlag && config_GetInt( p_intf, "qt-always-video" ))
- alwaysVideoFlag = true;
-
- playlistEmbeddedFlag = true;
- /// \todo fetch playlist settings
-
- BUTTON_SET( playlist, volume-low.png, playlistEmbeddedFlag ?
- qtr( "Show playlist" ) :
+ BUTTON_SET_IMG( ui.playlistButton, "" ,volume-low.png,
+ playlistEmbeddedFlag ? qtr( "Show playlist" ) :
qtr( "Open playlist" ) );
BUTTONACT( ui.playlistButton, playlist() );
addSize = QSize( ui.vboxLayout->margin() * 2, PREF_H );
+ advControls = new ControlsWidget( p_intf );
+ ui.vboxLayout->insertWidget( 0, advControls );
+ advControls->updateGeometry();
+ if( !advControlsEnabled ) advControls->hide();
+ need_components_update = true;
+
visualSelector = new VisualSelector( p_intf );
ui.vboxLayout->insertWidget( 0, visualSelector );
visualSelector->hide();
p_intf->pf_release_window = ::DoRelease;
p_intf->pf_control_window = ::DoControl;
}
-
- calculateInterfaceSize();
- resize( mainSize );
-
setMinimumSize( PREF_W, addSize.height() );
}
}
if( VISIBLE( visualSelector ) )
height += visualSelector->height();
+ fprintf( stderr, "Adv %p - visible %i\n", advControls, advControls->isVisible() );
+ if( VISIBLE( advControls) )
+ {
+ fprintf( stderr, "visible\n" );
+ height += advControls->sizeHint().height();
+ }
+ fprintf( stderr, "Adv height %i\n", advControls->sizeHint().height() );
fprintf( stderr, "Setting to %ix%i\n",
width + addSize.width() , height + addSize.height() );
SET_WH( videoWidget, e->size().width() - addSize.width(),
e->size().height() - addSize.height() );
videoWidget->updateGeometry();
- fprintf( stderr, "Video set to %ix%i\n", DS( videoWidget->widgetSize) );
}
if( VISIBLE( playlistWidget ) )
{
SET_WH( playlistWidget , e->size().width() - addSize.width(),
e->size().height() - addSize.height() );
playlistWidget->updateGeometry();
- fprintf( stderr, "PL set to %ix%i\n",DS(playlistWidget->widgetSize ) );
}
}
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) )
/// Todo, reset its size ?
if( VISIBLE( playlistWidget) )
{
- fprintf( stderr, "hiding playlist\n" );
playlistWidget->hide();
if( videoIsActive )
{
}
else
{
- fprintf( stderr, "showing playlist\n" );
playlistWidget->show();
if( videoIsActive )
{
playlistEmbeddedFlag = false;
menuBar()->clear();
- QVLCMenu::createMenuBar( this, p_intf, false );
+ QVLCMenu::createMenuBar( this, p_intf, false, advControlsEnabled );
if( videoIsActive )
{
PlaylistDialog::killInstance();
playlistEmbeddedFlag = true;
menuBar()->clear();
- QVLCMenu::createMenuBar(this, p_intf, true );
+ QVLCMenu::createMenuBar(this, p_intf, true, advControlsEnabled );
playlist();
}
}
void MainInterface::updateOnTimer()
{
+ aout_instance_t *p_aout = (aout_instance_t *)vlc_object_find( p_intf,
+ VLC_OBJECT_AOUT, FIND_ANYWHERE );
+ /* Todo: make this event-driven */
+ if( p_aout )
+ {
+ ui.visualButton->setEnabled( true );
+ vlc_object_release( p_aout );
+ }
+ else
+ ui.visualButton->setEnabled( false );
+
+ /* And this too */
+ advControls->enableInput( THEMIM->getIM()->hasInput() );
+ advControls->enableVideo( THEMIM->getIM()->hasVideo() );
+
if( p_intf->b_die )
{
QApplication::closeAllWindows();
{
intf_dialog_args_t *p_arg = new intf_dialog_args_t;
p_arg->p_dialog = (interaction_dialog_t *)(new_val.p_address);
-
- MainInterface *p_interface = (MainInterface*)param;
DialogEvent *event = new DialogEvent( INTF_DIALOG_INTERACTION, 0, p_arg );
QApplication::postEvent( THEDP, static_cast<QEvent*>(event) );
return VLC_SUCCESS;
class PlaylistWidget;
class VolumeClickHandler;
class VisualSelector;
+class ControlsWidget;
class MainInterface : public QVLCMW
{
BackgroundWidget *bgWidget;
VisualSelector *visualSelector;
+ ControlsWidget *advControls;
PlaylistWidget *playlistWidget;
bool playlistEmbeddedFlag;
bool videoEmbeddedFlag;
bool alwaysVideoFlag;
+ bool advControlsEnabled;
InputManager *main_input_manager;
InputSlider *slider;
void next();
void playlist();
void visual();
+ void advanced();
void updateVolume( int sliderVolume );
};
THEDP->menusUpdateMapper->setMapping( menu, f ); }
void QVLCMenu::createMenuBar( MainInterface *mi, intf_thread_t *p_intf,
- bool playlist )
+ bool playlist, bool adv_controls_enabled )
{
QMenuBar *bar = mi->menuBar();
- BAR_ADD( FileMenu(), qtr("File") );
+ BAR_ADD( FileMenu(), qtr("Media") );
if( playlist )
{
BAR_ADD( PlaylistMenu( mi,p_intf ), qtr("Playlist" ) );
}
- BAR_ADD( ToolsMenu( p_intf ), qtr("Tools") );
+ BAR_ADD( ToolsMenu( p_intf, mi, adv_controls_enabled ), qtr("Tools") );
BAR_DADD( VideoMenu( p_intf, NULL ), qtr("Video"), 1 );
BAR_DADD( AudioMenu( p_intf, NULL ), qtr("Audio"), 2 );
BAR_DADD( NavigMenu( p_intf, NULL ), qtr("Navigation"), 3 );
return menu;
}
-QMenu *QVLCMenu::ToolsMenu( intf_thread_t *p_intf, bool with_intf )
+QMenu *QVLCMenu::ToolsMenu( intf_thread_t *p_intf, MainInterface *mi,
+ bool adv_controls_enabled, bool with_intf )
{
QMenu *menu = new QMenu();
if( with_intf )
QMenu *intfmenu = InterfacesMenu( p_intf, NULL );
intfmenu->setTitle( qtr("Interfaces" ) );
menu->addMenu( intfmenu );
- /** \todo ADD EXT GUI HERE */
menu->addSeparator();
}
DP_SADD( qtr("Messages" ), "", "", messagesDialog() );
DP_SADD( qtr("Information") , "", "", streaminfoDialog() );
DP_SADD( qtr("Bookmarks"), "", "", bookmarksDialog() );
+ DP_SADD( qtr("Extended settings"), "","",extendedDialog() );
+ if( mi )
+ {
+ menu->addSeparator();
+ QAction *adv = menu->addAction( qtr("Advanced controls" ),
+ mi, SLOT( advanced() ) );
+ adv->setCheckable( true );
+ if( adv_controls_enabled ) adv->setChecked( true );
+ }
menu->addSeparator();
DP_SADD( qtr("Preferences"), "", "", prefsDialog() );
- DP_SADD( qtr("Extended"), "","",extendedDialog() );
return menu;
}
intfmenu->setTitle( qtr("Interfaces" ) ); \
menu->addMenu( intfmenu ); \
\
- QMenu *toolsmenu = ToolsMenu( p_intf, false ); \
+ QMenu *toolsmenu = ToolsMenu( p_intf, NULL, false, false ); \
toolsmenu->setTitle( qtr("Tools" ) ); \
menu->addMenu( toolsmenu ); \
{
Q_OBJECT;
public:
- static void createMenuBar( MainInterface *mi, intf_thread_t *, bool );
+ static void createMenuBar( MainInterface *mi, intf_thread_t *, bool, bool );
/* Menus */
static QMenu *FileMenu();
static QMenu *SDMenu( intf_thread_t * );
static QMenu *PlaylistMenu( MainInterface *, intf_thread_t *);
- static QMenu *ToolsMenu( intf_thread_t *, bool with_intf = true );
+ static QMenu *ToolsMenu( intf_thread_t *, MainInterface *, bool,
+ bool with = true );
static QMenu *NavigMenu( intf_thread_t * , QMenu * );
static QMenu *VideoMenu( intf_thread_t * , QMenu * );
static QMenu *AudioMenu( intf_thread_t * , QMenu * );
#define BUTTONACT( b, a ) connect( b, SIGNAL( clicked() ), this, SLOT(a) )
#define ON_TIMEOUT( act ) CONNECT( THEDP->fixed_timer, timeout(), this, act )
+#define BUTTON_SET( button, text, tooltip ) \
+ button->setText( text ); \
+ button->setToolTip( tooltip );
+
+#define BUTTON_SET_ACT( button, text, tooltip, thisslot ) \
+ BUTTON_SET( button, text, tooltip ); \
+ BUTTONACT( button, thisslot );
+
+#define BUTTON_SET_IMG( button, text, image, tooltip ) \
+ BUTTON_SET( button, text, tooltip ); \
+ button->setIcon( QIcon( ":/pixmaps/"#image ) );
+
+#define BUTTON_SET_ACT_I( button, text, image, tooltip, thisslot ) \
+ BUTTON_SET_IMG( button, text, image, tooltip ); \
+ BUTTONACT( button, thisslot );
+
static int DialogEvent_Type = QEvent::User + 1;
static int PLUndockEvent_Type = QEvent::User + 2;
static int PLDockEvent_Type = QEvent::User + 3;