| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/osx/cocoa/dataview.h
 
- // Purpose:     wxDataViewCtrl native implementation header for carbon
 
- // Author:
 
- // Copyright:   (c) 2009
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_DATAVIEWCTRL_COCOOA_H_
 
- #define _WX_DATAVIEWCTRL_COCOOA_H_
 
- #include "wx/defs.h"
 
- #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: simply stores a pointer, without taking its ownership
 
- // ============================================================================
 
- // 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;
 
- }
 
-     -(id) initWithPointer:(void*)initPointer;
 
-     -(void*) pointer;
 
-     -(void)  setPointer:(void*)newPointer;
 
- @end
 
- // ============================================================================
 
- // wxSortDescriptorObject: helper class to use native sorting facilities
 
- // ============================================================================
 
- @interface wxSortDescriptorObject : NSSortDescriptor<NSCopying>
 
- {
 
-     wxDataViewColumn* columnPtr; // pointer to the sorting column
 
-     wxDataViewModel* modelPtr; // pointer to model
 
- }
 
-     -(id)
 
-     initWithModelPtr:(wxDataViewModel*)initModelPtr
 
-         sortingColumnPtr:(wxDataViewColumn*)initColumnPtr
 
-         ascending:(BOOL)sortAscending;
 
-     -(wxDataViewColumn*) columnPtr;
 
-     -(wxDataViewModel*) modelPtr;
 
-     -(void) setColumnPtr:(wxDataViewColumn*)newColumnPtr;
 
-     -(void) setModelPtr:(wxDataViewModel*)newModelPtr;
 
- @end
 
- // ============================================================================
 
- // wxDataViewColumnNativeData: extra data for wxDataViewColumn
 
- // ============================================================================
 
- class wxDataViewColumnNativeData
 
- {
 
- public:
 
-     wxDataViewColumnNativeData() : m_NativeColumnPtr(NULL)
 
-     {
 
-     }
 
-     wxDataViewColumnNativeData(NSTableColumn* initNativeColumnPtr)
 
-         : m_NativeColumnPtr(initNativeColumnPtr)
 
-     {
 
-     }
 
-     NSTableColumn* GetNativeColumnPtr() const
 
-     {
 
-         return m_NativeColumnPtr;
 
-     }
 
-     void SetNativeColumnPtr(NSTableColumn* newNativeColumnPtr)
 
-     {
 
-         m_NativeColumnPtr = newNativeColumnPtr;
 
-     }
 
- private:
 
-     // not owned by us
 
-     NSTableColumn* m_NativeColumnPtr;
 
- };
 
- // ============================================================================
 
- // wxDataViewRendererNativeData: extra data for wxDataViewRenderer
 
- // ============================================================================
 
- class wxDataViewRendererNativeData
 
- {
 
- public:
 
-     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:
 
-     // 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;
 
-     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
 
-     // 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.
 
- //
 
- // As mentioned in the documentation for NSOutlineView the native control does
 
- // not own any data. Therefore, it has to be done by the data source.
 
- // Unfortunately, wxWidget's data source is a C++ data source but
 
- // NSOutlineDataSource requires objects as data. Therefore, the data (or better
 
- // the native item objects) have to be stored additionally in the native data
 
- // source.
 
- // NSOutlineView requires quick access to the item objects and quick linear
 
- // access to an item's children. This requires normally a hash type of storage
 
- // for the item object itself and an array structure for each item's children.
 
- // This means that basically two times the whole structure of wxWidget's model
 
- // class has to be stored.
 
- // This implementation is using a compromise: all items that are in use by the
 
- // control are stored in a set (from there they can be easily retrieved) and
 
- // owned by the set. Furthermore, children of the last parent are stored
 
- // in a linear list.
 
- //
 
- @interface wxCocoaOutlineDataSource : NSObject wxOSX_10_6_AND_LATER(<NSOutlineViewDataSource>)
 
- {
 
-     // descriptors specifying the sorting (currently the array only holds one
 
-     // object only)
 
-     NSArray* sortDescriptors;
 
-     NSMutableArray* children; // buffered children
 
-     NSMutableSet* items; // stores all items that are in use by the control
 
-     wxCocoaDataViewControl* implementation;
 
-     wxDataViewModel* model;
 
-     // 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;
 
-     // 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: used for custom renderers
 
- // ============================================================================
 
- @interface wxCustomCell : NSTextFieldCell
 
- {
 
- }
 
-     -(NSSize) cellSize;
 
- @end
 
- // ============================================================================
 
- // wxImageTextCell
 
- // ============================================================================
 
- //
 
- // As the native cocoa environment does not have a cell displaying an icon/
 
- // image and text at the same time, it has to be implemented by the user.
 
- // This implementation follows the implementation of Chuck Pisula in Apple's
 
- // DragNDropOutline sample application.
 
- // Although in wxDataViewCtrl icons are used on OSX icons do not exist for
 
- // display. Therefore, the cell is also called wxImageTextCell.
 
- // Instead of displaying images of any size (which is possible) this cell uses
 
- // a fixed size for displaying the image. Larger images are scaled to fit
 
- // into their reserved space. Smaller or not existing images use the fixed
 
- // reserved size and are scaled if necessary.
 
- //
 
- @interface wxImageTextCell : NSTextFieldCell
 
- {
 
- @private
 
-     CGFloat xImageShift;    // shift for the image in x-direction from border
 
-     CGFloat spaceImageText; // space between image and text
 
-     NSImage* image; // the image itself
 
-     NSSize imageSize; // largest size of the image; default size is (16, 16)
 
-     // the text alignment is used to align the whole cell (image and text)
 
-     NSTextAlignment cellAlignment;
 
- }
 
-     -(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 wxOSX_10_6_AND_LATER(<NSOutlineViewDelegate>)
 
- {
 
- @private
 
-     // column and row of the cell being edited or -1 if none
 
-     int currentlyEditedColumn,
 
-         currentlyEditedRow;
 
-     wxCocoaDataViewControl* implementation;
 
- }
 
-     -(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
 
- {
 
- public:
 
-     // 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);
 
-     virtual void FitColumnWidthToContent(unsigned int pos);
 
-     // 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 wxDataViewItem GetCurrentItem() const;
 
-     virtual void SetCurrentItem(const wxDataViewItem& item);
 
-     virtual wxDataViewColumn *GetCurrentColumn() const;
 
-     virtual int  GetSelectedItemsCount() const;
 
-     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();
 
-     
 
-     virtual void StartEditor( const wxDataViewItem & item, unsigned int column );
 
-     // drag & drop helper methods
 
-     wxDataFormat GetDnDDataFormat(wxDataObjectComposite* dataObjects);
 
-     wxDataObjectComposite* GetDnDDataObjects(NSData* dataObject) const;
 
-     // Cocoa-specific helpers
 
-     id GetItemAtRow(int row) const;
 
- private:
 
-     void InitOutlineView(long style);
 
-     wxCocoaOutlineDataSource* m_DataSource;
 
-     wxCocoaOutlineView* m_OutlineView;
 
- };
 
- #endif // _WX_DATAVIEWCTRL_COCOOA_H_
 
 
  |