]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/osx/dataview.h
Return correct index from wxGenericListCtrl::InsertColumn().
[wxWidgets.git] / include / wx / osx / dataview.h
index ac851767330fa090bdd37487775384c61514f39c..618a3c255835ad03a1555dcac565006cb8392559 100644 (file)
@@ -1,4 +1,3 @@
-
 /////////////////////////////////////////////////////////////////////////////
 // Name:        wx/osx/dataview.h
 // Purpose:     wxDataViewCtrl native implementation header for OSX
 // Class declarations to mask native types
 // --------------------------------------------------------
 class wxDataViewColumnNativeData;   // class storing environment dependent data for the native implementation
-class wxDataViewRendererNativeData; // class storing environment dependent data for the native renderer
 class wxDataViewWidgetImpl;         // class used as a common interface for carbon and cocoa implementation
 
-// ---------------------------------------------------------
-// wxDataViewRenderer
-// ---------------------------------------------------------
-class WXDLLIMPEXP_ADV wxDataViewRenderer : public wxDataViewRendererBase
-{
-public:
-//
-// constructors / destructor
-//
-  wxDataViewRenderer(wxString const& varianttype, wxDataViewCellMode mode=wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
-  
-  virtual ~wxDataViewRenderer(void);
-
-//
-// inherited methods from wxDataViewRendererBase
-//
-  virtual int GetAlignment() const
-  {
-    return this->m_alignment;
-  }
-  virtual wxDataViewCellMode GetMode() const
-  {
-    return this->m_mode;
-  }
-  virtual bool GetValue(wxVariant& value) const
-  {
-    value = this->m_value;
-    return true;
-  }
-
-  virtual void SetAlignment(int align); // carbon: is always identical to the header alignment;
-                                        // cocoa: cell alignment is independent from header alignment
-  virtual void SetMode(wxDataViewCellMode mode);
-  virtual bool SetValue(wxVariant const& newValue)
-  {
-    this->m_value = newValue;
-    return true;
-  }
-
-//
-// implementation
-//
-  wxVariant const& GetValue() const
-  {
-    return this->m_value;
-  }
-
-  wxDataViewRendererNativeData* GetNativeData() const
-  {
-    return this->m_NativeDataPtr;
-  }
-
-  virtual bool MacRender() = 0; // a call to the native data browser function to render the data;
-                             // returns true if the data value could be rendered, false otherwise
-
-  void SetNativeData(wxDataViewRendererNativeData* newNativeDataPtr);
-
-private:
-//
-// variables
-//
-  int m_alignment; // contains the alignment flags
-
-  wxDataViewCellMode m_mode; // storing the mode that determines how the cell is going to be shown
-
-  wxDataViewRendererNativeData* m_NativeDataPtr; // data used by implementation of the native renderer
-
-  wxVariant m_value; // value that is going to be rendered
-
-//
-// wxWidget internal stuff
-//
-  DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer)
-};
-
-// ---------------------------------------------------------
-// wxDataViewCustomRenderer
-// ---------------------------------------------------------
-class WXDLLIMPEXP_ADV wxDataViewCustomRenderer: public wxDataViewRenderer
-{
-public:
-//
-// constructors / destructor
-//
-  wxDataViewCustomRenderer(wxString const& varianttype=wxT("string"), wxDataViewCellMode mode=wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
-
-  virtual ~wxDataViewCustomRenderer();
-
-  void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state );
-
-//
-// methods handling render space
-//
-  virtual wxSize GetSize() const = 0;
-
-//
-// methods handling user actions
-//
-  virtual bool Render(wxRect cell, wxDC* dc, int state) = 0;
-
-  virtual bool Activate( wxRect WXUNUSED(cell),
-                         wxDataViewModel *WXUNUSED(model),
-                         const wxDataViewItem & WXUNUSED(item),
-                         unsigned int WXUNUSED(col) )
-                         { return false; }
-
-  virtual bool LeftClick( wxPoint WXUNUSED(cursor),
-                          wxRect WXUNUSED(cell),
-                          wxDataViewModel *WXUNUSED(model),
-                          const wxDataViewItem & WXUNUSED(item),
-                          unsigned int WXUNUSED(col) )
-                          { return false; }
-
-  virtual bool StartDrag( wxPoint WXUNUSED(cursor),
-                          wxRect WXUNUSED(cell),
-                          wxDataViewModel *WXUNUSED(model),
-                          const wxDataViewItem & WXUNUSED(item),
-                          unsigned int WXUNUSED(col) )
-                          { return false; }
-
-//
-// device context handling
-//
-  virtual wxDC* GetDC(); // creates a device context and keeps it
-
-//
-// implementation
-//
-  virtual bool MacRender();
-
-  void SetDC(wxDC* newDCPtr); // this method takes ownership of the pointer
-
-protected:
-private:
-//
-// variables
-//
-  wxControl* m_editorCtrlPtr; // pointer to an in-place editor control
-
-  wxDC* m_DCPtr;
-
-//
-// wxWidget internal stuff
-//
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
-};
-
-// ---------------------------------------------------------
-// wxDataViewTextRenderer
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewTextRenderer: public wxDataViewRenderer
-{
-public:
-//
-// constructors / destructor
-//
-    wxDataViewTextRenderer(wxString const& varianttype=wxT("string"), wxDataViewCellMode mode=wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
-
-//
-// inherited functions from wxDataViewRenderer
-//
-  virtual bool MacRender();
-
-protected:
-private:
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer)
-};
-
-// ---------------------------------------------------------
-// wxDataViewTextRendererAttr
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewTextRendererAttr: public wxDataViewTextRenderer
-{
-public:
-//
-// constructors / destructor
-//
-    wxDataViewTextRendererAttr(wxString const& varianttype=wxT("string"), wxDataViewCellMode mode=wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
-
-private:
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRendererAttr)
-};
-
-// ---------------------------------------------------------
-// wxDataViewBitmapRenderer
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer: public wxDataViewRenderer
-{
-public:
-//
-// constructors / destructor
-//
-  wxDataViewBitmapRenderer(wxString const& varianttype=wxT("wxBitmap"), wxDataViewCellMode mode=wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
-
-//
-// inherited functions from wxDataViewRenderer
-//
-  virtual bool MacRender();
-
-protected:
-private:
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer)
-};
-
-#if !defined(wxUSE_GENERICDATAVIEWCTRL) && defined(__WXOSX_COCOA__)
-
-// -------------------------------------
-// wxDataViewChoiceRenderer
-// -------------------------------------
-class WXDLLIMPEXP_ADV wxDataViewChoiceRenderer: public wxDataViewRenderer
-{
-public:
-//
-// constructors / destructor
-//
-  wxDataViewChoiceRenderer(wxArrayString const& choices,
-                           wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
-                           int alignment = wxDVR_DEFAULT_ALIGNMENT );
-
-//
-// inherited functions from wxDataViewRenderer
-//
-  virtual bool MacRender();
-
-//
-// implementation
-//
-  wxString GetChoice(size_t index) const
-  {
-    return this->m_Choices[index];
-  }
-  wxArrayString const& GetChoices(void) const
-  {
-    return this->m_Choices;
-  }
-
-private:
-//
-// variables
-//
-  wxArrayString m_Choices;
-
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewChoiceRenderer)
-};
-
-#endif
-
-// ---------------------------------------------------------
-// wxDataViewIconTextRenderer
-// ---------------------------------------------------------
-class WXDLLIMPEXP_ADV wxDataViewIconTextRenderer: public wxDataViewRenderer
-{
-public:
-  wxDataViewIconTextRenderer(wxString const& varianttype = wxT("wxDataViewIconText"), wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
-
-//
-// inherited functions from wxDataViewRenderer
-//
-  virtual bool MacRender();
-
-protected:
-private:
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewIconTextRenderer)
-};
-
-// ---------------------------------------------------------
-// wxDataViewToggleRenderer
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewRenderer
-{
-public:
-  wxDataViewToggleRenderer(wxString const& varianttype = wxT("bool"), wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
-
-//
-// inherited functions from wxDataViewRenderer
-//
-  virtual bool MacRender();
-
-protected:
-private:
-  DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer)
-};
-
-// ---------------------------------------------------------
-// wxDataViewProgressRenderer
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewProgressRenderer: public wxDataViewRenderer
-{
-public:
-  wxDataViewProgressRenderer(wxString const& label = wxEmptyString, wxString const& varianttype=wxT("long"),
-                             wxDataViewCellMode mode=wxDATAVIEW_CELL_INERT, int align=wxDVR_DEFAULT_ALIGNMENT);
-
-//
-// inherited functions from wxDataViewRenderer
-//
-  virtual bool MacRender();
-
-protected:
-private:
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer)
-};
-
-// ---------------------------------------------------------
-// wxDataViewDateRenderer
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewRenderer
-{
-public:
-  wxDataViewDateRenderer(wxString const& varianttype=wxT("datetime"), wxDataViewCellMode mode=wxDATAVIEW_CELL_ACTIVATABLE, int align=wxDVR_DEFAULT_ALIGNMENT);
-
-//
-// inherited functions from wxDataViewRenderer
-//
-  virtual bool MacRender();
-
-protected:
-private:
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer)
-};
-
 // ---------------------------------------------------------
 // wxDataViewColumn
 // ---------------------------------------------------------
@@ -368,7 +40,7 @@ public:
                      int width = wxDVC_DEFAULT_WIDTH,
                      wxAlignment align = wxALIGN_CENTER,
                      int flags = wxDATAVIEW_COL_RESIZABLE);
-    virtual ~wxDataViewColumn(void);
+    virtual ~wxDataViewColumn();
 
     // implement wxHeaderColumnBase pure virtual methods
     virtual wxAlignment GetAlignment() const { return m_alignment; }
@@ -376,32 +48,35 @@ public:
     virtual int GetMaxWidth() const { return m_maxWidth; }
     virtual int GetMinWidth() const { return m_minWidth; }
     virtual wxString GetTitle() const { return m_title; }
-    virtual int GetWidth() const { return m_width; }
-    virtual bool IsHidden() const { return false; } // TODO
+    virtual int GetWidth() const;
     virtual bool IsSortOrderAscending() const { return m_ascending; }
     virtual bool IsSortKey() const;
+    virtual bool IsHidden() const;
 
     virtual void SetAlignment  (wxAlignment align);
     virtual void SetBitmap     (wxBitmap const& bitmap);
     virtual void SetFlags      (int flags) { SetIndividualFlags(flags); }
-    virtual void SetHidden     (bool WXUNUSED(hidden)) { } // TODO
+    virtual void SetHidden     (bool hidden);
     virtual void SetMaxWidth   (int maxWidth);
     virtual void SetMinWidth   (int minWidth);
     virtual void SetReorderable(bool reorderable);
-    virtual void SetResizeable (bool resizeable);
+    virtual void SetResizeable (bool resizable);
     virtual void SetSortable   (bool sortable);
     virtual void SetSortOrder  (bool ascending);
     virtual void SetTitle      (wxString const& title);
     virtual void SetWidth      (int  width);
-    virtual void SetAsSortKey  (bool sort = true);
 
    // implementation only
-    wxDataViewColumnNativeData* GetNativeData(void) const
+    wxDataViewColumnNativeData* GetNativeData() const
     {
-      return this->m_NativeDataPtr;
+      return m_NativeDataPtr;
     }
-    
+
     void SetNativeData(wxDataViewColumnNativeData* newNativeDataPtr); // class takes ownership of pointer
+    int GetWidthVariable() const
+    {
+        return m_width;
+    }
     void SetWidthVariable(int NewWidth)
     {
         m_width = NewWidth;
@@ -419,8 +94,8 @@ private:
         m_flags = flags & ~wxDATAVIEW_COL_HIDDEN; // TODO
         m_maxWidth = 30000;
         m_minWidth = 0;
-        m_width = width >= 0 ? width : wxDVC_DEFAULT_WIDTH;
         m_alignment = align;
+        SetWidth(width);
     }
 
     bool m_ascending; // sorting order
@@ -451,22 +126,31 @@ public:
  // Constructors / destructor:
   wxDataViewCtrl()
   {
-    this->Init();
+    Init();
   }
-  wxDataViewCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0,
-                 const wxValidator& validator = wxDefaultValidator)
+  wxDataViewCtrl(wxWindow *parent,
+                 wxWindowID winid,
+                 const wxPoint& pos = wxDefaultPosition,
+                 const wxSize& size = wxDefaultSize,
+                 long style = 0,
+                 const wxValidator& validator = wxDefaultValidator,
+                 const wxString& name = wxDataViewCtrlNameStr )
   {
-    this->Init();
-    this->Create(parent, id, pos, size, style, validator );
+    Init();
+    Create(parent, winid, pos, size, style, validator, name);
   }
 
   ~wxDataViewCtrl();
 
- // explicit control creation
-  bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos=wxDefaultPosition, const wxSize& size=wxDefaultSize, long style=0,
-              const wxValidator& validator=wxDefaultValidator);
+  bool Create(wxWindow *parent,
+              wxWindowID winid,
+              const wxPoint& pos = wxDefaultPosition,
+              const wxSize& size = wxDefaultSize,
+              long style = 0,
+              const wxValidator& validator = wxDefaultValidator,
+              const wxString& name = wxDataViewCtrlNameStr);
 
-  virtual wxControl* GetMainWindow() // not used for the native implementation
+  virtual wxWindow* GetMainWindow() // not used for the native implementation
   {
     return this;
   }
@@ -475,12 +159,12 @@ public:
   virtual bool AssociateModel(wxDataViewModel* model);
 
   virtual bool              AppendColumn     (wxDataViewColumn* columnPtr);
-  virtual bool              ClearColumns     (void);
+  virtual bool              ClearColumns     ();
   virtual bool              DeleteColumn     (wxDataViewColumn* columnPtr);
   virtual wxDataViewColumn* GetColumn        (unsigned int pos) const;
-  virtual unsigned int      GetColumnCount   (void) const;
+  virtual unsigned int      GetColumnCount   () const;
   virtual int               GetColumnPosition(const wxDataViewColumn* columnPtr) const;
-  virtual wxDataViewColumn* GetSortingColumn (void) const;
+  virtual wxDataViewColumn* GetSortingColumn () const;
   virtual bool              InsertColumn     (unsigned int pos, wxDataViewColumn *col);
   virtual bool              PrependColumn    (wxDataViewColumn* columnPtr);
 
@@ -489,10 +173,10 @@ public:
   virtual void Expand(const wxDataViewItem& item);
   virtual bool IsExpanded(const wxDataViewItem & item) const;
 
-
   virtual unsigned int GetCount() const;
-  virtual wxRect GetItemRect(const wxDataViewItem& item, const wxDataViewColumn* columnPtr) const;
-  virtual wxDataViewItem GetSelection() const;
+  virtual wxRect GetItemRect(const wxDataViewItem& item,
+                             const wxDataViewColumn* columnPtr = NULL) const;
+  virtual int GetSelectedItemsCount() const;
   virtual int GetSelections(wxDataViewItemArray& sel) const;
 
   virtual void HitTest(const wxPoint& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const;
@@ -510,36 +194,38 @@ public:
 // implementation
 //
  // returns a pointer to the native implementation
-  wxDataViewWidgetImpl* GetDataViewPeer(void) const;
+  wxDataViewWidgetImpl* GetDataViewPeer() const;
 
  // adds all children of the passed parent to the control; if 'parentItem' is invalid the root(s) is/are added:
   void AddChildren(wxDataViewItem const& parentItem);
 
  // finishes editing of custom items; if no custom item is currently edited the method does nothing
-  void FinishCustomItemEditing(void);
+  void FinishCustomItemEditing();
+  
+  virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column);
 
  // returns the n-th pointer to a column;
  // this method is different from GetColumn(unsigned int pos) because here 'n' is not a position in the control but the n-th
  // position in the internal list/array of column pointers
   wxDataViewColumn* GetColumnPtr(size_t n) const
   {
-    return this->m_ColumnPtrs[n];
+    return m_ColumnPtrs[n];
   }
  // returns the current being rendered item of the customized renderer (this item is only valid during editing)
   wxDataViewItem const& GetCustomRendererItem() const
   {
-    return this->m_CustomRendererItem;
+    return m_CustomRendererItem;
   }
  // returns a pointer to a customized renderer (this pointer is only valid during editing)
   wxDataViewCustomRenderer* GetCustomRendererPtr() const
   {
-    return this->m_CustomRendererPtr;
+    return m_CustomRendererPtr;
   }
 
  // checks if currently a delete process is running
   bool IsDeleting() const
   {
-    return this->m_Deleting;
+    return m_Deleting;
   }
 
  // with CG, we need to get the context from an kEventControlDraw event
@@ -548,29 +234,31 @@ public:
  // events so we can access it in the callbacks.
   void MacSetDrawingContext(void* context)
   {
-    this->m_cgContext = context;
+    m_cgContext = context;
   }
   void* MacGetDrawingContext() const
   {
-    return this->m_cgContext;
+    return m_cgContext;
   }
 
  // sets the currently being edited item of the custom renderer
   void SetCustomRendererItem(wxDataViewItem const& NewItem)
   {
-    this->m_CustomRendererItem = NewItem;
+    m_CustomRendererItem = NewItem;
   }
  // sets the custom renderer
   void SetCustomRendererPtr(wxDataViewCustomRenderer* NewCustomRendererPtr)
   {
-    this->m_CustomRendererPtr = NewCustomRendererPtr;
+    m_CustomRendererPtr = NewCustomRendererPtr;
   }
  // sets the flag indicating a deletion process:
   void SetDeleting(bool deleting)
   {
-    this->m_Deleting = deleting;
+    m_Deleting = deleting;
   }
 
+  virtual wxDataViewColumn *GetCurrentColumn() const;
+
   virtual wxVisualAttributes GetDefaultAttributes() const
   {
       return GetClassDefaultAttributes(GetWindowVariant());
@@ -594,6 +282,9 @@ private:
  // initializing of local variables:
   void Init();
 
+  virtual wxDataViewItem DoGetCurrentItem() const;
+  virtual void DoSetCurrentItem(const wxDataViewItem& item);
+
  //
  // variables
  //
@@ -609,6 +300,8 @@ private:
 
   wxDataViewColumnPtrArrayType m_ColumnPtrs; // all column pointers are stored in an array
 
+  wxDataViewModelNotifier* m_ModelNotifier; // stores the model notifier for the control (does not own the notifier)
+
  // wxWidget internal stuff:
   DECLARE_DYNAMIC_CLASS(wxDataViewCtrl)
   DECLARE_NO_COPY_CLASS(wxDataViewCtrl)