Commit de55fd72 authored by Derk-Jan Hartman's avatar Derk-Jan Hartman

* backported to stable: [15228],[15234],[15239],[15261],[15262],[15264],[15266]-[15271]

[15279],[15289],[15292],[15300]

 * specifically left out sfilters panel in OSX intf.
 * this is the first batch, I don't want to frell my tree and have to start from scratch AGAIN :D
parent 7185fa90
/*
* Created on 28-feb-2006
*
* $Id: VideoIntf.java 8 2006-02-28 12:03:47Z little $
* $Id$
*
* This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License
......
......@@ -1218,4 +1218,4 @@ DOT_CLEANUP = YES
# The SEARCHENGINE tag specifies whether or not a search engine should be
# used. If set to NO the values of all tags below this one will be ignored.
SEARCHENGINE = NO
SEARCHENGINE = YES
......@@ -797,11 +797,23 @@ difficulty to understand how VLC skins work.</para>
<listitem><para>
<emphasis>dialogs.fileInfo()</emphasis>: Show the "File Info" dialog box.
</para></listitem>
<listitem><para>
<emphasis>dialogs.playlist()</emphasis>: Show the "standard" (not skinned) playlist dialog.
</para></listitem>
<listitem><para>
<emphasis>dialogs.streamingWizard()</emphasis>: Show the "Streaming Wizard" dialog box (new after VLC 0.8.2).
</para></listitem>
<listitem><para>
<emphasis>dialogs.popup()</emphasis>: Show the popup menu, (already available with a right-click on a <link linkend="Image">Image</link> control).
<emphasis>dialogs.popup()</emphasis>: Show the full popup menu, (already available with a right-click on a <link linkend="Image">Image</link> control).
</para></listitem>
<listitem><para>
<emphasis>dialogs.audioPopup()</emphasis>: Show the audio settings popup menu (since VLC 0.8.5).
</para></listitem>
<listitem><para>
<emphasis>dialogs.videoPopup()</emphasis>: Show the video settings popup menu (since VLC 0.8.5).
</para></listitem>
<listitem><para>
<emphasis>dialogs.miscPopup()</emphasis>: Show a popup menu containing playback control and general options (since VLC 0.8.5).
</para></listitem>
<listitem><para>
<emphasis>equalizer.enable()</emphasis>: Enable the equalizer audio filter (since VLC 0.8.5).
......@@ -974,6 +986,9 @@ difficulty to understand how VLC skins work.</para>
<listitem><para>
<emphasis>vlc.hasVout</emphasis>: True if a video is being played (since VLC 0.8.5).
</para></listitem>
<listitem><para>
<emphasis>vlc.hasAudio</emphasis>: True if audio is being played (since VLC 0.8.5).
</para></listitem>
<listitem><para>
<emphasis>vlc.isFullscreen</emphasis>: True when the video is in fullscreen mode (since VLC 0.8.5).
</para></listitem>
......@@ -1005,7 +1020,7 @@ difficulty to understand how VLC skins work.</para>
<emphasis>playlist.isRepeat</emphasis>: True when the current playlist item is being repeated, false otherwise (since VLC 0.8.0).
</para></listitem>
<listitem><para>
<emphasis>dvd.isActive</emphasis>: True when a DVD is currently playing. This variable can be used to display buttons associated to the <link linkend="dvdactions">dvd.* actions</link> only when needed (since VLC 0.8.5).
<emphasis>dvd.isActive</emphasis>: True when a DVD is currently playing. This variable can be used to display buttons associated to the <link linkend="dvdactions">dvd.* actions</link> only when needed (since VLC 0.8.5).
</para></listitem>
<listitem><para>
<emphasis>window_name.isVisible</emphasis>: True when the window whose <link linkend="windowid">id</link> is "window_name" is visible, false otherwise.
......
......@@ -162,6 +162,9 @@ VLC_EXPORT( void, intf_Destroy, ( intf_thread_t * ) );
#define INTF_DIALOG_BOOKMARKS 14
#define INTF_DIALOG_POPUPMENU 20
#define INTF_DIALOG_AUDIOPOPUPMENU 21
#define INTF_DIALOG_VIDEOPOPUPMENU 22
#define INTF_DIALOG_MISCPOPUPMENU 23
#define INTF_DIALOG_FILE_GENERIC 30
#define INTF_DIALOG_INTERACTION 50
......
......@@ -32,6 +32,7 @@
#include "vlc_meta.h"
#include "codecs.h"
#include "charset.h"
#include "libavi.h"
......
......@@ -76,9 +76,13 @@ static VLAboutBox *_o_sharedInstance = nil;
o_version = [o_info_dict objectForKey:@"CFBundleVersion"];
/* setup the creator / revision field */
if( VLC_Changeset() != "exported" )
[o_revision_field setStringValue: [NSString stringWithFormat: \
_NS("Compiled by %s, based on SVN revision %s"), VLC_CompileBy(), \
VLC_Changeset()]];
else
[o_revision_field setStringValue: [NSString stringWithFormat: \
_NS("Compiled by %s"), VLC_CompileBy()]];
/* Setup the nameversion field */
o_name_version = [NSString stringWithFormat:@"Version %@", o_version];
......
......@@ -42,8 +42,7 @@ typedef CmdDialogs<5> CmdDlgNet;
typedef CmdDialogs<6> CmdDlgMessages;
typedef CmdDialogs<7> CmdDlgPrefs;
typedef CmdDialogs<8> CmdDlgFileInfo;
typedef CmdDialogs<9> CmdDlgShowPopupMenu;
typedef CmdDialogs<10> CmdDlgHidePopupMenu;
typedef CmdDialogs<11> CmdDlgAdd;
typedef CmdDialogs<12> CmdDlgPlaylistLoad;
typedef CmdDialogs<13> CmdDlgPlaylistSave;
......@@ -51,6 +50,16 @@ typedef CmdDialogs<14> CmdDlgDirectory;
typedef CmdDialogs<15> CmdDlgStreamingWizard;
typedef CmdDialogs<16> CmdDlgPlaytreeLoad;
typedef CmdDialogs<17> CmdDlgPlaytreeSave;
typedef CmdDialogs<18> CmdDlgPlaylist;
typedef CmdDialogs<30> CmdDlgShowPopupMenu;
typedef CmdDialogs<31> CmdDlgHidePopupMenu;
typedef CmdDialogs<32> CmdDlgShowAudioPopupMenu;
typedef CmdDialogs<33> CmdDlgHideAudioPopupMenu;
typedef CmdDialogs<34> CmdDlgShowVideoPopupMenu;
typedef CmdDialogs<35> CmdDlgHideVideoPopupMenu;
typedef CmdDialogs<36> CmdDlgShowMiscPopupMenu;
typedef CmdDialogs<37> CmdDlgHideMiscPopupMenu;
/// Generic "Open dialog" command
......@@ -97,13 +106,7 @@ class CmdDialogs: public CmdGeneric
case 8:
pDialogs->showFileInfo();
break;
case 9:
pDialogs->showPopupMenu( true );
break;
case 10:
pDialogs->showPopupMenu( false );
break;
case 11:
case 11:
pDialogs->showFile( false );
break;
case 12:
......@@ -118,6 +121,33 @@ class CmdDialogs: public CmdGeneric
case 15:
pDialogs->showStreamingWizard();
break;
case 18:
pDialogs->showPlaylist();
break;
case 30:
pDialogs->showPopupMenu( true, INTF_DIALOG_POPUPMENU );
break;
case 31:
pDialogs->showPopupMenu( false, INTF_DIALOG_POPUPMENU );
break;
case 32:
pDialogs->showPopupMenu( true, INTF_DIALOG_AUDIOPOPUPMENU );
break;
case 33:
pDialogs->showPopupMenu( false,INTF_DIALOG_AUDIOPOPUPMENU );
break;
case 34:
pDialogs->showPopupMenu( true, INTF_DIALOG_VIDEOPOPUPMENU );
break;
case 35:
pDialogs->showPopupMenu( false,INTF_DIALOG_VIDEOPOPUPMENU );
break;
case 36:
pDialogs->showPopupMenu( true, INTF_DIALOG_MISCPOPUPMENU );
break;
case 37:
pDialogs->showPopupMenu( false,INTF_DIALOG_MISCPOPUPMENU );
break;
default:
msg_Warn( getIntf(), "unknown dialog type" );
break;
......
......@@ -57,11 +57,17 @@ Interpreter::Interpreter( intf_thread_t *pIntf ): SkinObject( pIntf )
REGISTER_CMD( "dialogs.directory()", CmdDlgDirectory )
REGISTER_CMD( "dialogs.disc()", CmdDlgDisc )
REGISTER_CMD( "dialogs.net()", CmdDlgNet )
REGISTER_CMD( "dialogs.playlist()", CmdDlgPlaylist )
REGISTER_CMD( "dialogs.messages()", CmdDlgMessages )
REGISTER_CMD( "dialogs.prefs()", CmdDlgPrefs )
REGISTER_CMD( "dialogs.fileInfo()", CmdDlgFileInfo )
REGISTER_CMD( "dialogs.streamingWizard()", CmdDlgStreamingWizard )
REGISTER_CMD( "dialogs.popup()", CmdDlgShowPopupMenu )
REGISTER_CMD( "dialogs.audioPopup()", CmdDlgShowAudioPopupMenu )
REGISTER_CMD( "dialogs.videoPopup()", CmdDlgShowVideoPopupMenu )
REGISTER_CMD( "dialogs.miscPopup()", CmdDlgShowMiscPopupMenu )
REGISTER_CMD( "dvd.nextTitle()", CmdDvdNextTitle )
REGISTER_CMD( "dvd.previousTitle()", CmdDvdPreviousTitle )
REGISTER_CMD( "dvd.nextChapter()", CmdDvdNextChapter )
......@@ -224,24 +230,41 @@ CmdGeneric *Interpreter::parseAction( const string &rAction, Theme *pTheme )
{
int leftPos = rAction.find( ".show()" );
string windowId = rAction.substr( 0, leftPos );
TopWindow *pWin = pTheme->getWindowById( windowId );
if( pWin )
if( windowId == "playlist_window" &&
!config_GetInt( getIntf(), "skinned-playlist") )
{
pCommand = new CmdShowWindow( getIntf(), pTheme->getWindowManager(),
*pWin );
list<CmdGeneric *> list;
list.push_back( new CmdDlgPlaylist( getIntf() ) );
TopWindow *pWin = pTheme->getWindowById( windowId );
if( pWin )
list.push_back( new CmdHideWindow( getIntf(),
pTheme->getWindowManager(),
*pWin ) );
pCommand = new CmdMuxer( getIntf(), list );
}
else
{
// It was maybe the id of a popup
Popup *pPopup = pTheme->getPopupById( windowId );
if( pPopup )
TopWindow *pWin = pTheme->getWindowById( windowId );
if( pWin )
{
pCommand = new CmdShowPopup( getIntf(), *pPopup );
pCommand = new CmdShowWindow( getIntf(),
pTheme->getWindowManager(),
*pWin );
}
else
{
msg_Err( getIntf(), "unknown window or popup (%s)",
windowId.c_str() );
// It was maybe the id of a popup
Popup *pPopup = pTheme->getPopupById( windowId );
if( pPopup )
{
pCommand = new CmdShowPopup( getIntf(), *pPopup );
}
else
{
msg_Err( getIntf(), "unknown window or popup (%s)",
windowId.c_str() );
}
}
}
}
......@@ -249,15 +272,31 @@ CmdGeneric *Interpreter::parseAction( const string &rAction, Theme *pTheme )
{
int leftPos = rAction.find( ".hide()" );
string windowId = rAction.substr( 0, leftPos );
TopWindow *pWin = pTheme->getWindowById( windowId );
if( pWin )
if( windowId == "playlist_window" &&
! config_GetInt( getIntf(), "skinned-playlist") )
{
pCommand = new CmdHideWindow( getIntf(), pTheme->getWindowManager(),
*pWin );
list<CmdGeneric *> list;
list.push_back( new CmdDlgPlaylist( getIntf() ) );
TopWindow *pWin = pTheme->getWindowById( windowId );
if( pWin )
list.push_back( new CmdHideWindow( getIntf(),
pTheme->getWindowManager(),
*pWin ) );
pCommand = new CmdMuxer( getIntf(), list );
}
else
{
msg_Err( getIntf(), "unknown window (%s)", windowId.c_str() );
TopWindow *pWin = pTheme->getWindowById( windowId );
if( pWin )
{
pCommand = new CmdHideWindow( getIntf(),
pTheme->getWindowManager(),
*pWin );
}
else
{
msg_Err( getIntf(), "unknown window (%s)", windowId.c_str() );
}
}
}
......
......@@ -57,7 +57,6 @@ void Dialogs::showChangeSkinCB( intf_dialog_args_t *pArg )
}
}
void Dialogs::showPlaylistLoadCB( intf_dialog_args_t *pArg )
{
intf_thread_t *pIntf = (intf_thread_t *)pArg->p_arg;
......@@ -97,7 +96,7 @@ static int PopupMenuCB( vlc_object_t *p_this, const char *psz_variable,
vlc_value_t old_val, vlc_value_t new_val, void *param )
{
Dialogs *p_dialogs = (Dialogs *)param;
p_dialogs->showPopupMenu( new_val.b_bool != 0 );
p_dialogs->showPopupMenu( new_val.b_bool != 0, INTF_DIALOG_POPUPMENU );
return VLC_SUCCESS;
}
......@@ -242,6 +241,14 @@ void Dialogs::showPlaylistSave()
showPlaylistSaveCB, kSAVE );
}
void Dialogs::showPlaylist()
{
if( m_pProvider && m_pProvider->pf_show_dialog )
{
m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_PLAYLIST,
0, 0 );
}
}
void Dialogs::showFileSimple( bool play )
{
......@@ -329,11 +336,11 @@ void Dialogs::showStreamingWizard()
}
void Dialogs::showPopupMenu( bool bShow )
void Dialogs::showPopupMenu( bool bShow, int popupType = INTF_DIALOG_POPUPMENU )
{
if( m_pProvider && m_pProvider->pf_show_dialog )
{
m_pProvider->pf_show_dialog( m_pProvider, INTF_DIALOG_POPUPMENU,
m_pProvider->pf_show_dialog( m_pProvider, popupType,
(int)bShow, 0 );
}
}
......
......@@ -86,8 +86,11 @@ class Dialogs: public SkinObject
/// Show the Streaming Wizard dialog
void showStreamingWizard();
/// Show the popup menu
void showPopupMenu( bool bShow );
/// Show the Playlist
void showPlaylist();
/// Show a popup menu
void showPopupMenu( bool bShow, int popupType );
/// Show an interaction dialog
void showInteraction( interaction_dialog_t * );
......
......@@ -365,6 +365,9 @@ vlc_module_begin();
add_bool( "skins2-transparency", VLC_FALSE, NULL, SKINS2_TRANSPARENCY,
SKINS2_TRANSPARENCY_LONG, VLC_FALSE );
#endif
add_bool( "skinned-playlist", VLC_TRUE, NULL, SKINS2_TRANSPARENCY,
SKINS2_TRANSPARENCY_LONG, VLC_FALSE );
set_shortname( _("Skins"));
set_description( _("Skinnable Interface") );
set_capability( "interface", 30 );
......
......@@ -79,6 +79,8 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ),
#define REGISTER_VAR( var, type, name ) \
var = VariablePtr( new type( getIntf() ) ); \
pVarManager->registerVar( var, name );
/* Playlist variables */
REGISTER_VAR( m_cPlaylist, Playlist, "playlist" )
pVarManager->registerVar( getPlaylistVar().getPositionVarPtr(),
"playlist.slider" );
......@@ -90,19 +92,28 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ),
"playtree.slider" );
pVarManager->registerVar( m_cVarRandom, "playtree.isRandom" );
pVarManager->registerVar( m_cVarLoop, "playtree.isLoop" );
pVarManager->registerVar( m_cVarRepeat, "playtree.isRepeat" );
REGISTER_VAR( m_cVarTime, StreamTime, "time" )
REGISTER_VAR( m_cVarVolume, Volume, "volume" )
REGISTER_VAR( m_cVarMute, VarBoolImpl, "vlc.isMute" )
REGISTER_VAR( m_cVarPlaying, VarBoolImpl, "vlc.isPlaying" )
REGISTER_VAR( m_cVarStopped, VarBoolImpl, "vlc.isStopped" )
REGISTER_VAR( m_cVarPaused, VarBoolImpl, "vlc.isPaused" )
/* Input variables */
pVarManager->registerVar( m_cVarRepeat, "playtree.isRepeat" );
REGISTER_VAR( m_cVarTime, StreamTime, "time" )
REGISTER_VAR( m_cVarSeekable, VarBoolImpl, "vlc.isSeekable" )
REGISTER_VAR( m_cVarEqualizer, VarBoolImpl, "equalizer.isEnabled" )
REGISTER_VAR( m_cVarEqPreamp, EqualizerPreamp, "equalizer.preamp" )
REGISTER_VAR( m_cVarDvdActive, VarBoolImpl, "dvd.isActive" )
/* Vout variables */
REGISTER_VAR( m_cVarFullscreen, VarBoolImpl, "vlc.isFullscreen" )
REGISTER_VAR( m_cVarHasVout, VarBoolImpl, "vlc.hasVout" )
/* Aout variables */
REGISTER_VAR( m_cVarHasAudio, VarBoolImpl, "vlc.hasAudio" )
REGISTER_VAR( m_cVarVolume, Volume, "volume" )
REGISTER_VAR( m_cVarMute, VarBoolImpl, "vlc.isMute" )
REGISTER_VAR( m_cVarEqualizer, VarBoolImpl, "equalizer.isEnabled" )
REGISTER_VAR( m_cVarEqPreamp, EqualizerPreamp, "equalizer.preamp" )
#undef REGISTER_VAR
m_cVarStreamName = VariablePtr( new VarText( getIntf(), false ) );
pVarManager->registerVar( m_cVarStreamName, "streamName" );
......@@ -223,7 +234,7 @@ void VlcProc::dropVout()
void VlcProc::manage()
{
// Did the user requested to quit vlc ?
// Did the user request to quit vlc ?
if( getIntf()->b_die || getIntf()->p_vlc->b_die )
{
CmdQuit *pCmd = new CmdQuit( getIntf() );
......@@ -231,23 +242,102 @@ void VlcProc::manage()
pQueue->push( CmdGenericPtr( pCmd ) );
}
// Get the VLC variables
StreamTime *pTime = (StreamTime*)m_cVarTime.get();
refreshPlaylist();
refreshAudio();
refreshInput();
}
void VlcProc::CmdManage::execute()
{
// Just forward to VlcProc
m_pParent->manage();
}
void VlcProc::refreshAudio()
{
char *pFilters = NULL;
// Check if the audio output has changed
aout_instance_t *pAout = (aout_instance_t *)vlc_object_find( getIntf(),
VLC_OBJECT_AOUT, FIND_ANYWHERE );
if( pAout )
{
if( pAout != m_pAout )
{
// Register the equalizer callbacks
if( !var_AddCallback( pAout, "equalizer-bands",
onEqBandsChange, this ) &&
!var_AddCallback( pAout, "equalizer-preamp",
onEqPreampChange, this ) )
{
m_pAout = pAout;
//char * psz_bands = var_GetString( p_aout, "equalizer-bands" );
}
}
// Get the audio filters
pFilters = var_GetString( pAout, "audio-filter" );
vlc_object_release( pAout );
}
else
{
// Get the audio filters
pFilters = config_GetPsz( getIntf(), "audio-filter" );
}
// Refresh sound volume
audio_volume_t volume;
aout_VolumeGet( getIntf(), &volume );
Volume *pVolume = (Volume*)m_cVarVolume.get();
pVolume->set( (double)volume * 2.0 / AOUT_VOLUME_MAX );
// Set the mute variable
VarBoolImpl *pVarMute = (VarBoolImpl*)m_cVarMute.get();
pVarMute->set( volume == 0 );
// Refresh the equalizer variable
VarBoolImpl *pVarEqualizer = (VarBoolImpl*)m_cVarEqualizer.get();
pVarEqualizer->set( pFilters && strstr( pFilters, "equalizer" ) );
}
void VlcProc::refreshPlaylist()
{
// Get the status of the playlist
VarBoolImpl *pVarPlaying = (VarBoolImpl*)m_cVarPlaying.get();
VarBoolImpl *pVarStopped = (VarBoolImpl*)m_cVarStopped.get();
VarBoolImpl *pVarPaused = (VarBoolImpl*)m_cVarPaused.get();
VarBoolImpl *pVarSeekable = (VarBoolImpl*)m_cVarSeekable.get();
playlist_status_t status =
getIntf()->p_sys->p_playlist->status.i_status;
pVarPlaying->set( status == PLAYLIST_RUNNING );
pVarStopped->set( status == PLAYLIST_STOPPED );
pVarPaused->set( status == PLAYLIST_PAUSED );
// Refresh the random variable
VarBoolImpl *pVarRandom = (VarBoolImpl*)m_cVarRandom.get();
vlc_value_t val;
var_Get( getIntf()->p_sys->p_playlist, "random", &val );
pVarRandom->set( val.b_bool != 0 );
// Refresh the loop variable
VarBoolImpl *pVarLoop = (VarBoolImpl*)m_cVarLoop.get();
var_Get( getIntf()->p_sys->p_playlist, "loop", &val );
pVarLoop->set( val.b_bool != 0 );
// Refresh the repeat variable
VarBoolImpl *pVarRepeat = (VarBoolImpl*)m_cVarRepeat.get();
var_Get( getIntf()->p_sys->p_playlist, "repeat", &val );
pVarRepeat->set( val.b_bool != 0 );
}
void VlcProc::refreshInput()
{
StreamTime *pTime = (StreamTime*)m_cVarTime.get();
VarBoolImpl *pVarSeekable = (VarBoolImpl*)m_cVarSeekable.get();
VarBoolImpl *pVarDvdActive = (VarBoolImpl*)m_cVarDvdActive.get();
VarBoolImpl *pVarFullscreen = (VarBoolImpl*)m_cVarFullscreen.get();
VarBoolImpl *pVarHasVout = (VarBoolImpl*)m_cVarHasVout.get();
VarBoolImpl *pVarHasAudio = (VarBoolImpl*)m_cVarHasAudio.get();
VarText *pBitrate = (VarText*)m_cVarStreamBitRate.get();
VarText *pSampleRate = (VarText*)m_cVarStreamSampleRate.get();
// Refresh audio variables
refreshAudio();
VarBoolImpl *pVarFullscreen = (VarBoolImpl*)m_cVarFullscreen.get();
// Update the input
if( getIntf()->p_sys->p_input == NULL )
......@@ -270,124 +360,49 @@ void VlcProc::manage()
vlc_value_t pos;
var_Get( pInput, "position", &pos );
pTime->set( pos.f_float, false );
// Get the status of the playlist
playlist_status_t status =
getIntf()->p_sys->p_playlist->status.i_status;
pVarPlaying->set( status == PLAYLIST_RUNNING );
pVarStopped->set( status == PLAYLIST_STOPPED );
pVarPaused->set( status == PLAYLIST_PAUSED );
pVarSeekable->set( pos.f_float != 0.0 );
// Refresh DVD detection
vlc_value_t chapters_count;
var_Change( pInput, "chapter", VLC_VAR_CHOICESCOUNT,
&chapters_count, NULL );
&chapters_count, NULL );
pVarDvdActive->set( chapters_count.i_int > 0 );
// Get the input bitrate
int bitrate = var_GetInteger( pInput, "bit-rate" ) / 1000;
pBitrate->set( UString::fromInt( getIntf(), bitrate ) );
// Get the audio sample rate
int sampleRate = var_GetInteger( pInput, "sample-rate" ) / 1000;
pSampleRate->set( UString::fromInt( getIntf(), sampleRate ) );
// Do we have audio
vlc_value_t audio_es;
var_Change( pInput, "audio-es", VLC_VAR_CHOICESCOUNT,
&audio_es, NULL );
pVarHasAudio->set( audio_es.i_int > 0 );
// Refresh fullscreen status
vout_thread_t *pVout = (vout_thread_t *)vlc_object_find( pInput,
VLC_OBJECT_VOUT, FIND_CHILD );
VLC_OBJECT_VOUT, FIND_CHILD );
pVarHasVout->set( pVout != NULL );
if( pVout )
{
pVarFullscreen->set( pVout->b_fullscreen );
vlc_object_release( pVout );
}
// Get the input bitrate
int bitrate = var_GetInteger( pInput, "bit-rate" ) / 1000;
pBitrate->set( UString::fromInt( getIntf(), bitrate ) );
// Get the audio sample rate
int sampleRate = var_GetInteger( pInput, "sample-rate" ) / 1000;
pSampleRate->set( UString::fromInt( getIntf(), sampleRate ) );
}
else
{
pVarPlaying->set( false );
pVarPaused->set( false );
pVarStopped->set( true );
pVarSeekable->set( false );
pVarDvdActive->set( false );
pTime->set( 0, false );
pVarFullscreen->set( false );
pVarHasAudio->set( false );
pVarHasVout->set( false );
}
// Refresh the random variable
vlc_value_t val;
var_Get( getIntf()->p_sys->p_playlist, "random", &val );
pVarRandom->set( val.b_bool != 0 );
// Refresh the loop variable
var_Get( getIntf()->p_sys->p_playlist, "loop", &val );
pVarLoop->set( val.b_bool != 0 );
// Refresh the repeat variable
var_Get( getIntf()->p_sys->p_playlist, "repeat", &val );
pVarRepeat->set( val.b_bool != 0 );
}
void VlcProc::CmdManage::execute()
{
// Just forward to VlcProc
m_pParent->manage();
}
void VlcProc::refreshAudio()
{
char *pFilters = NULL;
// Check if the audio output has changed
aout_instance_t *pAout = (aout_instance_t *)vlc_object_find( getIntf(),
VLC_OBJECT_AOUT, FIND_ANYWHERE );
if( pAout )
{
if( pAout != m_pAout )
{
// Register the equalizer callbacks
if( !var_AddCallback( pAout, "equalizer-bands",
onEqBandsChange, this ) &&
!var_AddCallback( pAout, "equalizer-preamp",
onEqPreampChange, this ) )
{
m_pAout = pAout;
//char * psz_bands = var_GetString( p_aout, "equalizer-bands" );
}
}
// Get the audio filters
pFilters = var_GetString( pAout, "audio-filter" );
vlc_object_release( pAout );
}
else
{
// Get the audio filters
pFilters = config_GetPsz( getIntf(), "audio-filter" );
}
// Refresh sound volume
audio_volume_t volume;
aout_VolumeGet( getIntf(), &volume );
Volume *pVolume = (Volume*)m_cVarVolume.get();
pVolume->set( (double)volume * 2.0 / AOUT_VOLUME_MAX );
// Set the mute variable
VarBoolImpl *pVarMute = (VarBoolImpl*)m_cVarMute.get();
pVarMute->set( volume == 0 );
// Refresh the equalizer variable
VarBoolImpl *pVarEqualizer = (VarBoolImpl*)m_cVarEqualizer.get();
pVarEqualizer->set( pFilters && strstr( pFilters, "equalizer" ) );
}
int VlcProc::onIntfChange( vlc_object_t *pObj, const char *pVariable,
vlc_value_t oldVal, vlc_value_t newVal,
void *pParam )
......
......@@ -131,6 +131,8 @@ class VlcProc: public SkinObject
VariablePtr m_cVarFullscreen;
VarBox m_varVoutSize;
VariablePtr m_cVarHasVout;
/// Variables related to audio
VariablePtr m_cVarHasAudio;
/// Equalizer variables
EqualizerBands m_varEqBands;
VariablePtr m_cVarEqPreamp;
......@@ -163,6 +165,10 @@ class VlcProc: public SkinObject
/// Refresh audio variables
void refreshAudio();
/// Refresh playlist variables
void refreshPlaylist();
/// Refresh input variables
void refreshInput();
/// Update the stream name variable
void updateStreamName( playlist_t *p_playlist );
......
......@@ -84,6 +84,9 @@ private:
void OnOpenSat( wxCommandEvent& event );
void OnPopupMenu( wxCommandEvent& event );
void OnAudioPopupMenu( wxCommandEvent& event );
void OnVideoPopupMenu( wxCommandEvent& event );
void OnMiscPopupMenu( wxCommandEvent& event );
void OnIdle( wxIdleEvent& event );
......@@ -140,8 +143,16 @@ BEGIN_EVENT_TABLE(DialogsProvider, wxFrame)
DialogsProvider::OnFileInfo)
EVT_COMMAND(INTF_DIALOG_BOOKMARKS, wxEVT_DIALOG,
DialogsProvider::OnBookmarks)
EVT_COMMAND(INTF_DIALOG_POPUPMENU, wxEVT_DIALOG,
DialogsProvider::OnPopupMenu)
EVT_COMMAND(INTF_DIALOG_AUDIOPOPUPMENU, wxEVT_DIALOG,
DialogsProvider::OnAudioPopupMenu)
EVT_COMMAND(INTF_DIALOG_VIDEOPOPUPMENU, wxEVT_DIALOG,
DialogsProvider::OnVideoPopupMenu)
EVT_COMMAND(INTF_DIALOG_MISCPOPUPMENU, wxEVT_DIALOG,
DialogsProvider::OnMiscPopupMenu)
EVT_COMMAND(INTF_DIALOG_EXIT, wxEVT_DIALOG,
DialogsProvider::OnExitThread)
EVT_COMMAND(INTF_DIALOG_UPDATEVLC, wxEVT_DIALOG,
......@@ -508,6 +519,22 @@ void DialogsProvider::OnPopupMenu( wxCommandEvent& event )
::PopupMenu( p_intf, this, mousepos );
}
void DialogsProvider::OnAudioPopupMenu( wxCommandEvent& event )
{
wxPoint mousepos = ScreenToClient( wxGetMousePosition() );
::AudioPopupMenu( p_intf, this, mousepos );
}
void DialogsProvider::OnVideoPopupMenu( wxCommandEvent& event )
{
wxPoint mousepos = ScreenToClient( wxGetMousePosition() );
::VideoPopupMenu( p_intf, this, mousepos );
}
void DialogsProvider::OnMiscPopupMenu( wxCommandEvent& event )
{
wxPoint mousepos = ScreenToClient( wxGetMousePosition() );
::MiscPopupMenu( p_intf, this, mousepos );
}
void DialogsProvider::OnExitThread( wxCommandEvent& WXUNUSED(event) )
{
wxTheApp->ExitMainLoop();
......
......@@ -239,6 +239,9 @@ namespace wxvlc
};
void PopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
void AudioPopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
void VideoPopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
void MiscPopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
wxMenu *SettingsMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
wxMenu *AudioMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
wxMenu *VideoMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
......
......@@ -21,20 +21,16 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <stdlib.h> /* malloc(), free() */
#include <errno.h> /* ENOMEM */
#include <string.h> /* strerror() */
#include <stdio.h>
#include <vlc/vlc.h>
#include <vlc/intf.h>
#include "wxwidgets.hpp"
#include "interface.hpp"
#include <vector>
#include <string>
using namespace std;
class wxMenuItemExt: public wxMenuItem
{
public:
......@@ -43,16 +39,12 @@ public:
const wxString& helpString, wxItemKind kind,
char *_psz_var, int _i_object_id, vlc_value_t _val,
int _i_val_type );
virtual ~wxMenuItemExt();
char *psz_var;
int i_val_type;
int i_object_id;
vlc_value_t val;
private:
};
class Menu: public wxMenu
......@@ -62,7 +54,7 @@ public:
Menu( intf_thread_t *p_intf, int i_start_id );
virtual ~Menu();
void Populate( int i_count, char **ppsz_names, int *pi_objects );
void Populate( vector<string> &, vector<int> &);
void Clear();
private:
......@@ -81,8 +73,6 @@ private:
/*****************************************************************************
* Event Table.
*****************************************************************************/
/* IDs for the controls and the menu commands */
enum
{
/* menu items */
......@@ -126,6 +116,9 @@ BEGIN_EVENT_TABLE(MenuEvtHandler, wxEvtHandler)
EVT_MENU(-1, MenuEvtHandler::OnMenuEvent)
END_EVENT_TABLE()
/*****************************************************************************
* Static menu helpers
*****************************************************************************/
wxMenu *OpenStreamMenu( intf_thread_t *p_intf )
{
wxMenu *menu = new wxMenu;
......@@ -147,215 +140,287 @@ wxMenu *MiscMenu( intf_thread_t *p_intf )
return menu;
}
void PopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
const wxPoint& pos )
{
#define MAX_POPUP_ITEMS 45
/*****************************************************************************
* Builders for the dynamic menus
*****************************************************************************/
#define PUSH_VAR( var ) rs_varnames.push_back( var ); \
ri_objects.push_back( p_object->i_object_id );
int minimal = config_GetInt( p_intf, "wx-minimal" );
int InputAutoMenuBuilder( vlc_object_t *p_object,
vector<int> &ri_objects, vector<string> &rs_varnames )
{
PUSH_VAR( "bookmark");
PUSH_VAR( "title" );
PUSH_VAR ("chapter" );
PUSH_VAR( "program" );
PUSH_VAR( "navigation" );
PUSH_VAR( "dvd_menus" );
return VLC_SUCCESS;
}
vlc_object_t *p_object, *p_input;
char *ppsz_varnames[MAX_POPUP_ITEMS];
int pi_objects[MAX_POPUP_ITEMS];
int i = 0, i_last_separator = 0;
int VideoAutoMenuBuilder( vlc_object_t *p_object,
vector<int> &ri_objects, vector<string> &rs_varnames )
{
PUSH_VAR( "fullscreen" );
PUSH_VAR( "zoom" );
PUSH_VAR( "deinterlace" );
PUSH_VAR( "aspect-ratio" );
PUSH_VAR( "crop" );
PUSH_VAR( "video-on-top" );
PUSH_VAR( "directx-wallpaper" );
PUSH_VAR( "video-snapshot" );
vlc_object_t *p_dec_obj = (vlc_object_t *)vlc_object_find( p_object,
VLC_OBJECT_DECODER,
FIND_PARENT );
if( p_dec_obj != NULL )
{
PUSH_VAR( "ffmpeg-pp-q" );
vlc_object_release( p_dec_obj );
}
return VLC_SUCCESS;
}
/* Initializations */
memset( pi_objects, 0, MAX_POPUP_ITEMS * sizeof(int) );
int AudioAutoMenuBuilder( vlc_object_t *p_object,
vector<int> &ri_objects, vector<string> &rs_varnames )
{
PUSH_VAR( "audio-device" );
PUSH_VAR( "audio-channels" );
PUSH_VAR( "visual" );
PUSH_VAR( "equalizer" );
return VLC_SUCCESS;
}
/* Input menu */
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
FIND_ANYWHERE );
int IntfAutoMenuBuilder( intf_thread_t *p_intf,
vector<int> &ri_objects, vector<string> &rs_varnames )
{
/* vlc_object_find is needed because of the dialogs provider case */
vlc_object_t *p_object;
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INTF,
FIND_PARENT );
if( p_object != NULL )
{
ppsz_varnames[i] = "bookmark";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "title";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "chapter";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "program";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "navigation";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "dvd_menus";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-es";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "audio-es";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "spu-es";
pi_objects[i++] = p_object->i_object_id;
PUSH_VAR( "intf-add" );
PUSH_VAR( "intf-skins" );
vlc_object_release( p_object );
}
p_input = p_object;
if( !p_input ) goto interfacemenu;
/* Video menu */
if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */
i_last_separator = i;
return VLC_SUCCESS;
}
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
FIND_ANYWHERE );
if( p_object != NULL )
#undef PUSH_VAR
/*****************************************************************************
* Popup menus
*****************************************************************************/
#define PUSH_VAR( var ) as_varnames.push_back( var ); \
ai_objects.push_back( p_object->i_object_id );
#define PUSH_SEPARATOR if( ai_objects.size() != i_last_separator ) { \
ai_objects.push_back( 0 ); \
as_varnames.push_back( "" ); \
i_last_separator = ai_objects.size(); }
#define POPUP_BOILERPLATE \
unsigned int i_last_separator = 0; \
vector<int> ai_objects; \
vector<string> as_varnames; \
playlist_t *p_playlist = (playlist_t *) vlc_object_find( p_intf, \
VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );\
if( !p_playlist ) \
return; \
input_thread_t *p_input = p_playlist->p_input;
#define CREATE_POPUP \
Menu popupmenu( p_intf, PopupMenu_Events ); \
popupmenu.Populate( as_varnames, ai_objects ); \
p_intf->p_sys->p_popup_menu = &popupmenu; \
p_parent->PopupMenu( &popupmenu, pos.x, pos.y ); \
p_intf->p_sys->p_popup_menu = NULL; \
#define POPUP_STATIC_ENTRIES \
if( p_input != NULL ) \
{ \
vlc_value_t val; \
popupmenu.InsertSeparator( 0 ); \
if (!minimal) \
{ \
popupmenu.Insert( 0, Stop_Event, wxU(_("Stop")) ); \
popupmenu.Insert( 0, Previous_Event, wxU(_("Previous")) ); \
popupmenu.Insert( 0, Next_Event, wxU(_("Next")) ); \
} \
\
var_Get( p_input, "state", &val ); \
if( val.i_int == PAUSE_S ) \
popupmenu.Insert( 0, Play_Event, wxU(_("Play")) ); \
else \
popupmenu.Insert( 0, Pause_Event, wxU(_("Pause")) ); \
\
vlc_object_release( p_input ); \
} \
else \
{ \
if( p_playlist && p_playlist->i_size ) \
{ \
popupmenu.InsertSeparator( 0 ); \
popupmenu.Insert( 0, Play_Event, wxU(_("Play")) ); \
} \
if( p_playlist ) vlc_object_release( p_playlist ); \
} \
\
popupmenu.Append( MenuDummy_Event, wxU(_("Miscellaneous")), \
MiscMenu( p_intf ), wxT("") ); \
void VideoPopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
const wxPoint& pos )
{
POPUP_BOILERPLATE;
if( p_input )
{
vlc_object_t *p_dec_obj;
ppsz_varnames[i] = "fullscreen";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "zoom";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "deinterlace";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "aspect-ratio";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "crop";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-on-top";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "directx-wallpaper";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-snapshot";
pi_objects[i++] = p_object->i_object_id;
p_dec_obj = (vlc_object_t *)vlc_object_find( p_object,
VLC_OBJECT_DECODER,
FIND_PARENT );
if( p_dec_obj != NULL )
vlc_object_yield( p_input );
as_varnames.push_back( "video-es" );
ai_objects.push_back( p_input->i_object_id );
as_varnames.push_back( "spu-es" );
ai_objects.push_back( p_input->i_object_id );
vlc_object_t *p_vout = (vlc_object_t *)vlc_object_find( p_input,
VLC_OBJECT_VOUT, FIND_CHILD );
if( p_vout )
{
ppsz_varnames[i] = "ffmpeg-pp-q";
pi_objects[i++] = p_dec_obj->i_object_id;
vlc_object_release( p_dec_obj );
VideoAutoMenuBuilder( p_vout, ai_objects, as_varnames );
vlc_object_release( p_vout );
}
vlc_object_release( p_object );
vlc_object_release( p_input );
}
vlc_object_release( p_playlist );
CREATE_POPUP;
}
/* Audio menu */
if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */
i_last_separator = i;
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_AOUT,
FIND_ANYWHERE );
if( p_object != NULL )
void AudioPopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
const wxPoint& pos )
{
POPUP_BOILERPLATE;
if( p_input )
{
ppsz_varnames[i] = "audio-device";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "audio-channels";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "visual";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "equalizer";
pi_objects[i++] = p_object->i_object_id;
vlc_object_release( p_object );
vlc_object_yield( p_input );
as_varnames.push_back( "audio-es" );
ai_objects.push_back( p_input->i_object_id );
vlc_object_t *p_aout = (vlc_object_t *)vlc_object_find( p_input,
VLC_OBJECT_AOUT, FIND_ANYWHERE );
if( p_aout )
{
AudioAutoMenuBuilder( p_aout, ai_objects, as_varnames );
vlc_object_release( p_aout );
}
vlc_object_release( p_input );
}
vlc_object_release( p_playlist );
CREATE_POPUP;
}
interfacemenu:
/* Interface menu */
if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */
i_last_separator = i;
/* vlc_object_find is needed because of the dialogs provider case */
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INTF,
FIND_PARENT );
if( p_object != NULL )
/* Navigation stuff, and general */
void MiscPopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
const wxPoint& pos )
{
int minimal = 0;
POPUP_BOILERPLATE;
if( p_input )
{
#ifndef WIN32
#if (wxCHECK_VERSION(2,5,0))
ppsz_varnames[i] = "intf-switch";
pi_objects[i++] = p_object->i_object_id;
#endif
#endif
ppsz_varnames[i] = "intf-add";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "intf-skins";
pi_objects[i++] = p_object->i_object_id;
vlc_object_release( p_object );
vlc_object_yield( p_input );
as_varnames.push_back( "audio-es" );
InputAutoMenuBuilder( VLC_OBJECT(p_input), ai_objects, as_varnames );
PUSH_SEPARATOR;
}
IntfAutoMenuBuilder( p_intf, ai_objects, as_varnames );
/* Build menu */
Menu popupmenu( p_intf, PopupMenu_Events );
popupmenu.Populate( i, ppsz_varnames, pi_objects );
popupmenu.Populate( as_varnames, ai_objects );
/* Add static entries */
if( p_input != NULL )
{
vlc_value_t val;
popupmenu.InsertSeparator( 0 );
if (!minimal)
{
popupmenu.Insert( 0, Stop_Event, wxU(_("Stop")) );
popupmenu.Insert( 0, Previous_Event, wxU(_("Previous")) );
popupmenu.Insert( 0, Next_Event, wxU(_("Next")) );
}
POPUP_STATIC_ENTRIES;
popupmenu.Append( MenuDummy_Event, wxU(_("Open")),
OpenStreamMenu( p_intf ), wxT("") );
var_Get( p_input, "state", &val );
if( val.i_int == PAUSE_S )
popupmenu.Insert( 0, Play_Event, wxU(_("Play")) );
else
popupmenu.Insert( 0, Pause_Event, wxU(_("Pause")) );
p_intf->p_sys->p_popup_menu = &popupmenu;
p_parent->PopupMenu( &popupmenu, pos.x, pos.y );
p_intf->p_sys->p_popup_menu = NULL;
vlc_object_release( p_playlist );
}
vlc_object_release( p_input );
}
else
void PopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
const wxPoint& pos )
{
int minimal = config_GetInt( p_intf, "wx-minimal" );
POPUP_BOILERPLATE;
if( p_input )
{
playlist_t * p_playlist =
(playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
if( p_playlist && p_playlist->i_size )
vlc_object_yield( p_input );
InputAutoMenuBuilder( VLC_OBJECT(p_input), ai_objects, as_varnames );
/* Video menu */
PUSH_SEPARATOR;
as_varnames.push_back( "video-es" );
ai_objects.push_back( p_input->i_object_id );
as_varnames.push_back( "spu-es" );
ai_objects.push_back( p_input->i_object_id );
vlc_object_t *p_vout = (vlc_object_t *)vlc_object_find( p_input,
VLC_OBJECT_VOUT, FIND_CHILD );
if( p_vout )
{
popupmenu.InsertSeparator( 0 );
popupmenu.Insert( 0, Play_Event, wxU(_("Play")) );
VideoAutoMenuBuilder( p_vout, ai_objects, as_varnames );
vlc_object_release( p_vout );
}
/* Audio menu */
PUSH_SEPARATOR
as_varnames.push_back( "audio-es" );
ai_objects.push_back( p_input->i_object_id );
vlc_object_t *p_aout = (vlc_object_t *)vlc_object_find( p_input,
VLC_OBJECT_AOUT, FIND_ANYWHERE );
if( p_aout )
{
AudioAutoMenuBuilder( p_aout, ai_objects, as_varnames );
vlc_object_release( p_aout );
}
if( p_playlist ) vlc_object_release( p_playlist );
}
popupmenu.Append( MenuDummy_Event, wxU(_("Miscellaneous")),
MiscMenu( p_intf ), wxT("") );
/* Interface menu */
PUSH_SEPARATOR
IntfAutoMenuBuilder( p_intf, ai_objects, as_varnames );
/* Build menu */
Menu popupmenu( p_intf, PopupMenu_Events );
popupmenu.Populate( as_varnames, ai_objects );
POPUP_STATIC_ENTRIES;
if (!minimal)
{
popupmenu.Append( MenuDummy_Event, wxU(_("Open")),
OpenStreamMenu( p_intf ), wxT("") );
popupmenu.Append( MenuDummy_Event, wxU(_("Open")),
OpenStreamMenu( p_intf ), wxT("") );
}
p_intf->p_sys->p_popup_menu = &popupmenu;
p_parent->PopupMenu( &popupmenu, pos.x, pos.y );
p_intf->p_sys->p_popup_menu = NULL;
vlc_object_release( p_playlist );
}
/*****************************************************************************
* Auto menus
*****************************************************************************/
wxMenu *AudioMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
{
#define MAX_AUDIO_ITEMS 10
vlc_object_t *p_object;
char *ppsz_varnames[MAX_AUDIO_ITEMS];
int pi_objects[MAX_AUDIO_ITEMS];
int i = 0;
/* Initializations */
memset( pi_objects, 0, MAX_AUDIO_ITEMS * sizeof(int) );
vector<int> ai_objects;
vector<string> as_varnames;
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT,
FIND_ANYWHERE );
if( p_object != NULL )
{
ppsz_varnames[i] = "audio-es";
pi_objects[i++] = p_object->i_object_id;
PUSH_VAR( "audio-es" );
vlc_object_release( p_object );
}
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_AOUT,
FIND_ANYWHERE );
if( p_object != NULL )
if( p_object )
{
ppsz_varnames[i] = "audio-device";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "audio-channels";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "visual";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "equalizer";
pi_objects[i++] = p_object->i_object_id;
AudioAutoMenuBuilder( p_object, ai_objects, as_varnames );
vlc_object_release( p_object );
}
......@@ -366,31 +431,23 @@ wxMenu *AudioMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
else
p_vlc_menu->Clear();
p_vlc_menu->Populate( i, ppsz_varnames, pi_objects );
p_vlc_menu->Populate( as_varnames, ai_objects );
return p_vlc_menu;
}
wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
{
#define MAX_VIDEO_ITEMS 15
vlc_object_t *p_object;
char *ppsz_varnames[MAX_VIDEO_ITEMS];
int pi_objects[MAX_VIDEO_ITEMS];
int i = 0;
/* Initializations */
memset( pi_objects, 0, MAX_VIDEO_ITEMS * sizeof(int) );
vector<int> ai_objects;
vector<string> as_varnames;
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT,
FIND_ANYWHERE );
if( p_object != NULL )
{
ppsz_varnames[i] = "video-es";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "spu-es";
pi_objects[i++] = p_object->i_object_id;
PUSH_VAR( "video-es" );
PUSH_VAR( "spu-es" );
vlc_object_release( p_object );
}
......@@ -398,35 +455,7 @@ wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
FIND_ANYWHERE );
if( p_object != NULL )
{
vlc_object_t *p_dec_obj;
ppsz_varnames[i] = "fullscreen";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "zoom";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "deinterlace";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "aspect-ratio";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "crop";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-on-top";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "directx-wallpaper";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-snapshot";
pi_objects[i++] = p_object->i_object_id;
p_dec_obj = (vlc_object_t *)vlc_object_find( p_object,
VLC_OBJECT_DECODER,
FIND_PARENT );
if( p_dec_obj != NULL )
{
ppsz_varnames[i] = "ffmpeg-pp-q";
pi_objects[i++] = p_dec_obj->i_object_id;
vlc_object_release( p_dec_obj );
}
VideoAutoMenuBuilder( p_object, ai_objects, as_varnames );
vlc_object_release( p_object );
}
......@@ -437,49 +466,23 @@ wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
else
p_vlc_menu->Clear();
p_vlc_menu->Populate( i, ppsz_varnames, pi_objects );
p_vlc_menu->Populate( as_varnames, ai_objects );
return p_vlc_menu;
}
wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
{
#define MAX_NAVIG_ITEMS 15
vlc_object_t *p_object;
char *ppsz_varnames[MAX_NAVIG_ITEMS];
int pi_objects[MAX_NAVIG_ITEMS];
int i = 0;
/* Initializations */
memset( pi_objects, 0, MAX_NAVIG_ITEMS * sizeof(int) );
vector<int> ai_objects;
vector<string> as_varnames;
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT,
FIND_ANYWHERE );
if( p_object != NULL )
{
ppsz_varnames[i] = "bookmark";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "title";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "chapter";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "program";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "navigation";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "dvd_menus";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "prev-title";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "next-title";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "prev-chapter";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "next-chapter";
pi_objects[i++] = p_object->i_object_id;
InputAutoMenuBuilder( p_object, ai_objects, as_varnames );
PUSH_VAR( "prev-title"); PUSH_VAR ( "next-title" );
PUSH_VAR( "prev-chapter"); PUSH_VAR( "next-chapter" );
vlc_object_release( p_object );
}
......@@ -490,7 +493,7 @@ wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
else
p_vlc_menu->Clear();
p_vlc_menu->Populate( i, ppsz_varnames, pi_objects );
p_vlc_menu->Populate( as_varnames, ai_objects );
return p_vlc_menu;
}
......@@ -498,26 +501,15 @@ wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
wxMenu *SettingsMenu( intf_thread_t *_p_intf, wxWindow *p_parent,
wxMenu *p_menu )
{
#define MAX_SETTINGS_ITEMS 10
vlc_object_t *p_object;
char *ppsz_varnames[MAX_SETTINGS_ITEMS];
int pi_objects[MAX_SETTINGS_ITEMS];
int i = 0;
/* Initializations */
memset( pi_objects, 0, MAX_SETTINGS_ITEMS * sizeof(int) );
vector<int> ai_objects;
vector<string> as_varnames;
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INTF,
FIND_PARENT );
if( p_object != NULL )
{
#if (wxCHECK_VERSION(2,5,0))
ppsz_varnames[i] = "intf-switch";
pi_objects[i++] = p_object->i_object_id;
#endif
ppsz_varnames[i] = "intf-add";
pi_objects[i++] = p_object->i_object_id;
PUSH_VAR( "intf-add" );
vlc_object_release( p_object );
}
......@@ -528,7 +520,7 @@ wxMenu *SettingsMenu( intf_thread_t *_p_intf, wxWindow *p_parent,
else
p_vlc_menu->Clear();
p_vlc_menu->Populate( i, ppsz_varnames, pi_objects );
p_vlc_menu->Populate( as_varnames, ai_objects );
return p_vlc_menu;
}
......@@ -550,7 +542,7 @@ Menu::~Menu()
/*****************************************************************************
* Public methods.
*****************************************************************************/
void Menu::Populate( int i_count, char **ppsz_varnames, int *pi_objects )
void Menu::Populate( vector<string> & ras_varnames, vector<int> & rai_objects )
{
vlc_object_t *p_object;
vlc_bool_t b_section_empty = VLC_FALSE;
......@@ -558,33 +550,33 @@ void Menu::Populate( int i_count, char **ppsz_varnames, int *pi_objects )
i_item_id = i_start_id;
for( i = 0; i < i_count; i++ )
for( i = 0; i < rai_objects.size() ; i++ )
{
if( !ppsz_varnames[i] )
if( ras_varnames[i] == "" )
{
if( b_section_empty )
{
Append( MenuDummy_Event + i, wxU(_("Empty")) );
Enable( MenuDummy_Event + i, FALSE );
}
AppendSeparator();
b_section_empty = VLC_TRUE;
continue;
}
if( !pi_objects[i] )
if( rai_objects[i] == 0 )
{
Append( MenuDummy_Event, wxU(ppsz_varnames[i]) );
Append( MenuDummy_Event, wxU(ras_varnames[i].c_str()) );
b_section_empty = VLC_FALSE;
continue;
}
p_object = (vlc_object_t *)vlc_object_get( p_intf, pi_objects[i] );
p_object = (vlc_object_t *)vlc_object_get( p_intf,
rai_objects[i] );
if( p_object == NULL ) continue;
b_section_empty = VLC_FALSE;
CreateMenuItem( this, ppsz_varnames[i], p_object );
CreateMenuItem( this, ras_varnames[i].c_str(), p_object );
vlc_object_release( p_object );
}
......@@ -693,7 +685,7 @@ void Menu::CreateMenuItem( wxMenu *menu, char *psz_var,
}
/* Make sure we want to display the variable */
if( IsMenuEmpty( psz_var, p_object ) ) return;
if( IsMenuEmpty( psz_var, p_object ) ) return;
/* Get the descriptive name of the variable */
var_Change( p_object, psz_var, VLC_VAR_GETTEXT, &text, NULL );
......
......@@ -67,13 +67,13 @@ This dialog needs the following dialogs to be fully functional: browse
<label for="input_file_filename">File name</label>
<input type="text" id="input_file_filename" size="60" onchange="update_input_file();" onfocus="update_input_file();"/>
<input type="button" id="input_file_browse" value="Browse" onclick="browse( 'input_file_filename' );" />
<hr/>
<!-- <hr/>
<input type="checkbox" id="input_sub_options" />
<label for="input_sub_options">Subtitle options *TODO/FIXME/FIXHTTPD*</label>
<br/>
<label for="input_sub_file">Subtitles file</label>
<input type="text" id="input_sub_file" size="60" />
<br/><!-- TODO -->
<br/>
<label for="input_sub_enc">Subtitles encoding</label>
<select id="input_sub_enc">
<option></option>
......@@ -91,7 +91,7 @@ This dialog needs the following dialogs to be fully functional: browse
<label for="input_sub_fps">Frames per second</label>
<input type="text" id="input_sub_fps" />
<label for="input_sub_delay">Delay</label>
<input type="text" id="input_sub_delay" />
<input type="text" id="input_sub_delay" />-->
</div>
<div id="input_disc" style="display: none">
Open Disc
......
......@@ -135,6 +135,13 @@ int libvlc_playlist_add_extended( libvlc_instance_t *p_instance,
i_options );
}
int libvlc_playlist_delete_item( libvlc_instance_t *p_instance, int i_id,
libvlc_exception_t *p_exception )
{
return playlist_Delete( p_instance->p_playlist, i_id );
}
int libvlc_playlist_isplaying( libvlc_instance_t *p_instance,
libvlc_exception_t *p_exception )
{
......
......@@ -458,7 +458,7 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] )
/* Check for translation config option */
#if defined( ENABLE_NLS ) \
&& ( defined( HAVE_GETTEXT ) || defined( HAVE_INCLUDED_GETTEXT ) )
# if defined (WIN32) || defined (__APPLE__)
/* This ain't really nice to have to reload the config here but it seems
* the only way to do it. */
config_LoadConfigFile( p_vlc, "main" );
......@@ -473,13 +473,6 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] )
/* Reset the default domain */
SetLanguage( psz_language );
/* Should not be needed (otherwise, fixes should rather be
* attempted on vlc_current_charset().
* Also, if the locale charset is overriden, anything that has been
* translated until now would have to be retranslated. */
/*LocaleDeinit();
LocaleInit( (vlc_object_t *)p_vlc );*/
/* Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */
msg_Dbg( p_vlc, "translation test: code is \"%s\"", _("C") );
......@@ -490,6 +483,7 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] )
libvlc.p_module_bank->b_cache_delete = b_cache_delete;
}
if( psz_language ) free( psz_language );
# endif
#endif
/*
......
......@@ -1532,9 +1532,12 @@ vlc_module_begin();
VLC_TRUE );
#endif
#if defined (WIN32) || defined (__APPLE__)
add_string( "language", "auto", NULL, LANGUAGE_TEXT, LANGUAGE_LONGTEXT,
VLC_FALSE );
change_string_list( ppsz_language, ppsz_language_text, 0 );
#endif
add_bool( "color", 0, NULL, COLOR_TEXT, COLOR_LONGTEXT, VLC_TRUE );
add_bool( "advanced", 0, NULL, ADVANCED_TEXT, ADVANCED_LONGTEXT,
VLC_FALSE );
......
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