%{
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;
};
of the window and not its entire client area.
*/
-%name(VScrolledWindow) class wxPyVScrolledWindow : public wxPanel
+MustHaveApp(wxPyVScrolledWindow);
+
+%rename(VScrolledWindow) wxPyVScrolledWindow;
+class wxPyVScrolledWindow : public wxPanel
{
public:
- %addtofunc wxPyVScrolledWindow "self._setOORInfo(self); self._setCallbackInfo(self, VScrolledWindow)"
- %addtofunc wxPyVScrolledWindow() ""
+ %pythonAppend wxPyVScrolledWindow "self._setOORInfo(self); self._setCallbackInfo(self, VScrolledWindow)"
+ %pythonAppend wxPyVScrolledWindow() ""
wxPyVScrolledWindow(wxWindow *parent,
long style = 0,
const wxString& name = wxPyPanelNameStr);
- %name(PreVScrolledWindow)wxPyVScrolledWindow();
+ %RenameCtor(PreVScrolledWindow, wxPyVScrolledWindow());
void _setCallbackInfo(PyObject* self, PyObject* _class);
// scroll to the specified line: it will become the first visible line in
// the window
//
- // return true if we scrolled the window, false if nothing was done
+ // return True if we scrolled the window, False if nothing was done
bool ScrollToLine(size_t line);
// scroll by the specified number of lines/pages
// return the item at the specified (in physical coordinates) position or
// wxNOT_FOUND if none, i.e. if it is below the last item
- %name(HitTestXT) int HitTest(wxCoord x, wxCoord y) const;
+ %Rename(HitTestXY, int, HitTest(wxCoord x, wxCoord y) const);
int HitTest(const wxPoint& pt) const;
// recalculate all our parameters and redisplay all lines
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
%{
#include <wx/vlbox.h>
-DECLARE_DEF_STRING(VListBoxNameStr);
%}
+MAKE_CONST_WXSTRING(VListBoxNameStr);
+
// First, the C++ version
%{
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);
%}
It emits the same events as wxListBox and the same event macros may be used
with it.
*/
-%name(VListBox) class wxPyVListBox : public wxPyVScrolledWindow
+MustHaveApp(wxPyVListBox);
+
+%rename(VListBox) wxPyVListBox;
+class wxPyVListBox : public wxPyVScrolledWindow
{
public:
- %addtofunc wxPyVListBox "self._setOORInfo(self);self._setCallbackInfo(self, VListBox)"
- %addtofunc wxPyVListBox() ""
+ %pythonAppend wxPyVListBox "self._setOORInfo(self);self._setCallbackInfo(self, VListBox)"
+ %pythonAppend wxPyVListBox() ""
wxPyVListBox(wxWindow *parent,
long style = 0,
const wxString& name = wxPyVListBoxNameStr);
- %name(PreVListBox) wxPyVListBox();
+ %RenameCtor(PreVListBox, wxPyVListBox());
void _setCallbackInfo(PyObject* self, PyObject* _class);
// this method is valid for both single and multi selection listboxes
size_t GetSelectedCount() const;
- // get the first selected item, returns wxNOT_FOUND if none
- //
- // cookie is an opaque parameter which should be passed to
- // GetNextSelected() later
- //
- // this method is only valid for the multi selection listboxes
- int GetFirstSelected(unsigned long& cookie) const;
-
- // get next selection item, return wxNOT_FOUND if no more
- //
- // cookie must be the same parameter that was passed to GetFirstSelected()
- // before
- //
- // this method is only valid for the multi selection listboxes
- int GetNextSelected(unsigned long& cookie) const;
+ %extend {
+ // get the first selected item, returns wxNOT_FOUND if none
+ //
+ // cookie is an opaque parameter which should be passed to
+ // GetNextSelected() later
+ //
+ // this method is only valid for the multi selection listboxes
+ //int GetFirstSelected(unsigned long& cookie) const;
+ PyObject* GetFirstSelected() {
+ unsigned long cookie = 0;
+ int selected = self->GetFirstSelected(cookie);
+ 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));
+ wxPyEndBlockThreads(blocked);
+ return tup;
+ }
+
+ // get next selection item, return wxNOT_FOUND if no more
+ //
+ // cookie must be the same parameter that was passed to GetFirstSelected()
+ // before
+ //
+ // this method is only valid for the multi selection listboxes
+ // int GetNextSelected(unsigned long& cookie) const;
+ PyObject* GetNextSelected(unsigned long cookie) {
+ int selected = self->GetNextSelected(cookie);
+ 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));
+ wxPyEndBlockThreads(blocked);
+ return tup;
+ }
+ }
+
// get the margins around each item
wxPoint GetMargins() const;
// selects or deselects the specified item which must be valid (i.e. not
// equal to wxNOT_FOUND)
//
- // return true if the items selection status has changed or false
+ // return True if the items selection status has changed or False
// otherwise
//
// this function is only valid for the multiple selection listboxes
// selects the items in the specified range whose end points may be given
// in any order
//
- // return true if any items selection status has changed, false otherwise
+ // return True if any items selection status has changed, False otherwise
//
// this function is only valid for the single selection listboxes
bool SelectRange(size_t from, size_t to);
// select all items in the listbox
//
// the return code indicates if any items were affected by this operation
- // (true) or if nothing has changed (false)
+ // (True) or if nothing has changed (False)
bool SelectAll();
// unselect all items in the listbox
//
// by default both margins are 0
void SetMargins(const wxPoint& pt);
- %name(SetMarginsXY) void SetMargins(wxCoord x, wxCoord y);
+ %Rename(SetMarginsXY, void, SetMargins(wxCoord x, wxCoord y));
// 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);
+}
+
%}
// wxHtmlListBox is a listbox whose items are wxHtmlCells
-%name(HtmlListBox) class wxPyHtmlListBox : public wxPyVListBox
+MustHaveApp(wxPyHtmlListBox);
+%rename(HtmlListBox) wxPyHtmlListBox;
+class wxPyHtmlListBox : public wxPyVListBox
{
public:
- %addtofunc wxPyHtmlListBox "self._setOORInfo(self);self._setCallbackInfo(self, HtmlListBox)"
- %addtofunc wxPyHtmlListBox() ""
+ %pythonAppend wxPyHtmlListBox "self._setOORInfo(self);self._setCallbackInfo(self, HtmlListBox)"
+ %pythonAppend wxPyHtmlListBox() ""
// normal constructor which calls Create() internally
long style = 0,
const wxString& name = wxPyVListBoxNameStr);
- %name(PreHtmlListBox) wxPyHtmlListBox();
+ %RenameCtor(PreHtmlListBox, wxPyHtmlListBox());
void _setCallbackInfo(PyObject* self, PyObject* _class);
void RefreshAll();
void SetItemCount(size_t count);
+ // 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);
};