-WX_DEFINE_LIST(wxListHeaderDataList);
-
-class WXDLLEXPORT 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();
-
- 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); }
-
- // do we have a header window?
- bool HasHeader() const
- { return HasFlag(wxLC_REPORT) && !HasFlag(wxLC_NO_HEADER); }
-
- void HilightAll( 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 HilightLine( size_t line, bool hilight = TRUE);
-
- // toggle the line state and refresh it
- void ReverseHilight( size_t line )
- { HilightLine(line, !IsHilighted(line)); RefreshLine(line); }
-
- // refresh one or several lines at once
- void RefreshLine( size_t line );
- void RefreshLines( size_t lineFrom, size_t lineTo );
-
- // return true if the line is highlighted
- bool IsHilighted(size_t line) const;
-
- void EditLabel( long item );
- void OnRenameTimer();
- void OnRenameAccept();
-
- void OnMouse( wxMouseEvent &event );
- void MoveToFocus();
-
- // 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 OnSize( wxSizeEvent &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 );
- int GetTextLength( const wxString &s );
-
- void SetImageList( wxImageList *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() { return m_linesPerPage; }
-
- void SetItem( wxListItem &item );
- void GetItem( wxListItem &item );
- void SetItemState( long item, long state, long stateMask );
- int GetItemState( long item, long stateMask );
- void GetItemRect( long index, wxRect &rect );
- bool GetItemPosition( long item, wxPoint& pos );
- int GetSelectedItemCount();
-
- // set the scrollbars and update the positions of the items
- void CalculatePositions();
-
- long GetNextItem( long item, int geometry, int state );
- 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, long data);
- 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);
-
- bool HasCurrent() const { return m_current != (size_t)-1; }
-
- // send out a wxListEvent
- void SendNotify( size_t line,
- wxEventType command,
- wxPoint point = wxDefaultPosition );
-
- // called by wxListCtrl when its font changes
- void OnFontChange() { m_lineHeight = 0; }
-
- // these are for wxListLineData usage only
-
- // get the backpointer to the list ctrl
- wxListCtrl *GetListCtrl() const
- {
- return wxStaticCast(GetParent(), wxListCtrl);
- }
-
- // get the height of all lines (assuming they all do have the same height)
- wxCoord GetLineHeight() const;
-
- // get the y position of the given line (only for report view)
- wxCoord GetLineY(size_t line) const;
-
-//protected:
- // the array of all line objects for a non virtual list control
- wxListLineDataArray m_lines;
-
- // the list of column objects
- wxListHeaderDataList m_columns;
-
- // currently focused item or -1
- size_t m_current;
-
- // the item currently being edited or -1
- size_t m_currentEdit;
-
- // the number of lines per page
- int m_linesPerPage;
-
- // this flag is set when something which should result in the window
- // redrawing happens (i.e. an item was added or deleted, or its appearance
- // changed) and OnPaint() doesn't redraw the window while it is set which
- // allows to minimize the number of repaintings when a lot of items are
- // being added. The real repainting occurs only after the next OnIdle()
- // call
- bool m_dirty;
-
- wxBrush *m_hilightBrush;
- wxColour *m_hilightColour;
- int m_xScroll,
- m_yScroll;
- wxImageList *m_small_image_list;
- wxImageList *m_normal_image_list;
- int m_small_spacing;
- int m_normal_spacing;
- bool m_hasFocus;
-
- bool m_lastOnSame;
- wxTimer *m_renameTimer;
- bool m_renameAccept;
- wxString m_renameRes;
- bool m_isCreated;
- int m_dragCount;
- wxPoint m_dragStart;
-
- // for double click logic
- size_t m_lineLastClicked,
- m_lineBeforeLastClicked;
-
-protected:
- // the total count of items in a virtual list control
- long m_countVirt;
-
- // the first and last lines being shown on screen right now (inclusive)
- size_t m_lineFrom,
- m_lineTo;
-
- // the array containing the indices of all selected items, only used in
- // virtual controls
- wxArrayInt m_selections;
-
- // common part of all ctors
- void Init();
-
- // intiialize m_[xy]Scroll
- void InitScrolling();
-
- // get the line data for the given index
- wxListLineData *GetLine(size_t n) const
- {
- wxASSERT_MSG( n != (size_t)-1, _T("invalid line index") );
-
- if ( IsVirtual() )
- {
- wxConstCast(this, wxListMainWindow)->CacheLineData(n);
-
- n = 0;
- }
-
- return &m_lines[n];
- }
-
- // get the first line: this one is special as we have it even in virtual
- // list control (it is useful to cache it as we use it for measuring, hit
- // testing &c)
- wxListLineData *GetFirstLine() const;
-
- // cache the line data of the n-th line in m_lines[0]
- void CacheLineData(size_t line);
-
- // update m_lineFrom/To
- void UpdateShownLinesRange();
-
-private:
- // initialize the current item if needed
- void UpdateCurrent();
-
- // called when an item is [un]focuded, i.e. becomes [not] current
- //
- // currently unused
- void OnFocusLine( size_t line );
- void OnUnfocusLine( size_t line );