2009-05-08 13:07:50 -04:00
/////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/dataview.h
// Purpose: wxDataViewCtrl native implementation header for OSX
// Author:
// Copyright: (c) 2009
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
# ifndef _WX_DATAVIEWCTRL_OSX_H_
# define _WX_DATAVIEWCTRL_OSX_H_
2008-06-11 12:30:48 -04:00
# ifdef __WXMAC_CLASSIC__
# error "Native wxDataViewCtrl for classic environment not defined. Please use generic control."
# endif
2009-05-08 13:07:50 -04:00
// --------------------------------------------------------
// Class declarations to mask native types
// --------------------------------------------------------
class wxDataViewColumnNativeData ; // class storing environment dependent data for the native implementation
class wxDataViewWidgetImpl ; // class used as a common interface for carbon and cocoa implementation
// ---------------------------------------------------------
// wxDataViewColumn
// ---------------------------------------------------------
class WXDLLIMPEXP_ADV wxDataViewColumn : public wxDataViewColumnBase
{
public :
// constructors / destructor
wxDataViewColumn ( const wxString & title ,
wxDataViewRenderer * renderer ,
unsigned int model_column ,
int width = wxDVC_DEFAULT_WIDTH ,
wxAlignment align = wxALIGN_CENTER ,
int flags = wxDATAVIEW_COL_RESIZABLE ) ;
wxDataViewColumn ( const wxBitmap & bitmap ,
wxDataViewRenderer * renderer ,
unsigned int model_column ,
int width = wxDVC_DEFAULT_WIDTH ,
wxAlignment align = wxALIGN_CENTER ,
int flags = wxDATAVIEW_COL_RESIZABLE ) ;
2009-10-12 09:59:32 -04:00
virtual ~ wxDataViewColumn ( ) ;
2009-05-08 13:07:50 -04:00
// implement wxHeaderColumnBase pure virtual methods
2019-04-05 14:08:53 -04:00
virtual wxAlignment GetAlignment ( ) const wxOVERRIDE { return m_alignment ; }
virtual int GetFlags ( ) const wxOVERRIDE { return m_flags ; }
2009-05-08 13:07:50 -04:00
virtual int GetMaxWidth ( ) const { return m_maxWidth ; }
2019-04-05 14:08:53 -04:00
virtual int GetMinWidth ( ) const wxOVERRIDE { return m_minWidth ; }
virtual wxString GetTitle ( ) const wxOVERRIDE { return m_title ; }
virtual int GetWidth ( ) const wxOVERRIDE ;
virtual bool IsSortOrderAscending ( ) const wxOVERRIDE { return m_ascending ; }
virtual bool IsSortKey ( ) const wxOVERRIDE ;
virtual bool IsHidden ( ) const wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
2019-04-05 14:08:53 -04:00
virtual void SetAlignment ( wxAlignment align ) wxOVERRIDE ;
virtual void SetBitmap ( wxBitmap const & bitmap ) wxOVERRIDE ;
virtual void SetFlags ( int flags ) wxOVERRIDE { m_flags = flags ; /*SetIndividualFlags(flags); */ }
virtual void SetHidden ( bool hidden ) wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
virtual void SetMaxWidth ( int maxWidth ) ;
2019-04-05 14:08:53 -04:00
virtual void SetMinWidth ( int minWidth ) wxOVERRIDE ;
virtual void SetReorderable ( bool reorderable ) wxOVERRIDE ;
virtual void SetResizeable ( bool resizable ) wxOVERRIDE ;
virtual void UnsetAsSortKey ( ) wxOVERRIDE ;
virtual void SetSortable ( bool sortable ) wxOVERRIDE ;
virtual void SetSortOrder ( bool ascending ) wxOVERRIDE ;
virtual void SetTitle ( wxString const & title ) wxOVERRIDE ;
virtual void SetWidth ( int width ) wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
// implementation only
2009-10-12 09:59:32 -04:00
wxDataViewColumnNativeData * GetNativeData ( ) const
2009-05-08 13:07:50 -04:00
{
2009-10-12 09:59:32 -04:00
return m_NativeDataPtr ;
2009-05-08 13:07:50 -04:00
}
2009-08-21 06:41:26 -04:00
2009-05-08 13:07:50 -04:00
void SetNativeData ( wxDataViewColumnNativeData * newNativeDataPtr ) ; // class takes ownership of pointer
2009-10-31 11:57:51 -04:00
int GetWidthVariable ( ) const
{
return m_width ;
}
2009-05-08 13:07:50 -04:00
void SetWidthVariable ( int NewWidth )
{
m_width = NewWidth ;
}
2009-06-15 14:35:24 -04:00
void SetSortOrderVariable ( bool NewOrder )
{
m_ascending = NewOrder ;
}
2009-05-08 13:07:50 -04:00
private :
// common part of all ctors
void InitCommon ( int width , wxAlignment align , int flags )
{
m_ascending = true ;
m_flags = flags & ~ wxDATAVIEW_COL_HIDDEN ; // TODO
m_maxWidth = 30000 ;
m_minWidth = 0 ;
m_alignment = align ;
2011-01-07 13:26:58 -05:00
SetWidth ( width ) ;
2009-05-08 13:07:50 -04:00
}
bool m_ascending ; // sorting order
int m_flags ; // flags for the column
int m_maxWidth ; // maximum width for the column
int m_minWidth ; // minimum width for the column
int m_width ; // column width
wxAlignment m_alignment ; // column header alignment
wxDataViewColumnNativeData * m_NativeDataPtr ; // storing environment dependent data for the native implementation
wxString m_title ; // column title
} ;
//
// type definitions related to wxDataViewColumn
//
WX_DEFINE_ARRAY ( wxDataViewColumn * , wxDataViewColumnPtrArrayType ) ;
// ---------------------------------------------------------
// wxDataViewCtrl
// ---------------------------------------------------------
class WXDLLIMPEXP_ADV wxDataViewCtrl : public wxDataViewCtrlBase
{
public :
// Constructors / destructor:
wxDataViewCtrl ( )
{
2009-10-12 09:59:32 -04:00
Init ( ) ;
2009-05-08 13:07:50 -04:00
}
2010-08-08 07:37:57 -04:00
wxDataViewCtrl ( wxWindow * parent ,
wxWindowID winid ,
const wxPoint & pos = wxDefaultPosition ,
const wxSize & size = wxDefaultSize ,
long style = 0 ,
const wxValidator & validator = wxDefaultValidator ,
2019-10-22 06:34:29 -04:00
const wxString & name = wxASCII_STR ( wxDataViewCtrlNameStr ) )
2009-05-08 13:07:50 -04:00
{
2009-10-12 09:59:32 -04:00
Init ( ) ;
2010-08-08 07:37:57 -04:00
Create ( parent , winid , pos , size , style , validator , name ) ;
2009-05-08 13:07:50 -04:00
}
~ wxDataViewCtrl ( ) ;
2010-08-08 07:37:57 -04:00
bool Create ( wxWindow * parent ,
wxWindowID winid ,
const wxPoint & pos = wxDefaultPosition ,
const wxSize & size = wxDefaultSize ,
long style = 0 ,
const wxValidator & validator = wxDefaultValidator ,
2019-10-22 06:34:29 -04:00
const wxString & name = wxASCII_STR ( wxDataViewCtrlNameStr ) ) ;
2009-05-08 13:07:50 -04:00
2012-01-14 11:52:01 -05:00
virtual wxWindow * GetMainWindow ( ) // not used for the native implementation
2009-05-08 13:07:50 -04:00
{
return this ;
}
// inherited methods from wxDataViewCtrlBase:
2015-11-22 03:42:01 -05:00
virtual bool AssociateModel ( wxDataViewModel * model ) wxOVERRIDE ;
virtual bool AppendColumn ( wxDataViewColumn * columnPtr ) wxOVERRIDE ;
virtual bool ClearColumns ( ) wxOVERRIDE ;
virtual bool DeleteColumn ( wxDataViewColumn * columnPtr ) wxOVERRIDE ;
virtual wxDataViewColumn * GetColumn ( unsigned int pos ) const wxOVERRIDE ;
virtual unsigned int GetColumnCount ( ) const wxOVERRIDE ;
virtual int GetColumnPosition ( const wxDataViewColumn * columnPtr ) const wxOVERRIDE ;
virtual wxDataViewColumn * GetSortingColumn ( ) const wxOVERRIDE ;
virtual bool InsertColumn ( unsigned int pos , wxDataViewColumn * col ) wxOVERRIDE ;
virtual bool PrependColumn ( wxDataViewColumn * columnPtr ) wxOVERRIDE ;
virtual void Collapse ( const wxDataViewItem & item ) wxOVERRIDE ;
virtual void EnsureVisible ( const wxDataViewItem & item , const wxDataViewColumn * columnPtr = NULL ) wxOVERRIDE ;
virtual bool IsExpanded ( const wxDataViewItem & item ) const wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
virtual unsigned int GetCount ( ) const ;
2017-04-06 18:04:27 -04:00
virtual int GetCountPerPage ( ) const wxOVERRIDE ;
2012-02-02 09:19:30 -05:00
virtual wxRect GetItemRect ( const wxDataViewItem & item ,
2015-11-22 03:42:01 -05:00
const wxDataViewColumn * columnPtr = NULL ) const wxOVERRIDE ;
virtual int GetSelectedItemsCount ( ) const wxOVERRIDE ;
virtual int GetSelections ( wxDataViewItemArray & sel ) const wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
2017-04-06 18:04:27 -04:00
virtual wxDataViewItem GetTopItem ( ) const wxOVERRIDE ;
2015-11-22 03:42:01 -05:00
virtual void HitTest ( const wxPoint & point , wxDataViewItem & item , wxDataViewColumn * & columnPtr ) const wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
2016-10-09 07:53:09 -04:00
virtual bool SetRowHeight ( int rowHeight ) wxOVERRIDE ;
2015-11-22 03:42:01 -05:00
virtual bool IsSelected ( const wxDataViewItem & item ) const wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
2015-11-22 03:42:01 -05:00
virtual void SelectAll ( ) wxOVERRIDE ;
virtual void Select ( const wxDataViewItem & item ) wxOVERRIDE ;
virtual void SetSelections ( const wxDataViewItemArray & sel ) wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
2015-11-22 03:42:01 -05:00
virtual void Unselect ( const wxDataViewItem & item ) wxOVERRIDE ;
virtual void UnselectAll ( ) wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
//
// implementation
//
// returns a pointer to the native implementation
2009-10-12 09:59:32 -04:00
wxDataViewWidgetImpl * GetDataViewPeer ( ) const ;
2009-05-08 13:07:50 -04:00
// 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
2009-10-12 09:59:32 -04:00
void FinishCustomItemEditing ( ) ;
2019-01-30 11:28:08 -05:00
2015-11-22 03:42:01 -05:00
virtual void EditItem ( const wxDataViewItem & item , const wxDataViewColumn * column ) wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
// 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
{
2009-10-12 09:59:32 -04:00
return m_ColumnPtrs [ n ] ;
2009-05-08 13:07:50 -04:00
}
// returns the current being rendered item of the customized renderer (this item is only valid during editing)
wxDataViewItem const & GetCustomRendererItem ( ) const
{
2009-10-12 09:59:32 -04:00
return m_CustomRendererItem ;
2009-05-08 13:07:50 -04:00
}
// returns a pointer to a customized renderer (this pointer is only valid during editing)
wxDataViewCustomRenderer * GetCustomRendererPtr ( ) const
{
2009-10-12 09:59:32 -04:00
return m_CustomRendererPtr ;
2009-05-08 13:07:50 -04:00
}
// checks if currently a delete process is running
bool IsDeleting ( ) const
{
2009-10-12 09:59:32 -04:00
return m_Deleting ;
2009-05-08 13:07:50 -04:00
}
// with CG, we need to get the context from an kEventControlDraw event
// unfortunately, the DataBrowser callbacks don't provide the context
// and we need it, so we need to set/remove it before and after draw
// events so we can access it in the callbacks.
void MacSetDrawingContext ( void * context )
{
2009-10-12 09:59:32 -04:00
m_cgContext = context ;
2009-05-08 13:07:50 -04:00
}
void * MacGetDrawingContext ( ) const
{
2009-10-12 09:59:32 -04:00
return m_cgContext ;
2009-05-08 13:07:50 -04:00
}
// sets the currently being edited item of the custom renderer
void SetCustomRendererItem ( wxDataViewItem const & NewItem )
{
2009-10-12 09:59:32 -04:00
m_CustomRendererItem = NewItem ;
2009-05-08 13:07:50 -04:00
}
// sets the custom renderer
void SetCustomRendererPtr ( wxDataViewCustomRenderer * NewCustomRendererPtr )
{
2009-10-12 09:59:32 -04:00
m_CustomRendererPtr = NewCustomRendererPtr ;
2009-05-08 13:07:50 -04:00
}
// sets the flag indicating a deletion process:
void SetDeleting ( bool deleting )
{
2009-10-12 09:59:32 -04:00
m_Deleting = deleting ;
2009-05-08 13:07:50 -04:00
}
2020-12-21 19:58:46 -05:00
void AdjustAutosizedColumns ( ) const ;
2015-11-22 03:42:01 -05:00
virtual wxDataViewColumn * GetCurrentColumn ( ) const wxOVERRIDE ;
2012-01-17 09:05:07 -05:00
2015-11-22 03:42:01 -05:00
virtual wxVisualAttributes GetDefaultAttributes ( ) const wxOVERRIDE
2009-05-08 13:07:50 -04:00
{
return GetClassDefaultAttributes ( GetWindowVariant ( ) ) ;
}
static wxVisualAttributes
GetClassDefaultAttributes ( wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL ) ;
protected :
// inherited methods from wxDataViewCtrlBase
2015-11-22 03:42:01 -05:00
virtual void DoSetExpanderColumn ( ) wxOVERRIDE ;
virtual void DoSetIndent ( ) wxOVERRIDE ;
2009-05-08 13:07:50 -04:00
2020-12-05 08:41:09 -05:00
virtual void DoExpand ( const wxDataViewItem & item , bool expandChildren ) wxOVERRIDE ;
2016-03-22 16:22:36 -04:00
2015-11-22 03:42:01 -05:00
virtual wxSize DoGetBestSize ( ) const wxOVERRIDE ;
2009-05-11 08:53:19 -04:00
2009-05-08 13:07:50 -04:00
// event handling
void OnSize ( wxSizeEvent & event ) ;
private :
// initializing of local variables:
void Init ( ) ;
2015-11-22 03:42:01 -05:00
virtual wxDataViewItem DoGetCurrentItem ( ) const wxOVERRIDE ;
virtual void DoSetCurrentItem ( const wxDataViewItem & item ) wxOVERRIDE ;
2010-08-10 08:53:03 -04:00
2009-05-08 13:07:50 -04:00
//
// variables
//
bool m_Deleting ; // flag indicating if a delete process is running; this flag is necessary because the notifier indicating an item deletion in the model may be called
// after the actual deletion of the item; then, native callback functions/delegates may try to update data of variables that are already deleted;
// if this flag is set all native variable update requests will be ignored
void * m_cgContext ; // pointer to core graphics context
wxDataViewCustomRenderer * m_CustomRendererPtr ; // pointer to a valid custom renderer while editing; this class does NOT own the pointer
wxDataViewItem m_CustomRendererItem ; // currently edited item by the customrenderer; it is invalid while not editing a custom item
wxDataViewColumnPtrArrayType m_ColumnPtrs ; // all column pointers are stored in an array
2020-12-05 16:45:13 -05:00
class wxOSXDataViewModelNotifier * m_ModelNotifier ; // stores the model notifier for the control (does not own the notifier)
2012-05-20 16:29:09 -04:00
2009-05-08 13:07:50 -04:00
// wxWidget internal stuff:
2015-04-23 07:49:01 -04:00
wxDECLARE_DYNAMIC_CLASS ( wxDataViewCtrl ) ;
wxDECLARE_NO_COPY_CLASS ( wxDataViewCtrl ) ;
wxDECLARE_EVENT_TABLE ( ) ;
2009-05-08 13:07:50 -04:00
} ;
# endif // _WX_DATAVIEWCTRL_OSX_H_