102 lines
2.8 KiB
C++
102 lines
2.8 KiB
C++
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// NoesisGUI - http://www.noesisengine.com
|
|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#ifndef __GUI_TREEVIEW_H__
|
|
#define __GUI_TREEVIEW_H__
|
|
|
|
|
|
#include <NsCore/Noesis.h>
|
|
#include <NsGui/ItemsControl.h>
|
|
|
|
|
|
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<Ptr<BaseComponent>>::Handler SelectedItemChangedT;
|
|
UIElement::RoutedEvent_<SelectedItemChangedT> 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<Ptr<BaseComponent>>& e);
|
|
|
|
/// From ItemsControl
|
|
//@{
|
|
Ptr<DependencyObject> 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<TreeViewItem> mSelectedContainer;
|
|
|
|
NS_DECLARE_REFLECTION(TreeView, ItemsControl)
|
|
};
|
|
|
|
NS_WARNING_POP
|
|
|
|
}
|
|
|
|
|
|
#endif
|