X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5a8561fc558ea72a5350e7aed98c04443af2874e..f1d5aa4eca541a2f90044a63f555985d6bd4adf3:/samples/exec/exec.cpp diff --git a/samples/exec/exec.cpp b/samples/exec/exec.cpp index 64d1aae2b5..ee51fbdf74 100644 --- a/samples/exec/exec.cpp +++ b/samples/exec/exec.cpp @@ -53,6 +53,7 @@ #include "wx/numdlg.h" #include "wx/textdlg.h" #include "wx/ffile.h" +#include "wx/stopwatch.h" #include "wx/process.h" @@ -114,6 +115,7 @@ public: void OnPOpen(wxCommandEvent& event); void OnFileExec(wxCommandEvent& event); + void OnFileLaunch(wxCommandEvent& event); void OnOpenURL(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); @@ -303,6 +305,7 @@ enum Exec_Shell, Exec_POpen, Exec_OpenFile, + Exec_LaunchFile, Exec_OpenURL, Exec_DDEExec, Exec_DDERequest, @@ -343,6 +346,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Exec_POpen, MyFrame::OnPOpen) EVT_MENU(Exec_OpenFile, MyFrame::OnFileExec) + EVT_MENU(Exec_LaunchFile, MyFrame::OnFileLaunch) EVT_MENU(Exec_OpenURL, MyFrame::OnOpenURL) #ifdef __WINDOWS__ @@ -459,6 +463,8 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) execMenu->AppendSeparator(); execMenu->Append(Exec_OpenFile, _T("Open &file...\tCtrl-F"), _T("Launch the command to open this kind of files")); + execMenu->Append(Exec_LaunchFile, _T("La&unch file...\tShift-Ctrl-F"), + _T("Launch the default application associated with the file")); execMenu->Append(Exec_OpenURL, _T("Open &URL...\tCtrl-U"), _T("Launch the default browser with the given URL")); #ifdef __WINDOWS__ @@ -727,6 +733,15 @@ void MyFrame::OnShell(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnExecWithRedirect(wxCommandEvent& WXUNUSED(event)) { + if ( !m_cmdLast ) + { +#ifdef __WXMSW__ + m_cmdLast = "type Makefile.in"; +#else + m_cmdLast = "cat -n Makefile"; +#endif + } + wxString cmd = wxGetTextFromUser(_T("Enter the command: "), DIALOG_TITLE, m_cmdLast); @@ -753,13 +768,15 @@ void MyFrame::OnExecWithRedirect(wxCommandEvent& WXUNUSED(event)) if ( sync ) { - wxLogStatus( _T("'%s' is running please wait..."), cmd.c_str() ); + wxLogStatus("\"%s\" is running please wait...", cmd); + + wxStopWatch sw; wxArrayString output, errors; int code = wxExecute(cmd, output, errors); - wxLogStatus(_T("Command '%s' terminated with exit code %d."), - cmd.c_str(), code); + wxLogStatus("Command \"%s\" terminated after %ldms; exit code %d.", + cmd, sw.Time(), code); if ( code != -1 ) { @@ -855,25 +872,33 @@ void MyFrame::OnPOpen(wxCommandEvent& WXUNUSED(event)) new MyPipeFrame(this, cmd, process); } -void MyFrame::OnFileExec(wxCommandEvent& WXUNUSED(event)) -{ - static wxString s_filename; +static wxString gs_lastFile; +static bool AskUserForFileName() +{ wxString filename; #if wxUSE_FILEDLG - filename = wxLoadFileSelector(_T("any file"), wxEmptyString, s_filename, this); + filename = wxLoadFileSelector(_T("any file"), wxEmptyString, gs_lastFile); #else // !wxUSE_FILEDLG filename = wxGetTextFromUser(_T("Enter the file name"), _T("exec sample"), - s_filename, this); + gs_lastFile); #endif // wxUSE_FILEDLG/!wxUSE_FILEDLG if ( filename.empty() ) - return; + return false; - s_filename = filename; + gs_lastFile = filename; - wxString ext = filename.AfterFirst(_T('.')); + return true; +} + +void MyFrame::OnFileExec(wxCommandEvent& WXUNUSED(event)) +{ + if ( !AskUserForFileName() ) + return; + + wxString ext = gs_lastFile.AfterLast(_T('.')); wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(ext); if ( !ft ) { @@ -884,7 +909,7 @@ void MyFrame::OnFileExec(wxCommandEvent& WXUNUSED(event)) wxString cmd; bool ok = ft->GetOpenCommand(&cmd, - wxFileType::MessageParameters(filename)); + wxFileType::MessageParameters(gs_lastFile)); delete ft; if ( !ok ) { @@ -896,25 +921,36 @@ void MyFrame::OnFileExec(wxCommandEvent& WXUNUSED(event)) DoAsyncExec(cmd); } +void MyFrame::OnFileLaunch(wxCommandEvent& WXUNUSED(event)) +{ + if ( !AskUserForFileName() ) + return; + + if ( !wxLaunchDefaultApplication(gs_lastFile) ) + { + wxLogError("Opening \"%s\" in default application failed.", gs_lastFile); + } +} + void MyFrame::OnOpenURL(wxCommandEvent& WXUNUSED(event)) { - static wxString s_filename(_T("http://www.wxwidgets.org/")); + static wxString s_url(_T("http://www.wxwidgets.org/")); wxString filename = wxGetTextFromUser ( _T("Enter the URL"), _T("exec sample"), - s_filename, + s_url, this ); if ( filename.empty() ) return; - s_filename = filename; + s_url = filename; - if ( !wxLaunchDefaultBrowser(s_filename) ) - wxLogError(_T("Failed to open URL \"%s\""), s_filename.c_str()); + if ( !wxLaunchDefaultBrowser(s_url) ) + wxLogError(_T("Failed to open URL \"%s\""), s_url.c_str()); } // ----------------------------------------------------------------------------