]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/osx/cocoa/dataview.h
Don't use a destroy event handler to disconnect the native control's delegate as...
[wxWidgets.git] / include / wx / osx / cocoa / dataview.h
index a5aa4509b339d0f5b36937de92d6bf6e3fffcc67..3406642f1f6fcd036afa067f8e04b5d498a9da44 100644 (file)
 
 #include "wx/defs.h"
 
-#if wxUSE_GUI
-
-#ifdef __OBJC__
-  #import <Cocoa/Cocoa.h>
-#endif
+#import <Cocoa/Cocoa.h>
 
 #include "wx/osx/core/dataview.h"
 #include "wx/osx/private.h"
 // Forward declaration
 class wxCocoaDataViewControl;
 
+/*
+    Dramatis personae:
+
+    [vertical arrows indicate inheritance, horizontal -- aggregation]
+
+
+        wxWindow ---> wxWidgetCocoaImpl  wxDataViewWidgetImpl   NSOutlineView
+            |                 \                  /                   |
+            |                  \                /                    |
+            |                   \              /                     |
+            v                   \/            \/                     v
+     wxDataViewCtrl -------> wxCocoaDataViewControl <-------> wxCocoaOutlineView
+
+
+     The right most classes are Objective-C only and can't be used from (pure)
+     C++ code.
+ */
+
 // ============================================================================
-// wxPointerObject
+// wxPointerObject: simply stores a pointer, without taking its ownership
 // ============================================================================
-//
-// This is a helper class to store a pointer in an object. This object just
-// stores the pointer but does not take any ownership.
-// To pointer objects are equal if the containing pointers are equal. This
+
+// Two pointer objects are equal if the containing pointers are equal. This
 // means also that the hash value of a pointer object depends only on the
 // stored pointer.
-//
+
 @interface wxPointerObject : NSObject
 {
-  void* pointer;
+    void* pointer;
 }
 
- //
- // object initialization
- //
-  -(id) initWithPointer:(void*)initPointer;
-
- //
- // access to pointer
- //
-  -(void*) pointer;
-  -(void)  setPointer:(void*)newPointer;
+    -(id) initWithPointer:(void*)initPointer;
 
+    -(void*) pointer;
+    -(void)  setPointer:(void*)newPointer;
 @end
 
 // ============================================================================
-// wxSortDescriptorObject
+// wxSortDescriptorObject: helper class to use native sorting facilities
 // ============================================================================
-//
-// This is a helper class to use native sorting facilities.
-//
+
 @interface wxSortDescriptorObject : NSSortDescriptor<NSCopying>
 {
-  wxDataViewColumn* columnPtr; // pointer to the sorting column
+    wxDataViewColumn* columnPtr; // pointer to the sorting column
 
-  wxDataViewModel* modelPtr; // pointer to model
+    wxDataViewModel* modelPtr; // pointer to model
 }
 
- //
- // initialization
- //
-  -(id) initWithModelPtr:(wxDataViewModel*)initModelPtr sortingColumnPtr:(wxDataViewColumn*)initColumnPtr ascending:(BOOL)sortAscending;
-
- //
- // access to variables
- //
-  -(wxDataViewColumn*) columnPtr;
-  -(wxDataViewModel*) modelPtr;
+    -(id)
+    initWithModelPtr:(wxDataViewModel*)initModelPtr
+        sortingColumnPtr:(wxDataViewColumn*)initColumnPtr
+        ascending:(BOOL)sortAscending;
 
-  -(void) setColumnPtr:(wxDataViewColumn*)newColumnPtr;
-  -(void) setModelPtr:(wxDataViewModel*)newModelPtr;
+    -(wxDataViewColumn*) columnPtr;
+    -(wxDataViewModel*) modelPtr;
 
+    -(void) setColumnPtr:(wxDataViewColumn*)newColumnPtr;
+    -(void) setModelPtr:(wxDataViewModel*)newModelPtr;
 @end
 
 // ============================================================================
-// wxDataViewColumnNativeData
+// wxDataViewColumnNativeData: extra data for wxDataViewColumn
 // ============================================================================
+
 class wxDataViewColumnNativeData
 {
 public:
-//
-// constructors / destructor
-//
-  wxDataViewColumnNativeData(void) : m_NativeColumnPtr(NULL)
-  {
-  }
-  wxDataViewColumnNativeData(NSTableColumn* initNativeColumnPtr) : m_NativeColumnPtr(initNativeColumnPtr)
-  {
-  }
+    wxDataViewColumnNativeData() : m_NativeColumnPtr(NULL)
+    {
+    }
 
-//
-// data access methods
-//
-  NSTableColumn* GetNativeColumnPtr() const
-  {
-    return m_NativeColumnPtr;
-  }
+    wxDataViewColumnNativeData(NSTableColumn* initNativeColumnPtr)
+        : m_NativeColumnPtr(initNativeColumnPtr)
+    {
+    }
+
+    NSTableColumn* GetNativeColumnPtr() const
+    {
+        return m_NativeColumnPtr;
+    }
 
-  void SetNativeColumnPtr(NSTableColumn* newNativeColumnPtr)
-  {
-    m_NativeColumnPtr = newNativeColumnPtr;
-  }
+    void SetNativeColumnPtr(NSTableColumn* newNativeColumnPtr)
+    {
+        m_NativeColumnPtr = newNativeColumnPtr;
+    }
 
-protected:
 private:
-//
-// variables
-//
-  NSTableColumn* m_NativeColumnPtr; // this class does not take over ownership of the pointer nor retains it
+    // not owned by us
+    NSTableColumn* m_NativeColumnPtr;
 };
 
 // ============================================================================
-// wxDataViewRendererNativeData
+// wxDataViewRendererNativeData: extra data for wxDataViewRenderer
 // ============================================================================
+
 class wxDataViewRendererNativeData
 {
 public:
-//
-// constructors / destructor
-//
-  wxDataViewRendererNativeData(void) : m_Object(NULL), m_ColumnCell(NULL)
-  {
-      Init();
-  }
-  wxDataViewRendererNativeData(NSCell* initColumnCell) : m_Object(NULL), m_ColumnCell([initColumnCell retain])
-  {
-      Init();
-  }
-  wxDataViewRendererNativeData(NSCell* initColumnCell, id initObject) : m_Object([initObject retain]), m_ColumnCell([initColumnCell retain])
-  {
-      Init();
-  }
-
-  ~wxDataViewRendererNativeData()
-  {
-    [m_ColumnCell release];
-    [m_Object     release];
-
-    [m_origFont release];
-    [m_origTextColour release];
-  }
-
- //
- // data access methods
- //
-  NSCell* GetColumnCell() const
-  {
-    return m_ColumnCell;
-  }
-  NSTableColumn* GetColumnPtr() const
-  {
-    return m_TableColumnPtr;
-  }
-  id GetItem() const
-  {
-    return m_Item;
-  }
-  NSCell* GetItemCell() const
-  {
-    return m_ItemCell;
-  }
-  id GetObject() const
-  {
-    return m_Object;
-  }
-
-  void SetColumnCell(NSCell* newCell)
-  {
-    [newCell retain];
-    [m_ColumnCell release];
-    m_ColumnCell = newCell;
-  }
-  void SetColumnPtr(NSTableColumn* newColumnPtr)
-  {
-    m_TableColumnPtr = newColumnPtr;
-  }
-  void SetItem(id newItem)
-  {
-    m_Item = newItem;
-  }
-  void SetItemCell(NSCell* newCell)
-  {
-    m_ItemCell = newCell;
-  }
-  void SetObject(id newObject)
-  {
-    [newObject retain];
-    [m_Object release];
-    m_Object = newObject;
-  }
-
-  // The original cell font and text colour stored here are NULL by default and
-  // are only initialized to the values retrieved from the cell when we change
-  // them from wxCocoaOutlineView:willDisplayCell:forTableColumn:item: which
-  // calls our SaveOriginalXXX() methods before changing the cell attributes.
-  //
-  // This allows us to avoid doing anything for the columns without any
-  // attributes but still be able to restore the correct attributes for the
-  // ones that do.
-  NSFont *GetOriginalFont() const { return m_origFont; }
-  NSColor *GetOriginalTextColour() const { return m_origTextColour; }
-
-  void SaveOriginalFont(NSFont *font)
-  {
-      m_origFont = [font retain];
-  }
-
-  void SaveOriginalTextColour(NSColor *textColour)
-  {
-      m_origTextColour = [textColour retain];
-  }
+    wxDataViewRendererNativeData()
+        : m_Object(NULL), m_ColumnCell(NULL)
+    {
+        Init();
+    }
+
+    wxDataViewRendererNativeData(NSCell* initColumnCell)
+        : m_Object(NULL), m_ColumnCell([initColumnCell retain])
+    {
+        Init();
+    }
+
+    wxDataViewRendererNativeData(NSCell* initColumnCell, id initObject)
+        : m_Object([initObject retain]), m_ColumnCell([initColumnCell retain])
+    {
+        Init();
+    }
+
+    ~wxDataViewRendererNativeData()
+    {
+        [m_ColumnCell release];
+        [m_Object release];
+
+        [m_origFont release];
+        [m_origTextColour release];
+    }
+
+    NSCell* GetColumnCell() const { return m_ColumnCell; }
+    NSTableColumn* GetColumnPtr() const { return m_TableColumnPtr; }
+    id GetItem() const { return m_Item; }
+    NSCell* GetItemCell() const { return m_ItemCell; }
+    id GetObject() const { return m_Object; }
+
+    void SetColumnCell(NSCell* newCell)
+    {
+        [newCell retain];
+        [m_ColumnCell release];
+        m_ColumnCell = newCell;
+    }
+    void SetColumnPtr(NSTableColumn* newColumnPtr)
+    {
+        m_TableColumnPtr = newColumnPtr;
+    }
+    void SetItem(id newItem)
+    {
+        m_Item = newItem;
+    }
+    void SetItemCell(NSCell* newCell)
+    {
+        m_ItemCell = newCell;
+    }
+    void SetObject(id newObject)
+    {
+        [newObject retain];
+        [m_Object release];
+        m_Object = newObject;
+    }
+
+    // The original cell font and text colour stored here are NULL by default
+    // and are only initialized to the values retrieved from the cell when we
+    // change them from wxCocoaOutlineView:willDisplayCell:forTableColumn:item:
+    // which calls our SaveOriginalXXX() methods before changing the cell
+    // attributes.
+    //
+    // This allows us to avoid doing anything for the columns without any
+    // attributes but still be able to restore the correct attributes for the
+    // ones that do.
+    NSFont *GetOriginalFont() const { return m_origFont; }
+    NSColor *GetOriginalTextColour() const { return m_origTextColour; }
+
+    void SaveOriginalFont(NSFont *font)
+    {
+        m_origFont = [font retain];
+    }
+
+    void SaveOriginalTextColour(NSColor *textColour)
+    {
+        m_origTextColour = [textColour retain];
+    }
+
+    // The ellipsization mode which we need to set for each cell being rendered.
+    void SetEllipsizeMode(wxEllipsizeMode mode) { m_ellipsizeMode = mode; }
+    wxEllipsizeMode GetEllipsizeMode() const { return m_ellipsizeMode; }
+
+    // Set the line break mode for the given cell using our m_ellipsizeMode
+    void ApplyLineBreakMode(NSCell *cell);
 
 private:
-  void Init()
-  {
-      m_origFont = NULL;
-      m_origTextColour = NULL;
-  }
+    // common part of all ctors
+    void Init();
+
+    id m_Item;   // item NOT owned by renderer
+
+    // object that can be used by renderer for storing special data (owned by
+    // renderer)
+    id m_Object;
 
-  id m_Item;   // item NOT owned by renderer
-  id m_Object; // object that can be used by renderer for storing special data (owned by renderer)
+    NSCell* m_ColumnCell; // column's cell is owned by renderer
+    NSCell* m_ItemCell;   // item's cell is NOT owned by renderer
 
-  NSCell* m_ColumnCell; // column's cell is owned by renderer
-  NSCell* m_ItemCell;   // item's cell is NOT owned by renderer
+    NSTableColumn* m_TableColumnPtr; // column NOT owned by renderer
 
-  NSTableColumn* m_TableColumnPtr; // column NOT owned by renderer
+    // we own those if they're non-NULL
+    NSFont *m_origFont;
+    NSColor *m_origTextColour;
 
-  // we own those if they're non-NULL
-  NSFont *m_origFont;
-  NSColor *m_origTextColour;
+    wxEllipsizeMode m_ellipsizeMode;
 };
 
 // ============================================================================
 // wxCocoaOutlineDataSource
 // ============================================================================
-//
+
 // This class implements the data source delegate for the outline view.
 // As only an informal protocol exists this class inherits from NSObject only.
 //
@@ -264,92 +252,105 @@ private:
 //
 @interface wxCocoaOutlineDataSource : NSObject
 {
-  NSArray* sortDescriptors; // descriptors specifying the sorting (currently the array only holds one object only)
+    // descriptors specifying the sorting (currently the array only holds one
+    // object only)
+    NSArray* sortDescriptors;
 
-  NSMutableArray* children; // buffered children
+    NSMutableArray* children; // buffered children
 
-  NSMutableSet* items; // stores all items that are in use by the control
+    NSMutableSet* items; // stores all items that are in use by the control
 
-  wxCocoaDataViewControl* implementation;
+    wxCocoaDataViewControl* implementation;
 
-  wxDataViewModel* model;
+    wxDataViewModel* model;
 
-  wxPointerObject* currentParentItem; // parent of the buffered children; the object is owned
+    // parent of the buffered children; the object is owned
+    wxPointerObject* currentParentItem;
 }
 
- //
- // methods of informal protocol:
- //
-  -(BOOL)            outlineView:(NSOutlineView*)outlineView acceptDrop:(id<NSDraggingInfo>)info item:(id)item childIndex:(NSInteger)index;
-  -(id)              outlineView:(NSOutlineView*)outlineView child:(NSInteger)index ofItem:(id)item;
-  -(id)              outlineView:(NSOutlineView*)outlineView objectValueForTableColumn:(NSTableColumn*)tableColumn byItem:(id)item;
-  -(BOOL)            outlineView:(NSOutlineView*)outlineView isItemExpandable:(id)item;
-  -(NSInteger)       outlineView:(NSOutlineView*)outlineView numberOfChildrenOfItem:(id)item;
-  -(NSDragOperation) outlineView:(NSOutlineView*)outlineView validateDrop:(id<NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(NSInteger)index;
-  -(BOOL)            outlineView:(NSOutlineView*)outlineView writeItems:(NSArray*)items toPasteboard:(NSPasteboard*)pasteboard;
-
- //
- // buffer for items handling
- //
-  -(void)             addToBuffer:(wxPointerObject*)item;
-  -(void)             clearBuffer;
-  -(wxPointerObject*) getDataViewItemFromBuffer:(wxDataViewItem const&)item;  // returns the item in the buffer that has got the same pointer as "item",
-  -(wxPointerObject*) getItemFromBuffer:(wxPointerObject*)item;               // if such an item does not exist nil is returned
-  -(BOOL)             isInBuffer:(wxPointerObject*)item;
-  -(void)             removeFromBuffer:(wxPointerObject*)item;
-
- //
- // buffered children handling
- //
-  -(void)             appendChild:(wxPointerObject*)item;
-  -(void)             clearChildren;
-  -(wxPointerObject*) getChild:(NSUInteger)index;
-  -(NSUInteger)       getChildCount;
-  -(void)             removeChild:(NSUInteger)index;
-
- //
- // buffer handling
- //
-  -(void) clearBuffers;
-
- //
- // sorting
- //
-  -(NSArray*) sortDescriptors;
-  -(void)     setSortDescriptors:(NSArray*)newSortDescriptors;
-
- //
- // access to wxWidget's variables
- //
-  -(wxPointerObject*)        currentParentItem;
-  -(wxCocoaDataViewControl*) implementation;
-  -(wxDataViewModel*)        model;
-  -(void)                    setCurrentParentItem:(wxPointerObject*)newCurrentParentItem;
-  -(void)                    setImplementation:(wxCocoaDataViewControl*)newImplementation;
-  -(void)                    setModel:(wxDataViewModel*)newModel;
-
- //
- // other methods
- //
-  -(void) bufferItem:(wxPointerObject*)parentItem withChildren:(wxDataViewItemArray*)dataViewChildrenPtr;
-
+    // methods of informal protocol:
+    -(BOOL)
+    outlineView:(NSOutlineView*)outlineView
+        acceptDrop:(id<NSDraggingInfo>)info
+        item:(id)item
+        childIndex:(NSInteger)index;
+
+    -(id)
+    outlineView:(NSOutlineView*)outlineView
+        child:(NSInteger)index
+        ofItem:(id)item;
+
+    -(id)
+    outlineView:(NSOutlineView*)outlineView 
+        objectValueForTableColumn:(NSTableColumn*)tableColumn
+        byItem:(id)item;
+
+    -(BOOL)
+    outlineView:(NSOutlineView*)outlineView
+        isItemExpandable:(id)item;
+
+    -(NSInteger)
+    outlineView:(NSOutlineView*)outlineView
+        numberOfChildrenOfItem:(id)item;
+
+    -(NSDragOperation)
+    outlineView:(NSOutlineView*)outlineView
+        validateDrop:(id<NSDraggingInfo>)info
+        proposedItem:(id)item
+        proposedChildIndex:(NSInteger)index;
+
+    -(BOOL)
+    outlineView:(NSOutlineView*)outlineView
+        writeItems:(NSArray*)items
+        toPasteboard:(NSPasteboard*)pasteboard;
+
+    // buffer for items handling
+    -(void)             addToBuffer:(wxPointerObject*)item;
+    -(void)             clearBuffer;
+    // returns the item in the buffer that has got the same pointer as "item",
+    // if such an item does not exist nil is returned
+    -(wxPointerObject*) getDataViewItemFromBuffer:(const wxDataViewItem&)item;
+    -(wxPointerObject*) getItemFromBuffer:(wxPointerObject*)item;
+    -(BOOL)             isInBuffer:(wxPointerObject*)item;
+    -(void)             removeFromBuffer:(wxPointerObject*)item;
+
+    // buffered children handling
+    -(void)             appendChild:(wxPointerObject*)item;
+    -(void)             clearChildren;
+    -(wxPointerObject*) getChild:(NSUInteger)index;
+    -(NSUInteger)       getChildCount;
+    -(void)             removeChild:(NSUInteger)index;
+
+    // buffer handling
+    -(void) clearBuffers;
+
+    // sorting
+    -(NSArray*) sortDescriptors;
+    -(void)     setSortDescriptors:(NSArray*)newSortDescriptors;
+
+    // access to wxWidgets variables
+    -(wxPointerObject*) currentParentItem;
+    -(wxCocoaDataViewControl*) implementation;
+    -(wxDataViewModel*) model;
+    -(void) setCurrentParentItem:(wxPointerObject*)newCurrentParentItem;
+    -(void) setImplementation:(wxCocoaDataViewControl*)newImplementation;
+    -(void) setModel:(wxDataViewModel*)newModel;
+
+    // other methods
+    -(void)
+    bufferItem:(wxPointerObject*)parentItem
+        withChildren:(wxDataViewItemArray*)dataViewChildrenPtr;
 @end
 
 // ============================================================================
-// wxCustomCell
+// wxCustomCell: used for custom renderers
 // ============================================================================
-//
-// This is a cell that is used for custom renderers.
-//
+
 @interface wxCustomCell : NSTextFieldCell
 {
 }
 
- //
- // other methods
- //
-  -(NSSize) cellSize;
-
+    -(NSSize) cellSize;
 @end
 
 // ============================================================================
@@ -370,159 +371,142 @@ private:
 @interface wxImageTextCell : NSTextFieldCell
 {
 @private
-  CGFloat xImageShift;    // shift for the image in x-direction from border
-  CGFloat spaceImageText; // space between image and text ("belongs" to the image)
+    CGFloat xImageShift;    // shift for the image in x-direction from border
+    CGFloat spaceImageText; // space between image and text
 
-  NSImage* image; // the image itself
+    NSImage* image; // the image itself
 
-  NSSize imageSize; // largest size of the image; default size is (16, 16)
+    NSSize imageSize; // largest size of the image; default size is (16, 16)
 
-  NSTextAlignment cellAlignment; // the text alignment is used to align the whole
-                                 // cell (image and text)
+    // the text alignment is used to align the whole cell (image and text)
+    NSTextAlignment cellAlignment;
 }
 
- //
- // alignment
- //
-  -(NSTextAlignment) alignment;
-  -(void) setAlignment:(NSTextAlignment)newAlignment;
-
- //
- // image access
- //
-  -(NSImage*) image;
-  -(void) setImage:(NSImage*)newImage;
-
- //
- // size access
- //
-  -(NSSize) imageSize;
-  -(void) setImageSize:(NSSize) newImageSize;
-
- //
- // other methods
- //
-  -(NSSize) cellSize;
+    -(NSTextAlignment) alignment;
+    -(void) setAlignment:(NSTextAlignment)newAlignment;
+
+    -(NSImage*) image;
+    -(void) setImage:(NSImage*)newImage;
+
+    -(NSSize) imageSize;
+    -(void) setImageSize:(NSSize) newImageSize;
 
+    -(NSSize) cellSize;
 @end
 
 // ============================================================================
 // wxCocoaOutlineView
 // ============================================================================
+
 @interface wxCocoaOutlineView : NSOutlineView
 {
 @private
-  BOOL isEditingCell; // flag indicating if a cell is currently being edited
+    // column and row of the cell being edited or -1 if none
+    int currentlyEditedColumn,
+        currentlyEditedRow;
 
-  wxCocoaDataViewControl* implementation;
+    wxCocoaDataViewControl* implementation;
 }
 
- //
- // access to wxWidget's implementation
- //
-  -(wxCocoaDataViewControl*) implementation;
-  -(void)                    setImplementation:(wxCocoaDataViewControl*) newImplementation;
-
+    -(wxCocoaDataViewControl*) implementation;
+    -(void) setImplementation:(wxCocoaDataViewControl*) newImplementation;
 @end
 
 // ============================================================================
 // wxCocoaDataViewControl
 // ============================================================================
-//
+
 // This is the internal interface class between wxDataViewCtrl (wxWidget) and
 // the native source view (Mac OS X cocoa).
-//
-class wxCocoaDataViewControl : public wxWidgetCocoaImpl, public wxDataViewWidgetImpl
+class wxCocoaDataViewControl : public wxWidgetCocoaImpl,
+                               public wxDataViewWidgetImpl
 {
 public:
- //
- // constructors / destructor
- //
-  wxCocoaDataViewControl(wxWindow* peer, wxPoint const& pos, wxSize const& size, long style);
-  ~wxCocoaDataViewControl();
-
- //
- // column related methods (inherited from wxDataViewWidgetImpl)
- //
-  virtual bool              ClearColumns       ();
-  virtual bool              DeleteColumn       (wxDataViewColumn* columnPtr);
-  virtual void              DoSetExpanderColumn(wxDataViewColumn const* columnPtr);
-  virtual wxDataViewColumn* GetColumn          (unsigned int pos) const;
-  virtual int               GetColumnPosition  (wxDataViewColumn const* columnPtr) const;
-  virtual bool              InsertColumn       (unsigned int pos, wxDataViewColumn* columnPtr);
-
- //
- // item related methods (inherited from wxDataViewWidgetImpl)
- //
-  virtual bool         Add          (wxDataViewItem const& parent, wxDataViewItem const& item);
-  virtual bool         Add          (wxDataViewItem const& parent, wxDataViewItemArray const& items);
-  virtual void         Collapse     (wxDataViewItem const& item);
-  virtual void         EnsureVisible(wxDataViewItem const& item, wxDataViewColumn const* columnPtr);
-  virtual void         Expand       (wxDataViewItem const& item);
-  virtual unsigned int GetCount     () const;
-  virtual wxRect       GetRectangle (wxDataViewItem const& item, wxDataViewColumn const* columnPtr);
-  virtual bool         IsExpanded   (wxDataViewItem const& item) const;
-  virtual bool         Reload       ();
-  virtual bool         Remove       (wxDataViewItem const& parent, wxDataViewItem const& item);
-  virtual bool         Remove       (wxDataViewItem const& parent, wxDataViewItemArray const& item);
-  virtual bool         Update       (wxDataViewColumn const* columnPtr);
-  virtual bool         Update       (wxDataViewItem const& parent, wxDataViewItem const& item);
-  virtual bool         Update       (wxDataViewItem const& parent, wxDataViewItemArray const& items);
-
- //
- // model related methods
- //
-  virtual bool AssociateModel(wxDataViewModel* model); // informs the native control that a model is present
-
- //
- // selection related methods (inherited from wxDataViewWidgetImpl)
- //
-  virtual int  GetSelections(wxDataViewItemArray& sel)   const;
-  virtual bool IsSelected   (wxDataViewItem const& item) const;
-  virtual void Select       (wxDataViewItem const& item);
-  virtual void SelectAll    ();
-  virtual void Unselect     (wxDataViewItem const& item);
-  virtual void UnselectAll  ();
-
- //
- // sorting related methods
- //
-  virtual wxDataViewColumn* GetSortingColumn () const;
-  virtual void              Resort           ();
-
- //
- // other methods (inherited from wxDataViewWidgetImpl)
- //
-  virtual void DoSetIndent (int indent);
-  virtual void HitTest     (wxPoint const& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const;
-  virtual void SetRowHeight(wxDataViewItem const& item, unsigned int height);
-  virtual void OnSize      ();
-
- //
- // other methods
- //
-  wxDataViewCtrl* GetDataViewCtrl() const
-  {
-    return dynamic_cast<wxDataViewCtrl*>(GetWXPeer());
-  }
+    // constructors / destructor
+    wxCocoaDataViewControl(wxWindow* peer,
+                           const wxPoint& pos,
+                           const wxSize& size,
+                           long style);
+    virtual ~wxCocoaDataViewControl();
+
+    wxDataViewCtrl* GetDataViewCtrl() const
+    {
+        return static_cast<wxDataViewCtrl*>(GetWXPeer());
+    }
+
+    // column related methods (inherited from wxDataViewWidgetImpl)
+    virtual bool ClearColumns();
+    virtual bool DeleteColumn(wxDataViewColumn* columnPtr);
+    virtual void DoSetExpanderColumn(wxDataViewColumn const* columnPtr);
+    virtual wxDataViewColumn* GetColumn(unsigned int pos) const;
+    virtual int GetColumnPosition(wxDataViewColumn const* columnPtr) const;
+    virtual bool InsertColumn(unsigned int pos, wxDataViewColumn* columnPtr);
+
+    // item related methods (inherited from wxDataViewWidgetImpl)
+    virtual bool Add(const wxDataViewItem& parent, const wxDataViewItem& item);
+    virtual bool Add(const wxDataViewItem& parent,
+                     const wxDataViewItemArray& items);
+    virtual void Collapse(const wxDataViewItem& item);
+    virtual void EnsureVisible(const wxDataViewItem& item,
+                               wxDataViewColumn const* columnPtr);
+    virtual void Expand(const wxDataViewItem& item);
+    virtual unsigned int GetCount() const;
+    virtual wxRect GetRectangle(const wxDataViewItem& item,
+                                wxDataViewColumn const* columnPtr);
+    virtual bool IsExpanded(const wxDataViewItem& item) const;
+    virtual bool Reload();
+    virtual bool Remove(const wxDataViewItem& parent,
+                        const wxDataViewItem& item);
+    virtual bool Remove(const wxDataViewItem& parent,
+                        const wxDataViewItemArray& item);
+    virtual bool Update(const wxDataViewColumn* columnPtr);
+    virtual bool Update(const wxDataViewItem& parent,
+                        const wxDataViewItem& item);
+    virtual bool Update(const wxDataViewItem& parent,
+                        const wxDataViewItemArray& items);
+
+    // model related methods
+    virtual bool AssociateModel(wxDataViewModel* model);
+
+    //
+    // selection related methods (inherited from wxDataViewWidgetImpl)
+    //
+    virtual int  GetSelections(wxDataViewItemArray& sel)   const;
+    virtual bool IsSelected(const wxDataViewItem& item) const;
+    virtual void Select(const wxDataViewItem& item);
+    virtual void SelectAll();
+    virtual void Unselect(const wxDataViewItem& item);
+    virtual void UnselectAll();
+
+    //
+    // sorting related methods
+    //
+    virtual wxDataViewColumn* GetSortingColumn () const;
+    virtual void Resort();
+
+    //
+    // other methods (inherited from wxDataViewWidgetImpl)
+    //
+    virtual void DoSetIndent(int indent);
+    virtual void HitTest(const wxPoint& point,
+                         wxDataViewItem& item,
+                         wxDataViewColumn*& columnPtr) const;
+    virtual void SetRowHeight(const wxDataViewItem& item, unsigned int height);
+    virtual void OnSize();
+
+    // drag & drop helper methods
+    wxDataFormat GetDnDDataFormat(wxDataObjectComposite* dataObjects);
+    wxDataObjectComposite* GetDnDDataObjects(NSData* dataObject) const;
+
+    // Cocoa-specific helpers
+    id GetItemAtRow(int row) const;
 
-//
-// drag & drop helper methods
-//
-  wxDataFormat           GetDnDDataFormat(wxDataObjectComposite* dataObjects);
-  wxDataObjectComposite* GetDnDDataObjects(NSData* dataObject) const; // create the data objects from the native dragged object
-protected:
 private:
-//
-// variables
-//
-  wxCocoaOutlineDataSource* m_DataSource;
+    void InitOutlineView(long style);
 
-  wxCocoaOutlineView* m_OutlineView;
-};
-
-typedef wxCocoaDataViewControl* wxCocoaDataViewControlPointer;
+    wxCocoaOutlineDataSource* m_DataSource;
 
+    wxCocoaOutlineView* m_OutlineView;
+};
 
-#endif // wxUSE_GUI
 #endif // _WX_DATAVIEWCTRL_COCOOA_H_