X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/88a1b6485f3f2d300012cde053c572f21f1f8bd3..3be926e348e2d0a3a2c278b9f2cff7843971e0c9:/include/wx/htmllbox.h diff --git a/include/wx/htmllbox.h b/include/wx/htmllbox.h index 67fb764283..3c1bb035dc 100644 --- a/include/wx/htmllbox.h +++ b/include/wx/htmllbox.h @@ -14,6 +14,7 @@ #include "wx/vlbox.h" // base class #include "wx/html/htmlwin.h" +#include "wx/ctrlsub.h" #if wxUSE_FILESYSTEM #include "wx/filesys.h" @@ -24,13 +25,16 @@ class WXDLLIMPEXP_HTML wxHtmlWinParser; class WXDLLIMPEXP_HTML wxHtmlListBoxCache; class WXDLLIMPEXP_HTML wxHtmlListBoxStyle; +extern WXDLLIMPEXP_DATA_HTML(const wxChar) wxHtmlListBoxNameStr[]; +extern WXDLLIMPEXP_DATA_HTML(const wxChar) wxSimpleHtmlListBoxNameStr[]; + // ---------------------------------------------------------------------------- // wxHtmlListBox // ---------------------------------------------------------------------------- class WXDLLIMPEXP_HTML wxHtmlListBox : public wxVListBox, public wxHtmlWindowInterface, - private wxHtmlWindowMouseHelper + public wxHtmlWindowMouseHelper { DECLARE_ABSTRACT_CLASS(wxHtmlListBox) public: @@ -46,7 +50,7 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxVListBoxNameStr); + const wxString& name = wxHtmlListBoxNameStr); // really creates the control and sets the initial number of items in it // (which may be changed later with SetItemCount()) @@ -59,18 +63,17 @@ public: const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxVListBoxNameStr); + const wxString& name = wxHtmlListBoxNameStr); // destructor cleans up whatever resources we use virtual ~wxHtmlListBox(); // override some base class virtuals - virtual void RefreshLine(size_t line); - virtual void RefreshLines(size_t from, size_t to); + virtual void RefreshRow(size_t line); + virtual void RefreshRows(size_t from, size_t to); virtual void RefreshAll(); virtual void SetItemCount(size_t count); - #if wxUSE_FILESYSTEM // retrieve the file system used by the wxHtmlWinParser: if you use // relative paths in your HTML, you should use its ChangePathTo() method @@ -110,8 +113,7 @@ protected: // This method may be overriden to handle clicking on a link in // the listbox. By default, clicking links is ignored. - virtual void OnLinkClicked(size_t WXUNUSED(n), - const wxHtmlLinkInfo& WXUNUSED(link)) {} + virtual void OnLinkClicked(size_t n, const wxHtmlLinkInfo& link); // event handlers void OnSize(wxSizeEvent& event); @@ -183,5 +185,141 @@ private: DECLARE_NO_COPY_CLASS(wxHtmlListBox) }; + +// ---------------------------------------------------------------------------- +// wxSimpleHtmlListBox +// ---------------------------------------------------------------------------- + +#define wxHLB_DEFAULT_STYLE wxBORDER_SUNKEN +#define wxHLB_MULTIPLE wxLB_MULTIPLE + +class WXDLLIMPEXP_HTML wxSimpleHtmlListBox : public wxHtmlListBox, + public wxItemContainer +{ +public: + // wxListbox-compatible constructors + // --------------------------------- + + wxSimpleHtmlListBox() { } + + wxSimpleHtmlListBox(wxWindow *parent, + wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + int n = 0, const wxString choices[] = NULL, + long style = wxHLB_DEFAULT_STYLE, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxSimpleHtmlListBoxNameStr) + { + Create(parent, id, pos, size, n, choices, style, validator, name); + } + + wxSimpleHtmlListBox(wxWindow *parent, + wxWindowID id, + const wxPoint& pos, + const wxSize& size, + const wxArrayString& choices, + long style = wxHLB_DEFAULT_STYLE, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxSimpleHtmlListBoxNameStr) + { + Create(parent, id, pos, size, choices, style, validator, name); + } + + bool Create(wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + int n = 0, const wxString choices[] = NULL, + long style = wxHLB_DEFAULT_STYLE, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxSimpleHtmlListBoxNameStr); + bool Create(wxWindow *parent, wxWindowID id, + const wxPoint& pos, + const wxSize& size, + const wxArrayString& choices, + long style = wxHLB_DEFAULT_STYLE, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxSimpleHtmlListBoxNameStr); + + virtual ~wxSimpleHtmlListBox(); + + // these must be overloaded otherwise the compiler will complain + // about wxItemContainerImmutable::[G|S]etSelection being pure virtuals... + void SetSelection(int n) + { wxVListBox::SetSelection(n); } + int GetSelection() const + { return wxVListBox::GetSelection(); } + + // see ctrlsub.h for more info about this: + wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST + + + // accessing strings + // ----------------- + + virtual unsigned int GetCount() const + { return m_items.GetCount(); } + + virtual wxString GetString(unsigned int n) const; + + // override default unoptimized wxItemContainer::GetStrings() function + wxArrayString GetStrings() const + { return m_items; } + + virtual void SetString(unsigned int n, const wxString& s); + + virtual void Clear(); + virtual void Delete(unsigned int n); + + // override default unoptimized wxItemContainer::Append() function + void Append(const wxArrayString& strings); + + // since we override one Append() overload, we need to overload all others too + int Append(const wxString& item) + { return wxItemContainer::Append(item); } + int Append(const wxString& item, void *clientData) + { return wxItemContainer::Append(item, clientData); } + int Append(const wxString& item, wxClientData *clientData) + { return wxItemContainer::Append(item, clientData); } + + +protected: + + virtual int DoAppend(const wxString& item); + virtual int DoInsert(const wxString& item, unsigned int pos); + + virtual void DoSetItemClientData(unsigned int n, void *clientData) + { m_HTMLclientData[n] = clientData; } + + virtual void *DoGetItemClientData(unsigned int n) const + { return m_HTMLclientData[n]; } + virtual void DoSetItemClientObject(unsigned int n, wxClientData *clientData) + { m_HTMLclientData[n] = (void *)clientData; } + virtual wxClientData *DoGetItemClientObject(unsigned int n) const + { return (wxClientData *)m_HTMLclientData[n]; } + + // calls wxHtmlListBox::SetItemCount() and RefreshAll() + void UpdateCount(); + + // overload these functions just to change their visibility: users of + // wxSimpleHtmlListBox shouldn't be allowed to call them directly! + virtual void SetItemCount(size_t count) + { wxHtmlListBox::SetItemCount(count); } + virtual void SetRowCount(size_t count) + { wxHtmlListBox::SetRowCount(count); } + + virtual wxString OnGetItem(size_t n) const + { return m_items[n]; } + + wxArrayString m_items; + wxArrayPtrVoid m_HTMLclientData; + + // Note: For the benefit of old compilers (like gcc-2.8) this should + // not be named m_clientdata as that clashes with the name of an + // anonymous struct member in wxEvtHandler, which we derive from. + + DECLARE_NO_COPY_CLASS(wxSimpleHtmlListBox) +}; + #endif // _WX_HTMLLBOX_H_