]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/generic/listctrl.h
Added serial code for wxList and wxHashTable to source tree
[wxWidgets.git] / include / wx / generic / listctrl.h
index 227bc96d834a454f11a6104b26aafbfec96fec0b..1a6c3fa59e7f6f7766b8b9adb92b8faff0e4cd44 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"
@@ -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 },
 
 
 //-----------------------------------------------------------------------------
@@ -231,7 +232,7 @@ class wxListItemData : public wxObject
 {
   DECLARE_DYNAMIC_CLASS(wxListItemData);
 
-  protected:
+  public:
     wxString   m_text;
     int        m_image;
     long       m_data;
@@ -305,7 +306,7 @@ class wxListLineData : public wxObject
 {
   DECLARE_DYNAMIC_CLASS(wxListLineData);
 
-  protected:
+  public:
     wxList              m_items;
     wxRectangle         m_bound_all;
     wxRectangle         m_bound_label;
@@ -358,14 +359,20 @@ class wxListHeaderWindow : public wxWindow
     wxListMainWindow  *m_owner;
     wxCursor          *m_currentCursor;
     wxCursor          *m_resizeCursor;
+    bool               m_isDraging;
+    int                m_column;
+    int                m_minX;
+    int                m_currentX;
 
   public:
     wxListHeaderWindow( void );
+    ~wxListHeaderWindow( void );
     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 DrawCurrent();
     void OnMouse( wxMouseEvent &event );
     void OnSetFocus( wxFocusEvent &event );
 
@@ -386,8 +393,6 @@ class wxListRenameTimer: public wxTimer
    void Notify();
 };
 
-/*
-
 //-----------------------------------------------------------------------------
 //  wxListTextCtrl (internal)
 //-----------------------------------------------------------------------------
@@ -402,48 +407,19 @@ class wxListTextCtrl: public wxTextCtrl
     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)
 //-----------------------------------------------------------------------------
@@ -460,7 +436,6 @@ class wxListMainWindow: public wxScrolledWindow
     int                  m_visibleLines;
     wxBrush             *m_hilightBrush;
     wxColour            *m_hilightColour;
-    wxFont              *m_myFont;
     int                  m_xScroll,m_yScroll;
     bool                 m_dirty;
     wxImageList         *m_small_image_list;
@@ -494,6 +469,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 );
@@ -503,7 +479,6 @@ class wxListMainWindow: public wxScrolledWindow
     void OnSetFocus( wxFocusEvent &event );
     void OnKillFocus( wxFocusEvent &event );
     void OnSize( wxSizeEvent &event );
-    wxFont *GetMyFont( void );
     void DrawImage( int index, wxPaintDC *dc, int x, int y );
     void GetImageSize( int index, int &width, int &height );
     int GetIndexOfLine( const wxListLineData *line );
@@ -560,15 +535,19 @@ class wxListCtrl: public wxControl
   public:
 
     wxListCtrl(void);
-    wxListCtrl( wxWindow *parent, wxWindowID id,
+    wxListCtrl( wxWindow *parent, wxWindowID id = -1,
       const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
-      long style = 0, const wxString &name = "listctrl" );
+      long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator,
+       const wxString &name = "listctrl" )
+    {
+      Create(parent, id, pos, size, style, validator, name);
+    }
     ~wxListCtrl(void);
-    bool Create( wxWindow *parent, wxWindowID id,
+    bool Create( wxWindow *parent, wxWindowID id = -1,
       const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
-      long style = 0, const wxString &name = "listctrl" );
+      long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator,
+       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 );
@@ -598,12 +577,13 @@ 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
     bool DeleteItem( long item );
     bool DeleteAllItems(void) ;
+    void DeleteAllColumns(void) ;
     bool DeleteColumn( int col );
 //  wxText& Edit(long item) ;  // not supported in wxGLC
     bool EnsureVisible( long item );
@@ -622,14 +602,30 @@ 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 SetBackgroundColour( const wxColour &colour );
+    void SetForegroundColour( const wxColour &colour );
+    void SetFont( const wxFont &font );
+    
     void SetDropTarget( wxDropTarget *dropTarget )
-      { m_mainWin->SetDropTarget( dropTarget ); };
+      { m_mainWin->SetDropTarget( dropTarget ); }
     wxDropTarget *GetDropTarget() const
-      { return m_mainWin->GetDropTarget(); };
-
-    void OnIdle( wxIdleEvent &event );
-
-  protected:
+      { return m_mainWin->GetDropTarget(); }
+    void SetCursor( const wxCursor &cursor )
+      { if (m_mainWin) m_mainWin->wxWindow::SetCursor( cursor); }
+    wxColour GetBackgroundColour() const
+      { if (m_mainWin) return m_mainWin->GetBackgroundColour();
+        else return wxColour(); }
+    wxColour GetForegroundColour() const
+      { if (m_mainWin) return m_mainWin->GetForegroundColour();
+        else return wxColour(); }
+    bool PopupMenu( wxMenu *menu, int x, int y )
+      { return m_mainWin->PopupMenu( menu, x, y ); }
+
+  // implementation
 
 //  wxListTextCtrl       m_textCtrl;
     wxImageList         *m_imageListNormal;