// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(__APPLE__)
- #pragma implementation "exec.cpp"
- #pragma interface "exec.cpp"
-#endif
-
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#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 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_Kill,
Exec_ClearLog,
Exec_SyncExec = 200,
+ Exec_SyncNoEventsExec,
Exec_AsyncExec,
Exec_Shell,
Exec_POpen,
Exec_OpenFile,
+ Exec_OpenURL,
Exec_DDEExec,
Exec_DDERequest,
Exec_Redirect,
EVT_MENU(Exec_ClearLog, MyFrame::OnClear)
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));
#endif
// create a menu bar
- wxMenu *menuFile = new wxMenu(_T(""), wxMENU_TEAROFF);
+ wxMenu *menuFile = new wxMenu(wxEmptyString, wxMENU_TEAROFF);
menuFile->Append(Exec_Kill, _T("&Kill process...\tCtrl-K"),
_T("Kill a process by PID"));
menuFile->AppendSeparator();
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"));
execMenu->Append(Exec_DDERequest, _T("Send DDE &request...\tCtrl-R"));
#endif
- wxMenu *helpMenu = new wxMenu(_T(""), wxMENU_TEAROFF);
+ wxMenu *helpMenu = new wxMenu(wxEmptyString, wxMENU_TEAROFF);
helpMenu->Append(Exec_About, _T("&About...\tF1"), _T("Show about dialog"));
// now append the freshly created menu to the menu bar...
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: "),
return;
}
+ wxLogVerbose(_T("PID of the new process: %ld"), process->GetPid());
+
wxOutputStream *out = process->GetOutputStream();
if ( !out )
{
{
static wxString s_filename;
- wxString filename = wxLoadFileSelector(_T(""), _T(""), s_filename);
- if ( !filename )
+ wxString filename;
+
+#if wxUSE_FILEDLG
+ filename = wxLoadFileSelector(_T("any file"), NULL, 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;
s_filename = filename;
wxString cmd;
bool ok = ft->GetOpenCommand(&cmd,
- wxFileType::MessageParameters(filename, _T("")));
+ wxFileType::MessageParameters(filename));
delete ft;
if ( !ok )
{
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
// ----------------------------------------------------------------------------
return;
wxDDEClient client;
- wxConnectionBase *conn = client.MakeConnection(_T(""), m_server, m_topic);
+ wxConnectionBase *conn = client.MakeConnection(wxEmptyString, m_server, m_topic);
if ( !conn )
{
wxLogError(_T("Failed to connect to the DDE server '%s'."),
return;
wxDDEClient client;
- wxConnectionBase *conn = client.MakeConnection(_T(""), m_server, m_topic);
+ wxConnectionBase *conn = client.MakeConnection(wxEmptyString, m_server, m_topic);
if ( !conn )
{
wxLogError(_T("Failed to connect to the DDE server '%s'."),
bool MyPipedProcess2::HasInput()
{
- if ( !!m_input )
+ if ( !m_input.empty() )
{
wxTextOutputStream os(*GetOutputStream());
os.WriteString(m_input);
wxPanel *panel = new wxPanel(this, wxID_ANY);
- m_textOut = new wxTextCtrl(panel, wxID_ANY, _T(""),
+ m_textOut = new wxTextCtrl(panel, wxID_ANY, wxEmptyString,
wxDefaultPosition, wxDefaultSize,
wxTE_PROCESS_ENTER);
- m_textIn = new wxTextCtrl(panel, wxID_ANY, _T(""),
+ m_textIn = new wxTextCtrl(panel, wxID_ANY, wxEmptyString,
wxDefaultPosition, wxDefaultSize,
wxTE_MULTILINE | wxTE_RICH);
m_textIn->SetEditable(false);
- m_textErr = new wxTextCtrl(panel, wxID_ANY, _T(""),
+ m_textErr = new wxTextCtrl(panel, wxID_ANY, wxEmptyString,
wxDefaultPosition, wxDefaultSize,
wxTE_MULTILINE | wxTE_RICH);
m_textErr->SetEditable(false);
void MyPipeFrame::OnBtnSendFile(wxCommandEvent& WXUNUSED(event))
{
+#if wxUSE_FILEDLG
wxFileDialog filedlg(this, _T("Select file to send"));
if ( filedlg.ShowModal() != wxID_OK )
return;
DoGet();
}
+#endif // wxUSE_FILEDLG
}
void MyPipeFrame::DoGet()