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

140 lines
4.6 KiB
C++

////////////////////////////////////////////////////////////////////////////////////////////////////
// NoesisGUI - http://www.noesisengine.com
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef __GUI_TOOLBAR_H__
#define __GUI_TOOLBAR_H__
#include <NsCore/Noesis.h>
#include <NsGui/CoreApi.h>
#include <NsGui/HeaderedItemsControl.h>
namespace Noesis
{
class ToolBarPanel;
class ToolBarOverflowPanel;
NS_WARNING_PUSH
NS_MSVC_WARNING_DISABLE(4251 4275)
////////////////////////////////////////////////////////////////////////////////////////////////////
/// Provides a container for a group of commands or controls.
///
/// ToolBar controls provide an overflow mechanism that places items that do not fit on the ToolBar
/// into an overflow area. Only toolbar elements within a parent ToolBarTray can be moved or resized
/// by the user.
///
/// ToolBar is a HeaderedItemsControl, which means its header and collection of objects can be of
/// any type (such as string, Image, or Panel). For more information, see the HeaderedItemsControl
/// class.
///
/// http://msdn.microsoft.com/en-us/library/system.windows.controls.toolbar.aspx
////////////////////////////////////////////////////////////////////////////////////////////////////
class NS_GUI_CORE_API ToolBar: public HeaderedItemsControl
{
public:
ToolBar();
~ToolBar();
/// Gets or sets a value that indicates when an item should be placed in the overflow panel
/// instead of in the main panel
//@{
static OverflowMode GetOverflowMode(const DependencyObject* element);
static void SetOverflowMode(DependencyObject* element, OverflowMode mode);
//@}
/// Gets or sets a value that indicates whether the ToolBar item is an overflow item
//@{
static bool GetIsOverflowItem(const DependencyObject* element);
static void SetIsOverflowItem(DependencyObject* element, bool isOverflowItem);
//@}
/// Gets or sets the band index number that indicates the position of the ToolBar on the band
//@{
int32_t GetBandIndex() const;
void SetBandIndex(int32_t value);
//@}
/// Gets or sets a value that indicates where the ToolBar should be located in the ToolBarTray
//@{
int32_t GetBand() const;
void SetBand(int32_t value);
//@}
/// Gets a value that indicates whether the ToolBar has items that are not visible
bool GetHasOverflowItems() const;
/// Gets or sets a value that indicates whether the ToolBar overflow area is currently visible
//@{
bool GetIsOverflowOpen() const;
void SetIsOverflowOpen(bool value);
//@}
/// Gets the orientation of the ToolBar
Orientation GetOrientation() const;
// Gets ToolBarPanel used to place this ToolBar's items
ToolBarPanel* GetPanel() const;
// Gets ToolBarPanel used to place this ToolBar's overflow items
ToolBarOverflowPanel* GetOverflowPanel() const;
// Updates *HasOverflowItems* property
void UpdateHasOverflowItems(bool hasOverflowItems);
public:
/// Dependency properties
//@{
static const DependencyProperty* BandIndexProperty;
static const DependencyProperty* BandProperty;
static const DependencyProperty* HasOverflowItemsProperty;
static const DependencyProperty* IsOverflowItemProperty; // Attached property
static const DependencyProperty* IsOverflowOpenProperty;
static const DependencyProperty* OrientationProperty;
static const DependencyProperty* OverflowModeProperty; // Attached property
//@}
/// TODO: Convert to static values instead of dependency properties
//@{
static const DependencyProperty* ButtonStyleKey;
static const DependencyProperty* ToggleButtonStyleKey;
static const DependencyProperty* CheckBoxStyleKey;
static const DependencyProperty* RadioButtonStyleKey;
static const DependencyProperty* TextBoxStyleKey;
static const DependencyProperty* ComboBoxStyleKey;
static const DependencyProperty* SeparatorStyleKey;
static const DependencyProperty* MenuStyleKey;
//@}
protected:
/// From Control
//@{
void OnTemplateChanged(FrameworkTemplate* oldTemplate, FrameworkElement* oldRoot,
FrameworkTemplate* newTemplate, FrameworkElement* newRoot);
//@}
/// From ItemsControl
//@{
bool IsItemItsOwnContainerOverride(BaseComponent* item) const;
void ApplyItemContainerStyle(DependencyObject* container) const;
//@}
private:
Ptr<ToolBarPanel> mPanelInternal;
Ptr<ToolBarOverflowPanel> mOverflowPanelInternal;
NS_DECLARE_REFLECTION(ToolBar, HeaderedItemsControl)
};
NS_WARNING_POP
}
#endif