// just as with the ctor above, wxVSCROLL style is always used, there is no
// need to specify it
bool Create(wxWindow *parent,
- wxWindowID id,
+ wxWindowID id = wxID_ANY,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0,
virtual bool ScrollLines(int lines);
virtual bool ScrollPages(int pages);
+ // redraw the specified line
+ void RefreshLine(size_t line);
+
+ // redraw all lines in the specified range (inclusive)
+ void RefreshLines(size_t from, size_t to);
+
+ // return the item at the specified (in physical coordinates) position or.
+
+ // wxNOT_FOUND if none, i.e. if it is below the last item
+ int HitTest(wxCoord x, wxCoord y) const;
+ int HitTest(const wxPoint& pt) const { return HitTest(pt.x, pt.y); }
+
+ // recalculate all our parameters and redisplay all lines
+ virtual void RefreshAll();
+
// accessors
// ---------
// get the last currently visible line
size_t GetLastVisibleLine() const { return m_lineFirst + m_nVisible - 1; }
+ // is this line currently visible?
+ bool IsVisible(size_t line) const
+ { return line >= m_lineFirst && line <= GetLastVisibleLine(); }
-//protected:
+
+protected:
// this function must be overridden in the derived class and it should
// return the height of the given line in pixels
virtual wxCoord OnGetLineHeight(size_t n) const = 0;
// usual
virtual void OnGetLinesHint(size_t lineMin, size_t lineMax) const { }
-protected:
+
// the event handlers
void OnSize(wxSizeEvent& event);
void OnScroll(wxScrollWinEvent& event);
// find the index of the line we need to show at the top of the window such
- // that the last line shown is the given one
- size_t FindFirstFromBottom(size_t lineLast);
+ // 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)