%{
class wxPyVScrolledWindow : public wxVScrolledWindow
{
- DECLARE_ABSTRACT_CLASS(wxPyVScrolledWindow);
+ DECLARE_ABSTRACT_CLASS(wxPyVScrolledWindow)
public:
wxPyVScrolledWindow() : wxVScrolledWindow() {}
wxCoord GetLinesHeight(size_t lineMin, size_t lineMax) const
{ return wxVScrolledWindow::GetLinesHeight(lineMin, lineMax); }
+ // update the thumb size shown by the scrollbar
+ void UpdateScrollbar() { wxVScrolledWindow::UpdateScrollbar(); }
+
+ // remove the scrollbar completely because we don't need it
+ void RemoveScrollbar() { wxVScrolledWindow::RemoveScrollbar(); }
PYPRIVATE;
};
class wxPyVScrolledWindow : public wxPanel
{
public:
- %pythonAppend wxPyVScrolledWindow "self._setOORInfo(self); self._setCallbackInfo(self, VScrolledWindow)"
+ %pythonAppend wxPyVScrolledWindow "self._setOORInfo(self);" setCallbackInfo(VScrolledWindow)
%pythonAppend wxPyVScrolledWindow() ""
size_t GetLineCount() const;
// get the first currently visible line
- size_t GetFirstVisibleLine() const;
+ size_t GetVisibleBegin() const;
// get the last currently visible line
- size_t GetLastVisibleLine() const;
+ size_t GetVisibleEnd() const;
// is this line currently visible?
bool IsVisible(size_t line) const;
+ // this is the same as GetVisibleBegin(), exists to match
+ // GetLastVisibleLine() and for backwards compatibility only
+ size_t GetFirstVisibleLine() const;
+
+ // get the last currently visible line
+ //
+ // this function is unsafe as it returns (size_t)-1 (i.e. a huge positive
+ // number) if the control is empty, use GetVisibleEnd() instead, this one
+ // is kept for backwards compatibility
+ size_t GetLastVisibleLine() const;
+
+ // find the index of the line we need to show at the top of the window such
+ // that the last (fully or partially) visible line is the given one
+ size_t FindFirstFromBottom(size_t lineLast, bool fullyVisible = false);
+
+ // get the total height of the lines between lineMin (inclusive) and
+ // lineMax (exclusive)
+ wxCoord GetLinesHeight(size_t lineMin, size_t lineMax) const;
+
+ %property(FirstVisibleLine, GetFirstVisibleLine, doc="See `GetFirstVisibleLine`");
+ %property(LastVisibleLine, GetLastVisibleLine, doc="See `GetLastVisibleLine`");
+ %property(LineCount, GetLineCount, SetLineCount, doc="See `GetLineCount` and `SetLineCount`");
+ %property(VisibleBegin, GetVisibleBegin, doc="See `GetVisibleBegin`");
+ %property(VisibleEnd, GetVisibleEnd, doc="See `GetVisibleEnd`");
};
+
+
//---------------------------------------------------------------------------
// wxVListBox
%{
class wxPyVListBox : public wxVListBox
{
- DECLARE_ABSTRACT_CLASS(wxPyVListBox);
+ DECLARE_ABSTRACT_CLASS(wxPyVListBox)
public:
wxPyVListBox() : wxVListBox() {}
//
// the base class version doesn't do anything
// virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const;
- DEC_PYCALLBACK__DCRECTSIZET_constpure(OnDrawSeparator);
+ DEC_PYCALLBACK__DCRECTSIZET2_const(OnDrawSeparator);
// this method is used to draw the items background and, maybe, a border
IMP_PYCALLBACK__DCRECTSIZET_constpure(wxPyVListBox, wxVListBox, OnDrawItem);
IMP_PYCALLBACK_COORD_SIZET_constpure (wxPyVListBox, wxVListBox, OnMeasureItem);
-IMP_PYCALLBACK__DCRECTSIZET_constpure(wxPyVListBox, wxVListBox, OnDrawSeparator);
+IMP_PYCALLBACK__DCRECTSIZET2_const (wxPyVListBox, wxVListBox, OnDrawSeparator);
IMP_PYCALLBACK__DCRECTSIZET_const (wxPyVListBox, wxVListBox, OnDrawBackground);
%}
class wxPyVListBox : public wxPyVScrolledWindow
{
public:
- %pythonAppend wxPyVListBox "self._setOORInfo(self);self._setCallbackInfo(self, VListBox)"
+ %pythonAppend wxPyVListBox "self._setOORInfo(self);" setCallbackInfo(VListBox)
%pythonAppend wxPyVListBox() ""
// change the background colour of the selected cells
void SetSelectionBackground(const wxColour& col);
+ virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const;
+ virtual void OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const;
+
+ %property(FirstSelected, GetFirstSelected, doc="See `GetFirstSelected`");
+ %property(ItemCount, GetItemCount, SetItemCount, doc="See `GetItemCount` and `SetItemCount`");
+ %property(Margins, GetMargins, SetMargins, doc="See `GetMargins` and `SetMargins`");
+ %property(SelectedCount, GetSelectedCount, doc="See `GetSelectedCount`");
+ %property(Selection, GetSelection, SetSelection, doc="See `GetSelection` and `SetSelection`");
+ %property(SelectionBackground, GetSelectionBackground, SetSelectionBackground, doc="See `GetSelectionBackground` and `SetSelectionBackground`");
};
%{
class wxPyHtmlListBox : public wxHtmlListBox
{
- DECLARE_ABSTRACT_CLASS(wxPyHtmlListBox);
+ DECLARE_ABSTRACT_CLASS(wxPyHtmlListBox)
public:
wxPyHtmlListBox() : wxHtmlListBox() {}
// this function may be overridden to decorate HTML returned by OnGetItem()
DEC_PYCALLBACK_STRING_SIZET(OnGetItemMarkup);
+ // These are from wxVListBox
+ DEC_PYCALLBACK__DCRECTSIZET2_const(OnDrawSeparator);
+ DEC_PYCALLBACK__DCRECTSIZET_const(OnDrawBackground);
+
// TODO:
// // this method allows to customize the selection appearance: it may be used
// // to specify the colour of the text which normally has the given colour
// // globally using SetSelectionBackground()
// virtual wxColour GetSelectedTextBgColour(const wxColour& colBg) const;
+
+ // 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 n,
+ const wxHtmlLinkInfo& link);
PYPRIVATE;
};
IMP_PYCALLBACK_STRING_SIZET_pure(wxPyHtmlListBox, wxHtmlListBox, OnGetItem);
IMP_PYCALLBACK_STRING_SIZET (wxPyHtmlListBox, wxHtmlListBox, OnGetItemMarkup);
-
+IMP_PYCALLBACK__DCRECTSIZET2_const (wxPyHtmlListBox, wxHtmlListBox, OnDrawSeparator);
+IMP_PYCALLBACK__DCRECTSIZET_const (wxPyHtmlListBox, wxHtmlListBox, OnDrawBackground);
+
+
+void wxPyHtmlListBox::OnLinkClicked(size_t n,
+ const wxHtmlLinkInfo& link) {
+ bool found;
+ wxPyBlock_t blocked = wxPyBeginBlockThreads();
+ if ((found = wxPyCBH_findCallback(m_myInst, "OnLinkClicked"))) {
+ PyObject* obj = wxPyConstructObject((void*)&link, wxT("wxHtmlLinkInfo"), 0);
+ wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iO)", n, obj));
+ Py_DECREF(obj);
+ }
+ wxPyEndBlockThreads(blocked);
+ if (! found)
+ wxPyHtmlListBox::OnLinkClicked(n, link);
+}
+
%}
class wxPyHtmlListBox : public wxPyVListBox
{
public:
- %pythonAppend wxPyHtmlListBox "self._setOORInfo(self);self._setCallbackInfo(self, HtmlListBox)"
+ %pythonAppend wxPyHtmlListBox "self._setOORInfo(self);" setCallbackInfo(HtmlListBox)
%pythonAppend wxPyHtmlListBox() ""
// retrieve the file system used by the wxHtmlWinParser: if you use
// relative paths in your HTML, you should use its ChangePathTo() method
wxFileSystem& GetFileSystem();
+
+ void OnLinkClicked(size_t n, const wxHtmlLinkInfo& link);
+
+ %property(FileSystem, GetFileSystem, doc="See `GetFileSystem`");
};
+//---------------------------------------------------------------------------
+
+%{
+ const wxArrayString wxPyEmptyStringArray;
+%}
+MAKE_CONST_WXSTRING(SimpleHtmlListBoxNameStr);
+
+
+enum {
+ wxHLB_DEFAULT_STYLE,
+ wxHLB_MULTIPLE
+};
+
+MustHaveApp(wxSimpleHtmlListBox);
+
+class wxSimpleHtmlListBox : public wxPyHtmlListBox,
+ public wxItemContainer
+{
+public:
+ %pythonAppend wxSimpleHtmlListBox "self._setOORInfo(self)";
+ %pythonAppend wxSimpleHtmlListBox() "";
+
+ wxSimpleHtmlListBox(wxWindow *parent,
+ wxWindowID id = -1,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ const wxArrayString& choices = wxPyEmptyStringArray,
+ long style = wxHLB_DEFAULT_STYLE,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxPySimpleHtmlListBoxNameStr);
+ %RenameCtor(PreSimpleHtmlListBox, wxSimpleHtmlListBox());
+
+ bool Create(wxWindow *parent,
+ wxWindowID id = -1,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size= wxDefaultSize,
+ const wxArrayString& choices = wxPyEmptyStringArray,
+ long style = wxHLB_DEFAULT_STYLE,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxPySimpleHtmlListBoxNameStr);
+};
+
//---------------------------------------------------------------------------
%init %{