browsepanel.h

00001 
00002 // Name:        browsepanel.h
00003 // Purpose:     wxPackageBrowserPanel definition
00004 // Author:      Julian Smart, Francesco Montorsi
00005 // Modified by:
00006 // Created:     04/06/2006 12:04:43
00007 // RCS-ID:      $Id: browsepanel.h,v 1.4 2007/01/24 23:57:56 frm Exp $
00008 // Copyright:   (c) 2006 Francesco Montorsi
00009 // Licence:     wxWidgets license
00011 
00012 #ifndef _PMBROWSEPANEL_H_
00013 #define _PMBROWSEPANEL_H_
00014 
00019 #include "wx/notebook.h"
00020 #include "wx/listbox.h"
00021 #include "wx/htmllbox.h"
00022 #include "wx/statusbr.h"
00023 
00024 #include "guipm/filterpanel.h"
00025 #include "wxp/package.h"
00026 
00027 
00032 class wxPackageManager;
00033 class wxPackageViewerPanel;
00034 class wxPackageListBox;
00035 
00036 
00041 #define SYMBOL_WXPACKAGEBROWSERPANEL_STYLE wxRESIZE_BORDER
00042 #define SYMBOL_WXPACKAGEBROWSERPANEL_TITLE _("Package Browser Panel")
00043 #define SYMBOL_WXPACKAGEBROWSERPANEL_IDNAME wxID_ANY
00044 #define SYMBOL_WXPACKAGEBROWSERPANEL_SIZE wxSize(400, 300)
00045 #define SYMBOL_WXPACKAGEBROWSERPANEL_POSITION wxDefaultPosition
00046 #define ID_BROWSER_NOTEBOOK 10019
00047 #define ID_BROWSER_INSTALLED_FILTER 10007
00048 #define ID_BROWSER_INSTALLED_PACKAGELIST 10005
00049 #define ID_BROWSER_INSTALLED_SELECTALL 10012
00050 #define ID_BROWSER_INSTALLED_DESELECTALL 10015
00051 #define ID_BROWSER_INSTALLED_REFRESH 10016
00052 
00053 #define ID_BROWSER_DECOMPRESS 10100
00054 #define ID_BROWSER_REBUILD 10017
00055 #define ID_BROWSER_REINSTALL 10011
00056 #define ID_BROWSER_UNINSTALL 10013
00057 #define ID_BROWSER_UPDATECHECK 10023
00058 #define ID_BROWSER_SOURCELIST 10001
00059 #define ID_BROWSER_NEW_FILTER 10004
00060 #define ID_BROWSER_NEW_PACKAGELIST 10004
00061 #define ID_BROWSER_NEW_SELECTALL 10008
00062 #define ID_BROWSER_NEW_DESELECTALL 10009
00063 #define ID_BROWSER_NEW_REFRESH 10021
00064 #define ID_BROWSER_DOWNLOAD 10022
00065 #define ID_BROWSER_BUILD 10010
00066 #define ID_BROWSER_INSTALL 10014
00067 
00068 
00069 // ----------------------------------------------------------------------------
00070 // wxPackageListBox
00071 // ----------------------------------------------------------------------------
00072 
00073 class wxPackageListBox : public wxHtmlListBox
00074 {
00075 public:
00076     wxPackageListBox(wxWindow* parent, wxWindowID id = wxID_ANY,
00077                         const wxPoint& pos = wxDefaultPosition,
00078                         const wxSize& size = wxDefaultSize, long style = 0,
00079                         const wxString& name = wxT("commandlistbox"));
00080 
00081 public:     // public API
00082 
00083     void Append(const wxPackage &item)
00084         { m_items.Add(item); SetItemCount(m_items.GetCount()); }
00085 
00086     // NB: call RefreshAll() after all calls to SetString !!
00087     void SetPackage(unsigned int n, const wxPackage &item)
00088         { m_items[n] = item; }
00089 
00090     unsigned int GetCount() const
00091         { return m_items.GetCount(); }
00092 
00093     wxPackageArray &GetPackages()
00094         { return m_items; }
00095 
00096     bool SetSelectedPackage(const wxPackageId &id)
00097     {
00098         // NB: even when n is wxNOT_FOUND we must still
00099         //     call SetSelection(-1) so to remove selection
00100         int n = m_items.IndexById(id);
00101         SetSelection(n);
00102         return n != wxNOT_FOUND;
00103     }
00104 
00105     bool IsEmpty() const
00106     { return GetCount()==0; }
00107 
00108     wxPackage &GetSelectedPackage()
00109     {
00110         wxASSERT_MSG(!HasMultipleSelection(), wxT("Use GetSelectedPackages instead"));
00111         if (GetSelection() == wxNOT_FOUND)
00112             return wxEmptyPackage;
00113         return m_items[GetSelection()];
00114     }
00115 
00116     wxPackageArray GetSelectedPackages() const
00117     {
00118         wxASSERT_MSG(HasMultipleSelection(), wxT("Use GetSelectedPackage instead"));
00119 
00120         wxPackageArray ret;
00121         unsigned long cookie;
00122         int item = GetFirstSelected(cookie);
00123         while ( item != wxNOT_FOUND )
00124         {
00125             ret.Add(m_items[item]);
00126             item = GetNextSelected(cookie);
00127         }
00128 
00129         return ret;
00130     }
00131 
00132     wxPackage &GetFirstSelectedPackage() const
00133     {
00134         wxASSERT(HasMultipleSelection());
00135         unsigned long dummy;
00136         int item = GetFirstSelected(dummy);
00137         if (item == wxNOT_FOUND)
00138             return wxEmptyPackage;
00139         return m_items[item];
00140     }
00141 
00142     wxPackage &GetPackage(size_t n)
00143         { return m_items[n]; }
00144 
00145     void Clear()
00146     {
00147         wxHtmlListBox::Clear();
00148         m_items.Clear();
00149     }
00150 
00151     void ShowStatus(bool show = true)
00152         { m_bShowStatus=show; }
00153 
00154 public:     // misc
00155 
00158     void SetPackages(const wxPackageArray &arr, wxPackageFilterPanel *filter);
00159 
00160 protected:
00161     virtual wxString OnGetItem(size_t n) const;
00162 
00163 protected:
00164     wxPackageArray m_items;
00165     bool m_bShowStatus;
00166 
00167 private:
00168     DECLARE_NO_COPY_CLASS(wxPackageListBox)
00169 };
00170 
00171 
00172 // ----------------------------------------------------------------------------
00173 // wxPackageBrowserPanel
00174 // ----------------------------------------------------------------------------
00175 
00176 class wxPackageBrowserPanel: public wxPanel
00177 {
00178     DECLARE_DYNAMIC_CLASS( wxPackageBrowserPanel )
00179     DECLARE_EVENT_TABLE()
00180 
00181 public:
00183     wxPackageBrowserPanel( );
00184     wxPackageBrowserPanel( wxWindow* parent,
00185                         wxWindowID id = SYMBOL_WXPACKAGEBROWSERPANEL_IDNAME,
00186                         const wxPoint& pos = SYMBOL_WXPACKAGEBROWSERPANEL_POSITION,
00187                         const wxSize& size = SYMBOL_WXPACKAGEBROWSERPANEL_SIZE,
00188                         long style = SYMBOL_WXPACKAGEBROWSERPANEL_STYLE );
00189     ~wxPackageBrowserPanel();
00190 
00192     bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WXPACKAGEBROWSERPANEL_IDNAME,
00193                 const wxPoint& pos = SYMBOL_WXPACKAGEBROWSERPANEL_POSITION,
00194                 const wxSize& size = SYMBOL_WXPACKAGEBROWSERPANEL_SIZE,
00195                 long style = SYMBOL_WXPACKAGEBROWSERPANEL_STYLE );
00196 
00198     void CreateControls();
00199 
00200 
00201 public:     // event handlers
00202 
00203     void OnButtonClick(wxCommandEvent &ev);
00204     void OnUpdateUI(wxUpdateUIEvent &ev);
00205     void OnListBoxSelected(wxCommandEvent &ev);
00206     void OnFilterPackages(wxCommandEvent &ev);
00207     void OnNotebookPageChanged(wxCommandEvent &ev);
00208     void OnSourceListEnter(wxCommandEvent &ev);
00209     void OnSourceListSelected(wxCommandEvent &ev);
00210     void OnPageChanged(wxNotebookEvent &ev);
00211     void OnProgressPanelEnd(wxCommandEvent &ev);
00212     void OnIdle(wxIdleEvent& WXUNUSED(ev));
00213 
00214 public:     // set/change selected page
00215 
00216     void BrowseLocalPackages()
00217         { m_pNotebook->ChangeSelection(0); }
00218     void BrowseNewPackages()
00219         { m_pNotebook->ChangeSelection(1); }
00220 
00221     bool IsBrowsingLocalPackages() const
00222         { return m_pNotebook->GetSelection() == 0; }
00223     bool IsBrowsingNewPackages() const
00224         { return m_pNotebook->GetSelection() == 1; }
00225 
00226 public:     // filter
00227 
00228     void FilterLocalPackages();
00229     void FilterNewPackages();
00230 
00231     void FilterPackageList();
00232 
00233     void ResetFilter()
00234         { m_pLocalFilter->Reset(); m_pNewFilter->Reset(); }
00235 
00237     void Filter();
00238 
00239 public:     // selection
00240 
00241     void SelectNewPackage(const wxPackageId &);
00242     void SelectNewPackage(unsigned int n);
00243 
00244     void SelectLocalPackage(const wxPackageId &);
00245     void SelectLocalPackage(unsigned int n);
00246 
00247     void RefreshPackageList();
00248     void RefreshLocalPackages();
00249     void RefreshNewPackages();
00250 
00251 public:     // auxiliary getters
00252 
00253     wxPackageViewerPanel *GetAuxiliaryViewerPanel()
00254         { return m_pViewerPanel; }
00255     wxStatusBar *GetAuxiliaryStatusBar()
00256         { return m_pStatusBar; }
00257     wxMenuBar *GetAuxiliaryMenuBar()
00258         { return m_pMenuBar; }
00259 
00260 public:     // auxiliary setters
00261 
00262     void SetAuxiliaryViewerPanel(wxPackageViewerPanel *p);
00263     void SetAuxiliaryMenuBar(wxMenuBar *p)
00264         { m_pMenuBar=p; }
00265     void SetAuxiliaryStatusBar(wxStatusBar *p)
00266         { m_pStatusBar=p; }
00267 
00268 public:     // load/save
00269 
00270     bool Load(wxConfigBase *, const wxString &path);
00271     void Save(wxConfigBase *, const wxString &path) const;
00272 
00273 public:     // "high-level" operations
00274 
00282     bool BrowseTo(const wxString &path);
00283 
00285     bool LoadCompressedPackage(const wxString &wxzpath);
00286 
00289     bool IsPackageSourceLocal() const;
00290 
00293     void Download(const wxPackageArray &arr, bool skipdepcheck = false);
00294     void Download(const wxPackage &pkg, bool skipdepcheck = false)
00295     {
00296         wxPackageArray temp;
00297         temp.Add(pkg);
00298         Download(temp, skipdepcheck);
00299     }
00300 
00301 
00302 public:     // getters
00303 
00304     wxString GetDefaultDownloadPath() const
00305         { return m_strDefaultDownloadPath; }
00306     wxString GetDefaultDecompressionPath() const
00307         { return m_strDefaultDecompressionPath; }
00308     wxString GetDefaultInstallationPath() const
00309         { return m_strDefaultInstallationPath; }
00310 /*
00311     wxArrayString GetLocalRepositoryPaths() const
00312         { return m_localRepo; }
00313 */
00314     wxPackageArray &GetLocalPackages()
00315         { return m_arrLocal; }
00316     wxPackageArray &GetNewPackages()
00317         { return m_arrNew; }
00318 
00320     wxPackageArray GetSelectedPackages() const;
00321 
00322     bool IsAutoLoadLocalPackagesEnabled() const
00323         { return m_bAutoLoadLocalPackages; }
00324 
00325 public:     // setters
00326 
00327     void SetDefaultDownloadPath(const wxString &path)
00328         { m_strDefaultDownloadPath=path; }
00329     void SetDefaultDecompressionPath(const wxString &path)
00330         { m_strDefaultDecompressionPath=path; }
00331     void SetDefaultInstallationPath(const wxString &path)
00332         { m_strDefaultInstallationPath=path; }
00333 /*
00334     void SetLocalRepositoryPaths(const wxArrayString &arr)
00335         { m_localRepo=arr; }
00336 */
00337 
00338     void SetAutoLoadLocalPackages(bool load)
00339         { m_bAutoLoadLocalPackages=load; }
00340 
00341 public:     // static stuff
00342 
00343     // NOTE: the following two static vars cannot be replaced with the
00344     //       DEFAULT_WXL_FILENAME and DEFAULT_WXL_URL defines since they
00345     //       are something specific to wxPM/wxP/WXP apps while this file
00346     //       is part of the libguipm library!
00347 
00348     // Name of the file appended to the URLs which terminate with '/' when
00349     // downloading the WXL repo descriptor:
00350     static wxString s_strDefaultWxlName;
00351 
00352     // Default URL for the WXL file:
00353     static wxString s_strDefaultWxlURL;
00354 
00355 protected:      // internal utilities
00356 
00357     // use BrowseTo() from other classes !!
00358     bool SetRepositoryURL(const wxString &url);
00359 
00360     void EnableCmd(long id, bool enable = true);
00361 
00362     void SetStatusText(const wxString &str)
00363     {
00364         if (GetAuxiliaryStatusBar())
00365             GetAuxiliaryStatusBar()->SetStatusText(str);
00366     }
00367 
00368 protected:      // controls
00369 
00370     wxNotebook* m_pNotebook;
00371     wxComboBox* m_pSourceList;
00372 
00374     wxPackageListBox* m_pNewList;
00375     wxPackageFilterPanel* m_pNewFilter;
00376 
00378     wxPackageListBox* m_pLocalList;
00379     wxPackageFilterPanel* m_pLocalFilter;
00380 
00381 protected:      // paths
00382 
00384     wxString m_strDefaultDownloadPath;
00385 
00387     wxString m_strDefaultDecompressionPath;
00388 
00390     wxString m_strDefaultInstallationPath;
00391 
00392 protected:      // other variables
00393 
00400     wxPackageArray m_arrLocal;
00401 
00404     wxPackageArray m_arrNew;
00405 
00407     bool m_bShowDupPackages;
00408 
00410     bool m_bNeedLocalPackageRefresh;
00411 
00413     bool m_bAutoLoadLocalPackages;
00414 
00415 protected:      // auxiliary windows
00416 
00419     wxPackageViewerPanel *m_pViewerPanel;
00420 
00421     // the auxiliary bars
00422     wxMenuBar *m_pMenuBar;
00423     wxStatusBar *m_pStatusBar;
00424 };
00425 
00426 
00427 #endif
00428     // _PMBROWSEPANEL_H_

Generated on Thu Feb 1 22:14:30 2007 for wxWidgets Package Manager by  doxygen 1.5.1-p1