//////////////////////////////////////////////////////////////////////////////////////////////////// // NoesisGUI - http://www.noesisengine.com // Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved. //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __GUI_TREEVIEW_H__ #define __GUI_TREEVIEW_H__ #include #include namespace Noesis { class TreeViewItem; NS_WARNING_PUSH NS_MSVC_WARNING_DISABLE(4251 4275) //////////////////////////////////////////////////////////////////////////////////////////////////// /// Represents a control that displays hierarchical data in a tree structure that has items that /// can expand and collapse. /// /// http://msdn.microsoft.com/en-us/library/system.windows.controls.treeview.aspx //////////////////////////////////////////////////////////////////////////////////////////////////// class NS_GUI_CORE_API TreeView: public ItemsControl { public: TreeView(); ~TreeView(); /// Gets the selected item in a TreeView BaseComponent* GetSelectedItem() const; /// Occurs when a new item is selected in the tree typedef RoutedPropertyChangedEventHandler>::Handler SelectedItemChangedT; UIElement::RoutedEvent_ SelectedItemChanged(); // Used by TreeViewItem implementation //@{ virtual void ItemClicked(TreeViewItem* tvi); void ResetSelectedItem(); //@} public: /// Dependency Properties //@{ static const DependencyProperty* SelectedItemProperty; //@} // Routed Events //@{ /// Occurs when the SelectedItem changes. static const RoutedEvent* SelectedItemChangedEvent; //@} protected: // Notifies inheritors about SelectedItem property changes and raises SelectedItemChanged event virtual void OnSelectedItemChanged(const RoutedPropertyChangedEventArgs>& e); /// From ItemsControl //@{ Ptr GetContainerForItemOverride() const override; bool IsItemItsOwnContainerOverride(BaseComponent* item) const override; void OnItemsChanged(const NotifyCollectionChangedEventArgs& args) override; //@} // From Control //@{ void OnIsFocusEngagedChanged(bool engaged) override; //@} /// From UIElement //@{ void OnGotFocus(const RoutedEventArgs& e) override; void OnIsKeyboardFocusWithinChanged(const DependencyPropertyChangedEventArgs& e) override; //@} /// From DependencyObject //@{ bool OnPropertyChanged(const DependencyPropertyChangedEventArgs& e) override; //@} private: void TryFocusSelected(); private: Ptr mSelectedContainer; NS_DECLARE_REFLECTION(TreeView, ItemsControl) }; NS_WARNING_POP } #endif