public SessionToolbarDelegate()

in Clients/Xamarin.Interactive.Client.Mac/SessionToolbarDelegate.cs [59:162]


        public SessionToolbarDelegate (
            ClientSession clientSession,
            MacClientSessionViewControllers viewControllers,
            NSToolbar toolbar)
        {
            if (clientSession == null)
                throw new ArgumentNullException (nameof (clientSession));

            if (viewControllers == null)
                throw new ArgumentNullException (nameof (viewControllers));

            if (toolbar == null)
                throw new ArgumentNullException (nameof (toolbar));

            allowedItemIdentifiers = clientSession.SessionKind == ClientSessionKind.LiveInspection
                ? Identifiers.InspectorDefault
                : Identifiers.WorkbooksDefault;

            this.toolbar = toolbar;

            toolbar.Delegate = this;

            runAllItem = CreateButton (
                Identifiers.RunAll,
                "runAllSubmissions:",
                Catalog.GetString ("Run All"),
                Catalog.GetString ("Run the whole workbook from top to bottom"),
                "ToolbarRunTemplate");

            refreshItem = CreateButton (
                Identifiers.Refresh,
                "refreshVisualTree:",
                Catalog.GetString ("Refresh"),
                Catalog.GetString ("Refresh the application's visual tree in Inspector"),
                "ToolbarRefreshTemplate");

            inspectItem = CreateButton (
                Identifiers.Inspect,
                "inspectView:",
                Catalog.GetString ("Inspect"),
                Catalog.GetString ("Select a UI element to inspect in the running application"),
                "ToolbarInspectTemplate");

            var targetSelector = new WorkbookTargetSelector (
                clientSession.ViewControllers.WorkbookTargets) {
                Font = NSFont.SystemFontOfSize (NSFont.SmallSystemFontSize)
            };

            var targetSelectorItemMenu = new NSMenuItem (Catalog.GetString ("Target"));
            targetSelectorItemMenu.Submenu = targetSelector.Menu;

            targetSelectorItem = new NSToolbarItem (Identifiers.TargetSelector) {
                View = targetSelector,
                MinSize = targetSelector.Frame.Size,
                MaxSize = targetSelector.Frame.Size,
                VisibilityPriority = -1000,
                MenuFormRepresentation = targetSelectorItemMenu
            };

            targetSelector.Activated += (sender, e) => {
                var size = targetSelector.GetToolbarSize ();
                targetSelectorItem.MinSize = size;
                targetSelectorItem.MaxSize = size;
                centeringItem.UpdateWidth ();
                viewControllers.WindowTabs.SelectedTabViewItemIndex = 0;
            };

            centeringItem = new CenteringToolbarItem (Identifiers.CenteringSpacer);

            statusItem = new StatusToolbarItem {
                View = viewControllers.Status.View
            };

            tabViewItem = new NSToolbarItem (Identifiers.TabView) {
                PaletteLabel = Catalog.GetString ("Views")
            };

            tabViewItem.View = viewControllers.WindowTabs.ToolbarSegmentedControl;

            viewControllers.WindowTabs.ItemSelected += (sender, e) => {
                switch (viewControllers.WindowTabs.SelectedTabViewItemIndex) {
                case 0:
                    RemoveItem (Identifiers.Inspect);
                    RemoveItem (Identifiers.Refresh);
                    if (clientSession.SessionKind != ClientSessionKind.LiveInspection)
                        toolbar.InsertItem (Identifiers.RunAll, 0);
                    ((XcbWorkbookPageView)clientSession.EvaluationService).DelayNewCodeCellFocus = false;
                    break;
                case 1:
                    RemoveItem (Identifiers.RunAll);
                    toolbar.InsertItem (Identifiers.Inspect, 0);
                    toolbar.InsertItem (Identifiers.Refresh, 0);
                    ((XcbWorkbookPageView)clientSession.EvaluationService).DelayNewCodeCellFocus = true;
                    break;
                }

                centeringItem.UpdateWidth ();
            };

            NSWindow.Notifications.ObserveDidResize ((sender, e) => {
                statusItem.UpdateSize (e.Notification.Object as NSWindow);
                centeringItem.UpdateWidth ();
            });
        }