//////////////////////////////////////////////////////////////////////////////////////////////////// // NoesisGUI - http://www.noesisengine.com // Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved. //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __GUI_GRIDVIEW_H__ #define __GUI_GRIDVIEW_H__ #include #include #include namespace Noesis { class ContextMenu; class DataTemplate; class DataTemplateSelector; class GridViewColumn; class Style; struct NotifyCollectionChangedEventArgs; template class FreezableCollection; typedef Noesis::FreezableCollection GridViewColumnCollection; NS_WARNING_PUSH NS_MSVC_WARNING_DISABLE(4251 4275) //////////////////////////////////////////////////////////////////////////////////////////////////// /// Represents a view mode that displays data items in columns for a ListView control. /// /// .. code-block:: xml /// :caption: XAML /// /// /// /// /// /// /// /// /// /// /// /// /// /// The GridView class and its supporting classes provide the infrastructure to display data items /// that are specified for a ListView control in a series of columns. The columns have column /// headers, which are buttons that are derived from ButtonBase, and you can reorder the columns by /// using drag-and-drop operations. Note that the columns of a GridView display data and do not /// provide direct access to the source of the data. /// /// The columns in a GridView are defined as GridViewColumn objects. In XAML, you can define /// GridViewColumn objects as child elements of the GridView. /// /// http://msdn.microsoft.com/en-us/library/system.windows.controls.gridview.aspx //////////////////////////////////////////////////////////////////////////////////////////////////// class NS_GUI_CONTROLS_API GridView: public BaseView { public: GridView(); ~GridView(); /// Gets or sets whether columns in a GridView can be reordered by a drag-and-drop operation //@{ bool GetAllowsColumnReorder() const; void SetAllowsColumnReorder(bool value); //@} /// Gets or sets the style to apply to column headers //@{ Style* GetColumnHeaderContainerStyle() const; void SetColumnHeaderContainerStyle(Style* style); //@} /// Gets or sets a ContextMenu for the GridView //@{ ContextMenu* GetColumnHeaderContextMenu() const; void SetColumnHeaderContextMenu(ContextMenu* menu); //@} /// Gets or sets a composite string that specifies how to format the column headers of the /// GridView if they are displayed as strings //@{ const char* GetColumnHeaderStringFormat() const; void SetColumnHeaderStringFormat(const char* format); //@} /// Gets or sets a template to use to display the column headers //@{ DataTemplate* GetColumnHeaderTemplate() const; void SetColumnHeaderTemplate(DataTemplate* dataTemplate); //@} /// Gets or sets the selector object that provides logic for selecting a template to use for /// each column header //@{ DataTemplateSelector* GetColumnHeaderTemplateSelector() const; void SetColumnHeaderTemplateSelector(DataTemplateSelector* selector); //@} /// Gets or sets the content of a tooltip that appears when the mouse pointer pauses over one /// of the column headers //@{ BaseComponent* GetColumnHeaderToolTip() const; void SetColumnHeaderToolTip(BaseComponent* tooltip); //@} /// Gets the collection of GridViewColumn objects that is defined for this GridView GridViewColumnCollection* GetColumns() const; /// Gets or sets the attached property that contains the GridViewColumnCollection //@{ static GridViewColumnCollection* GetColumnCollection(const DependencyObject* element); static void SetColumnCollection(DependencyObject* element, GridViewColumnCollection* value); //@} public: /// Dependency Properties //@{ static const DependencyProperty* AllowsColumnReorderProperty; static const DependencyProperty* ColumnHeaderContainerStyleProperty; static const DependencyProperty* ColumnHeaderContextMenuProperty; static const DependencyProperty* ColumnHeaderStringFormatProperty; static const DependencyProperty* ColumnHeaderTemplateProperty; static const DependencyProperty* ColumnHeaderTemplateSelectorProperty; static const DependencyProperty* ColumnHeaderToolTipProperty; static const DependencyProperty* ColumnCollectionProperty; // Attached protected: /// From DependencyObject //@{ void OnInit() override; //@} /// From Freezable //@{ Ptr CreateInstanceCore() const override; bool FreezeCore(bool isChecking) override; void CloneCore(const Freezable* source) override; void CloneCurrentValueCore(const Freezable* source) override; void GetAsFrozenCore(const Freezable* source) override; void GetCurrentValueAsFrozenCore(const Freezable* source) override; //@} /// From BaseView //@{ void ClearItem(ListViewItem* item) override; void PrepareItem(ListViewItem* item) override; //@} private: void EnsureColumns() const; private: mutable Ptr mColumns; NS_DECLARE_REFLECTION(GridView, BaseView) }; NS_WARNING_POP } #endif