00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012 #ifndef _PMEXTCMDPROGRESSPANEL_H_
00013 #define _PMEXTCMDPROGRESSPANEL_H_
00014
00019 #include "wxp/package.h"
00020 #include "wx/process.h"
00021 #include "wx/timer.h"
00022 #include "wx/gauge.h"
00023
00024 #include "guipm/progresspanel.h"
00025
00026
00031
00032 #define SYMBOL_WXEXTCMDPROGRESSPANEL_STYLE 0
00033 #define SYMBOL_WXEXTCMDPROGRESSPANEL_TITLE _("Dialog")
00034 #define SYMBOL_WXEXTCMDPROGRESSPANEL_IDNAME wxID_ANY
00035 #define SYMBOL_WXEXTCMDPROGRESSPANEL_SIZE wxSize(400, 300)
00036 #define SYMBOL_WXEXTCMDPROGRESSPANEL_POSITION wxDefaultPosition
00037 #define ID_EXTCMD_COMMANDS 10000
00038 #define ID_EXTCMD_GAUGE 10001
00039 #define ID_EXTCMD_NOTEBOOK 10003
00040 #define ID_EXTCMD_OUTPUT 10006
00041 #define ID_EXTCMD_OUTPUTERR 10002
00043
00044 #define SYMBOL_WXEXTCMDPROGRESSPANEL_NAME wxT("Build")
00045 #define ID_EXTCMD_PROCESS 10015
00046 #define ID_EXTCMD_CURRPROCESS_PREFIX wxT("=> ")
00047
00048
00049
00050
00051
00052
00053 class wxExtCmdProgressPanel: public wxProgressPanel
00054 {
00055 DECLARE_DYNAMIC_CLASS( wxExtCmdProgressPanel )
00056 DECLARE_EVENT_TABLE()
00057
00058 public:
00060 wxExtCmdProgressPanel( );
00061 wxExtCmdProgressPanel( wxWindow* parent,
00062 wxWindowID id = SYMBOL_WXEXTCMDPROGRESSPANEL_IDNAME,
00063 const wxPoint& pos = SYMBOL_WXEXTCMDPROGRESSPANEL_POSITION,
00064 const wxSize& size = SYMBOL_WXEXTCMDPROGRESSPANEL_SIZE,
00065 long style = SYMBOL_WXEXTCMDPROGRESSPANEL_STYLE,
00066 const wxString &name = SYMBOL_WXEXTCMDPROGRESSPANEL_NAME);
00067
00069 bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WXEXTCMDPROGRESSPANEL_IDNAME,
00070 const wxPoint& pos = SYMBOL_WXEXTCMDPROGRESSPANEL_POSITION,
00071 const wxSize& size = SYMBOL_WXEXTCMDPROGRESSPANEL_SIZE,
00072 long style = SYMBOL_WXEXTCMDPROGRESSPANEL_STYLE,
00073 const wxString &name = SYMBOL_WXEXTCMDPROGRESSPANEL_NAME);
00074
00076 void CreateControls();
00077
00078
00079 virtual ~wxExtCmdProgressPanel()
00080 {
00081
00082 Stop();
00083 }
00084
00085
00086 public:
00087
00088 void OnIdle(wxIdleEvent &ev);
00089 void OnTimer(wxTimerEvent& event);
00090 void OnProcessTerminate(wxProcessEvent &ev);
00091 void OnUpdateUI(wxUpdateUIEvent &);
00092
00093 public:
00094
00095 void SetStage(wxPackageBuildSystemStage stage)
00096 { m_stage=stage; }
00097
00098 void SetPackage(const wxPackage &pkg);
00099
00100 void Start();
00101 void Stop();
00102
00103 bool IsProcessing() const
00104 { return m_timerIdleWakeUp.IsRunning() || m_currProcess != NULL; }
00105
00106 wxString GetLogData() const;
00107 wxString GetLogLabel() const;
00108
00109 bool IsSuccessful() const
00110 { return m_nExitCode == 0; }
00111
00112 void ClearControls();
00113
00114 protected:
00115
00116 void SelectCurrProcess();
00117 void DeselectCurrProcess();
00118
00119 void OnProcessStart();
00120
00121 void UpdateCachedCommands();
00122
00123 wxString GetCmdString(size_t n) const;
00124 wxString GetCmdPath(size_t n) const;
00125
00126 protected:
00127
00128 wxListBox* m_pCommandList;
00129 wxTextCtrl* m_pOutput;
00130 wxTextCtrl* m_pOutputErr;
00131 wxGauge *m_pGauge;
00132
00133 protected:
00134
00135 wxPackage m_pkg;
00136 wxPackageBuildSystemStage m_stage;
00137
00139 wxPackageCommandArray m_cmd;
00140
00141 wxTimer m_timerIdleWakeUp;
00142 wxDateTime m_start;
00143
00144 protected:
00145
00146 wxProcess *m_currProcess;
00147 int m_nCurrProcess;
00148 int m_pid;
00149 int m_nExitCode;
00150 };
00151
00152 #endif
00153