2007-06-06 23:40:24 +00:00
/////////////////////////////////////////////////////////////////////////////
// Name: wx/mac/carbon/dataview.h
// Purpose: wxDataViewCtrl native implementation header
// Author:
// Id: $Id$
// Copyright: (c) 2007
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
2007-10-27 19:45:20 +00:00
# ifndef _WX_MACCARBONDATAVIEWCTRL_H_
# define _WX_MACCARBONDATAVIEWCTRL_H_
2007-06-06 23:40:24 +00:00
2007-11-17 21:20:27 +00:00
// --------------------------------------------------------
// Type definitions to mask native types
// --------------------------------------------------------
typedef void * WXDataBrowserItemDataRef ;
2007-10-27 22:24:35 +00:00
typedef unsigned long WXDataBrowserPropertyType ;
2007-11-17 21:20:27 +00:00
typedef wxUint32 WXDataBrowserPropertyID ;
2007-06-06 23:40:24 +00:00
// ---------------------------------------------------------
// wxDataViewRenderer
// ---------------------------------------------------------
2007-11-17 21:20:27 +00:00
class WXDLLIMPEXP_ADV wxDataViewRenderer : public wxDataViewRendererBase
2007-06-06 23:40:24 +00:00
{
public :
//
// constructors / destructor
//
wxDataViewRenderer ( wxString const & varianttype , wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT , int align = wxDVR_DEFAULT_ALIGNMENT ) ;
//
// inherited methods from wxDataViewRendererBase
//
virtual int GetAlignment ( void ) const
{
return this - > m_alignment ;
}
virtual wxDataViewCellMode GetMode ( void ) const
{
return this - > m_mode ;
}
virtual bool GetValue ( wxVariant & value ) const
{
value = this - > m_value ;
return true ;
}
virtual void SetAlignment ( int WXUNUSED ( align ) ) // is always identical to the header alignment
{
}
virtual void SetMode ( wxDataViewCellMode mode ) ;
virtual bool SetValue ( wxVariant const & newValue )
{
this - > m_value = newValue ;
return true ;
}
//
// implementation
//
2007-11-17 21:20:27 +00:00
WXDataBrowserItemDataRef GetDataReference ( void ) const
2007-06-06 23:40:24 +00:00
{
return this - > m_dataReference ;
}
wxVariant const & GetValue ( void ) const
{
return this - > m_value ;
}
2007-11-17 21:20:27 +00:00
virtual WXDataBrowserPropertyType GetPropertyType ( void ) const = 0 ;
2007-06-06 23:40:24 +00:00
virtual bool Render ( void ) = 0 ; // a call to the appropriate data browser function filling the data reference with the stored datum;
// returns 'true' if the data value could be rendered, 'false' otherwise
2007-11-17 21:20:27 +00:00
void SetDataReference ( WXDataBrowserItemDataRef const & newDataReference )
2007-06-06 23:40:24 +00:00
{
this - > m_dataReference = newDataReference ;
}
private :
//
// variables
//
2007-11-17 21:20:27 +00:00
WXDataBrowserItemDataRef m_dataReference ; // data reference of the data browser; the data will be assigned to this reference during rendering
2007-06-06 23:40:24 +00:00
int m_alignment ; // contains the alignment flags
wxDataViewCellMode m_mode ; // storing the mode that determines how the cell is going to be shown
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 ) ;
2007-10-20 20:09:10 +00:00
void RenderText ( const wxString & text , int xoffset , wxRect cell , wxDC * dc , int state ) ;
2007-06-06 23:40:24 +00:00
//
// methods handling render space
//
virtual wxSize GetSize ( ) const = 0 ;
//
// methods handling user actions
//
virtual bool Render ( wxRect cell , wxDC * dc , int state ) = 0 ;
2007-08-13 15:56:28 +00:00
virtual bool Activate ( wxRect WXUNUSED ( cell ) , wxDataViewModel * WXUNUSED ( model ) , unsigned int WXUNUSED ( col ) , unsigned int WXUNUSED ( row ) )
2007-06-06 23:40:24 +00:00
{
return false ;
}
2007-08-13 15:56:28 +00:00
virtual bool LeftClick ( wxPoint WXUNUSED ( cursor ) , wxRect WXUNUSED ( cell ) , wxDataViewModel * WXUNUSED ( model ) , unsigned int WXUNUSED ( col ) , unsigned int WXUNUSED ( row ) )
2007-06-06 23:40:24 +00:00
{
return false ;
}
2007-08-13 15:56:28 +00:00
virtual bool RightClick ( wxPoint WXUNUSED ( cursor ) , wxRect WXUNUSED ( cell ) , wxDataViewModel * WXUNUSED ( model ) , unsigned int WXUNUSED ( col ) , unsigned int WXUNUSED ( row ) )
2007-06-06 23:40:24 +00:00
{
return false ;
}
2007-08-13 15:56:28 +00:00
virtual bool StartDrag ( wxPoint WXUNUSED ( cursor ) , wxRect WXUNUSED ( cell ) , wxDataViewModel * WXUNUSED ( model ) , unsigned int WXUNUSED ( col ) , unsigned int WXUNUSED ( row ) )
2007-06-06 23:40:24 +00:00
{
return false ;
}
//
// in-place editing
//
virtual void CancelEditing ( )
{
}
virtual wxControl * CreateEditorCtrl ( wxWindow * WXUNUSED ( parent ) , wxRect WXUNUSED ( labelRect ) , const wxVariant & WXUNUSED ( value ) )
{
return NULL ;
}
virtual bool FinishEditing ( )
{
return false ;
}
wxControl * GetEditorCtrl ( void ) const
{
return this - > m_editorCtrlPtr ;
}
virtual bool GetValueFromEditorCtrl ( wxControl * WXUNUSED ( editor ) , wxVariant & WXUNUSED ( value ) )
{
return false ;
}
virtual bool HasEditorCtrl ( void )
{
return false ;
}
2007-09-13 21:23:48 +00:00
virtual bool StartEditing ( wxDataViewItem const & WXUNUSED ( item ) , wxRect WXUNUSED ( labelRect ) )
2007-06-06 23:40:24 +00:00
{
return false ;
}
//
// device context handling
//
virtual wxDC * GetDC ( void ) ; // creates a device context and keeps it
//
// implementation
//
virtual bool Render ( void ) ; // declared in wxDataViewRenderer but will not be used here, therefore calling this function will
2007-08-30 13:09:20 +00:00
// return 'true' without having done anything
2007-06-06 23:40:24 +00:00
2007-11-17 21:20:27 +00:00
virtual WXDataBrowserPropertyType GetPropertyType ( void ) const ;
2007-06-06 23:40:24 +00:00
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 Render ( void ) ;
//
// implementation
//
2007-11-17 21:20:27 +00:00
virtual WXDataBrowserPropertyType GetPropertyType ( void ) const ;
2007-06-06 23:40:24 +00:00
protected :
private :
DECLARE_DYNAMIC_CLASS_NO_COPY ( wxDataViewTextRenderer )
} ;
2007-11-08 22:51:58 +00:00
// ---------------------------------------------------------
// 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 )
} ;
2007-06-06 23:40:24 +00:00
// ---------------------------------------------------------
// 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 Render ( void ) ;
//
// implementation
//
2007-11-17 21:20:27 +00:00
virtual WXDataBrowserPropertyType GetPropertyType ( void ) const ;
2007-06-06 23:40:24 +00:00
protected :
private :
DECLARE_DYNAMIC_CLASS_NO_COPY ( wxDataViewBitmapRenderer )
} ;
// ---------------------------------------------------------
// wxDataViewToggleRenderer
// ---------------------------------------------------------
2007-08-30 13:09:20 +00:00
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 Render ( void ) ;
//
// implementation
//
2007-11-17 21:20:27 +00:00
virtual WXDataBrowserPropertyType GetPropertyType ( void ) const ;
2007-08-30 13:09:20 +00:00
protected :
private :
DECLARE_DYNAMIC_CLASS_NO_COPY ( wxDataViewIconTextRenderer )
} ;
// ---------------------------------------------------------
// wxDataViewToggleRenderer
// ---------------------------------------------------------
2007-06-06 23:40:24 +00:00
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 Render ( void ) ;
//
// implementation
//
2007-11-17 21:20:27 +00:00
virtual WXDataBrowserPropertyType GetPropertyType ( void ) const ;
2007-06-06 23:40:24 +00:00
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 Render ( void ) ;
//
// implementation
//
2007-11-17 21:20:27 +00:00
virtual WXDataBrowserPropertyType GetPropertyType ( void ) const ;
2007-06-06 23:40:24 +00:00
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 Render ( void ) ;
//
// implementation
//
2007-11-17 21:20:27 +00:00
virtual WXDataBrowserPropertyType GetPropertyType ( void ) const ;
2007-06-06 23:40:24 +00:00
protected :
private :
DECLARE_DYNAMIC_CLASS_NO_COPY ( wxDataViewDateRenderer )
} ;
// ---------------------------------------------------------
// wxDataViewColumn
// ---------------------------------------------------------
class WXDLLIMPEXP_ADV wxDataViewColumn : public wxDataViewColumnBase
{
public :
//
// constructors / destructor
//
wxDataViewColumn ( wxString const & title , wxDataViewRenderer * renderer , unsigned int model_column , int width = 80 , wxAlignment align = wxALIGN_CENTER ,
int flags = wxDATAVIEW_COL_RESIZABLE ) ;
wxDataViewColumn ( wxBitmap const & bitmap , wxDataViewRenderer * renderer , unsigned int model_column , int width = 80 , wxAlignment align = wxALIGN_CENTER ,
int flags = wxDATAVIEW_COL_RESIZABLE ) ;
//
// inherited methods from wxDataViewColumnBase
//
virtual wxAlignment GetAlignment ( void ) const
{
return this - > m_alignment ;
}
virtual int GetFlags ( void ) const
{
return this - > m_flags ;
}
virtual int GetMaxWidth ( void ) const
{
return this - > m_maxWidth ;
}
virtual int GetMinWidth ( void ) const
{
return this - > m_minWidth ;
}
virtual wxString GetTitle ( void ) const
{
return this - > m_title ;
}
virtual int GetWidth ( void ) const
{
return this - > m_width ;
}
virtual bool IsHidden ( void ) const
{
return false ; // not implemented
}
virtual bool IsResizeable ( void ) const
{
return ( ( this - > m_flags & wxDATAVIEW_COL_RESIZABLE ) ! = 0 ) ;
}
virtual bool IsSortable ( void ) const
{
return ( ( this - > m_flags & wxDATAVIEW_COL_SORTABLE ) ! = 0 ) ;
}
virtual bool IsSortOrderAscending ( void ) const
{
return this - > m_ascending ;
}
virtual void SetAlignment ( wxAlignment align ) ;
virtual void SetBitmap ( wxBitmap const & bitmap ) ;
virtual void SetFlags ( int flags ) ;
virtual void SetHidden ( bool WXUNUSED ( hidden ) )
{
}
virtual void SetMaxWidth ( int maxWidth ) ;
virtual void SetMinWidth ( int minWidth ) ;
virtual void SetResizeable ( bool resizeable ) ;
virtual void SetSortable ( bool sortable ) ;
virtual void SetSortOrder ( bool ascending ) ;
virtual void SetTitle ( wxString const & title ) ;
virtual void SetWidth ( int width ) ;
//
// implementation
//
2007-10-27 19:45:20 +00:00
WXDataBrowserPropertyID GetPropertyID ( ) const
2007-06-06 23:40:24 +00:00
{
return this - > m_propertyID ;
}
2007-10-27 19:45:20 +00:00
void SetPropertyID ( WXDataBrowserPropertyID newID )
2007-06-06 23:40:24 +00:00
{
this - > m_propertyID = newID ;
}
2007-09-13 21:23:48 +00:00
void SetWidthVariable ( int NewWidth )
{
this - > m_width = NewWidth ;
}
2007-06-06 23:40:24 +00:00
protected :
private :
//
// variables
//
bool m_ascending ; // sorting order
2007-10-27 19:45:20 +00:00
WXDataBrowserPropertyID m_propertyID ; // each column is identified by its unique property ID (NOT by the column index)
2007-06-06 23:40:24 +00:00
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
wxString m_title ; // column title
// wxWidget internal stuff:
DECLARE_DYNAMIC_CLASS_NO_COPY ( wxDataViewColumn )
} ;
// ---------------------------------------------------------
// wxDataViewCtrl
// ---------------------------------------------------------
class WXDLLIMPEXP_ADV wxDataViewCtrl : public wxDataViewCtrlBase
{
public :
// Constructors / destructor:
2007-08-13 15:56:28 +00:00
wxDataViewCtrl ( )
{
this - > Init ( ) ;
}
wxDataViewCtrl ( wxWindow * parent , wxWindowID id , wxPoint const & pos = wxDefaultPosition , wxSize const & size = wxDefaultSize , long style = 0 ,
wxValidator const & validator = wxDefaultValidator )
{
this - > Init ( ) ;
this - > Create ( parent , id , pos , size , style , validator ) ;
}
// explicit control creation
bool Create ( wxWindow * parent , wxWindowID id , wxPoint const & pos = wxDefaultPosition , wxSize const & size = wxDefaultSize , long style = 0 ,
wxValidator const & validator = wxDefaultValidator ) ;
virtual wxControl * GetMainWindow ( void ) // should disappear as it is not of any use for the native implementation
{
return this ;
}
2007-08-30 13:09:20 +00:00
// inherited methods from 'wxDataViewCtrlBase':
virtual bool AssociateModel ( wxDataViewModel * model ) ;
virtual bool AppendColumn ( wxDataViewColumn * columnPtr ) ;
virtual bool ClearColumns ( void ) ;
virtual bool DeleteColumn ( wxDataViewColumn * columnPtr ) ;
virtual wxDataViewColumn * GetColumn ( unsigned int pos ) const ;
virtual unsigned int GetColumnCount ( void ) const ;
2007-09-13 21:23:48 +00:00
virtual int GetColumnPosition ( wxDataViewColumn const * columnPtr ) const ;
2007-11-17 21:20:27 +00:00
virtual bool PrependColumn ( wxDataViewColumn * columnPtr ) ;
2007-09-13 12:57:40 +00:00
2007-08-30 13:09:20 +00:00
virtual void Collapse ( wxDataViewItem const & item ) ;
2007-08-25 13:15:16 +00:00
virtual void EnsureVisible ( wxDataViewItem const & item , wxDataViewColumn const * columnPtr = NULL ) ;
2007-08-30 13:09:20 +00:00
virtual void Expand ( wxDataViewItem const & item ) ;
2007-08-25 13:15:16 +00:00
2007-09-13 21:23:48 +00:00
virtual wxDataViewColumn * GetSortingColumn ( void ) const ;
2007-09-13 12:47:49 +00:00
virtual unsigned int GetCount ( void ) const ;
2007-08-25 13:15:16 +00:00
virtual wxRect GetItemRect ( wxDataViewItem const & item , wxDataViewColumn const * columnPtr ) const ;
virtual wxDataViewItem GetSelection ( void ) const ;
virtual int GetSelections ( wxDataViewItemArray & sel ) const ;
virtual void HitTest ( wxPoint const & point , wxDataViewItem & item , wxDataViewColumn * & columnPtr ) const ;
virtual bool IsSelected ( wxDataViewItem const & item ) const ;
virtual void SelectAll ( void ) ;
virtual void Select ( wxDataViewItem const & item ) ;
virtual void SetSelections ( wxDataViewItemArray const & sel ) ;
2007-06-06 23:40:24 +00:00
2007-08-25 13:15:16 +00:00
virtual void Unselect ( wxDataViewItem const & item ) ;
virtual void UnselectAll ( void ) ;
2007-08-30 13:09:20 +00:00
2007-06-06 23:40:24 +00:00
//
// implementation
//
2007-08-25 13:15:16 +00:00
// adds all children of the passed parent to the control; if 'parentItem' is invalid the root(s) is/are added:
2007-08-13 15:56:28 +00:00
void AddChildrenLevel ( wxDataViewItem const & parentItem ) ;
2007-08-30 13:09:20 +00:00
// returns a pointer to a column;
// in case the pointer cannot be found NULL is returned:
2007-10-27 19:45:20 +00:00
wxDataViewColumn * GetColumnPtr ( WXDataBrowserPropertyID propertyID ) const ;
2007-08-30 13:09:20 +00:00
2007-08-25 13:15:16 +00:00
// checks if currently a delete process is running:
bool IsDeleting ( void ) const
{
return this - > m_Deleting ;
}
2007-06-06 23:40:24 +00: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 )
{
this - > m_cgContext = context ;
}
void * MacGetDrawingContext ( void ) const
{
return this - > m_cgContext ;
}
2007-08-25 13:15:16 +00:00
/// sets the flag indicating a deletion process:
void SetDeleting ( bool deleting )
{
this - > m_Deleting = deleting ;
}
2007-06-06 23:40:24 +00:00
protected :
2007-08-13 15:56:28 +00:00
// inherited methods from wxDataViewCtrlBase:
virtual void DoSetExpanderColumn ( void ) ;
virtual void DoSetIndent ( void ) ;
2007-06-06 23:40:24 +00:00
// event handling:
void OnSize ( wxSizeEvent & event ) ;
private :
2007-08-30 13:09:20 +00:00
// type definitions:
2007-10-27 19:45:20 +00:00
WX_DECLARE_HASH_MAP ( WXDataBrowserPropertyID , wxDataViewColumn * , wxIntegerHash , wxIntegerEqual , ColumnPointerHashMapType ) ;
2007-08-30 13:09:20 +00:00
2007-06-06 23:40:24 +00:00
// initializing of local variables:
void Init ( void ) ;
///
// variables
//
2007-08-25 13:15:16 +00:00
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, the callback function "wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc" may
// try to update data into variables that are already deleted; this flag will ignore all variable update requests during item deletion
2007-06-06 23:40:24 +00:00
void * m_cgContext ; // pointer to core graphics context
2007-08-25 13:15:16 +00:00
2007-08-30 13:09:20 +00:00
ColumnPointerHashMapType m_ColumnPointers ; // all column pointers are stored in a hash map with the property ID as a key
2007-06-06 23:40:24 +00:00
// wxWidget internal stuff:
DECLARE_DYNAMIC_CLASS ( wxDataViewCtrl )
DECLARE_NO_COPY_CLASS ( wxDataViewCtrl )
DECLARE_EVENT_TABLE ( )
} ;
2007-10-27 19:45:20 +00:00
# endif // _WX_MACCARBONDATAVIEWCTRL_H_