]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/generic/listctrl.h
no message
[wxWidgets.git] / include / wx / generic / listctrl.h
index 39f7c11319776c9916cf72e9d58f702eab1cf01e..4fd5c12df3a41830d58081570a9434a223d4c355 100644 (file)
@@ -20,6 +20,7 @@
 #include "wx/imaglist.h"
 #include "wx/control.h"
 #include "wx/timer.h"
+#include "wx/textctrl.h"
 #include "wx/dcclient.h"
 #include "wx/scrolwin.h"
 #include "wx/settings.h"
@@ -69,7 +70,7 @@ typedef int (*wxListCtrlCompare)(long item1, long item2, long sortData);
 #define wxLC_NO_HEADER       0x0800  // not supported in wxGLC
 #define wxLC_NO_SORT_HEADER  0x1000  // not supported in wxGLC
 #define wxLC_SINGLE_SEL      0x2000
-#define wxLC_SORT_ASCENDING  0x4000  
+#define wxLC_SORT_ASCENDING  0x4000
 #define wxLC_SORT_DESCENDING 0x8000  // not supported in wxGLC
 
 #define wxLC_MASK_TYPE       (wxLC_ICON | wxLC_SMALL_ICON | wxLC_LIST | wxLC_REPORT)
@@ -95,7 +96,7 @@ typedef int (*wxListCtrlCompare)(long item1, long item2, long sortData);
 #define wxLIST_STATE_DONTCARE       0x0000
 #define wxLIST_STATE_DROPHILITED    0x0001  // not supported in wxGLC
 #define wxLIST_STATE_FOCUSED        0x0002
-#define wxLIST_STATE_SELECTED       0x0004  
+#define wxLIST_STATE_SELECTED       0x0004
 #define wxLIST_STATE_CUT            0x0008  // not supported in wxGLC
 
 // Hit test flags, used in HitTest // wxGLC suppots 20 and 80
@@ -119,7 +120,7 @@ enum {
     wxLIST_NEXT_ALL,            // Searches for subsequent item by index
     wxLIST_NEXT_BELOW,          // Searches for an item below the specified item
     wxLIST_NEXT_LEFT,           // Searches for an item to the left of the specified item
-    wxLIST_NEXT_RIGHT,          // Searches for an item to the right of the specified item
+    wxLIST_NEXT_RIGHT           // Searches for an item to the right of the specified item
 };
 
 // Alignment flags for Arrange  // always wxLIST_ALIGN_LEFT in wxGLC
@@ -208,19 +209,19 @@ class WXDLLEXPORT wxListEvent: public wxCommandEvent
 
 typedef void (wxEvtHandler::*wxListEventFunction)(wxListEvent&);
 
-#define EVT_LIST_BEGIN_DRAG(id, fn) { wxEVT_COMMAND_LIST_BEGIN_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_BEGIN_RDRAG(id, fn) { wxEVT_COMMAND_LIST_BEGIN_RDRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_BEGIN_LABEL_EDIT(id, fn) { wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_END_LABEL_EDIT(id, fn) { wxEVT_COMMAND_LIST_END_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_DELETE_ITEM(id, fn) { wxEVT_COMMAND_LIST_DELETE_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_DELETE_ALL_ITEMS(id, fn) { wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_GET_INFO(id, fn) { wxEVT_COMMAND_LIST_GET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_SET_INFO(id, fn) { wxEVT_COMMAND_LIST_SET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_ITEM_SELECTED(id, fn) { wxEVT_COMMAND_LIST_ITEM_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_ITEM_DESELECTED(id, fn) { wxEVT_COMMAND_LIST_ITEM_DESELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_KEY_DOWN(id, fn) { wxEVT_COMMAND_LIST_KEY_DOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_INSERT_ITEM(id, fn) { wxEVT_COMMAND_LIST_INSERT_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
-#define EVT_LIST_COL_CLICK(id, fn) { wxEVT_COMMAND_LIST_COL_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, NULL },
+#define EVT_LIST_BEGIN_DRAG(id, fn) { wxEVT_COMMAND_LIST_BEGIN_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_BEGIN_RDRAG(id, fn) { wxEVT_COMMAND_LIST_BEGIN_RDRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_BEGIN_LABEL_EDIT(id, fn) { wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_END_LABEL_EDIT(id, fn) { wxEVT_COMMAND_LIST_END_LABEL_EDIT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_DELETE_ITEM(id, fn) { wxEVT_COMMAND_LIST_DELETE_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_DELETE_ALL_ITEMS(id, fn) { wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_GET_INFO(id, fn) { wxEVT_COMMAND_LIST_GET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_SET_INFO(id, fn) { wxEVT_COMMAND_LIST_SET_INFO, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_ITEM_SELECTED(id, fn) { wxEVT_COMMAND_LIST_ITEM_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_ITEM_DESELECTED(id, fn) { wxEVT_COMMAND_LIST_ITEM_DESELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_KEY_DOWN(id, fn) { wxEVT_COMMAND_LIST_KEY_DOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_INSERT_ITEM(id, fn) { wxEVT_COMMAND_LIST_INSERT_ITEM, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
+#define EVT_LIST_COL_CLICK(id, fn) { wxEVT_COMMAND_LIST_COL_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxListEventFunction) & fn, (wxObject *) NULL },
 
 
 //-----------------------------------------------------------------------------
@@ -238,7 +239,7 @@ class wxListItemData : public wxObject
     int        m_xpos,m_ypos;
     int        m_width,m_height;
     wxColour   *m_colour;
-    
+
   public:
     wxListItemData(void);
     wxListItemData( const wxListItem &info );
@@ -278,7 +279,7 @@ class wxListHeaderData : public wxObject
     int       m_width;
     int       m_xpos,m_ypos;
     int       m_height;
-    
+
   public:
     wxListHeaderData(void);
     wxListHeaderData( const wxListItem &info );
@@ -361,14 +362,14 @@ class wxListHeaderWindow : public wxWindow
 
   public:
     wxListHeaderWindow( void );
-    wxListHeaderWindow( wxWindow *win, wxWindowID id, wxListMainWindow *owner, 
+    wxListHeaderWindow( wxWindow *win, wxWindowID id, wxListMainWindow *owner,
       const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
       long style = 0, const wxString &name = "columntitles" );
     void DoDrawRect( wxPaintDC *dc, int x, int y, int w, int h );
     void OnPaint( wxPaintEvent &event );
     void OnMouse( wxMouseEvent &event );
     void OnSetFocus( wxFocusEvent &event );
-    
+
   DECLARE_EVENT_TABLE()
 };
 
@@ -380,14 +381,12 @@ class wxListRenameTimer: public wxTimer
 {
  private:
    wxListMainWindow   *m_owner;
-   
+
  public:
    wxListRenameTimer( wxListMainWindow *owner );
    void Notify();
 };
 
-/*
-
 //-----------------------------------------------------------------------------
 //  wxListTextCtrl (internal)
 //-----------------------------------------------------------------------------
@@ -395,55 +394,26 @@ class wxListRenameTimer: public wxTimer
 class wxListTextCtrl: public wxTextCtrl
 {
   DECLARE_DYNAMIC_CLASS(wxListTextCtrl);
-  
+
   private:
     bool               *m_accept;
     wxString           *m_res;
     wxListMainWindow   *m_owner;
 
   public:
-    wxListTextCtrl(void) : wxTextCtrl() {};
-    wxListTextCtrl(  wxWindow *parent, const char *value = "", 
-      bool *accept, wxString *res, wxListMainWindow *owner,
-      int x = -1, int y = -1, int w = -1, int h = -1, int style = 0, char *name = "rawtext" ) :
-      wxTextCtrl( parent, value, x, y, w, h, style, name ) 
-      {
-        m_res = res;
-        m_accept = accept;
-       m_owner = owner;
-      };
-    void OnChar( wxKeyEvent &event )
-      {
-        if (event.keyCode == WXK_RETURN)
-        {
-          (*m_accept) = TRUE;
-         (*m_res) = GetValue();
-         m_owner->OnRenameAccept();
-//       Show( FALSE );
-          delete this;
-         return;
-       };
-        if (event.keyCode == WXK_ESCAPE)
-        {
-          (*m_accept) = FALSE;
-         (*m_res) = "";
-//       Show( FALSE );
-          delete this;
-         return;
-       };
-      };
-    void OnKillFocus(void)
-      {
-        (*m_accept) = FALSE;
-        (*m_res) = "";
-//      Show( FALSE );
-        delete this;
-        return;
-      };
+    wxListTextCtrl(void) {};
+    wxListTextCtrl( wxWindow *parent, const wxWindowID id, 
+                    bool *accept, wxString *res, wxListMainWindow *owner,
+                    const wxString &value = "",
+                    const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
+                    int style = 0, const wxValidator& validator = wxDefaultValidator,
+                    const wxString &name = "wxListTextCtrlText" );
+    void OnChar( wxKeyEvent &event );
+    void OnKillFocus( wxFocusEvent &event );
+    
+  DECLARE_EVENT_TABLE()
 };
 
-*/
-
 //-----------------------------------------------------------------------------
 //  wxListMainWindow (internal)
 //-----------------------------------------------------------------------------
@@ -455,7 +425,7 @@ class wxListMainWindow: public wxScrolledWindow
   public:
     long                 m_mode;
     wxList               m_lines;
-    wxList               m_columns; 
+    wxList               m_columns;
     wxListLineData      *m_current;
     int                  m_visibleLines;
     wxBrush             *m_hilightBrush;
@@ -475,11 +445,11 @@ class wxListMainWindow: public wxScrolledWindow
     bool                 m_renameAccept;
     wxString             m_renameRes;
     bool                 m_isCreated;
-    bool                 m_isDragging;
+    int                  m_dragCount;
 
   public:
-    wxListMainWindow(void); 
-    wxListMainWindow( wxWindow *parent, wxWindowID id, 
+    wxListMainWindow(void);
+    wxListMainWindow( wxWindow *parent, wxWindowID id,
       const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
       long style = 0, const wxString &name = "listctrl" );
     ~wxListMainWindow(void);
@@ -494,6 +464,7 @@ class wxListMainWindow: public wxScrolledWindow
     void DeselectLine( wxListLineData *line );
     void DeleteLine( wxListLineData *line );
     void RenameLine( wxListLineData *line, const wxString &newName );
+    void StartLabelEdit( wxListLineData *line );
     void OnRenameTimer(void);
     void OnRenameAccept(void);
     void OnMouse( wxMouseEvent &event );
@@ -517,13 +488,14 @@ class wxListMainWindow: public wxScrolledWindow
     void GetColumn( int col, wxListItem &item );
     int GetColumnWidth( int vol );
     int GetColumnCount( void );
-    int GetCountPerPage( void );     
+    int GetCountPerPage( void );
     void SetItem( wxListItem &item );
     void GetItem( wxListItem &item );
-    void SetItemState( long item, long state, long stateMask ); 
+    void SetItemState( long item, long state, long stateMask );
     int GetItemState( long item, long stateMask );
     int GetItemCount( void );
     void GetItemRect( long index, wxRectangle &rect );
+    bool GetItemPosition(long item, wxPoint& pos);
     int GetSelectedItemCount( void );
     void SetMode( long mode );
     long GetMode( void ) const;
@@ -539,10 +511,12 @@ class wxListMainWindow: public wxScrolledWindow
     long FindItem(long start, long data);
     long HitTest( int x, int y, int &flags );
     void InsertItem( wxListItem &item );
+//    void AddItem( wxListItem &item );
     void InsertColumn( long col, wxListItem &item );
+//    void AddColumn( wxListItem &item );
     void SortItems( wxListCtrlCompare fn, long data );
     virtual bool OnListNotify( wxListEvent &event );
-    
+
   DECLARE_EVENT_TABLE()
 };
 
@@ -553,19 +527,18 @@ class wxListMainWindow: public wxScrolledWindow
 class wxListCtrl: public wxControl
 {
   DECLARE_DYNAMIC_CLASS(wxListCtrl);
-  
+
   public:
-  
+
     wxListCtrl(void);
-    wxListCtrl( wxWindow *parent, wxWindowID id, 
+    wxListCtrl( wxWindow *parent, wxWindowID id,
       const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
       long style = 0, const wxString &name = "listctrl" );
     ~wxListCtrl(void);
-    bool Create( wxWindow *parent, wxWindowID id, 
+    bool Create( wxWindow *parent, wxWindowID id,
       const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
       long style = 0, const wxString &name = "listctrl" );
     void OnSize( wxSizeEvent &event );
-    void SetBackgroundColour( const wxColour& col );
     bool GetColumn( int col, wxListItem& item );
     bool SetColumn( int col, wxListItem& item );
     int GetColumnWidth( int col );
@@ -582,8 +555,8 @@ class wxListCtrl: public wxControl
     void SetItemText( long item, const wxString& str );
     long GetItemData( long item );
     bool SetItemData( long item, long data );
-    bool GetItemRect( long item, wxRectangle& rect, int code = wxLIST_RECT_BOUNDS ); // not supported in wxGLC
-    bool GetItemPosition( long item, wxPoint& pos ) const; // not supported in wxGLC
+    bool GetItemRect( long item, wxRectangle& rect, int code = wxLIST_RECT_BOUNDS );
+    bool GetItemPosition( long item, wxPoint& pos );
     bool SetItemPosition( long item, const wxPoint& pos ); // not supported in wxGLC
     int GetItemCount(void);
     void SetItemSpacing( int spacing, bool isSmall = FALSE );
@@ -595,7 +568,7 @@ class wxListCtrl: public wxControl
     void SetSingleStyle( long style, bool add = TRUE ) ;
     void SetWindowStyleFlag(long style);
     void RecreateWindow(void) {};
-    long GetNextItem(long item, int geometry = wxLIST_NEXT_ALL, int state = wxLIST_STATE_DONTCARE);
+    long GetNextItem(long item, int geometry = wxLIST_NEXT_ALL, int state = wxLIST_STATE_DONTCARE) const;
     wxImageList *GetImageList(int which);
     void SetImageList(wxImageList *imageList, int which) ;
     bool Arrange( int flag = wxLIST_ALIGN_DEFAULT ); // always wxLIST_ALIGN_LEFT in wxGLC
@@ -619,22 +592,36 @@ class wxListCtrl: public wxControl
     bool SortItems(wxListCtrlCompare fn, long data);
     bool Update(long item);
     virtual bool OnListNotify(wxListEvent& WXUNUSED(event)) { return FALSE; }
+    void OnIdle( wxIdleEvent &event );
+    
+    // We have to hand down a few functions
+    
     void SetDropTarget( wxDropTarget *dropTarget )
-      { m_mainWin->SetDropTarget( dropTarget ); };
+      { m_mainWin->SetDropTarget( dropTarget ); }
     wxDropTarget *GetDropTarget() const
-      { return m_mainWin->GetDropTarget(); };
-      
-    void OnIdle( wxIdleEvent &event );
+      { return m_mainWin->GetDropTarget(); }
+    void SetCursor( const wxCursor &cursor )
+      { m_mainWin->SetCursor( cursor); }
+    wxColour GetBackgroundColour() const
+      { return m_mainWin->GetBackgroundColour(); }
+    void SetBackgroundColour( const wxColour &colour )
+      { m_mainWin->SetBackgroundColour( colour ); }
+    wxColour GetForegroundColour() const
+      { return m_mainWin->GetForegroundColour(); }
+    void SetForegroundColour( const wxColour &colour )
+      { m_mainWin->SetForegroundColour( colour ); }
+    bool PopupMenu( wxMenu *menu, int x, int y )
+      { return m_mainWin->PopupMenu( menu, x, y ); }
 
   protected:
-  
+
 //  wxListTextCtrl       m_textCtrl;
-    wxImageList         *m_imageListNormal; 
-    wxImageList         *m_imageListSmall;  
+    wxImageList         *m_imageListNormal;
+    wxImageList         *m_imageListSmall;
     wxImageList         *m_imageListState;  // what's that ?
     wxListHeaderWindow  *m_headerWin;
     wxListMainWindow    *m_mainWin;
-    
+
   DECLARE_EVENT_TABLE()
 
 };