Fix command line parsing in media player sample.
It was broken since the addition of the call to wxApp::OnInit() to wxMediaPlayerApp::OnInit() -- as the base class parses the command line itself, we need to use OnInitCmdLine() and OnCmdLineParsed() instead of doing it manually if we call it. Also don't load the play list saved in wxConfig if any command line parameters were given as otherwise the saved files would be used first (this seems to have been always broken...). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71926 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
69bacfaacf
commit
fcbf733155
@ -66,6 +66,7 @@
|
||||
#include "wx/dnd.h" // drag and drop for the playlist
|
||||
#include "wx/filename.h" // For wxFileName::GetName()
|
||||
#include "wx/config.h" // for native wxConfig
|
||||
#include "wx/vector.h"
|
||||
|
||||
// Under MSW we have several different backends but when linking statically
|
||||
// they may be discarded by the linker (this definitely happens with MSVC) so
|
||||
@ -146,6 +147,14 @@ public:
|
||||
virtual void MacOpenFiles(const wxArrayString & fileNames );
|
||||
#endif
|
||||
|
||||
#if wxUSE_CMDLINE_PARSER
|
||||
virtual void OnInitCmdLine(wxCmdLineParser& parser);
|
||||
virtual bool OnCmdLineParsed(wxCmdLineParser& parser);
|
||||
|
||||
// Files specified on the command line, if any.
|
||||
wxVector<wxString> m_params;
|
||||
#endif // wxUSE_CMDLINE_PARSER
|
||||
|
||||
virtual bool OnInit();
|
||||
|
||||
protected:
|
||||
@ -408,6 +417,34 @@ const wxChar* wxGetMediaStateText(int nState)
|
||||
// ----------------------------------------------------------------------------
|
||||
IMPLEMENT_APP(wxMediaPlayerApp)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxMediaPlayerApp command line parsing
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#if wxUSE_CMDLINE_PARSER
|
||||
|
||||
void wxMediaPlayerApp::OnInitCmdLine(wxCmdLineParser& parser)
|
||||
{
|
||||
wxApp::OnInitCmdLine(parser);
|
||||
|
||||
parser.AddParam("input files",
|
||||
wxCMD_LINE_VAL_STRING,
|
||||
wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE);
|
||||
}
|
||||
|
||||
bool wxMediaPlayerApp::OnCmdLineParsed(wxCmdLineParser& parser)
|
||||
{
|
||||
if ( !wxApp::OnCmdLineParsed(parser) )
|
||||
return false;
|
||||
|
||||
for (size_t paramNr=0; paramNr < parser.GetParamCount(); ++paramNr)
|
||||
m_params.push_back(parser.GetParam(paramNr));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif // wxUSE_CMDLINE_PARSER
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxMediaPlayerApp::OnInit
|
||||
//
|
||||
@ -429,34 +466,15 @@ bool wxMediaPlayerApp::OnInit()
|
||||
frame->Show(true);
|
||||
|
||||
#if wxUSE_CMDLINE_PARSER
|
||||
//
|
||||
// What this does is get all the command line arguments
|
||||
// and treat each one as a file to put to the initial playlist
|
||||
//
|
||||
wxCmdLineEntryDesc cmdLineDesc[2];
|
||||
cmdLineDesc[0].kind = wxCMD_LINE_PARAM;
|
||||
cmdLineDesc[0].shortName = NULL;
|
||||
cmdLineDesc[0].longName = NULL;
|
||||
cmdLineDesc[0].description = "input files";
|
||||
cmdLineDesc[0].type = wxCMD_LINE_VAL_STRING;
|
||||
cmdLineDesc[0].flags = wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE;
|
||||
|
||||
cmdLineDesc[1].kind = wxCMD_LINE_NONE;
|
||||
|
||||
// gets the passed media files from cmd line
|
||||
wxCmdLineParser parser (cmdLineDesc, argc, argv);
|
||||
|
||||
// get filenames from the commandline
|
||||
if (parser.Parse() == 0)
|
||||
if ( !m_params.empty() )
|
||||
{
|
||||
for (size_t paramNr=0; paramNr < parser.GetParamCount(); ++paramNr)
|
||||
{
|
||||
frame->AddToPlayList((parser.GetParam (paramNr)));
|
||||
}
|
||||
for ( size_t n = 0; n < m_params.size(); n++ )
|
||||
frame->AddToPlayList(m_params[n]);
|
||||
|
||||
wxCommandEvent theEvent(wxEVT_COMMAND_MENU_SELECTED, wxID_NEXT);
|
||||
frame->AddPendingEvent(theEvent);
|
||||
}
|
||||
#endif
|
||||
#endif // wxUSE_CMDLINE_PARSER
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -702,24 +720,34 @@ wxMediaPlayerFrame::wxMediaPlayerFrame(const wxString& title)
|
||||
wxT(""),
|
||||
true);
|
||||
|
||||
//
|
||||
// Here we load the our configuration -
|
||||
// in our case we load all the files that were left in
|
||||
// the playlist the last time the user closed our application
|
||||
//
|
||||
// As an exercise to the reader try modifying it so that
|
||||
// it properly loads the playlist for each page without
|
||||
// conflicting (loading the same data) with the other ones.
|
||||
//
|
||||
wxConfig conf;
|
||||
wxString key, outstring;
|
||||
for(int i = 0; ; ++i)
|
||||
|
||||
// Don't load previous files if we have some specified on the command line,
|
||||
// we wouldn't play them otherwise (they'd have to be inserted into the
|
||||
// play list at the beginning instead of being appended but we don't
|
||||
// support this).
|
||||
#if wxUSE_CMDLINE_PARSER
|
||||
if ( wxGetApp().m_params.empty() )
|
||||
#endif // wxUSE_CMDLINE_PARSER
|
||||
{
|
||||
key.clear();
|
||||
key << i;
|
||||
if(!conf.Read(key, &outstring))
|
||||
break;
|
||||
page->m_playlist->AddToPlayList(outstring);
|
||||
//
|
||||
// Here we load the our configuration -
|
||||
// in our case we load all the files that were left in
|
||||
// the playlist the last time the user closed our application
|
||||
//
|
||||
// As an exercise to the reader try modifying it so that
|
||||
// it properly loads the playlist for each page without
|
||||
// conflicting (loading the same data) with the other ones.
|
||||
//
|
||||
wxConfig conf;
|
||||
wxString key, outstring;
|
||||
for(int i = 0; ; ++i)
|
||||
{
|
||||
key.clear();
|
||||
key << i;
|
||||
if(!conf.Read(key, &outstring))
|
||||
break;
|
||||
page->m_playlist->AddToPlayList(outstring);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user