X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/07a84e7bbb3ed346fff59aa3570a1f687a3c4d7b..7e083675342b17762735ef2223fb9d264d6fc937:/include/wx/gtk/dataview.h diff --git a/include/wx/gtk/dataview.h b/include/wx/gtk/dataview.h index 2dac9cc212..fad45a6b48 100644 --- a/include/wx/gtk/dataview.h +++ b/include/wx/gtk/dataview.h @@ -7,264 +7,225 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef __GTKDATAVIEWCTRLH__ -#define __GTKDATAVIEWCTRLH__ +#ifndef _WX_GTKDATAVIEWCTRL_H_ +#define _WX_GTKDATAVIEWCTRL_H_ -#include "wx/defs.h" -#include "wx/object.h" #include "wx/list.h" -#include "wx/control.h" -// --------------------------------------------------------- -// classes -// --------------------------------------------------------- +class WXDLLIMPEXP_FWD_ADV wxDataViewCtrlInternal; -class WXDLLIMPEXP_CORE wxDataViewCtrl; +struct _GtkTreePath; -// --------------------------------------------------------- -// wxDataViewRenderer -// --------------------------------------------------------- +// --------------------------------------------------------- +// wxDataViewColumn +// --------------------------------------------------------- -class wxDataViewRenderer: public wxDataViewRendererBase +class WXDLLIMPEXP_ADV wxDataViewColumn: public wxDataViewColumnBase { public: - wxDataViewRenderer( const wxString &varianttype, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); + 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 ); - // implementation - void* GetGtkHandle() { return m_renderer; } -protected: - // holds the GTK handle - void* m_renderer; + // setters: -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewTextRenderer -// --------------------------------------------------------- + virtual void SetTitle( const wxString &title ); + virtual void SetBitmap( const wxBitmap &bitmap ); -class wxDataViewTextRenderer: public wxDataViewRenderer -{ -public: - wxDataViewTextRenderer( const wxString &varianttype = wxT("string"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); + virtual void SetOwner( wxDataViewCtrl *owner ); - bool SetValue( const wxVariant &value ); - bool GetValue( wxVariant &value ); - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewBitmapRenderer -// --------------------------------------------------------- + virtual void SetAlignment( wxAlignment align ); -class wxDataViewBitmapRenderer: public wxDataViewRenderer -{ -public: - wxDataViewBitmapRenderer( const wxString &varianttype = wxT("wxBitmap"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); + virtual void SetSortable( bool sortable ); + virtual void SetSortOrder( bool ascending ); - bool SetValue( const wxVariant &value ); - bool GetValue( wxVariant &value ); - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewToggleRenderer -// --------------------------------------------------------- + virtual void SetResizeable( bool resizable ); + virtual void SetHidden( bool hidden ); -class wxDataViewToggleRenderer: public wxDataViewRenderer -{ -public: - wxDataViewToggleRenderer( const wxString &varianttype = wxT("bool"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); + virtual void SetMinWidth( int minWidth ); + virtual void SetWidth( int width ); - bool SetValue( const wxVariant &value ); - bool GetValue( wxVariant &value ); - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewCustomRenderer -// --------------------------------------------------------- + virtual void SetReorderable( bool reorderable ); -class wxDataViewCustomRenderer: public wxDataViewRenderer -{ -public: - wxDataViewCustomRenderer( const wxString &varianttype = wxT("string"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, - bool no_init = false ); - virtual ~wxDataViewCustomRenderer(); - bool Init(); - - virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0; - virtual wxSize GetSize() = 0; - - virtual bool Activate( wxRect cell, - wxDataViewListModel *model, unsigned int col, unsigned int row ) - { return false; } - - virtual bool LeftClick( wxPoint cursor, wxRect cell, - wxDataViewListModel *model, unsigned int col, unsigned int row ) - { return false; } - virtual bool RightClick( wxPoint cursor, wxRect cell, - wxDataViewListModel *model, unsigned int col, unsigned int row ) - { return false; } - virtual bool StartDrag( wxPoint cursor, wxRect cell, - wxDataViewListModel *model, unsigned int col, unsigned int row ) - { return false; } - - // Create DC on request - virtual wxDC *GetDC(); - -private: - wxDC *m_dc; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewProgressRenderer -// --------------------------------------------------------- + virtual void SetFlags(int flags) { SetIndividualFlags(flags); } -class wxDataViewProgressRenderer: public wxDataViewCustomRenderer -{ -public: - wxDataViewProgressRenderer( const wxString &label = wxEmptyString, - const wxString &varianttype = wxT("long"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); - virtual ~wxDataViewProgressRenderer(); - - bool SetValue( const wxVariant &value ); - - virtual bool Render( wxRect cell, wxDC *dc, int state ); - virtual wxSize GetSize(); - -private: - wxString m_label; - int m_value; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewDateRenderer -// --------------------------------------------------------- + // getters: -class wxDataViewDateRenderer: public wxDataViewCustomRenderer -{ -public: - wxDataViewDateRenderer( const wxString &varianttype = wxT("datetime"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE ); - - bool SetValue( const wxVariant &value ); - - virtual bool Render( wxRect cell, wxDC *dc, int state ); - virtual wxSize GetSize(); - virtual bool Activate( wxRect cell, - wxDataViewListModel *model, unsigned int col, unsigned int row ); - -private: - wxDateTime m_date; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewColumn -// --------------------------------------------------------- + virtual wxString GetTitle() const; + virtual wxAlignment GetAlignment() const; -class WXDLLIMPEXP_CORE wxDataViewColumn: public wxDataViewColumnBase -{ -public: - wxDataViewColumn( const wxString &title, wxDataViewRenderer *renderer, unsigned int model_column, - int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *renderer, unsigned int model_column, - int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE ); - virtual ~wxDataViewColumn(); + virtual bool IsSortable() const; + virtual bool IsSortOrderAscending() const; + virtual bool IsSortKey() const; + + virtual bool IsResizeable() const; + virtual bool IsHidden() const; + + virtual int GetWidth() const; + virtual int GetMinWidth() const; + + virtual bool IsReorderable() const; + + virtual int GetFlags() const { return GetFromIndividualFlags(); } - virtual void SetTitle( const wxString &title ); - virtual void SetBitmap( const wxBitmap &bitmap ); - - virtual int GetWidth(); - - virtual void SetFixedWidth( int width ); - virtual int GetFixedWidth(); - // implementation - void* GetGtkHandle() { return m_column; } + GtkWidget* GetGtkHandle() const { return m_column; } private: // holds the GTK handle - void* m_column; + GtkWidget *m_column; -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn) + // holds GTK handles for title/bitmap in the header + GtkWidget *m_image; + GtkWidget *m_label; + + // delayed connection to mouse events + friend class wxDataViewCtrl; + void OnInternalIdle(); + bool m_isConnected; + + void Init(wxAlignment align, int flags, int width); }; -// --------------------------------------------------------- +WX_DECLARE_LIST_WITH_DECL(wxDataViewColumn, wxDataViewColumnList, + class WXDLLIMPEXP_ADV); + +// --------------------------------------------------------- // wxDataViewCtrl -// --------------------------------------------------------- +// --------------------------------------------------------- -class WXDLLIMPEXP_CORE wxDataViewCtrl: public wxDataViewCtrlBase +class WXDLLIMPEXP_ADV wxDataViewCtrl: public wxDataViewCtrlBase { public: - wxDataViewCtrl() + wxDataViewCtrl() { Init(); } - + wxDataViewCtrl( wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator ) + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxDataViewCtrlNameStr ) { - Create(parent, id, pos, size, style, validator ); - } - - virtual ~wxDataViewCtrl(); + Init(); - void Init(); + Create(parent, id, pos, size, style, validator, name); + } bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator ); + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxDataViewCtrlNameStr); + + virtual ~wxDataViewCtrl(); - virtual bool AssociateModel( wxDataViewListModel *model ); + virtual bool AssociateModel( wxDataViewModel *model ); + + virtual bool PrependColumn( wxDataViewColumn *col ); virtual bool AppendColumn( wxDataViewColumn *col ); - - virtual void SetSelection( int row ); // -1 for unselect - virtual void SetSelectionRange( unsigned int from, unsigned int to ); - virtual void SetSelections( const wxArrayInt& aSelections); - virtual void Unselect( unsigned int row ); - - virtual bool IsSelected( unsigned int row ) const; - virtual int GetSelection() const; - virtual int GetSelections(wxArrayInt& aSelections) const; - - -private: - friend class wxDataViewCtrlDC; - friend class wxGtkDataViewListModelNotifier; - GtkWidget *m_treeview; - wxDataViewListModelNotifier *m_notifier; - + virtual bool InsertColumn( unsigned int pos, wxDataViewColumn *col ); + + virtual unsigned int GetColumnCount() const; + virtual wxDataViewColumn* GetColumn( unsigned int pos ) const; + virtual bool DeleteColumn( wxDataViewColumn *column ); + virtual bool ClearColumns(); + virtual int GetColumnPosition( const wxDataViewColumn *column ) const; + + virtual wxDataViewColumn *GetSortingColumn() const; + + virtual int GetSelectedItemsCount() const; + virtual int GetSelections( wxDataViewItemArray & sel ) const; + virtual void SetSelections( const wxDataViewItemArray & sel ); + virtual void Select( const wxDataViewItem & item ); + virtual void Unselect( const wxDataViewItem & item ); + virtual bool IsSelected( const wxDataViewItem & item ) const; + virtual void SelectAll(); + virtual void UnselectAll(); + + virtual void EnsureVisible( const wxDataViewItem& item, + const wxDataViewColumn *column = NULL ); + virtual void HitTest( const wxPoint &point, + wxDataViewItem &item, + wxDataViewColumn *&column ) const; + virtual wxRect GetItemRect( const wxDataViewItem &item, + const wxDataViewColumn *column = NULL ) const; + + virtual bool SetRowHeight( int rowHeight ); + + virtual void EditItem(const wxDataViewItem& item, const wxDataViewColumn *column); + + virtual void Expand( const wxDataViewItem & item ); + virtual void Collapse( const wxDataViewItem & item ); + virtual bool IsExpanded( const wxDataViewItem & item ) const; + + virtual bool EnableDragSource( const wxDataFormat &format ); + virtual bool EnableDropTarget( const wxDataFormat &format ); + + virtual wxDataViewColumn *GetCurrentColumn() const; + + static wxVisualAttributes + GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); + + wxWindow *GetMainWindow() { return (wxWindow*) this; } + + GtkWidget *GtkGetTreeView() { return m_treeview; } + wxDataViewCtrlInternal* GtkGetInternal() { return m_internal; } + + // Convert GTK path to our item. Returned item may be invalid if get_iter() + // failed. + wxDataViewItem GTKPathToItem(struct _GtkTreePath *path) const; + + virtual void OnInternalIdle(); + + int GTKGetUniformRowHeight() const { return m_uniformRowHeight; } + +protected: + virtual void DoSetExpanderColumn(); + virtual void DoSetIndent(); + + virtual void DoApplyWidgetStyle(GtkRcStyle *style); + private: + void Init(); + + virtual wxDataViewItem DoGetCurrentItem() const; + virtual void DoSetCurrentItem(const wxDataViewItem& item); + + // Return wxDataViewColumn matching the given GtkTreeViewColumn. + // + // If the input argument is NULL, return NULL too. Otherwise we must find + // the matching column and assert if we didn't. + wxDataViewColumn* FromGTKColumn(GtkTreeViewColumn *gtk_col) const; + + friend class wxDataViewCtrlDCImpl; + friend class wxDataViewColumn; + friend class wxDataViewCtrlInternal; + + GtkWidget *m_treeview; + wxDataViewCtrlInternal *m_internal; + wxDataViewColumnList m_cols; + wxDataViewItem m_ensureVisibleDefered; + + // By default this is set to -1 and the height of the rows is determined by + // GetRect() methods of the renderers but this can be set to a positive + // value to force the height of all rows to the given value. + int m_uniformRowHeight; + + virtual void AddChildGTK(wxWindowGTK* child); + void GtkEnableSelectionEvents(); + void GtkDisableSelectionEvents(); + DECLARE_DYNAMIC_CLASS(wxDataViewCtrl) - DECLARE_NO_COPY_CLASS(wxDataViewCtrl) + wxDECLARE_NO_COPY_CLASS(wxDataViewCtrl); }; -#endif // __GTKDATAVIEWCTRLH__ +#endif // _WX_GTKDATAVIEWCTRL_H_