X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8072477d51af9a0e757e12d3ca411a9d855807f7..9b881d3628604915e24b2eb56ecc4504f77ba8b1:/wxPython/src/_vscroll.i diff --git a/wxPython/src/_vscroll.i b/wxPython/src/_vscroll.i index 94bc99e13e..546c0db92b 100644 --- a/wxPython/src/_vscroll.i +++ b/wxPython/src/_vscroll.i @@ -95,6 +95,11 @@ public: 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; }; @@ -131,7 +136,7 @@ MustHaveApp(wxPyVScrolledWindow); class wxPyVScrolledWindow : public wxPanel { public: - %pythonAppend wxPyVScrolledWindow "self._setOORInfo(self); self._setCallbackInfo(self, VScrolledWindow)" + %pythonAppend wxPyVScrolledWindow "self._setOORInfo(self);" setCallbackInfo(VScrolledWindow) %pythonAppend wxPyVScrolledWindow() "" @@ -215,258 +220,13 @@ public: // get the total height of the lines between lineMin (inclusive) and // lineMax (exclusive) wxCoord GetLinesHeight(size_t lineMin, size_t lineMax) const; -}; - - - -// //---------------------------------------------------------------------------- -// %newgroup; - -// // wxHVScrolledWindow - -// // First, the C++ version -// %{ -// class wxPyHVScrolledWindow : public wxHVScrolledWindow -// { -// DECLARE_ABSTRACT_CLASS(wxPyHVScrolledWindow) -// public: -// wxPyHVScrolledWindow() : wxHVScrolledWindow() {} -// wxPyHVScrolledWindow(wxWindow *parent, -// wxWindowID id = wxID_ANY, -// const wxPoint& pos = wxDefaultPosition, -// const wxSize& size = wxDefaultSize, -// long style = 0, -// const wxString& name = wxPyPanelNameStr) -// : wxHVScrolledWindow(parent, id, pos, size, style, name) {} - -// // Overridable virtuals - -// // these functions must be overridden in the derived class and they should -// // return the width or height of the given line in pixels -// DEC_PYCALLBACK_COORD_SIZET_constpure(OnGetRowHeight); -// DEC_PYCALLBACK_COORD_SIZET_constpure(OnGetColumnWidth); - -// // the following functions don't need to be overridden but it may be useful -// // to do if calculating the lines widths or heights is a relatively -// // expensive operation as it gives the user code a possibility to calculate -// // several of them at once -// // -// // OnGetRowsHeightHint() and OnGetColumnsWidthHint() are normally called -// // just before OnGetRowHeight() and OnGetColumnWidth(), respectively, but -// // you shouldn't rely on the latter methods being called for all lines in -// // the interval specified here. It is also possible that OnGetRowHeight() -// // or OnGetColumnWidth() will be called for the lines outside of this -// // interval, so this is really just a hint, not a promise. -// // -// // finally note that min is inclusive, while max is exclusive, as usual -// DEC_PYCALLBACK_VOID_SIZETSIZET_const(OnGetRowsHeightHint); -// DEC_PYCALLBACK_VOID_SIZETSIZET_const(OnGetColumnsWidthHint); - -// // when the number of lines changes, we try to estimate the total width or -// // height of all lines which is a rather expensive operation in terms of -// // lines access, so if the user code may estimate the average height -// // better/faster than we do, it should override this function to implement -// // its own logic -// // -// // this function should return the best guess for the total height it may -// // make -// DEC_PYCALLBACK_COORD_const(EstimateTotalHeight); -// DEC_PYCALLBACK_COORD_const(EstimateTotalWidth); - - -// // Also expose some other interesting protected methods - -// // find the index of the horizontal 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 FindFirstFromRight(size_t columnLast, bool fullyVisible = false) -// { return wxHVScrolledWindow::FindFirstFromRight(columnLast, fullyVisible); } - -// // find the index of the vertical 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) -// { return wxHVScrolledWindow::FindFirstFromBottom(lineLast, fullyVisible); } - - -// // get the total width or height of the lines between lineMin (inclusive) -// // and lineMax (exclusive) -// wxCoord GetRowsHeight(size_t lineMin, size_t lineMax) const -// { return wxHVScrolledWindow::GetRowsHeight(lineMin, lineMax); } -// wxCoord GetColumnsWidth(size_t columnMin, size_t columnMax) const -// { return wxHVScrolledWindow::GetColumnsWidth(columnMin, columnMax); } - -// PYPRIVATE; -// }; - - -// IMPLEMENT_ABSTRACT_CLASS(wxPyHVScrolledWindow, wxHVScrolledWindow); - -// IMP_PYCALLBACK_COORD_SIZET_constpure(wxPyHVScrolledWindow, wxHVScrolledWindow, OnGetRowHeight); -// IMP_PYCALLBACK_COORD_SIZET_constpure(wxPyHVScrolledWindow, wxHVScrolledWindow, OnGetColumnWidth); -// IMP_PYCALLBACK_VOID_SIZETSIZET_const(wxPyHVScrolledWindow, wxHVScrolledWindow, OnGetRowsHeightHint); -// IMP_PYCALLBACK_VOID_SIZETSIZET_const(wxPyHVScrolledWindow, wxHVScrolledWindow, OnGetColumnsWidthHint); -// IMP_PYCALLBACK_COORD_const (wxPyHVScrolledWindow, wxHVScrolledWindow, EstimateTotalHeight); -// IMP_PYCALLBACK_COORD_const (wxPyHVScrolledWindow, wxHVScrolledWindow, EstimateTotalWidth); -// %} - - - - -// // Now define this class for SWIG - -// /* -// This class is strongly influenced by wxVScrolledWindow. In fact, much of -// code is line for line the same except it EXPLICITLY states which axis is -// being worked on. Like wxVScrolledWindow, this class is here to provide -// an easy way to implement variable line sizes. The difference is that -// wxVScrolledWindow only works with vertical scrolling. This class extends -// the behavior of wxVScrolledWindow to the horizontal axis in addition to the -// vertical axis. - -// The scrolling is also "virtual" in the sense that line widths and heights -// only need to be known for lines that are currently visible. - -// Like wxVScrolledWindow, this is a generalization of the wxScrolledWindow -// class which can be only used when all horizontal lines have the same width -// and all of the vertical lines have the same height. Like wxVScrolledWinow -// it lacks some of wxScrolledWindow features such as scrolling another window -// or only scrolling a rectangle of the window and not its entire client area. - -// If only vertical scrolling is needed, wxVScrolledWindow is recommended -// because it is simpler to use (and you get to type less). - -// There is no wxHScrolledWindow but horizontal only scrolling is implemented -// easily enough with this class. If someone feels the need for such a class, -// implementing it is trivial. -// */ -// MustHaveApp(wxPyHVScrolledWindow); - -// %rename(HVScrolledWindow) wxPyHVScrolledWindow; -// class wxPyHVScrolledWindow : public wxPanel -// { -// public: -// %pythonAppend wxPyHVScrolledWindow "self._setOORInfo(self); self._setCallbackInfo(self, VScrolledWindow)" -// %pythonAppend wxPyHVScrolledWindow() "" - -// // normal ctor, no need to call Create() after this one -// // -// // note that wxVSCROLL and wxHSCROLL are always automatically added to our -// // style, there is no need to specify them explicitly -// wxPyHVScrolledWindow(wxWindow *parent, -// wxWindowID id = wxID_ANY, -// const wxPoint& pos = wxDefaultPosition, -// const wxSize& size = wxDefaultSize, -// long style = 0, -// const wxString& name = wxPyPanelNameStr); - -// %RenameCtor(PreHVScrolledWindow, wxPyHVScrolledWindow()); -// void _setCallbackInfo(PyObject* self, PyObject* _class); - - -// bool Create(wxWindow *parent, -// wxWindowID id = wxID_ANY, -// const wxPoint& pos = wxDefaultPosition, -// const wxSize& size = wxDefaultSize, -// long style = 0, -// const wxString& name = wxPyPanelNameStr); - - -// // operations -// // ---------- - -// // set the number of lines the window contains for each axis: the derived -// // class must provide the widths and heights for all lines with indices up -// // to each of the one given here in its OnGetColumnWidth() and -// // OnGetRowHeight() -// void SetRowColumnCounts(size_t rowCount, size_t columnCount); - -// // with physical scrolling on, the device origin is changed properly when -// // a wxPaintDC is prepared, children are actually moved and layed out -// // properly, and the contents of the window (pixels) are actually moved -// void EnablePhysicalScrolling(bool scrolling = true); - -// // 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 -// bool ScrollToRow(size_t row); -// bool ScrollToColumn(size_t column); -// bool ScrollToRowColumn(size_t row, size_t column); - -// // scroll by the specified number of lines/pages -// virtual bool ScrollRows(int rows); -// virtual bool ScrollColumns(int columns); -// virtual bool ScrollRowsColumns(int rows, int columns); -// virtual bool ScrollRowPages(int pages); -// virtual bool ScrollColumnPages(int pages); -// virtual bool ScrollPages(int rowPages, int columnPages); - -// // redraw the specified line -// virtual void RefreshRow(size_t line); -// virtual void RefreshColumn(size_t line); -// virtual void RefreshRowColumn(size_t row, size_t column); - -// // redraw all lines in the specified range (inclusive) -// virtual void RefreshRows(size_t from, size_t to); -// virtual void RefreshColumns(size_t from, size_t to); -// virtual void RefreshRowsColumns(size_t fromRow, size_t toRow, -// size_t fromColumn, size_t toColumn); - -// // return the horizontal and vertical line within a wxPoint at the -// // specified (in physical coordinates) position or. - -// // wxNOT_FOUND in either or both axes if no line is present at the -// // requested coordinates, i.e. if it is past the last lines -// %Rename(HitTestXY, wxPoint, HitTest(wxCoord x, wxCoord y) const); -// wxPoint HitTest(const wxPoint& pt) const; - -// // recalculate all our parameters and redisplay all lines -// virtual void RefreshAll(); - - -// // accessors -// // --------- - -// // get the number of lines this window contains (previously set by -// // SetLineCount()) -// size_t GetRowCount() const; -// size_t GetColumnCount() const; -// wxSize GetRowColumnCounts() const; - -// // get the first currently visible line/lines -// size_t GetVisibleRowsBegin() const; -// size_t GetVisibleColumnsBegin() const; -// wxPoint GetVisibleBegin() const; - -// // get the last currently visible line/lines -// size_t GetVisibleRowsEnd() const; -// size_t GetVisibleColumnsEnd() const; -// wxPoint GetVisibleEnd() const; - -// // is this line currently visible? -// bool IsRowVisible(size_t row) const; -// bool IsColumnVisible(size_t column) const; -// bool IsVisible(size_t row, size_t column) const; - - -// // find the index of the horizontal 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 FindFirstFromRight(size_t columnLast, bool fullyVisible = false); - -// // find the index of the vertical 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 width or height of the lines between lineMin (inclusive) -// // and lineMax (exclusive) -// wxCoord GetRowsHeight(size_t lineMin, size_t lineMax) const; -// wxCoord GetColumnsWidth(size_t columnMin, size_t columnMax) 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`"); +}; @@ -562,7 +322,7 @@ MustHaveApp(wxPyVListBox); class wxPyVListBox : public wxPyVScrolledWindow { public: - %pythonAppend wxPyVListBox "self._setOORInfo(self);self._setCallbackInfo(self, VListBox)" + %pythonAppend wxPyVListBox "self._setOORInfo(self);" setCallbackInfo(VListBox) %pythonAppend wxPyVListBox() "" @@ -711,6 +471,13 @@ public: 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`"); }; @@ -765,6 +532,11 @@ public: // // 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; }; @@ -777,6 +549,21 @@ 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); +} + %} @@ -790,7 +577,7 @@ MustHaveApp(wxPyHtmlListBox); class wxPyHtmlListBox : public wxPyVListBox { public: - %pythonAppend wxPyHtmlListBox "self._setOORInfo(self);self._setCallbackInfo(self, HtmlListBox)" + %pythonAppend wxPyHtmlListBox "self._setOORInfo(self);" setCallbackInfo(HtmlListBox) %pythonAppend wxPyHtmlListBox() "" @@ -820,9 +607,55 @@ public: // 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); +}; //---------------------------------------------------------------------------