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 * 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 * This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License * and/or modify it under the terms of the GNU General Public License
......
...@@ -1218,4 +1218,4 @@ DOT_CLEANUP = YES ...@@ -1218,4 +1218,4 @@ DOT_CLEANUP = YES
# The SEARCHENGINE tag specifies whether or not a search engine should be # 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. # 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> ...@@ -797,11 +797,23 @@ difficulty to understand how VLC skins work.</para>
<listitem><para> <listitem><para>
<emphasis>dialogs.fileInfo()</emphasis>: Show the "File Info" dialog box. <emphasis>dialogs.fileInfo()</emphasis>: Show the "File Info" dialog box.
</para></listitem> </para></listitem>
<listitem><para>
<emphasis>dialogs.playlist()</emphasis>: Show the "standard" (not skinned) playlist dialog.
</para></listitem>
<listitem><para> <listitem><para>
<emphasis>dialogs.streamingWizard()</emphasis>: Show the "Streaming Wizard" dialog box (new after VLC 0.8.2). <emphasis>dialogs.streamingWizard()</emphasis>: Show the "Streaming Wizard" dialog box (new after VLC 0.8.2).
</para></listitem> </para></listitem>
<listitem><para> <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> </para></listitem>
<listitem><para> <listitem><para>
<emphasis>equalizer.enable()</emphasis>: Enable the equalizer audio filter (since VLC 0.8.5). <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> ...@@ -974,6 +986,9 @@ difficulty to understand how VLC skins work.</para>
<listitem><para> <listitem><para>
<emphasis>vlc.hasVout</emphasis>: True if a video is being played (since VLC 0.8.5). <emphasis>vlc.hasVout</emphasis>: True if a video is being played (since VLC 0.8.5).
</para></listitem> </para></listitem>
<listitem><para>
<emphasis>vlc.hasAudio</emphasis>: True if audio is being played (since VLC 0.8.5).
</para></listitem>
<listitem><para> <listitem><para>
<emphasis>vlc.isFullscreen</emphasis>: True when the video is in fullscreen mode (since VLC 0.8.5). <emphasis>vlc.isFullscreen</emphasis>: True when the video is in fullscreen mode (since VLC 0.8.5).
</para></listitem> </para></listitem>
...@@ -1005,7 +1020,7 @@ difficulty to understand how VLC skins work.</para> ...@@ -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). <emphasis>playlist.isRepeat</emphasis>: True when the current playlist item is being repeated, false otherwise (since VLC 0.8.0).
</para></listitem> </para></listitem>
<listitem><para> <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> </para></listitem>
<listitem><para> <listitem><para>
<emphasis>window_name.isVisible</emphasis>: True when the window whose <link linkend="windowid">id</link> is "window_name" is visible, false otherwise. <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 * ) ); ...@@ -162,6 +162,9 @@ VLC_EXPORT( void, intf_Destroy, ( intf_thread_t * ) );
#define INTF_DIALOG_BOOKMARKS 14 #define INTF_DIALOG_BOOKMARKS 14
#define INTF_DIALOG_POPUPMENU 20 #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_FILE_GENERIC 30
#define INTF_DIALOG_INTERACTION 50 #define INTF_DIALOG_INTERACTION 50
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "vlc_meta.h" #include "vlc_meta.h"
#include "codecs.h" #include "codecs.h"
#include "charset.h"
#include "libavi.h" #include "libavi.h"
......
...@@ -76,9 +76,13 @@ static VLAboutBox *_o_sharedInstance = nil; ...@@ -76,9 +76,13 @@ static VLAboutBox *_o_sharedInstance = nil;
o_version = [o_info_dict objectForKey:@"CFBundleVersion"]; o_version = [o_info_dict objectForKey:@"CFBundleVersion"];
/* setup the creator / revision field */ /* setup the creator / revision field */
if( VLC_Changeset() != "exported" )
[o_revision_field setStringValue: [NSString stringWithFormat: \ [o_revision_field setStringValue: [NSString stringWithFormat: \
_NS("Compiled by %s, based on SVN revision %s"), VLC_CompileBy(), \ _NS("Compiled by %s, based on SVN revision %s"), VLC_CompileBy(), \
VLC_Changeset()]]; VLC_Changeset()]];
else
[o_revision_field setStringValue: [NSString stringWithFormat: \
_NS("Compiled by %s"), VLC_CompileBy()]];
/* Setup the nameversion field */ /* Setup the nameversion field */
o_name_version = [NSString stringWithFormat:@"Version %@", o_version]; o_name_version = [NSString stringWithFormat:@"Version %@", o_version];
......
...@@ -42,8 +42,7 @@ typedef CmdDialogs<5> CmdDlgNet; ...@@ -42,8 +42,7 @@ typedef CmdDialogs<5> CmdDlgNet;
typedef CmdDialogs<6> CmdDlgMessages; typedef CmdDialogs<6> CmdDlgMessages;
typedef CmdDialogs<7> CmdDlgPrefs; typedef CmdDialogs<7> CmdDlgPrefs;
typedef CmdDialogs<8> CmdDlgFileInfo; typedef CmdDialogs<8> CmdDlgFileInfo;
typedef CmdDialogs<9> CmdDlgShowPopupMenu;
typedef CmdDialogs<10> CmdDlgHidePopupMenu;
typedef CmdDialogs<11> CmdDlgAdd; typedef CmdDialogs<11> CmdDlgAdd;
typedef CmdDialogs<12> CmdDlgPlaylistLoad; typedef CmdDialogs<12> CmdDlgPlaylistLoad;
typedef CmdDialogs<13> CmdDlgPlaylistSave; typedef CmdDialogs<13> CmdDlgPlaylistSave;
...@@ -51,6 +50,16 @@ typedef CmdDialogs<14> CmdDlgDirectory; ...@@ -51,6 +50,16 @@ typedef CmdDialogs<14> CmdDlgDirectory;
typedef CmdDialogs<15> CmdDlgStreamingWizard; typedef CmdDialogs<15> CmdDlgStreamingWizard;
typedef CmdDialogs<16> CmdDlgPlaytreeLoad; typedef CmdDialogs<16> CmdDlgPlaytreeLoad;
typedef CmdDialogs<17> CmdDlgPlaytreeSave; 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 /// Generic "Open dialog" command
...@@ -97,13 +106,7 @@ class CmdDialogs: public CmdGeneric ...@@ -97,13 +106,7 @@ class CmdDialogs: public CmdGeneric
case 8: case 8:
pDialogs->showFileInfo(); pDialogs->showFileInfo();
break; break;
case 9: case 11:
pDialogs->showPopupMenu( true );
break;
case 10:
pDialogs->showPopupMenu( false );
break;
case 11:
pDialogs->showFile( false ); pDialogs->showFile( false );
break; break;
case 12: case 12:
...@@ -118,6 +121,33 @@ class CmdDialogs: public CmdGeneric ...@@ -118,6 +121,33 @@ class CmdDialogs: public CmdGeneric
case 15: case 15:
pDialogs->showStreamingWizard(); pDialogs->showStreamingWizard();
break; 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: default:
msg_Warn( getIntf(), "unknown dialog type" ); msg_Warn( getIntf(), "unknown dialog type" );
break; break;
......
...@@ -57,11 +57,17 @@ Interpreter::Interpreter( intf_thread_t *pIntf ): SkinObject( pIntf ) ...@@ -57,11 +57,17 @@ Interpreter::Interpreter( intf_thread_t *pIntf ): SkinObject( pIntf )
REGISTER_CMD( "dialogs.directory()", CmdDlgDirectory ) REGISTER_CMD( "dialogs.directory()", CmdDlgDirectory )
REGISTER_CMD( "dialogs.disc()", CmdDlgDisc ) REGISTER_CMD( "dialogs.disc()", CmdDlgDisc )
REGISTER_CMD( "dialogs.net()", CmdDlgNet ) REGISTER_CMD( "dialogs.net()", CmdDlgNet )
REGISTER_CMD( "dialogs.playlist()", CmdDlgPlaylist )
REGISTER_CMD( "dialogs.messages()", CmdDlgMessages ) REGISTER_CMD( "dialogs.messages()", CmdDlgMessages )
REGISTER_CMD( "dialogs.prefs()", CmdDlgPrefs ) REGISTER_CMD( "dialogs.prefs()", CmdDlgPrefs )
REGISTER_CMD( "dialogs.fileInfo()", CmdDlgFileInfo ) REGISTER_CMD( "dialogs.fileInfo()", CmdDlgFileInfo )
REGISTER_CMD( "dialogs.streamingWizard()", CmdDlgStreamingWizard ) REGISTER_CMD( "dialogs.streamingWizard()", CmdDlgStreamingWizard )
REGISTER_CMD( "dialogs.popup()", CmdDlgShowPopupMenu ) 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.nextTitle()", CmdDvdNextTitle )
REGISTER_CMD( "dvd.previousTitle()", CmdDvdPreviousTitle ) REGISTER_CMD( "dvd.previousTitle()", CmdDvdPreviousTitle )
REGISTER_CMD( "dvd.nextChapter()", CmdDvdNextChapter ) REGISTER_CMD( "dvd.nextChapter()", CmdDvdNextChapter )
...@@ -224,24 +230,41 @@ CmdGeneric *Interpreter::parseAction( const string &rAction, Theme *pTheme ) ...@@ -224,24 +230,41 @@ CmdGeneric *Interpreter::parseAction( const string &rAction, Theme *pTheme )
{ {
int leftPos = rAction.find( ".show()" ); int leftPos = rAction.find( ".show()" );
string windowId = rAction.substr( 0, leftPos ); 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(), list<CmdGeneric *> list;
*pWin ); 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 else
{ {
// It was maybe the id of a popup TopWindow *pWin = pTheme->getWindowById( windowId );
Popup *pPopup = pTheme->getPopupById( windowId ); if( pWin )
if( pPopup )
{ {
pCommand = new CmdShowPopup( getIntf(), *pPopup ); pCommand = new CmdShowWindow( getIntf(),
pTheme->getWindowManager(),
*pWin );
} }
else else
{ {
msg_Err( getIntf(), "unknown window or popup (%s)", // It was maybe the id of a popup
windowId.c_str() ); 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 ) ...@@ -249,15 +272,31 @@ CmdGeneric *Interpreter::parseAction( const string &rAction, Theme *pTheme )
{ {
int leftPos = rAction.find( ".hide()" ); int leftPos = rAction.find( ".hide()" );
string windowId = rAction.substr( 0, leftPos ); string windowId = rAction.substr( 0, leftPos );
TopWindow *pWin = pTheme->getWindowById( windowId ); if( windowId == "playlist_window" &&
if( pWin ) ! config_GetInt( getIntf(), "skinned-playlist") )
{ {
pCommand = new CmdHideWindow( getIntf(), pTheme->getWindowManager(), list<CmdGeneric *> list;
*pWin ); 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 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 ) ...@@ -57,7 +57,6 @@ void Dialogs::showChangeSkinCB( intf_dialog_args_t *pArg )
} }
} }
void Dialogs::showPlaylistLoadCB( intf_dialog_args_t *pArg ) void Dialogs::showPlaylistLoadCB( intf_dialog_args_t *pArg )
{ {
intf_thread_t *pIntf = (intf_thread_t *)pArg->p_arg; 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, ...@@ -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 ) vlc_value_t old_val, vlc_value_t new_val, void *param )
{ {
Dialogs *p_dialogs = (Dialogs *)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; return VLC_SUCCESS;
} }
...@@ -242,6 +241,14 @@ void Dialogs::showPlaylistSave() ...@@ -242,6 +241,14 @@ void Dialogs::showPlaylistSave()
showPlaylistSaveCB, kSAVE ); 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 ) void Dialogs::showFileSimple( bool play )
{ {
...@@ -329,11 +336,11 @@ void Dialogs::showStreamingWizard() ...@@ -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 ) 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 ); (int)bShow, 0 );
} }
} }
......
...@@ -86,8 +86,11 @@ class Dialogs: public SkinObject ...@@ -86,8 +86,11 @@ class Dialogs: public SkinObject
/// Show the Streaming Wizard dialog /// Show the Streaming Wizard dialog
void showStreamingWizard(); void showStreamingWizard();
/// Show the popup menu /// Show the Playlist
void showPopupMenu( bool bShow ); void showPlaylist();
/// Show a popup menu
void showPopupMenu( bool bShow, int popupType );
/// Show an interaction dialog /// Show an interaction dialog
void showInteraction( interaction_dialog_t * ); void showInteraction( interaction_dialog_t * );
......
...@@ -365,6 +365,9 @@ vlc_module_begin(); ...@@ -365,6 +365,9 @@ vlc_module_begin();
add_bool( "skins2-transparency", VLC_FALSE, NULL, SKINS2_TRANSPARENCY, add_bool( "skins2-transparency", VLC_FALSE, NULL, SKINS2_TRANSPARENCY,
SKINS2_TRANSPARENCY_LONG, VLC_FALSE ); SKINS2_TRANSPARENCY_LONG, VLC_FALSE );
#endif #endif
add_bool( "skinned-playlist", VLC_TRUE, NULL, SKINS2_TRANSPARENCY,
SKINS2_TRANSPARENCY_LONG, VLC_FALSE );
set_shortname( _("Skins")); set_shortname( _("Skins"));
set_description( _("Skinnable Interface") ); set_description( _("Skinnable Interface") );
set_capability( "interface", 30 ); set_capability( "interface", 30 );
......
...@@ -79,6 +79,8 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ), ...@@ -79,6 +79,8 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ),
#define REGISTER_VAR( var, type, name ) \ #define REGISTER_VAR( var, type, name ) \
var = VariablePtr( new type( getIntf() ) ); \ var = VariablePtr( new type( getIntf() ) ); \
pVarManager->registerVar( var, name ); pVarManager->registerVar( var, name );
/* Playlist variables */
REGISTER_VAR( m_cPlaylist, Playlist, "playlist" ) REGISTER_VAR( m_cPlaylist, Playlist, "playlist" )
pVarManager->registerVar( getPlaylistVar().getPositionVarPtr(), pVarManager->registerVar( getPlaylistVar().getPositionVarPtr(),
"playlist.slider" ); "playlist.slider" );
...@@ -90,19 +92,28 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ), ...@@ -90,19 +92,28 @@ VlcProc::VlcProc( intf_thread_t *pIntf ): SkinObject( pIntf ),
"playtree.slider" ); "playtree.slider" );
pVarManager->registerVar( m_cVarRandom, "playtree.isRandom" ); pVarManager->registerVar( m_cVarRandom, "playtree.isRandom" );
pVarManager->registerVar( m_cVarLoop, "playtree.isLoop" ); 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_cVarPlaying, VarBoolImpl, "vlc.isPlaying" )
REGISTER_VAR( m_cVarStopped, VarBoolImpl, "vlc.isStopped" ) REGISTER_VAR( m_cVarStopped, VarBoolImpl, "vlc.isStopped" )
REGISTER_VAR( m_cVarPaused, VarBoolImpl, "vlc.isPaused" ) 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_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" ) REGISTER_VAR( m_cVarDvdActive, VarBoolImpl, "dvd.isActive" )
/* Vout variables */
REGISTER_VAR( m_cVarFullscreen, VarBoolImpl, "vlc.isFullscreen" ) REGISTER_VAR( m_cVarFullscreen, VarBoolImpl, "vlc.isFullscreen" )
REGISTER_VAR( m_cVarHasVout, VarBoolImpl, "vlc.hasVout" ) 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 #undef REGISTER_VAR
m_cVarStreamName = VariablePtr( new VarText( getIntf(), false ) ); m_cVarStreamName = VariablePtr( new VarText( getIntf(), false ) );
pVarManager->registerVar( m_cVarStreamName, "streamName" ); pVarManager->registerVar( m_cVarStreamName, "streamName" );
...@@ -223,7 +234,7 @@ void VlcProc::dropVout() ...@@ -223,7 +234,7 @@ void VlcProc::dropVout()
void VlcProc::manage() 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 ) if( getIntf()->b_die || getIntf()->p_vlc->b_die )
{ {
CmdQuit *pCmd = new CmdQuit( getIntf() ); CmdQuit *pCmd = new CmdQuit( getIntf() );
...@@ -231,23 +242,102 @@ void VlcProc::manage() ...@@ -231,23 +242,102 @@ void VlcProc::manage()
pQueue->push( CmdGenericPtr( pCmd ) ); pQueue->push( CmdGenericPtr( pCmd ) );
} }
// Get the VLC variables refreshPlaylist();
StreamTime *pTime = (StreamTime*)m_cVarTime.get(); 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 *pVarPlaying = (VarBoolImpl*)m_cVarPlaying.get();
VarBoolImpl *pVarStopped = (VarBoolImpl*)m_cVarStopped.get(); VarBoolImpl *pVarStopped = (VarBoolImpl*)m_cVarStopped.get();
VarBoolImpl *pVarPaused = (VarBoolImpl*)m_cVarPaused.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(); 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(); 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(); 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 *pVarDvdActive = (VarBoolImpl*)m_cVarDvdActive.get();
VarBoolImpl *pVarFullscreen = (VarBoolImpl*)m_cVarFullscreen.get();
VarBoolImpl *pVarHasVout = (VarBoolImpl*)m_cVarHasVout.get(); VarBoolImpl *pVarHasVout = (VarBoolImpl*)m_cVarHasVout.get();
VarBoolImpl *pVarHasAudio = (VarBoolImpl*)m_cVarHasAudio.get();
VarText *pBitrate = (VarText*)m_cVarStreamBitRate.get(); VarText *pBitrate = (VarText*)m_cVarStreamBitRate.get();
VarText *pSampleRate = (VarText*)m_cVarStreamSampleRate.get(); VarText *pSampleRate = (VarText*)m_cVarStreamSampleRate.get();
VarBoolImpl *pVarFullscreen = (VarBoolImpl*)m_cVarFullscreen.get();
// Refresh audio variables
refreshAudio();
// Update the input // Update the input
if( getIntf()->p_sys->p_input == NULL ) if( getIntf()->p_sys->p_input == NULL )
...@@ -270,124 +360,49 @@ void VlcProc::manage() ...@@ -270,124 +360,49 @@ void VlcProc::manage()
vlc_value_t pos; vlc_value_t pos;
var_Get( pInput, "position", &pos ); var_Get( pInput, "position", &pos );
pTime->set( pos.f_float, false ); 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 ); pVarSeekable->set( pos.f_float != 0.0 );
// Refresh DVD detection // Refresh DVD detection
vlc_value_t chapters_count; vlc_value_t chapters_count;
var_Change( pInput, "chapter", VLC_VAR_CHOICESCOUNT, var_Change( pInput, "chapter", VLC_VAR_CHOICESCOUNT,
&chapters_count, NULL ); &chapters_count, NULL );
pVarDvdActive->set( chapters_count.i_int > 0 ); 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 // Refresh fullscreen status
vout_thread_t *pVout = (vout_thread_t *)vlc_object_find( pInput, 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 ); pVarHasVout->set( pVout != NULL );
if( pVout ) if( pVout )
{ {
pVarFullscreen->set( pVout->b_fullscreen ); pVarFullscreen->set( pVout->b_fullscreen );
vlc_object_release( pVout ); 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 else
{ {
pVarPlaying->set( false );
pVarPaused->set( false );
pVarStopped->set( true );
pVarSeekable->set( false ); pVarSeekable->set( false );
pVarDvdActive->set( false ); pVarDvdActive->set( false );
pTime->set( 0, false ); pTime->set( 0, false );
pVarFullscreen->set( false ); pVarFullscreen->set( false );
pVarHasAudio->set( false );
pVarHasVout->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, int VlcProc::onIntfChange( vlc_object_t *pObj, const char *pVariable,
vlc_value_t oldVal, vlc_value_t newVal, vlc_value_t oldVal, vlc_value_t newVal,
void *pParam ) void *pParam )
......
...@@ -131,6 +131,8 @@ class VlcProc: public SkinObject ...@@ -131,6 +131,8 @@ class VlcProc: public SkinObject
VariablePtr m_cVarFullscreen; VariablePtr m_cVarFullscreen;
VarBox m_varVoutSize; VarBox m_varVoutSize;
VariablePtr m_cVarHasVout; VariablePtr m_cVarHasVout;
/// Variables related to audio
VariablePtr m_cVarHasAudio;
/// Equalizer variables /// Equalizer variables
EqualizerBands m_varEqBands; EqualizerBands m_varEqBands;
VariablePtr m_cVarEqPreamp; VariablePtr m_cVarEqPreamp;
...@@ -163,6 +165,10 @@ class VlcProc: public SkinObject ...@@ -163,6 +165,10 @@ class VlcProc: public SkinObject
/// Refresh audio variables /// Refresh audio variables
void refreshAudio(); void refreshAudio();
/// Refresh playlist variables
void refreshPlaylist();
/// Refresh input variables
void refreshInput();
/// Update the stream name variable /// Update the stream name variable
void updateStreamName( playlist_t *p_playlist ); void updateStreamName( playlist_t *p_playlist );
......
...@@ -84,6 +84,9 @@ private: ...@@ -84,6 +84,9 @@ private:
void OnOpenSat( wxCommandEvent& event ); void OnOpenSat( wxCommandEvent& event );
void OnPopupMenu( wxCommandEvent& event ); void OnPopupMenu( wxCommandEvent& event );
void OnAudioPopupMenu( wxCommandEvent& event );
void OnVideoPopupMenu( wxCommandEvent& event );
void OnMiscPopupMenu( wxCommandEvent& event );
void OnIdle( wxIdleEvent& event ); void OnIdle( wxIdleEvent& event );
...@@ -140,8 +143,16 @@ BEGIN_EVENT_TABLE(DialogsProvider, wxFrame) ...@@ -140,8 +143,16 @@ BEGIN_EVENT_TABLE(DialogsProvider, wxFrame)
DialogsProvider::OnFileInfo) DialogsProvider::OnFileInfo)
EVT_COMMAND(INTF_DIALOG_BOOKMARKS, wxEVT_DIALOG, EVT_COMMAND(INTF_DIALOG_BOOKMARKS, wxEVT_DIALOG,
DialogsProvider::OnBookmarks) DialogsProvider::OnBookmarks)
EVT_COMMAND(INTF_DIALOG_POPUPMENU, wxEVT_DIALOG, EVT_COMMAND(INTF_DIALOG_POPUPMENU, wxEVT_DIALOG,
DialogsProvider::OnPopupMenu) 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, EVT_COMMAND(INTF_DIALOG_EXIT, wxEVT_DIALOG,
DialogsProvider::OnExitThread) DialogsProvider::OnExitThread)
EVT_COMMAND(INTF_DIALOG_UPDATEVLC, wxEVT_DIALOG, EVT_COMMAND(INTF_DIALOG_UPDATEVLC, wxEVT_DIALOG,
...@@ -508,6 +519,22 @@ void DialogsProvider::OnPopupMenu( wxCommandEvent& event ) ...@@ -508,6 +519,22 @@ void DialogsProvider::OnPopupMenu( wxCommandEvent& event )
::PopupMenu( p_intf, this, mousepos ); ::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) ) void DialogsProvider::OnExitThread( wxCommandEvent& WXUNUSED(event) )
{ {
wxTheApp->ExitMainLoop(); wxTheApp->ExitMainLoop();
......
...@@ -239,6 +239,9 @@ namespace wxvlc ...@@ -239,6 +239,9 @@ namespace wxvlc
}; };
void PopupMenu( intf_thread_t *, wxWindow *, const wxPoint& ); 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 *SettingsMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
wxMenu *AudioMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL ); wxMenu *AudioMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
wxMenu *VideoMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL ); wxMenu *VideoMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
......
...@@ -21,20 +21,16 @@ ...@@ -21,20 +21,16 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. * 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/vlc.h>
#include <vlc/intf.h> #include <vlc/intf.h>
#include "wxwidgets.hpp" #include "wxwidgets.hpp"
#include "interface.hpp" #include "interface.hpp"
#include <vector>
#include <string>
using namespace std;
class wxMenuItemExt: public wxMenuItem class wxMenuItemExt: public wxMenuItem
{ {
public: public:
...@@ -43,16 +39,12 @@ public: ...@@ -43,16 +39,12 @@ public:
const wxString& helpString, wxItemKind kind, const wxString& helpString, wxItemKind kind,
char *_psz_var, int _i_object_id, vlc_value_t _val, char *_psz_var, int _i_object_id, vlc_value_t _val,
int _i_val_type ); int _i_val_type );
virtual ~wxMenuItemExt(); virtual ~wxMenuItemExt();
char *psz_var; char *psz_var;
int i_val_type; int i_val_type;
int i_object_id; int i_object_id;
vlc_value_t val; vlc_value_t val;
private:
}; };
class Menu: public wxMenu class Menu: public wxMenu
...@@ -62,7 +54,7 @@ public: ...@@ -62,7 +54,7 @@ public:
Menu( intf_thread_t *p_intf, int i_start_id ); Menu( intf_thread_t *p_intf, int i_start_id );
virtual ~Menu(); virtual ~Menu();
void Populate( int i_count, char **ppsz_names, int *pi_objects ); void Populate( vector<string> &, vector<int> &);
void Clear(); void Clear();
private: private:
...@@ -81,8 +73,6 @@ private: ...@@ -81,8 +73,6 @@ private:
/***************************************************************************** /*****************************************************************************
* Event Table. * Event Table.
*****************************************************************************/ *****************************************************************************/
/* IDs for the controls and the menu commands */
enum enum
{ {
/* menu items */ /* menu items */
...@@ -126,6 +116,9 @@ BEGIN_EVENT_TABLE(MenuEvtHandler, wxEvtHandler) ...@@ -126,6 +116,9 @@ BEGIN_EVENT_TABLE(MenuEvtHandler, wxEvtHandler)
EVT_MENU(-1, MenuEvtHandler::OnMenuEvent) EVT_MENU(-1, MenuEvtHandler::OnMenuEvent)
END_EVENT_TABLE() END_EVENT_TABLE()
/*****************************************************************************
* Static menu helpers
*****************************************************************************/
wxMenu *OpenStreamMenu( intf_thread_t *p_intf ) wxMenu *OpenStreamMenu( intf_thread_t *p_intf )
{ {
wxMenu *menu = new wxMenu; wxMenu *menu = new wxMenu;
...@@ -147,215 +140,287 @@ wxMenu *MiscMenu( intf_thread_t *p_intf ) ...@@ -147,215 +140,287 @@ wxMenu *MiscMenu( intf_thread_t *p_intf )
return menu; return menu;
} }
void PopupMenu( intf_thread_t *p_intf, wxWindow *p_parent, /*****************************************************************************
const wxPoint& pos ) * Builders for the dynamic menus
{ *****************************************************************************/
#define MAX_POPUP_ITEMS 45 #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; int VideoAutoMenuBuilder( vlc_object_t *p_object,
char *ppsz_varnames[MAX_POPUP_ITEMS]; vector<int> &ri_objects, vector<string> &rs_varnames )
int pi_objects[MAX_POPUP_ITEMS]; {
int i = 0, i_last_separator = 0; 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 */ int AudioAutoMenuBuilder( vlc_object_t *p_object,
memset( pi_objects, 0, MAX_POPUP_ITEMS * sizeof(int) ); 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 */ int IntfAutoMenuBuilder( intf_thread_t *p_intf,
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT, vector<int> &ri_objects, vector<string> &rs_varnames )
FIND_ANYWHERE ); {
/* 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 ) if( p_object != NULL )
{ {
ppsz_varnames[i] = "bookmark"; PUSH_VAR( "intf-add" );
pi_objects[i++] = p_object->i_object_id; PUSH_VAR( "intf-skins" );
ppsz_varnames[i] = "title"; vlc_object_release( p_object );
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;
} }
p_input = p_object; return VLC_SUCCESS;
if( !p_input ) goto interfacemenu; }
/* Video 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_VOUT, #undef PUSH_VAR
FIND_ANYWHERE ); /*****************************************************************************
if( p_object != NULL ) * 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; vlc_object_yield( p_input );
as_varnames.push_back( "video-es" );
ppsz_varnames[i] = "fullscreen"; ai_objects.push_back( p_input->i_object_id );
pi_objects[i++] = p_object->i_object_id; as_varnames.push_back( "spu-es" );
ppsz_varnames[i] = "zoom"; ai_objects.push_back( p_input->i_object_id );
pi_objects[i++] = p_object->i_object_id; vlc_object_t *p_vout = (vlc_object_t *)vlc_object_find( p_input,
ppsz_varnames[i] = "deinterlace"; VLC_OBJECT_VOUT, FIND_CHILD );
pi_objects[i++] = p_object->i_object_id; if( p_vout )
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"; VideoAutoMenuBuilder( p_vout, ai_objects, as_varnames );
pi_objects[i++] = p_dec_obj->i_object_id; vlc_object_release( p_vout );
vlc_object_release( p_dec_obj );
} }
vlc_object_release( p_input );
vlc_object_release( p_object );
} }
vlc_object_release( p_playlist );
CREATE_POPUP;
}
/* Audio menu */ void AudioPopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */ const wxPoint& pos )
i_last_separator = i; {
POPUP_BOILERPLATE;
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_AOUT, if( p_input )
FIND_ANYWHERE );
if( p_object != NULL )
{ {
ppsz_varnames[i] = "audio-device"; vlc_object_yield( p_input );
pi_objects[i++] = p_object->i_object_id; as_varnames.push_back( "audio-es" );
ppsz_varnames[i] = "audio-channels"; ai_objects.push_back( p_input->i_object_id );
pi_objects[i++] = p_object->i_object_id; vlc_object_t *p_aout = (vlc_object_t *)vlc_object_find( p_input,
ppsz_varnames[i] = "visual"; VLC_OBJECT_AOUT, FIND_ANYWHERE );
pi_objects[i++] = p_object->i_object_id; if( p_aout )
ppsz_varnames[i] = "equalizer"; {
pi_objects[i++] = p_object->i_object_id; AudioAutoMenuBuilder( p_aout, ai_objects, as_varnames );
vlc_object_release( p_object ); vlc_object_release( p_aout );
}
vlc_object_release( p_input );
} }
vlc_object_release( p_playlist );
CREATE_POPUP;
}
interfacemenu: /* Navigation stuff, and general */
/* Interface menu */ void MiscPopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */ const wxPoint& pos )
i_last_separator = i; {
int minimal = 0;
/* vlc_object_find is needed because of the dialogs provider case */ POPUP_BOILERPLATE;
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INTF, if( p_input )
FIND_PARENT );
if( p_object != NULL )
{ {
#ifndef WIN32 vlc_object_yield( p_input );
#if (wxCHECK_VERSION(2,5,0)) as_varnames.push_back( "audio-es" );
ppsz_varnames[i] = "intf-switch"; InputAutoMenuBuilder( VLC_OBJECT(p_input), ai_objects, as_varnames );
pi_objects[i++] = p_object->i_object_id; PUSH_SEPARATOR;
#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 );
} }
IntfAutoMenuBuilder( p_intf, ai_objects, as_varnames );
/* Build menu */
Menu popupmenu( p_intf, PopupMenu_Events ); Menu popupmenu( p_intf, PopupMenu_Events );
popupmenu.Populate( i, ppsz_varnames, pi_objects ); popupmenu.Populate( as_varnames, ai_objects );
/* Add static entries */ POPUP_STATIC_ENTRIES;
if( p_input != NULL ) popupmenu.Append( MenuDummy_Event, wxU(_("Open")),
{ OpenStreamMenu( p_intf ), wxT("") );
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 ); p_intf->p_sys->p_popup_menu = &popupmenu;
if( val.i_int == PAUSE_S ) p_parent->PopupMenu( &popupmenu, pos.x, pos.y );
popupmenu.Insert( 0, Play_Event, wxU(_("Play")) ); p_intf->p_sys->p_popup_menu = NULL;
else vlc_object_release( p_playlist );
popupmenu.Insert( 0, Pause_Event, wxU(_("Pause")) ); }
vlc_object_release( p_input ); void PopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
} const wxPoint& pos )
else {
int minimal = config_GetInt( p_intf, "wx-minimal" );
POPUP_BOILERPLATE;
if( p_input )
{ {
playlist_t * p_playlist = vlc_object_yield( p_input );
(playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, InputAutoMenuBuilder( VLC_OBJECT(p_input), ai_objects, as_varnames );
FIND_ANYWHERE );
if( p_playlist && p_playlist->i_size ) /* 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 ); VideoAutoMenuBuilder( p_vout, ai_objects, as_varnames );
popupmenu.Insert( 0, Play_Event, wxU(_("Play")) ); 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")), /* Interface menu */
MiscMenu( p_intf ), wxT("") ); 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) if (!minimal)
{ {
popupmenu.Append( MenuDummy_Event, wxU(_("Open")), popupmenu.Append( MenuDummy_Event, wxU(_("Open")),
OpenStreamMenu( p_intf ), wxT("") ); OpenStreamMenu( p_intf ), wxT("") );
} }
p_intf->p_sys->p_popup_menu = &popupmenu; p_intf->p_sys->p_popup_menu = &popupmenu;
p_parent->PopupMenu( &popupmenu, pos.x, pos.y ); p_parent->PopupMenu( &popupmenu, pos.x, pos.y );
p_intf->p_sys->p_popup_menu = NULL; 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 ) wxMenu *AudioMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
{ {
#define MAX_AUDIO_ITEMS 10
vlc_object_t *p_object; vlc_object_t *p_object;
char *ppsz_varnames[MAX_AUDIO_ITEMS]; vector<int> ai_objects;
int pi_objects[MAX_AUDIO_ITEMS]; vector<string> as_varnames;
int i = 0;
/* Initializations */
memset( pi_objects, 0, MAX_AUDIO_ITEMS * sizeof(int) );
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT, p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT,
FIND_ANYWHERE ); FIND_ANYWHERE );
if( p_object != NULL ) if( p_object != NULL )
{ {
ppsz_varnames[i] = "audio-es"; PUSH_VAR( "audio-es" );
pi_objects[i++] = p_object->i_object_id;
vlc_object_release( p_object ); vlc_object_release( p_object );
} }
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_AOUT, p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_AOUT,
FIND_ANYWHERE ); FIND_ANYWHERE );
if( p_object != NULL ) if( p_object )
{ {
ppsz_varnames[i] = "audio-device"; AudioAutoMenuBuilder( p_object, ai_objects, as_varnames );
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_release( p_object );
} }
...@@ -366,31 +431,23 @@ wxMenu *AudioMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu ) ...@@ -366,31 +431,23 @@ wxMenu *AudioMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
else else
p_vlc_menu->Clear(); 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; return p_vlc_menu;
} }
wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu ) wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
{ {
#define MAX_VIDEO_ITEMS 15
vlc_object_t *p_object; vlc_object_t *p_object;
char *ppsz_varnames[MAX_VIDEO_ITEMS]; vector<int> ai_objects;
int pi_objects[MAX_VIDEO_ITEMS]; vector<string> as_varnames;
int i = 0;
/* Initializations */
memset( pi_objects, 0, MAX_VIDEO_ITEMS * sizeof(int) );
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT, p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT,
FIND_ANYWHERE ); FIND_ANYWHERE );
if( p_object != NULL ) if( p_object != NULL )
{ {
ppsz_varnames[i] = "video-es"; PUSH_VAR( "video-es" );
pi_objects[i++] = p_object->i_object_id; PUSH_VAR( "spu-es" );
ppsz_varnames[i] = "spu-es";
pi_objects[i++] = p_object->i_object_id;
vlc_object_release( p_object ); vlc_object_release( p_object );
} }
...@@ -398,35 +455,7 @@ wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu ) ...@@ -398,35 +455,7 @@ wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
FIND_ANYWHERE ); FIND_ANYWHERE );
if( p_object != NULL ) if( p_object != NULL )
{ {
vlc_object_t *p_dec_obj; VideoAutoMenuBuilder( p_object, ai_objects, as_varnames );
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 );
}
vlc_object_release( p_object ); vlc_object_release( p_object );
} }
...@@ -437,49 +466,23 @@ wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu ) ...@@ -437,49 +466,23 @@ wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
else else
p_vlc_menu->Clear(); 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; return p_vlc_menu;
} }
wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu ) wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
{ {
#define MAX_NAVIG_ITEMS 15
vlc_object_t *p_object; vlc_object_t *p_object;
char *ppsz_varnames[MAX_NAVIG_ITEMS]; vector<int> ai_objects;
int pi_objects[MAX_NAVIG_ITEMS]; vector<string> as_varnames;
int i = 0;
/* Initializations */
memset( pi_objects, 0, MAX_NAVIG_ITEMS * sizeof(int) );
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT, p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT,
FIND_ANYWHERE ); FIND_ANYWHERE );
if( p_object != NULL ) if( p_object != NULL )
{ {
ppsz_varnames[i] = "bookmark"; InputAutoMenuBuilder( p_object, ai_objects, as_varnames );
pi_objects[i++] = p_object->i_object_id; PUSH_VAR( "prev-title"); PUSH_VAR ( "next-title" );
ppsz_varnames[i] = "title"; PUSH_VAR( "prev-chapter"); PUSH_VAR( "next-chapter" );
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;
vlc_object_release( p_object ); vlc_object_release( p_object );
} }
...@@ -490,7 +493,7 @@ wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu ) ...@@ -490,7 +493,7 @@ wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
else else
p_vlc_menu->Clear(); 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; return p_vlc_menu;
} }
...@@ -498,26 +501,15 @@ wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_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 *SettingsMenu( intf_thread_t *_p_intf, wxWindow *p_parent,
wxMenu *p_menu ) wxMenu *p_menu )
{ {
#define MAX_SETTINGS_ITEMS 10
vlc_object_t *p_object; vlc_object_t *p_object;
char *ppsz_varnames[MAX_SETTINGS_ITEMS]; vector<int> ai_objects;
int pi_objects[MAX_SETTINGS_ITEMS]; vector<string> as_varnames;
int i = 0;
/* Initializations */
memset( pi_objects, 0, MAX_SETTINGS_ITEMS * sizeof(int) );
p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INTF, p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INTF,
FIND_PARENT ); FIND_PARENT );
if( p_object != NULL ) if( p_object != NULL )
{ {
#if (wxCHECK_VERSION(2,5,0)) PUSH_VAR( "intf-add" );
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;
vlc_object_release( p_object ); vlc_object_release( p_object );
} }
...@@ -528,7 +520,7 @@ wxMenu *SettingsMenu( intf_thread_t *_p_intf, wxWindow *p_parent, ...@@ -528,7 +520,7 @@ wxMenu *SettingsMenu( intf_thread_t *_p_intf, wxWindow *p_parent,
else else
p_vlc_menu->Clear(); 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; return p_vlc_menu;
} }
...@@ -550,7 +542,7 @@ Menu::~Menu() ...@@ -550,7 +542,7 @@ Menu::~Menu()
/***************************************************************************** /*****************************************************************************
* Public methods. * 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_object_t *p_object;
vlc_bool_t b_section_empty = VLC_FALSE; vlc_bool_t b_section_empty = VLC_FALSE;
...@@ -558,33 +550,33 @@ void Menu::Populate( int i_count, char **ppsz_varnames, int *pi_objects ) ...@@ -558,33 +550,33 @@ void Menu::Populate( int i_count, char **ppsz_varnames, int *pi_objects )
i_item_id = i_start_id; 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 ) if( b_section_empty )
{ {
Append( MenuDummy_Event + i, wxU(_("Empty")) ); Append( MenuDummy_Event + i, wxU(_("Empty")) );
Enable( MenuDummy_Event + i, FALSE ); Enable( MenuDummy_Event + i, FALSE );
} }
AppendSeparator(); AppendSeparator();
b_section_empty = VLC_TRUE; b_section_empty = VLC_TRUE;
continue; 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; b_section_empty = VLC_FALSE;
continue; 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; if( p_object == NULL ) continue;
b_section_empty = VLC_FALSE; 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 ); vlc_object_release( p_object );
} }
...@@ -693,7 +685,7 @@ void Menu::CreateMenuItem( wxMenu *menu, char *psz_var, ...@@ -693,7 +685,7 @@ void Menu::CreateMenuItem( wxMenu *menu, char *psz_var,
} }
/* Make sure we want to display the variable */ /* 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 */ /* Get the descriptive name of the variable */
var_Change( p_object, psz_var, VLC_VAR_GETTEXT, &text, NULL ); 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 ...@@ -67,13 +67,13 @@ This dialog needs the following dialogs to be fully functional: browse
<label for="input_file_filename">File name</label> <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="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' );" /> <input type="button" id="input_file_browse" value="Browse" onclick="browse( 'input_file_filename' );" />
<hr/> <!-- <hr/>
<input type="checkbox" id="input_sub_options" /> <input type="checkbox" id="input_sub_options" />
<label for="input_sub_options">Subtitle options *TODO/FIXME/FIXHTTPD*</label> <label for="input_sub_options">Subtitle options *TODO/FIXME/FIXHTTPD*</label>
<br/> <br/>
<label for="input_sub_file">Subtitles file</label> <label for="input_sub_file">Subtitles file</label>
<input type="text" id="input_sub_file" size="60" /> <input type="text" id="input_sub_file" size="60" />
<br/><!-- TODO --> <br/>
<label for="input_sub_enc">Subtitles encoding</label> <label for="input_sub_enc">Subtitles encoding</label>
<select id="input_sub_enc"> <select id="input_sub_enc">
<option></option> <option></option>
...@@ -91,7 +91,7 @@ This dialog needs the following dialogs to be fully functional: browse ...@@ -91,7 +91,7 @@ This dialog needs the following dialogs to be fully functional: browse
<label for="input_sub_fps">Frames per second</label> <label for="input_sub_fps">Frames per second</label>
<input type="text" id="input_sub_fps" /> <input type="text" id="input_sub_fps" />
<label for="input_sub_delay">Delay</label> <label for="input_sub_delay">Delay</label>
<input type="text" id="input_sub_delay" /> <input type="text" id="input_sub_delay" />-->
</div> </div>
<div id="input_disc" style="display: none"> <div id="input_disc" style="display: none">
Open Disc Open Disc
......
...@@ -135,6 +135,13 @@ int libvlc_playlist_add_extended( libvlc_instance_t *p_instance, ...@@ -135,6 +135,13 @@ int libvlc_playlist_add_extended( libvlc_instance_t *p_instance,
i_options ); 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, int libvlc_playlist_isplaying( libvlc_instance_t *p_instance,
libvlc_exception_t *p_exception ) libvlc_exception_t *p_exception )
{ {
......
...@@ -458,7 +458,7 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] ) ...@@ -458,7 +458,7 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] )
/* Check for translation config option */ /* Check for translation config option */
#if defined( ENABLE_NLS ) \ #if defined( ENABLE_NLS ) \
&& ( defined( HAVE_GETTEXT ) || defined( HAVE_INCLUDED_GETTEXT ) ) && ( 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 /* This ain't really nice to have to reload the config here but it seems
* the only way to do it. */ * the only way to do it. */
config_LoadConfigFile( p_vlc, "main" ); config_LoadConfigFile( p_vlc, "main" );
...@@ -473,13 +473,6 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] ) ...@@ -473,13 +473,6 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] )
/* Reset the default domain */ /* Reset the default domain */
SetLanguage( psz_language ); 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"... */ /* Translate "C" to the language code: "fr", "en_GB", "nl", "ru"... */
msg_Dbg( p_vlc, "translation test: code is \"%s\"", _("C") ); 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[] ) ...@@ -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; libvlc.p_module_bank->b_cache_delete = b_cache_delete;
} }
if( psz_language ) free( psz_language ); if( psz_language ) free( psz_language );
# endif
#endif #endif
/* /*
......
...@@ -1532,9 +1532,12 @@ vlc_module_begin(); ...@@ -1532,9 +1532,12 @@ vlc_module_begin();
VLC_TRUE ); VLC_TRUE );
#endif #endif
#if defined (WIN32) || defined (__APPLE__)
add_string( "language", "auto", NULL, LANGUAGE_TEXT, LANGUAGE_LONGTEXT, add_string( "language", "auto", NULL, LANGUAGE_TEXT, LANGUAGE_LONGTEXT,
VLC_FALSE ); VLC_FALSE );
change_string_list( ppsz_language, ppsz_language_text, 0 ); change_string_list( ppsz_language, ppsz_language_text, 0 );
#endif
add_bool( "color", 0, NULL, COLOR_TEXT, COLOR_LONGTEXT, VLC_TRUE ); add_bool( "color", 0, NULL, COLOR_TEXT, COLOR_LONGTEXT, VLC_TRUE );
add_bool( "advanced", 0, NULL, ADVANCED_TEXT, ADVANCED_LONGTEXT, add_bool( "advanced", 0, NULL, ADVANCED_TEXT, ADVANCED_LONGTEXT,
VLC_FALSE ); 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