]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/cmdline.cpp
modified GetLastMenuItem() to also take into account the popup menu items
[wxWidgets.git] / src / common / cmdline.cpp
index aa1f4b5edb3964ff83f2eebb964eeb7639f6990b..e75b99c4bef06f5bb4adef886af596724443f2bb 100644 (file)
     #include "wx/intl.h"
     #include "wx/app.h"
     #include "wx/dynarray.h"
-    #include "wx/filefn.h"
 #endif //WX_PRECOMP
 
 #include <ctype.h>
 
 #include "wx/datetime.h"
 #include "wx/msgout.h"
+#include "wx/filename.h"
 
 // ----------------------------------------------------------------------------
 // private functions
@@ -86,7 +86,7 @@ struct wxCmdLineOption
                 GetLongOptionName(lng).Len() == lng.Len(),
                 wxT("Long option contains invalid characters")
             );
-            
+
 
         kind = k;
 
@@ -189,7 +189,10 @@ struct wxCmdLineParserData
 
     // methods
     wxCmdLineParserData();
+    void SetArguments(int argc, char **argv);
+#if wxUSE_UNICODE
     void SetArguments(int argc, wxChar **argv);
+#endif // wxUSE_UNICODE
     void SetArguments(const wxString& cmdline);
 
     int FindOption(const wxString& name);
@@ -214,6 +217,18 @@ wxCmdLineParserData::wxCmdLineParserData()
 #endif
 }
 
+void wxCmdLineParserData::SetArguments(int argc, char **argv)
+{
+    m_arguments.clear();
+
+    for ( int n = 0; n < argc; n++ )
+    {
+        m_arguments.push_back(wxString::FromAscii(argv[n]));
+    }
+}
+
+#if wxUSE_UNICODE
+
 void wxCmdLineParserData::SetArguments(int argc, wxChar **argv)
 {
     m_arguments.clear();
@@ -224,11 +239,13 @@ void wxCmdLineParserData::SetArguments(int argc, wxChar **argv)
     }
 }
 
+#endif // wxUSE_UNICODE
+
 void wxCmdLineParserData::SetArguments(const wxString& cmdLine)
 {
     m_arguments.clear();
 
-    m_arguments.push_back(wxTheApp->GetAppName());
+    m_arguments.push_back(wxTheApp ? wxTheApp->argv[0] : _T(""));
 
     wxArrayString args = wxCmdLineParser::ConvertStringToArgs(cmdLine);
 
@@ -277,11 +294,20 @@ void wxCmdLineParser::Init()
     m_data = new wxCmdLineParserData;
 }
 
+void wxCmdLineParser::SetCmdLine(int argc, char **argv)
+{
+    m_data->SetArguments(argc, argv);
+}
+
+#if wxUSE_UNICODE
+
 void wxCmdLineParser::SetCmdLine(int argc, wxChar **argv)
 {
     m_data->SetArguments(argc, argv);
 }
 
+#endif // wxUSE_UNICODE
+
 void wxCmdLineParser::SetCmdLine(const wxString& cmdline)
 {
     m_data->SetArguments(cmdline);
@@ -903,14 +929,15 @@ void wxCmdLineParser::Usage()
 
 wxString wxCmdLineParser::GetUsageString()
 {
-    wxString appname = wxTheApp->GetAppName();
-    if ( !appname )
+    wxString appname;
+    if ( m_data->m_arguments.empty() )
     {
-        wxCHECK_MSG( m_data->m_arguments.size() != 0, wxEmptyString,
-                     _T("no program name") );
-
-        appname = wxFileNameFromPath(m_data->m_arguments[0]);
-        wxStripExtension(appname);
+        if ( wxTheApp )
+            appname = wxTheApp->GetAppName();
+    }
+    else // use argv[0]
+    {
+        appname = wxFileName(m_data->m_arguments[0]).GetName();
     }
 
     // we construct the brief cmd line desc on the fly, but not the detailed