xmake.repo/packages/n/noesis/latest/Include/NsGui/TreeView.h
2024-12-22 19:15:02 +08:00

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