| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/osx/carbon/dataview.h
- // Purpose: wxDataViewCtrl native implementation header for carbon
- // Author:
- // Copyright: (c) 2009
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_DATAVIEWCTRL_CARBON_H_
- #define _WX_DATAVIEWCTRL_CARBON_H_
- #include "wx/defs.h"
- #if wxUSE_GUI
- #include "wx/osx/core/dataview.h"
- #include "wx/osx/private.h"
- // ============================================================================
- // wxDataViewColumnNativeData
- // ============================================================================
- class wxDataViewColumnNativeData
- {
- public:
- //
- // constructors / destructor
- //
- wxDataViewColumnNativeData()
- {
- }
- wxDataViewColumnNativeData(DataBrowserPropertyID initPropertyID)
- :m_PropertyID(initPropertyID)
- {
- }
- //
- // data access methods
- //
- DataBrowserPropertyID GetPropertyID() const
- {
- return m_PropertyID;
- }
- void SetPropertyID(DataBrowserPropertyID newPropertyID)
- {
- m_PropertyID = newPropertyID;
- }
- protected:
- private:
- //
- // variables
- //
- DataBrowserPropertyID m_PropertyID; // each column is identified by its unique property ID (NOT by the column's index)
- };
- // ============================================================================
- // wxDataViewRendererNativeData
- // ============================================================================
- class wxDataViewRendererNativeData
- {
- public:
- //
- // constructors / destructor
- //
- wxDataViewRendererNativeData()
- {
- }
- wxDataViewRendererNativeData(DataBrowserPropertyType initPropertyType, DataBrowserItemDataRef initItemDataRef=NULL)
- :m_ItemDataRef(initItemDataRef), m_PropertyType(initPropertyType)
- {
- }
- //
- // data access methods
- //
- DataBrowserItemDataRef GetItemDataRef() const
- {
- return m_ItemDataRef;
- }
- DataBrowserPropertyType GetPropertyType() const
- {
- return m_PropertyType;
- }
- void SetItemDataRef(DataBrowserItemDataRef newItemDataRef)
- {
- m_ItemDataRef = newItemDataRef;
- }
- void SetPropertyType(DataBrowserPropertyType newPropertyType)
- {
- m_PropertyType = newPropertyType;
- }
- protected:
- private:
- //
- // variables
- //
- DataBrowserItemDataRef m_ItemDataRef;
- DataBrowserPropertyType m_PropertyType;
- };
- // ============================================================================
- // wxMacDataBrowserTableViewControl
- // ============================================================================
- //
- // This is a wrapper class for the Mac OS X data browser environment.
- // It covers all data brower functionality for the native browser's list
- // and column style.
- //
- // data browser's property IDs have a reserved ID range from 0 - 1023
- // therefore, the first usable property ID is 'kMinPropertyID'
- DataBrowserPropertyID const kMinPropertyID = 1024;
- // array of data browser item IDs
- WX_DEFINE_ARRAY_SIZE_T(size_t,wxArrayDataBrowserItemID);
- class wxMacDataBrowserTableViewControl : public wxMacControl
- {
- public:
- //
- // constructors / destructor
- //
- wxMacDataBrowserTableViewControl(wxWindow* peer, const wxPoint& pos, const wxSize& size, long style);
- wxMacDataBrowserTableViewControl()
- {
- }
- ~wxMacDataBrowserTableViewControl();
- //
- // callback handling
- //
- OSStatus SetCallbacks (DataBrowserCallbacks const* callbacks);
- OSStatus SetCustomCallbacks(DataBrowserCustomCallbacks const* customCallbacks);
- //
- // DnD handling
- //
- OSStatus EnableAutomaticDragTracking(bool enable=true);
- //
- // header handling
- //
- OSStatus GetHeaderDesc(DataBrowserPropertyID property, DataBrowserListViewHeaderDesc* desc) const;
- OSStatus SetHeaderDesc(DataBrowserPropertyID property, DataBrowserListViewHeaderDesc* desc);
- //
- // layout handling
- //
- OSStatus AutoSizeColumns();
- OSStatus EnableCellSizeModification(bool enableHeight=true, bool enableWidth=true); // enables or disables the column width and row height modification (default: false)
- OSStatus GetAttributes (OptionBits* attributes);
- OSStatus GetColumnWidth (DataBrowserPropertyID column, UInt16 *width ) const; // returns the column width in pixels
- OSStatus GetDefaultColumnWidth(UInt16 *width ) const; // returns the default column width in pixels
- OSStatus GetDefaultRowHeight (UInt16 * height ) const;
- OSStatus GetHeaderButtonHeight(UInt16 *height );
- OSStatus GetPartBounds (DataBrowserItemID item, DataBrowserPropertyID property, DataBrowserPropertyPart part, Rect* bounds);
- OSStatus GetRowHeight (DataBrowserItemID item , UInt16 *height) const;
- OSStatus GetScrollPosition (UInt32* top, UInt32 *left) const;
- OSStatus SetAttributes (OptionBits attributes);
- OSStatus SetColumnWidth(DataBrowserPropertyID column, UInt16 width); // sets the column width in pixels
- OSStatus SetDefaultColumnWidth( UInt16 width );
- OSStatus SetDefaultRowHeight( UInt16 height );
- OSStatus SetHasScrollBars( bool horiz, bool vert );
- OSStatus SetHeaderButtonHeight( UInt16 height );
- OSStatus SetHiliteStyle(DataBrowserTableViewHiliteStyle hiliteStyle);
- OSStatus SetIndent(float Indent);
- OSStatus SetItemRowHeight( DataBrowserItemID item , UInt16 height);
- OSStatus SetScrollPosition( UInt32 top , UInt32 left );
- //
- // column handling
- //
- OSStatus GetColumnCount (UInt32* numColumns) const;
- OSStatus GetColumnIndex (DataBrowserPropertyID propertyID, DataBrowserTableViewColumnIndex* index) const; // returns for the passed property the corresponding column index
- OSStatus GetFreePropertyID(DataBrowserPropertyID* propertyID) const; // this method returns a property id that is valid and currently not used; if it cannot be found 'errDataBrowerPropertyNotSupported' is returned
- OSStatus GetPropertyFlags (DataBrowserPropertyID propertyID, DataBrowserPropertyFlags *flags ) const;
- OSStatus GetPropertyID (DataBrowserItemDataRef itemData, DataBrowserPropertyID* propertyID) const; // returns for the passed item data reference the corresponding property ID
- OSStatus GetPropertyID (DataBrowserTableViewColumnIndex index, DataBrowserPropertyID* propertyID) const; // returns for the passed column index the corresponding property ID
- OSStatus IsUsedPropertyID(DataBrowserPropertyID propertyID) const; // checks if passed property id is used by the control; no error is returned if the id exists
- OSStatus RemoveColumnByProperty(DataBrowserTableViewColumnID propertyID);
- OSStatus RemoveColumnByIndex (DataBrowserTableViewColumnIndex index);
- OSStatus SetColumnIndex (DataBrowserPropertyID propertyID, DataBrowserTableViewColumnIndex index);
- OSStatus SetDisclosureColumn(DataBrowserPropertyID propertyID, Boolean expandableRows=false);
- OSStatus SetPropertyFlags (DataBrowserPropertyID propertyID, DataBrowserPropertyFlags flags);
- //
- // item handling
- //
- OSStatus AddItem(DataBrowserItemID container, DataBrowserItemID const* itemID) // adds a single item
- {
- return AddItems(container,1,itemID,kDataBrowserItemNoProperty);
- }
- OSStatus AddItems(DataBrowserItemID container, UInt32 numItems, DataBrowserItemID const* items, DataBrowserPropertyID preSortProperty); // adds items to the data browser
- OSStatus GetFreeItemID(DataBrowserItemID* id) const; // this method returns an item id that is valid and currently not used; if it cannot be found 'errDataBrowserItemNotAdded' is returned
- OSStatus GetItemCount (ItemCount* numItems) const
- {
- return GetItemCount(kDataBrowserNoItem,true,kDataBrowserItemAnyState,numItems);
- }
- OSStatus GetItemCount (DataBrowserItemID container, Boolean recurse, DataBrowserItemState state, ItemCount* numItems) const;
- OSStatus GetItemID (DataBrowserTableViewRowIndex row, DataBrowserItemID* item) const;
- OSStatus GetItems (DataBrowserItemID container, Boolean recurse, DataBrowserItemState state, Handle items) const;
- OSStatus GetItemRow (DataBrowserItemID item, DataBrowserTableViewRowIndex* row) const;
- OSStatus GetItemState (DataBrowserItemID item, DataBrowserItemState* state) const;
- OSStatus IsUsedItemID(DataBrowserItemID itemID) const; // checks if the passed id is in use
- OSStatus RevealItem(DataBrowserItemID item, DataBrowserPropertyID propertyID, DataBrowserRevealOptions options) const;
- OSStatus RemoveItem(DataBrowserItemID container, DataBrowserItemID const* itemID) // removes a single item
- {
- return RemoveItems(container,1,itemID,kDataBrowserItemNoProperty);
- }
- OSStatus RemoveItems(void) // removes all items
- {
- return RemoveItems(kDataBrowserNoItem,0,NULL,kDataBrowserItemNoProperty);
- }
- OSStatus RemoveItems(DataBrowserItemID container, UInt32 numItems, DataBrowserItemID const* items, DataBrowserPropertyID preSortProperty);
- OSStatus UpdateItem(DataBrowserItemID container, DataBrowserItemID const* item) // updates all columns of the passed item
- {
- return UpdateItems(container,1,item,kDataBrowserItemNoProperty,kDataBrowserItemNoProperty);
- }
- OSStatus UpdateItems(void) // updates all items
- {
- return UpdateItems(kDataBrowserNoItem,0,NULL,kDataBrowserItemNoProperty,kDataBrowserItemNoProperty);
- }
- OSStatus UpdateItems(DataBrowserItemID container, UInt32 numItems, DataBrowserItemID const* items, DataBrowserPropertyID preSortProperty, DataBrowserPropertyID propertyID) const;
- //
- // item selection
- //
- size_t GetSelectedItemIDs(wxArrayDataBrowserItemID& itemIDs) const; // returns the number of selected item and the item IDs in the array
- OSStatus GetSelectionAnchor(DataBrowserItemID *first, DataBrowserItemID *last) const;
- OSStatus GetSelectionFlags (DataBrowserSelectionFlags* flags) const;
- bool IsItemSelected(DataBrowserItemID item) const;
- OSStatus SetSelectionFlags(DataBrowserSelectionFlags flags);
- OSStatus SetSelectedItems (UInt32 numItems, DataBrowserItemID const* itemIDs, DataBrowserSetOption operation);
- //
- // item sorting
- //
- OSStatus GetSortOrder (DataBrowserSortOrder* order) const;
- OSStatus GetSortProperty(DataBrowserPropertyID* propertyID) const;
- OSStatus Resort(DataBrowserItemID container=kDataBrowserNoItem, Boolean sortChildren=true);
- OSStatus SetSortOrder (DataBrowserSortOrder order);
- OSStatus SetSortProperty(DataBrowserPropertyID propertyID);
- //
- // container handling
- //
- OSStatus CloseContainer(DataBrowserItemID containerID);
- OSStatus OpenContainer(DataBrowserItemID containerID);
- protected :
- //
- // standard callback functions
- //
- static pascal Boolean DataBrowserCompareProc (ControlRef browser, DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty);
- static pascal void DataBrowserGetContextualMenuProc(ControlRef browser, MenuRef* menu, UInt32* helpType, CFStringRef* helpItemString, AEDesc* selection);
- static pascal OSStatus DataBrowserGetSetItemDataProc (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean getValue);
- static pascal void DataBrowserItemNotificationProc (ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef itemData);
- virtual Boolean DataBrowserCompareProc (DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty) = 0;
- virtual void DataBrowserGetContextualMenuProc(MenuRef* menu, UInt32* helpType, CFStringRef* helpItemString, AEDesc* selection) = 0;
- virtual OSStatus DataBrowserGetSetItemDataProc (DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean getValue) = 0;
- virtual void DataBrowserItemNotificationProc (DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef itemData) = 0;
- //
- // callback functions for customized types
- //
- static pascal void DataBrowserDrawItemProc(ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemState state, Rect const* rectangle, SInt16 bitDepth, Boolean colorDevice);
- static pascal Boolean DataBrowserEditItemProc(ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID propertyID, CFStringRef theString, Rect* maxEditTextRect, Boolean* shrinkToFit);
- static pascal Boolean DataBrowserHitTestProc (ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Rect const* mouseRect);
- static pascal DataBrowserTrackingResult DataBrowserTrackingProc(ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Point startPt, EventModifiers modifiers);
- virtual void DataBrowserDrawItemProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemState state, Rect const* rectangle, SInt16 bitDepth, Boolean colorDevice) = 0;
- virtual Boolean DataBrowserEditItemProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, CFStringRef theString, Rect* maxEditTextRect, Boolean* shrinkToFit) = 0;
- virtual Boolean DataBrowserHitTestProc (DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Rect const* mouseRect) = 0;
- virtual DataBrowserTrackingResult DataBrowserTrackingProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Point startPt, EventModifiers modifiers) = 0;
- //
- // callback functions for drag & drop
- ///
- static pascal Boolean DataBrowserAcceptDragProc (ControlRef browser, DragReference dragRef, DataBrowserItemID itemID);
- static pascal Boolean DataBrowserAddDragItemProc(ControlRef browser, DragReference dragRef, DataBrowserItemID itemID, ItemReference* itemRef);
- static pascal Boolean DataBrowserReceiveDragProc(ControlRef browser, DragReference dragRef, DataBrowserItemID itemID);
- virtual Boolean DataBrowserAcceptDragProc (DragReference dragRef, DataBrowserItemID itemID) = 0;
- virtual Boolean DataBrowserAddDragItemProc(DragReference dragRef, DataBrowserItemID itemID, ItemReference* itemRef) = 0;
- virtual Boolean DataBrowserReceiveDragProc(DragReference dragRef, DataBrowserItemID itemID) = 0;
- //
- // event handler for hit testing
- ///
- void* m_macDataViewCtrlEventHandler;
- private:
- //
- // wxWidget internal stuff
- //
- DECLARE_ABSTRACT_CLASS(wxMacDataBrowserTableViewControl)
- };
- // ============================================================================
- // wxMacDataBrowserListViewControl
- // ============================================================================
- //
- // This class is a wrapper for the native browser's list view style. It expands
- // the inherited functionality of the table view control class.
- // The term list view is in this case Mac OS X specific and is not related
- // to any wxWidget naming conventions.
- //
- class wxMacDataBrowserListViewControl : public wxMacDataBrowserTableViewControl
- {
- public:
- //
- // constructors / destructor
- //
- wxMacDataBrowserListViewControl(wxWindow* peer, wxPoint const& pos, wxSize const& size, long style) : wxMacDataBrowserTableViewControl(peer,pos,size,style)
- {
- }
- //
- // column handling
- //
- OSStatus AddColumn(DataBrowserListViewColumnDesc *columnDesc, DataBrowserTableViewColumnIndex position);
- protected:
- private:
- };
- // ============================================================================
- // wxMacDataViewDataBrowserListViewControl
- // ============================================================================
- //
- // This is the internal interface class between wxDataViewCtrl (wxWidget) and
- // the native data browser (Mac OS X carbon).
- //
- class wxMacDataViewDataBrowserListViewControl : public wxMacDataBrowserListViewControl, public wxDataViewWidgetImpl
- {
- public:
- //
- // constructors / destructor
- //
- wxMacDataViewDataBrowserListViewControl(wxWindow* peer, wxPoint const& pos, wxSize const& size, long style);
- //
- // 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 WXUNUSED(pos)) { /*not implemented*/ }
- //
- // 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);
- //
- // 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 (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 ();
- virtual void StartEditor( const wxDataViewItem & item, unsigned int column );
- //
- // other methods
- //
- wxDataViewCtrl* GetDataViewCtrl() const
- {
- return dynamic_cast<wxDataViewCtrl*>(GetWXPeer());
- }
- protected:
- //
- // standard callback functions (inherited from wxMacDataBrowserTableViewControl)
- //
- virtual Boolean DataBrowserCompareProc (DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty);
- virtual void DataBrowserItemNotificationProc (DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef itemData);
- virtual void DataBrowserGetContextualMenuProc(MenuRef* menu, UInt32* helpType, CFStringRef* helpItemString, AEDesc* selection);
- virtual OSStatus DataBrowserGetSetItemDataProc (DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemDataRef itemData, Boolean getValue);
- //
- // callback functions for customized types (inherited from wxMacDataBrowserTableViewControl)
- //
- virtual void DataBrowserDrawItemProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, DataBrowserItemState state, Rect const* rectangle, SInt16 bitDepth, Boolean colorDevice);
- virtual Boolean DataBrowserEditItemProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, CFStringRef theString, Rect* maxEditTextRect, Boolean* shrinkToFit);
- virtual Boolean DataBrowserHitTestProc (DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Rect const* mouseRect);
- virtual DataBrowserTrackingResult DataBrowserTrackingProc(DataBrowserItemID itemID, DataBrowserPropertyID propertyID, Rect const* theRect, Point startPt, EventModifiers modifiers);
- //
- // callback functions for drag & drop (inherited from wxMacDataBrowserTableViewControl)
- //
- virtual Boolean DataBrowserAcceptDragProc (DragReference dragRef, DataBrowserItemID itemID);
- virtual Boolean DataBrowserAddDragItemProc(DragReference dragRef, DataBrowserItemID itemID, ItemReference* itemRef);
- virtual Boolean DataBrowserReceiveDragProc(DragReference dragRef, DataBrowserItemID itemID);
- //
- // drag & drop helper methods
- //
- wxDataFormat GetDnDDataFormat(wxDataObjectComposite* dataObjects);
- wxDataObjectComposite* GetDnDDataObjects(DragReference dragRef, ItemReference itemRef) const; // create the data objects from the native dragged object
- //
- // other methods
- //
- wxDataViewColumn* GetColumnPtr(DataBrowserPropertyID propertyID) const; // returns for the passed property the corresponding pointer to a column; NULL is returned if not found
- private:
- };
- typedef wxMacDataViewDataBrowserListViewControl* wxMacDataViewDataBrowserListViewControlPointer;
- #endif // WX_GUI
- #endif // _WX_MACCARBONDATAVIEWCTRL_H_
|