static IControl CreateTopBar( IPopover popover, IProperty <bool> selectionEnabled, IProperty <Mode> mode, Command addViewport, CodeView codeView) { var isCompact = mode.Convert(m => m == Mode.Compact, m => m ? Mode.Compact : Mode.Normal); var toggleMode = isCompact.Toggle(); return (Layout.Layer( Layout .StackFromLeft( codeView.Create(popover) .HideWhen(isCompact), Control.Empty.WithWidth(16), Layout .StackFromLeft(CreateHeaderControl( icon: Fuse.Icons.AddViewport(), tooltipText: "Click to add a new Viewport", buttonText: "Add Viewport", command: addViewport, labelColor: Theme.DefaultText), Control.Empty.WithWidth(16) ) .HideWhen(isCompact), CreateHeaderControl( icon: MinimizeAndMaximizeIcon.Create(mode), tooltipText: "Switch between normal and compact mode. Click to switch mode.", buttonText: "Compact", labelColor: Theme.DefaultText, command: toggleMode) .HideWhen(isCompact), CreateCompactSelectionControl(mode, selectionEnabled, toggleMode) .ShowWhen(isCompact) .Center(), Control.Empty.WithWidth(4)) .DockRight(), CreateFullSelectionControl(selectionEnabled) .HideWhen(isCompact) .CenterHorizontally()) .WithHeight(37) .WithPadding(new Thickness <Points>(8, 0, 8, 0)) .WithBackground(Theme.PanelBackground)); }
static IControl CreateCompactSelectionControl( IProperty <Mode> mode, IProperty <bool> selectionEnabled, Command toggleMode) { return (Layout.StackFromLeft( Button.Create(selectionEnabled.Toggle(), state => Layout.Dock() .Bottom( Shapes.Rectangle( fill: Theme.Active) .WithSize(new Size <Points>(1, 1))) .Fill( Layout.StackFromLeft( SelectionIcon.Create(selectionEnabled, true) .OnMouse(pressed: selectionEnabled.Toggle()) .ShowWhen(selectionEnabled), TouchIcon.Create(selectionEnabled, true) .Center() .OnMouse(pressed: selectionEnabled.Toggle()) .ShowWhen(selectionEnabled.IsFalse()))) .WithPadding(new Thickness <Points>(4, 0, 4, 0)) .WithBackground( background: Observable.CombineLatest( state.IsEnabled, state.IsHovered, (enabled, hovering) => hovering ? Theme.FaintBackground : Color.Transparent) .Switch()) .SetToolTip("Enable to select elements in the app. Disable to interact with the app.")), Control.Empty.WithWidth(8), Button.Create(toggleMode, state => MinimizeAndMaximizeIcon.Create(mode) .WithPadding(new Thickness <Points>(4, 0, 4, 0)) .WithBackground( background: Observable.CombineLatest( state.IsEnabled, state.IsHovered, (enabled, hovering) => hovering ? Theme.FaintBackground : Color.Transparent) .Switch())) .SetToolTip("Switch between normal and compact mode. Click to switch mode."))); }