%{
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;
};
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;
};
+
+
//---------------------------------------------------------------------------
// 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);
%}
PyObject* GetFirstSelected() {
unsigned long cookie = 0;
int selected = self->GetFirstSelected(cookie);
- bool blocked = wxPyBeginBlockThreads();
+ wxPyBlock_t blocked = wxPyBeginBlockThreads();
PyObject* tup = PyTuple_New(2);
PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(selected));
PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(cookie));
// int GetNextSelected(unsigned long& cookie) const;
PyObject* GetNextSelected(unsigned long cookie) {
int selected = self->GetNextSelected(cookie);
- bool blocked = wxPyBeginBlockThreads();
+ wxPyBlock_t blocked = wxPyBeginBlockThreads();
PyObject* tup = PyTuple_New(2);
PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(selected));
PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(cookie));
// 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;
};
%{
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);
+}
+
%}
// 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);
};