{{description>Learn how to create toolbar items in the Curvy Splines by implementing editor classes, ToolbarItem attributes, and adding functionalities.}} ====== Creating Toolbar Items===== Creating Toolbar Items is a relative simple task. ===== How it works ===== === Create an editor class === Toolbar items are created by creating an editor class that inherits from one of the ToolbarItem base classes: ^ Class ^ Purpose ^ | DTToolbarButton | Simple Button | | DTToolbarToggleButton | State Button | | DTToolbarRadioButton | State Button being part of a Radiogroup (always one selected) | | DTToolbarRadioOffButton | State Button being part of a Radiogroup (one or none selected) | === ToolbarItemAttribute === To make the toolbar recognize your class, add a class attribute to your class: [ToolbarItem(10,"Curvy","MyButton","My tooltip","myIcon,24,24","myLightSkinIcon,24,24")] * **Order** - items are sorted by their order (ascending) * **Project** - the project name. Needs to be "Curvy" * **Label** - the button's label * **Tooltip** - a tooltip * **Icon** - item's icon in the form "name,width,height". The file needs to be in a folder called "Resources" * **LightIcon** - (optional) the icon to use for light skin editor. === Add functionality === After that, you'll want to override or implement a few methods and properties to add functionality: |<100%>| ^ Method/Property ^ Purpose ^ Remarks^ | Ctor | Constructor | Add hotkey bindings here! | | StatusBarInfo | Gets the statusbar text to show when hovering over the item | | | OnSelectionChange() | Called when hierarchy selection changes | Set Visibility here at least! | | OnClick() | Called when the item is clicked | | | OnOtherItemClicked() | Called when any other item is clicked | Use this to e.g. set ShowClientArea | | RenderClientArea() | Called when additional UI should be drawn | | | OnSceneGUI() | Regular OnSceneGUI call | For preview or other SceneView drawing | | HandleEvents() | Called for UI events | Use to catch additional hotkeys etc. | ===== Example ===== [ToolbarItem( 161, project: "Curvy", label: "Set 1.", tooltip: "Set as first Control Point", icon: "setfirstcp,24,24" )] public class TBCPSetFirst : DTToolbarButton { public override string StatusBarInfo => "Make this Control Point the first of the spline"; public TBCPSetFirst() => KeyBindings.Add( item: new EditorKeyBinding( name: "Set 1. CP", description: "" ) ); public override void OnClick() { base.OnClick(); CurvySplineSegment cp = DTSelection.GetAs(); if (cp && cp.Spline) { Undo.RegisterFullObjectHierarchyUndo( objectToUndo: cp.Spline, name: "Set first CP" ); cp.Spline.SetFirstControlPoint(controlPoint: cp); } } public override void OnSelectionChange() { base.OnSelectionChange(); CurvySplineSegment cp = DTSelection.GetAs(); Visible = cp != null; Enabled = Visible && cp.Spline && cp.Spline.GetControlPointIndex(controlPoint: cp) > 0; } } ===== Item Types Reference ===== For all item types, use //OnSelectionChange()// to set **Visible** and **Enabled** ==== Buttons ==== //OnClick()// is called on button click ==== Toggle Buttons ==== Use the **On** property to get or set the button's state. === Additional UI === Override //RenderClientArea()// to show additional UI when the item is selected. The provided Rect parameter defines the starting position of the client area. Because toolbars can be shown on any side of the SceneView, you should use the provided methods to change the rect according to the toolbar's orientation: * //Background()// - renders a background box to host your content * //SetElementSize()// - define a single emement's size, used by the following methods (this is most useful if you're showing a submenu): * //Advance()// - advance the rect to a new line (top,bottom) or towards the inner (left,right) * //AdvanceBelow()// - advance the rect to a new line only ==== RadioButton ===== Use //RadioGroup// to define the button's group.