00001
00002
00003
00004
00005
00006
00007
00008
00010
00011
00012 #ifndef _WX_WEBUPDATEDLG_H_
00013 #define _WX_WEBUPDATEDLG_H_
00014
00015
00016 #include "wx/webupdate.h"
00017 #include "wx/download.h"
00018 #include "wx/webupdatectrl.h"
00019 #include "wx/installer.h"
00020 #include <wx/dialog.h>
00021 #include <wx/panel.h>
00022 #include <wx/checkbox.h>
00023 #include <wx/textctrl.h>
00024
00025
00026 class wxStaticText;
00027 class wxButton;
00028 class wxTextCtrl;
00029 class wxGauge;
00030
00031
00033 #define wxWUD_TIMETEXT_PREFIX wxT("Time remaining: ")
00034
00036 #define wxWUD_SPEEDTEXT_PREFIX wxT("Status: ")
00037
00039 #define wxWUD_OK_DEFAULT_LABEL wxT("Download")
00040 #define wxWUD_OK_INSTALL wxT("Install")
00041
00043 #define wxWUD_CANCEL_DEFAULT_LABEL wxT("Cancel")
00044 #define wxWUD_CANCEL_DOWNLOAD wxT("Stop download")
00045 #define wxWUD_CANCEL_INSTALLATION wxT("Stop installation")
00046
00048 #define wxWUD_SHOWHIDEADV_SHOW wxT("Show advanced settings >>")
00049 #define wxWUD_SHOWHIDEADV_HIDE wxT("Hide advanced settings <<")
00050
00051
00053 #define wxWUD_GAUGE_RANGE 1000
00054
00056 #define wxWUAD_PREFIX wxT("This is WebUpdater version ")
00057 #define wxWUAD_POSTFIX wxT("\nby Francesco Montorsi (c) 2005")
00058
00059
00061 #define wxWUD_XMLSCRIPT_ID wxT("XMLSCRIPT")
00062
00063
00064
00071 #define wxWU_XRCCTRL(window, id, type) \
00072 (wxDynamicCast((window).FindWindow(XRCID(id)), type)) // note the dynamic cast vs static cast
00073
00074
00075
00085 enum wxWebUpdateDlgStatus {
00086
00089 wxWUDS_WAITINGXML = 1,
00090
00092 wxWUDS_DOWNLOADINGXML = 2,
00093
00096 wxWUDS_WAITING = 4,
00097
00100 wxWUDS_DOWNLOADING = 8,
00101
00105 wxWUDS_INSTALLING = 16,
00106
00107
00108
00109
00110 wxWUDS_EXITING = 32
00111 };
00112
00113
00114
00119
00120
00121
00122
00125
00126
00129
00130
00132
00133
00134
00135
00136
00137
00138
00139
00142 class WXDLLIMPEXP_WEBUPDATE wxWebUpdateAdvPanel : public wxPanel
00143 {
00144 protected:
00145
00146 wxTextCtrl *m_pDownloadPathTextCtrl;
00147 wxCheckBox *m_pRemoveFiles, *m_pRestart, *m_pSaveLog;
00148
00149 #if wxUSE_HTTPENGINE
00150 wxProxySettings m_proxy;
00151 wxHTTPAuthSettings m_auth;
00152 #endif
00153
00155 wxWebUpdateLocalXMLScript *m_xmlLocal;
00156
00157 protected:
00158
00160 bool InitWidgetsFromXRC(wxWindow *parent);
00161
00162 protected:
00163
00164 void OnBrowse(wxCommandEvent &);
00165 void OnProxySettings(wxCommandEvent &);
00166 void OnAuthSettings(wxCommandEvent &);
00167 void OnRestart(wxCommandEvent &);
00168 void OnSaveLog(wxCommandEvent &);
00169
00170 public:
00171
00173 wxWebUpdateAdvPanel::wxWebUpdateAdvPanel()
00174 : m_xmlLocal(NULL) {}
00175
00177 wxWebUpdateAdvPanel::wxWebUpdateAdvPanel(wxWindow* parent)
00178 : m_xmlLocal(NULL)
00179 { Create(parent); }
00180
00182 bool Create(wxWindow* parent);
00183
00184
00185 virtual ~wxWebUpdateAdvPanel() {}
00186
00187
00188 public:
00189
00190 void SetData(wxWebUpdateLocalXMLScript *script);
00191
00192 public:
00193
00194 #if wxUSE_HTTPENGINE
00195
00196 wxProxySettings GetProxySettings() const
00197 { return m_proxy; }
00198
00200 wxHTTPAuthSettings GetHTTPAuthSettings() const
00201 { return m_auth; }
00202 #endif
00203
00206 wxString GetDownloadPath() const
00207 { return m_pDownloadPathTextCtrl->GetValue(); }
00208
00210 bool RemoveFiles() const
00211 { if (m_pRemoveFiles) return m_pRemoveFiles->GetValue(); return TRUE; }
00212
00215 bool Restart() const
00216 { if (m_pRestart) return m_pRestart->GetValue(); return TRUE; }
00217
00218
00219 private:
00220 DECLARE_CLASS(wxWebUpdateAdvPanel)
00221 DECLARE_EVENT_TABLE()
00222 };
00223
00224
00225
00227 class WXDLLIMPEXP_WEBUPDATE wxWebUpdateAdvPanelXmlHandler : public wxXmlResourceHandler
00228 {
00229 DECLARE_DYNAMIC_CLASS(wxWebUpdateAdvPanelXmlHandler)
00230
00231 public:
00232 wxWebUpdateAdvPanelXmlHandler();
00233 virtual wxObject *DoCreateResource();
00234 virtual bool CanHandle(wxXmlNode *node);
00235 };
00236
00237
00239 class WXDLLIMPEXP_WEBUPDATE wxWebUpdateAboutDlg : public wxDialog
00240 {
00241 protected:
00242
00244 bool InitWidgetsFromXRC(wxWindow *parent);
00245
00246 public:
00247 wxWebUpdateAboutDlg::wxWebUpdateAboutDlg(wxWindow *parent)
00248 { InitWidgetsFromXRC(parent); }
00249 virtual ~wxWebUpdateAboutDlg() {}
00250
00251 private:
00252 DECLARE_CLASS(wxWebUpdateAboutDlg)
00253 DECLARE_EVENT_TABLE()
00254 };
00255
00256
00262 class WXDLLIMPEXP_WEBUPDATE wxWebUpdateDlg : public wxDialog
00263 {
00264 protected:
00265
00266 wxStaticText *m_pAppNameText, *m_pTimeText, *m_pSpeedText;
00267 wxButton *m_pOkBtn, *m_pCancelBtn, *m_pShowHideAdvBtn;
00268 wxGauge *m_pGauge;
00269 wxTextCtrl *m_pDescription, *m_pLog;
00270 wxCheckBox *m_pShowOnlyOOD;
00271
00272
00273 bool m_ok;
00274
00275
00276 wxWebUpdateListCtrl *m_pUpdatesList;
00277
00278
00279 wxWebUpdateAdvPanel *m_pAdvPanel;
00280
00289 int m_nDownloadCount;
00290
00294 int m_nInstallCount;
00295
00296 protected:
00297
00300 wxWebUpdateXMLScript m_xmlRemote;
00301
00303 wxWebUpdateLocalXMLScript m_xmlLocal;
00304
00305 protected:
00306
00308 wxDownloadThread *m_dThread;
00309
00311 wxWebUpdateInstallThread *m_iThread;
00312
00315 wxWebUpdatePackage *m_current;
00316
00317 protected:
00318
00321 bool m_bUserAborted;
00322
00326 wxWebUpdateDlgStatus m_nStatus;
00327
00328 protected:
00329
00331 bool InitWidgetsFromXRC(wxWindow *parent);
00332
00334 bool InitThreads();
00335
00336 protected:
00337
00340 wxWindow *ShowHideChild(const wxString &name);
00341
00344 wxString GetOutputFilenameFor(const wxWebUpdatePackage &p);
00345
00346 protected:
00347
00349 void OnScriptDownload(const wxString &xmluri);
00350
00354 bool DownloadNextPackage();
00355
00359 bool InstallNextPackage();
00360
00363 bool CheckForAllUpdated(wxWebUpdatePackageArray &arr, bool forcedefaultmsg = FALSE);
00364
00369 bool FilterOtherPlatforms(wxWebUpdatePackageArray &arr);
00370
00373 void RemoveCurrentPackage();
00374
00375 protected:
00376
00377 void OnDownload(wxCommandEvent &);
00378 void OnCancel(wxCommandEvent &);
00379 void OnAbout(wxCommandEvent &);
00380 void OnShowFilter(wxCommandEvent &);
00381 void OnShowHideAdv(wxCommandEvent &);
00382 void OnUpdateUI(wxUpdateUIEvent &);
00383 void OnTextURL(wxTextUrlEvent &);
00384 void OnSize(wxSizeEvent &);
00385
00386
00387 void OnDownloadComplete(wxCommandEvent &);
00388
00389
00390 void OnInstallationComplete(wxCommandEvent &);
00391
00392 public:
00393
00395 wxWebUpdateDlg::wxWebUpdateDlg() { PreInit(); }
00396
00404 wxWebUpdateDlg::wxWebUpdateDlg(
00405 wxWindow *parent,
00406 const wxWebUpdateLocalXMLScript &script);
00407
00409 void PreInit();
00410
00412 bool Create(wxWindow *parent,
00413 const wxWebUpdateLocalXMLScript &script);
00414
00416 bool IsOk() const
00417 { return m_ok; }
00418
00419 virtual ~wxWebUpdateDlg()
00420 { if (m_dThread) delete m_dThread;
00421 if (m_iThread) delete m_iThread;}
00422
00423
00424 public:
00425
00428 bool ConnectionRequired();
00429
00432 void AbortDialog();
00433
00435 wxWebUpdatePackageArray &GetRemotePackages()
00436 { return m_pUpdatesList->GetRemotePackages(); }
00437
00439 wxWebUpdateLocalPackageArray &GetLocalPackages()
00440 { return m_pUpdatesList->GetLocalPackages(); }
00441
00445 void SetLocalScript(const wxWebUpdateLocalXMLScript &script)
00446 { m_xmlLocal = script; }
00447
00449 wxString GetAppName() const
00450 { return m_xmlLocal.GetAppName(); }
00451
00453 bool IsAppToRestart() const
00454 { return m_xmlLocal.IsAppToRestart(); }
00455
00457 wxWebUpdateListCtrlFilter GetPackageFilter() const;
00458
00459 private:
00460 DECLARE_CLASS(wxWebUpdateDlg)
00461 DECLARE_EVENT_TABLE()
00462 };
00463
00464
00465 #endif
00466