-WX_DEFINE_LIST(wxListHeaderDataList);
-
-class wxListMainWindow : public wxScrolledWindow
-{
-public:
- wxListMainWindow();
- wxListMainWindow( wxWindow *parent,
- wxWindowID id,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxString &name = _T("listctrlmainwindow") );
-
- virtual ~wxListMainWindow();
-
- wxWindow *GetMainWindowOfCompositeControl() { return GetParent(); }
-
- bool HasFlag(int flag) const { return m_parent->HasFlag(flag); }
-
- // return true if this is a virtual list control
- bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); }
-
- // return true if the control is in report mode
- bool InReportView() const { return HasFlag(wxLC_REPORT); }
-
- // return true if we are in single selection mode, false if multi sel
- bool IsSingleSel() const { return HasFlag(wxLC_SINGLE_SEL); }
-
- // do we have a header window?
- bool HasHeader() const
- { return InReportView() && !HasFlag(wxLC_NO_HEADER); }
-
- void HighlightAll( bool on );
-
- // all these functions only do something if the line is currently visible
-
- // change the line "selected" state, return true if it really changed
- bool HighlightLine( size_t line, bool highlight = true);
-
- // as HighlightLine() but do it for the range of lines: this is incredibly
- // more efficient for virtual list controls!
- //
- // NB: unlike HighlightLine() this one does refresh the lines on screen
- void HighlightLines( size_t lineFrom, size_t lineTo, bool on = true );
-
- // toggle the line state and refresh it
- void ReverseHighlight( size_t line )
- { HighlightLine(line, !IsHighlighted(line)); RefreshLine(line); }
-
- // return true if the line is highlighted
- bool IsHighlighted(size_t line) const;
-
- // refresh one or several lines at once
- void RefreshLine( size_t line );
- void RefreshLines( size_t lineFrom, size_t lineTo );
-
- // refresh all selected items
- void RefreshSelected();
-
- // refresh all lines below the given one: the difference with
- // RefreshLines() is that the index here might not be a valid one (happens
- // when the last line is deleted)
- void RefreshAfter( size_t lineFrom );
-
- // the methods which are forwarded to wxListLineData itself in list/icon
- // modes but are here because the lines don't store their positions in the
- // report mode
-
- // get the bound rect for the entire line
- wxRect GetLineRect(size_t line) const;
-
- // get the bound rect of the label
- wxRect GetLineLabelRect(size_t line) const;
-
- // get the bound rect of the items icon (only may be called if we do have
- // an icon!)
- wxRect GetLineIconRect(size_t line) const;
-
- // get the rect to be highlighted when the item has focus
- wxRect GetLineHighlightRect(size_t line) const;
-
- // get the size of the total line rect
- wxSize GetLineSize(size_t line) const
- { return GetLineRect(line).GetSize(); }
-
- // return the hit code for the corresponding position (in this line)
- long HitTestLine(size_t line, int x, int y) const;
-
- // bring the selected item into view, scrolling to it if necessary
- void MoveToItem(size_t item);
-
- // bring the current item into view
- void MoveToFocus() { MoveToItem(m_current); }
-
- // start editing the label of the given item
- void EditLabel( long item );
-
- // suspend/resume redrawing the control
- void Freeze();
- void Thaw();
-
- void SetFocus();
-
- void OnRenameTimer();
- bool OnRenameAccept(size_t itemEdit, const wxString& value);
- void OnRenameCancelled(size_t itemEdit);
-
- void OnMouse( wxMouseEvent &event );
-
- // called to switch the selection from the current item to newCurrent,
- void OnArrowChar( size_t newCurrent, const wxKeyEvent& event );
-
- void OnChar( wxKeyEvent &event );
- void OnKeyDown( wxKeyEvent &event );
- void OnSetFocus( wxFocusEvent &event );
- void OnKillFocus( wxFocusEvent &event );
- void OnScroll(wxScrollWinEvent& event) ;
-
- void OnPaint( wxPaintEvent &event );
-
- void DrawImage( int index, wxDC *dc, int x, int y );
- void GetImageSize( int index, int &width, int &height ) const;
- int GetTextLength( const wxString &s ) const;
-
- void SetImageList( wxImageListType *imageList, int which );
- void SetItemSpacing( int spacing, bool isSmall = false );
- int GetItemSpacing( bool isSmall = false );
-
- void SetColumn( int col, wxListItem &item );
- void SetColumnWidth( int col, int width );
- void GetColumn( int col, wxListItem &item ) const;
- int GetColumnWidth( int col ) const;
- int GetColumnCount() const { return m_columns.GetCount(); }
-
- // returns the sum of the heights of all columns
- int GetHeaderWidth() const;
-
- int GetCountPerPage() const;
-
- void SetItem( wxListItem &item );
- void GetItem( wxListItem &item ) const;
- void SetItemState( long item, long state, long stateMask );
- int GetItemState( long item, long stateMask ) const;
- void GetItemRect( long index, wxRect &rect ) const;
- wxRect GetViewRect() const;
- bool GetItemPosition( long item, wxPoint& pos ) const;
- int GetSelectedItemCount() const;
-
- wxString GetItemText(long item) const
- {
- wxListItem info;
- info.m_itemId = item;
- GetItem( info );
- return info.m_text;
- }
-
- void SetItemText(long item, const wxString& value)
- {
- wxListItem info;
- info.m_mask = wxLIST_MASK_TEXT;
- info.m_itemId = item;
- info.m_text = value;
- SetItem( info );
- }
-
- // set the scrollbars and update the positions of the items
- void RecalculatePositions(bool noRefresh = false);
-
- // refresh the window and the header
- void RefreshAll();
-
- long GetNextItem( long item, int geometry, int state ) const;
- void DeleteItem( long index );
- void DeleteAllItems();
- void DeleteColumn( int col );
- void DeleteEverything();
- void EnsureVisible( long index );
- long FindItem( long start, const wxString& str, bool partial = false );
- long FindItem( long start, wxUIntPtr data);
- long FindItem( const wxPoint& pt );
- long HitTest( int x, int y, int &flags );
- void InsertItem( wxListItem &item );
- void InsertColumn( long col, wxListItem &item );
- void SortItems( wxListCtrlCompare fn, long data );
-
- size_t GetItemCount() const;
- bool IsEmpty() const { return GetItemCount() == 0; }
- void SetItemCount(long count);
-
- // change the current (== focused) item, send a notification event
- void ChangeCurrent(size_t current);
- void ResetCurrent() { ChangeCurrent((size_t)-1); }
- bool HasCurrent() const { return m_current != (size_t)-1; }