125 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// NoesisGUI - http://www.noesisengine.com
 | 
						|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
#ifndef __GUI_TABCONTROL_H__
 | 
						|
#define __GUI_TABCONTROL_H__
 | 
						|
 | 
						|
 | 
						|
#include <NsCore/Noesis.h>
 | 
						|
#include <NsGui/CoreApi.h>
 | 
						|
#include <NsGui/Selector.h>
 | 
						|
 | 
						|
 | 
						|
namespace Noesis
 | 
						|
{
 | 
						|
 | 
						|
class TabItem;
 | 
						|
class ContentPresenter;
 | 
						|
 | 
						|
NS_WARNING_PUSH
 | 
						|
NS_MSVC_WARNING_DISABLE(4251 4275)
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
/// Represents a control that contains multiple items that share the same space on the screen.
 | 
						|
///
 | 
						|
/// http://msdn.microsoft.com/en-us/library/system.windows.controls.tabcontrol.aspx
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
class NS_GUI_CORE_API TabControl: public Selector
 | 
						|
{
 | 
						|
public:
 | 
						|
    TabControl();
 | 
						|
    ~TabControl();
 | 
						|
 | 
						|
    /// Gets or sets the DataTemplate to apply to any TabItem that does not have a ContentTemplate 
 | 
						|
    // or ContentTemplateSelector property defined
 | 
						|
    //@{
 | 
						|
    DataTemplate* GetContentTemplate() const;
 | 
						|
    void SetContentTemplate(DataTemplate* value);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets or sets a DataTemplateSelector that provides custom logic for choosing the template 
 | 
						|
    /// that is used to display the content of the control
 | 
						|
    //@{
 | 
						|
    DataTemplateSelector* GetContentTemplateSelector() const;
 | 
						|
    void SetContentTemplateSelector(DataTemplateSelector* selector);
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// Gets the content of the currently selected TabItem
 | 
						|
    BaseComponent* GetSelectedContent() const;
 | 
						|
 | 
						|
    /// Gets the DataTemplate of the currently selected item
 | 
						|
    DataTemplate* GetSelectedContentTemplate() const;
 | 
						|
 | 
						|
    /// Gets the DataTemplateSelector of the currently selected item
 | 
						|
    DataTemplateSelector* GetSelectedContentTemplateSelector() const;
 | 
						|
 | 
						|
    /// Gets or sets how tab headers align relative to the tab content
 | 
						|
    //@{
 | 
						|
    Dock GetTabStripPlacement() const;
 | 
						|
    void SetTabStripPlacement(Dock dock);
 | 
						|
    //@}
 | 
						|
 | 
						|
public:
 | 
						|
    /// Dependency Properties
 | 
						|
    //@{
 | 
						|
    static const DependencyProperty* ContentTemplateProperty;
 | 
						|
    static const DependencyProperty* ContentTemplateSelectorProperty;
 | 
						|
    static const DependencyProperty* SelectedContentProperty;
 | 
						|
    static const DependencyProperty* SelectedContentTemplateProperty;
 | 
						|
    static const DependencyProperty* SelectedContentTemplateSelectorProperty;
 | 
						|
    static const DependencyProperty* TabStripPlacementProperty;
 | 
						|
    //@}
 | 
						|
 | 
						|
protected:
 | 
						|
    /// From UIElement
 | 
						|
    //@{
 | 
						|
    Size MeasureOverride(const Size& availableSize) override;
 | 
						|
    void OnKeyDown(const KeyEventArgs& args) override;
 | 
						|
    void OnPreviewGotKeyboardFocus(const KeyboardFocusChangedEventArgs& args) override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// From Control
 | 
						|
    //@{
 | 
						|
    void OnTemplateChanged(FrameworkTemplate* oldTemplate, FrameworkElement* oldRoot,
 | 
						|
        FrameworkTemplate* newTemplate, FrameworkElement* newRoot) override;
 | 
						|
    void UpdateVisualStates() override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// From ItemsControl
 | 
						|
    //@{
 | 
						|
    Ptr<DependencyObject> GetContainerForItemOverride() const override;
 | 
						|
    bool IsItemItsOwnContainerOverride(BaseComponent* item) const override;
 | 
						|
    //@}
 | 
						|
 | 
						|
    /// From Selector
 | 
						|
    //@{
 | 
						|
    void OnSelectionChanged(const SelectionChangedEventArgs& args) override;
 | 
						|
    //@}
 | 
						|
 | 
						|
private:
 | 
						|
    // Updates selected content host so it points to the new selected tab
 | 
						|
    void UpdateSelectedContent(TabItem* selectedTab);
 | 
						|
 | 
						|
    TabItem* SelectedTab() const;
 | 
						|
    TabItem* FindNextTabItem(int startIndex, int direction);
 | 
						|
 | 
						|
    friend class TabItem;
 | 
						|
    void SelectTab(TabItem* tab);
 | 
						|
    ContentPresenter* GetSelectedContentHost() const;
 | 
						|
 | 
						|
private:
 | 
						|
    Ptr<ContentPresenter> mSelectedContentHost;
 | 
						|
 | 
						|
    NS_DECLARE_REFLECTION(TabControl, Selector)
 | 
						|
};
 | 
						|
 | 
						|
NS_WARNING_POP
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#endif
 |