#include "wx/txtstrm.h"
#include "wx/numdlg.h"
+#include "wx/textdlg.h"
#include "wx/ffile.h"
#include "wx/process.h"
void OnClear(wxCommandEvent& event);
+ void OnBeginBusyCursor(wxCommandEvent& event);
+ void OnEndBusyCursor(wxCommandEvent& event);
+
void OnSyncExec(wxCommandEvent& event);
+ void OnSyncNoEventsExec(wxCommandEvent& event);
void OnAsyncExec(wxCommandEvent& event);
void OnShell(wxCommandEvent& event);
void OnExecWithRedirect(wxCommandEvent& event);
void OnPOpen(wxCommandEvent& event);
void OnFileExec(wxCommandEvent& event);
+ void OnOpenURL(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
Exec_Quit = 100,
Exec_Kill,
Exec_ClearLog,
+ Exec_BeginBusyCursor,
+ Exec_EndBusyCursor,
Exec_SyncExec = 200,
+ Exec_SyncNoEventsExec,
Exec_AsyncExec,
Exec_Shell,
Exec_POpen,
Exec_OpenFile,
+ Exec_OpenURL,
Exec_DDEExec,
Exec_DDERequest,
Exec_Redirect,
EVT_MENU(Exec_Quit, MyFrame::OnQuit)
EVT_MENU(Exec_Kill, MyFrame::OnKill)
EVT_MENU(Exec_ClearLog, MyFrame::OnClear)
+ EVT_MENU(Exec_BeginBusyCursor, MyFrame::OnBeginBusyCursor)
+ EVT_MENU(Exec_EndBusyCursor, MyFrame::OnEndBusyCursor)
EVT_MENU(Exec_SyncExec, MyFrame::OnSyncExec)
+ EVT_MENU(Exec_SyncNoEventsExec, MyFrame::OnSyncNoEventsExec)
EVT_MENU(Exec_AsyncExec, MyFrame::OnAsyncExec)
EVT_MENU(Exec_Shell, MyFrame::OnShell)
EVT_MENU(Exec_Redirect, MyFrame::OnExecWithRedirect)
EVT_MENU(Exec_POpen, MyFrame::OnPOpen)
EVT_MENU(Exec_OpenFile, MyFrame::OnFileExec)
+ EVT_MENU(Exec_OpenURL, MyFrame::OnOpenURL)
#ifdef __WINDOWS__
EVT_MENU(Exec_DDEExec, MyFrame::OnDDEExec)
// `Main program' equivalent: the program execution "starts" here
bool MyApp::OnInit()
{
+ if ( !wxApp::OnInit() )
+ return false;
+
// Create the main application window
MyFrame *frame = new MyFrame(_T("Exec wxWidgets sample"),
wxDefaultPosition, wxSize(500, 140));
menuFile->Append(Exec_Kill, _T("&Kill process...\tCtrl-K"),
_T("Kill a process by PID"));
menuFile->AppendSeparator();
- menuFile->Append(Exec_ClearLog, _T("&Clear log\tCtrl-C"),
+ menuFile->Append(Exec_ClearLog, _T("&Clear log\tCtrl-L"),
_T("Clear the log window"));
menuFile->AppendSeparator();
+ menuFile->Append(Exec_BeginBusyCursor, _T("Show &busy cursor\tCtrl-C"));
+ menuFile->Append(Exec_EndBusyCursor, _T("Show &normal cursor\tShift-Ctrl-C"));
+ menuFile->AppendSeparator();
menuFile->Append(Exec_Quit, _T("E&xit\tAlt-X"), _T("Quit this program"));
wxMenu *execMenu = new wxMenu;
execMenu->Append(Exec_SyncExec, _T("Sync &execution...\tCtrl-E"),
_T("Launch a program and return when it terminates"));
+ execMenu->Append(Exec_SyncNoEventsExec, _T("Sync execution and &block...\tCtrl-B"),
+ _T("Launch a program and block until it terminates"));
execMenu->Append(Exec_AsyncExec, _T("&Async execution...\tCtrl-A"),
_T("Launch a program and return immediately"));
execMenu->Append(Exec_Shell, _T("Execute &shell command...\tCtrl-S"),
execMenu->AppendSeparator();
execMenu->Append(Exec_OpenFile, _T("Open &file...\tCtrl-F"),
_T("Launch the command to open this kind of files"));
+ execMenu->Append(Exec_OpenURL, _T("Open &URL...\tCtrl-U"),
+ _T("Launch the default browser with the given URL"));
#ifdef __WINDOWS__
execMenu->AppendSeparator();
execMenu->Append(Exec_DDEExec, _T("Execute command via &DDE...\tCtrl-D"));
m_lbox->Clear();
}
+void MyFrame::OnBeginBusyCursor(wxCommandEvent& WXUNUSED(event))
+{
+ wxBeginBusyCursor();
+}
+
+void MyFrame::OnEndBusyCursor(wxCommandEvent& WXUNUSED(event))
+{
+ wxEndBusyCursor();
+}
+
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox(_T("Exec wxWidgets Sample\n(c) 2000-2002 Vadim Zeitlin"),
m_cmdLast = cmd;
}
+void MyFrame::OnSyncNoEventsExec(wxCommandEvent& WXUNUSED(event))
+{
+ wxString cmd = wxGetTextFromUser(_T("Enter the command: "),
+ DIALOG_TITLE,
+ m_cmdLast);
+
+ if ( !cmd )
+ return;
+
+ wxLogStatus( _T("'%s' is running please wait..."), cmd.c_str() );
+
+ int code = wxExecute(cmd, wxEXEC_BLOCK);
+
+ wxLogStatus(_T("Process '%s' terminated with exit code %d."),
+ cmd.c_str(), code);
+
+ m_cmdLast = cmd;
+}
+
void MyFrame::OnAsyncExec(wxCommandEvent& WXUNUSED(event))
{
wxString cmd = wxGetTextFromUser(_T("Enter the command: "),
if ( sync )
{
+ wxLogStatus( _T("'%s' is running please wait..."), cmd.c_str() );
+
wxArrayString output, errors;
int code = wxExecute(cmd, output, errors);
- wxLogStatus(_T("command '%s' terminated with exit code %d."),
+
+ wxLogStatus(_T("Command '%s' terminated with exit code %d."),
cmd.c_str(), code);
if ( code != -1 )
return;
}
+ wxLogVerbose(_T("PID of the new process: %ld"), process->GetPid());
+
wxOutputStream *out = process->GetOutputStream();
if ( !out )
{
wxString filename;
#if wxUSE_FILEDLG
- filename = wxLoadFileSelector(wxEmptyString, wxEmptyString, s_filename);
-#endif // wxUSE_FILEDLG
+ filename = wxLoadFileSelector(_T("any file"), wxEmptyString, s_filename, this);
+#else // !wxUSE_FILEDLG
+ filename = wxGetTextFromUser(_T("Enter the file name"), _T("exec sample"),
+ s_filename, this);
+#endif // wxUSE_FILEDLG/!wxUSE_FILEDLG
if ( filename.empty() )
return;
DoAsyncExec(cmd);
}
+void MyFrame::OnOpenURL(wxCommandEvent& WXUNUSED(event))
+{
+ static wxString s_filename(_T("http://www.wxwidgets.org/"));
+
+ wxString filename = wxGetTextFromUser
+ (
+ _T("Enter the URL"),
+ _T("exec sample"),
+ s_filename,
+ this
+ );
+
+ if ( filename.empty() )
+ return;
+
+ s_filename = filename;
+
+ if ( !wxLaunchDefaultBrowser(s_filename) )
+ wxLogError(_T("Failed to open URL \"%s\""), s_filename.c_str());
+}
+
// ----------------------------------------------------------------------------
// DDE stuff
// ----------------------------------------------------------------------------