#include <QApplication>
#include <QFile>
#include <QDir>
+#include <QSignalMapper>
#include <assert.h>
p_input = playlist_CurrentInput( pl_Get(p_intf) );
if( p_input )
emit inputChanged( p_input );
+
+ /* Audio Menu */
+ menusAudioMapper = new QSignalMapper();
+ CONNECT( menusAudioMapper, mapped(QString), this, menusUpdateAudio( QString ) );
}
MainInputManager::~MainInputManager()
var_DelCallback( THEPL, "playlist-item-append", PLItemAppended, this );
var_DelCallback( THEPL, "playlist-item-deleted", PLItemRemoved, this );
+
+ delete menusAudioMapper;
}
vout_thread_t* MainInputManager::getVout()
emit soundMuteChanged(mute);
}
+
+void MainInputManager::menusUpdateAudio( const QString& data )
+{
+ aout_DeviceSet( getAout(), qtu(data) );
+}
+
static int PLItemAppended
( vlc_object_t * obj, const char *var, vlc_value_t old, vlc_value_t cur, void *data )
{
QApplication::postEvent( mim, event );
return VLC_SUCCESS;
}
+
static int PLItemRemoved
( vlc_object_t * obj, const char *var, vlc_value_t old, vlc_value_t cur, void *data )
{
#include <QObject>
#include <QEvent>
+class QSignalMapper;
enum { NORMAL, /* loop: 0, repeat: 0 */
REPEAT_ONE,/* loop: 0, repeat: 1 */
{
Q_OBJECT
friend class Singleton<MainInputManager>;
+ friend class VLCMenuBar;
public:
input_thread_t *getInput() { return p_input; }
void requestVoutUpdate() { return im->UpdateVout(); }
+protected:
+ QSignalMapper *menusAudioMapper;
+
private:
MainInputManager( intf_thread_t * );
virtual ~MainInputManager();
void notifyRepeatLoop( bool );
void notifyVolume( float );
void notifyMute( bool );
+ void menusUpdateAudio( const QString& );
signals:
void inputChanged( input_thread_t * );
static QActionGroup *currentGroup;
QMenu *VLCMenuBar::recentsMenu = NULL;
+QMenu *VLCMenuBar::audioDeviceMenu = NULL;
/**
* @brief Add static entries to DP in menus
{
PUSH_INPUTVAR( "audio-es" );
PUSH_VAR( "stereo-mode" );
- PUSH_VAR( "device" );
PUSH_VAR( "visual" );
return VLC_SUCCESS;
}
if( current->isEmpty() )
{
addActionWithSubmenu( current, "audio-es", qtr( "Audio &Track" ) );
+ audioDeviceMenu = current->addMenu( qtr( "Audio &Device" ) );
addActionWithSubmenu( current, "stereo-mode", qtr( "&Stereo Mode" ) );
- addActionWithSubmenu( current, "device", qtr( "Audio &Device" ) );
current->addSeparator();
addActionWithSubmenu( current, "visual", qtr( "&Visualizations" ) );
p_aout = THEMIM->getAout();
EnableStaticEntries( current, ( p_aout != NULL ) );
AudioAutoMenuBuilder( p_aout, p_input, objects, varnames );
+ updateAudioDevice( p_intf, p_aout, audioDeviceMenu );
if( p_aout )
{
vlc_object_release( p_aout );
var_Set( p_object, var, val );
}
+void VLCMenuBar::updateAudioDevice( intf_thread_t * p_intf, audio_output_t *p_aout, QMenu *current )
+{
+ char **ids, **names;
+ char *selected;
+
+ if( !p_aout )
+ return;
+
+ current->clear();
+ int i_result = aout_DevicesList( p_aout, &ids, &names);
+ selected = aout_DeviceGet( p_aout );
+
+ QActionGroup *actionGroup = new QActionGroup(current);
+ QAction *action;
+
+ for( int i = 0; i < i_result; i++ )
+ {
+ action = new QAction( qfu( names[i] ), NULL );
+ action->setData( ids[i] );
+ action->setCheckable( true );
+ if( selected && !strcmp( ids[i], selected ) )
+ action->setChecked( true );
+ actionGroup->addAction( action );
+ current->addAction( action );
+ CONNECT(action, changed(), THEMIM->menusAudioMapper, map());
+ THEMIM->menusAudioMapper->setMapping(action, ids[i]);
+ free( ids[i] );
+ free( names[i] );
+ }
+ free( ids );
+ free( names );
+}
+
void VLCMenuBar::updateRecents( intf_thread_t *p_intf )
{
if( recentsMenu )
static void EnableStaticEntries( QMenu *, bool );
/* recentMRL menu */
- static QMenu *recentsMenu;
+ static QMenu *recentsMenu, *audioDeviceMenu;
+
+ static void updateAudioDevice( intf_thread_t *, audio_output_t *, QMenu* );
public slots:
static void updateRecents( intf_thread_t * );