コード例 #1
0
        protected override void OnClick(MouseEventArgs mouseEvent)
        {
            if (mouseEvent.Button == MouseButtons.Right)
            {
                var theme      = ApplicationController.Instance.MenuTheme;
                var printTasks = PrintHistoryData.Instance.GetHistoryItems(1000);

                var popupMenu          = new PopupMenu(theme);
                var printHistoryEditor = new PrintHistoryEditor(theme, printTask, printTasks);
                printHistoryEditor.AddQualityMenu(popupMenu, () =>
                {
                    printInfoWidget.Text = GetPrintInfo();
                    SetIndicatorColor();
                });

                printHistoryEditor.AddNotesMenu(popupMenu, printTasks, () =>
                {
                    printInfoWidget.Text = GetPrintInfo();
                });

                popupMenu.CreateSeparator();

                AddExportMenu(popupMenu, printTasks);

                popupMenu.CreateSeparator();

                AddClearHistorMenu(popupMenu, printTasks);

                popupMenu.ShowMenu(this, mouseEvent);
            }

            base.OnClick(mouseEvent);
        }
コード例 #2
0
ファイル: HistoryListView.cs プロジェクト: tg73/MatterControl
        protected override void OnClick(MouseEventArgs mouseEvent)
        {
            if (mouseEvent.Button == MouseButtons.Right)
            {
                var theme = ApplicationController.Instance.MenuTheme;

                // show a right click menu ('Set as Default' & 'Help')
                var popupMenu = new PopupMenu(theme);

                var historyItems = PrintHistoryData.Instance.GetHistoryItems(1).Select(f => new PrintHistoryItem(f)).ToList <ILibraryItem>();

                var exportPrintHistory = popupMenu.CreateMenuItem("Export History".Localize() + "...");
                exportPrintHistory.Enabled = historyItems.Count > 0;
                exportPrintHistory.Click  += (s, e) =>
                {
                };

                bool showFilter = false;
                if (showFilter)
                {
                    popupMenu.CreateSubMenu("Filter".Localize(), theme, (subMenu) =>
                    {
                        // foreach (var printer in AllPrinters)
                        // {
                        //  var menuItem = subMenu.CreateMenuItem(nodeOperation.Title, nodeOperation.IconCollector?.Invoke(menuTheme.InvertIcons));
                        //  menuItem.Click += (s, e) =>
                        //  {
                        //      nodeOperation.Operation(selectedItem, scene).ConfigureAwait(false);
                        //  };
                        // }
                    });
                }

                popupMenu.CreateSeparator();
                var clearPrintHistory = popupMenu.CreateMenuItem("Clear History".Localize());
                clearPrintHistory.Enabled = historyItems.Count > 0;
                clearPrintHistory.Click  += (s, e) =>
                {
                    // clear history
                    StyledMessageBox.ShowMessageBox(
                        (clearHistory) =>
                    {
                        if (clearHistory)
                        {
                            PrintHistoryData.Instance.ClearHistory();
                        }
                    },
                        "Are you sure you want to clear your print history?".Localize(),
                        "Clear History?".Localize(),
                        StyledMessageBox.MessageType.YES_NO,
                        "Clear History".Localize());
                };

                ShowMenu(mouseEvent, popupMenu);
            }

            base.OnClick(mouseEvent);
        }
コード例 #3
0
        protected override void OnClick(MouseEventArgs mouseEvent)
        {
            if (mouseEvent.Button == MouseButtons.Right)
            {
                var theme      = ApplicationController.Instance.MenuTheme;
                var printTasks = PrintHistoryData.Instance.GetHistoryItems(1000);

                var popupMenu          = new PopupMenu(theme);
                var printHistoryEditor = new PrintHistoryEditor(null, theme, printTask, printTasks);
                var qualityWidget      = PrintHistoryEditor.GetQualityWidget(theme,
                                                                             printTask,
                                                                             () =>
                {
                    popupMenu.Unfocus();
                    printInfoWidget.Text = GetPrintInfo();
                    SetIndicatorColor();
                },
                                                                             theme.DefaultFontSize);

                var menuItem = new PopupMenu.MenuItem(qualityWidget, theme)
                {
                    HAnchor    = HAnchor.Fit | HAnchor.Stretch,
                    VAnchor    = VAnchor.Fit,
                    HoverColor = Color.Transparent,
                };
                popupMenu.AddChild(menuItem);

                printHistoryEditor.AddNotesMenu(popupMenu, printTasks, () =>
                {
                    printInfoWidget.Text = GetPrintInfo();
                });

                popupMenu.CreateSeparator();

                AddExportMenu(popupMenu, printTasks);

                popupMenu.CreateSeparator();

                AddClearHistorMenu(popupMenu, printTasks);

                popupMenu.ShowMenu(this, mouseEvent);
            }

            base.OnClick(mouseEvent);
        }
コード例 #4
0
        public FlowLayoutWidget CreateMenuItems(PopupMenu popupMenu, IEnumerable <NamedAction> menuActions, bool emptyMenu = true)
        {
            // Retain past behavior, where menu is cleared each call. More recent callers many pass in a newly populated menu and
            // not require the clear
            if (emptyMenu)
            {
                popupMenu.CloseAllChildren();
            }

            // Create menu items in the DropList for each element in this.menuActions
            foreach (var menuAction in menuActions)
            {
                if (menuAction is ActionSeparator)
                {
                    popupMenu.CreateSeparator();
                }
                else
                {
                    PopupMenu.MenuItem menuItem;

                    if (menuAction is NamedBoolAction boolAction)
                    {
                        menuItem = popupMenu.CreateBoolMenuItem(menuAction.Title, boolAction.GetIsActive, boolAction.SetIsActive);
                    }
                    else
                    {
                        menuItem = popupMenu.CreateMenuItem(menuAction.Title, menuAction.Icon, menuAction.Shortcut);
                    }

                    menuItem.Name = $"{menuAction.Title} Menu Item";

                    menuItem.Enabled = menuAction.Action != null &&
                                       menuAction.IsEnabled?.Invoke() != false;

                    menuItem.ClearRemovedFlag();

                    if (menuItem.Enabled)
                    {
                        menuItem.Click += (s, e) =>
                        {
                            menuAction.Action();
                        };
                    }
                }
            }

            return(popupMenu);
        }
コード例 #5
0
        public static void AddTextWidgetRightClickMenu()
        {
            InternalTextEditWidget.DefaultRightClick += (s, e) =>
            {
                var textEditWidget = s as InternalTextEditWidget;
                var theme          = ApplicationController.Instance.MenuTheme;
                var popupMenu      = new PopupMenu(theme);

                var cut = popupMenu.CreateMenuItem("Cut".Localize());
                cut.Enabled = !string.IsNullOrEmpty(s.Selection);
                cut.Click  += (s2, e2) =>
                {
                    textEditWidget?.CopySelection();
                    textEditWidget?.DeleteSelection();
                };

                var copy = popupMenu.CreateMenuItem("Copy".Localize());
                copy.Enabled = !string.IsNullOrEmpty(s.Selection);
                copy.Click  += (s2, e2) =>
                {
                    textEditWidget?.CopySelection();
                };

                var paste = popupMenu.CreateMenuItem("Paste".Localize());
                paste.Enabled = Clipboard.Instance.ContainsText;
                paste.Click  += (s2, e2) =>
                {
                    textEditWidget?.PasteFromClipboard();
                };

                popupMenu.CreateSeparator();

                var selectAll = popupMenu.CreateMenuItem("Select All".Localize());
                selectAll.Enabled = !string.IsNullOrEmpty(textEditWidget.Text);
                selectAll.Click  += (s2, e2) =>
                {
                    textEditWidget?.SelectAll();
                };

                textEditWidget.KeepMenuOpen = true;
                popupMenu.Closed           += (s3, e3) =>
                {
                    textEditWidget.KeepMenuOpen = false;
                };

                popupMenu.ShowMenu(s, e);
            };
        }
コード例 #6
0
        public static PopupMenu CreateSortingMenu(PopupMenu popupMenu, LibraryListView libraryView)
        {
            var siblingList = new List <GuiWidget>();

            popupMenu.CreateBoolMenuItem(
                "Date Created".Localize(),
                () => libraryView.ActiveSort.HasFlag(SortKey.CreatedDate),
                (v) => libraryView.ActiveSort = SortKey.CreatedDate,
                useRadioStyle: true,
                siblingRadioButtonList: siblingList);

            popupMenu.CreateBoolMenuItem(
                "Date Modified".Localize(),
                () => libraryView.ActiveSort.HasFlag(SortKey.ModifiedDate),
                (v) => libraryView.ActiveSort = SortKey.ModifiedDate,
                useRadioStyle: true,
                siblingRadioButtonList: siblingList);

            popupMenu.CreateBoolMenuItem(
                "Name".Localize(),
                () => libraryView.ActiveSort.HasFlag(SortKey.Name),
                (v) => libraryView.ActiveSort = SortKey.Name,
                useRadioStyle: true,
                siblingRadioButtonList: siblingList);

            popupMenu.CreateSeparator();

            siblingList = new List <GuiWidget>();

            popupMenu.CreateBoolMenuItem(
                "Ascending".Localize(),
                () => libraryView.Ascending,
                (v) => libraryView.Ascending = true,
                useRadioStyle: true,
                siblingRadioButtonList: siblingList);

            popupMenu.CreateBoolMenuItem(
                "Descending".Localize(),
                () => !libraryView.Ascending,
                (v) => libraryView.Ascending = false,
                useRadioStyle: true,
                siblingRadioButtonList: siblingList);

            return(popupMenu);
        }
コード例 #7
0
        public FlowLayoutWidget CreateMenuItems(PopupMenu popupMenu, IEnumerable <NamedAction> menuActions)
        {
            // Create menu items in the DropList for each element in this.menuActions
            foreach (var menuAction in menuActions)
            {
                if (menuAction is ActionSeparator)
                {
                    popupMenu.CreateSeparator();
                }
                else
                {
                    PopupMenu.MenuItem menuItem;

                    if (menuAction is NamedBoolAction boolAction)
                    {
                        menuItem = popupMenu.CreateBoolMenuItem(menuAction.Title, boolAction.GetIsActive, boolAction.SetIsActive);
                    }
                    else
                    {
                        menuItem = popupMenu.CreateMenuItem(menuAction.Title, menuAction.Icon, menuAction.Shortcut);
                    }

                    menuItem.Name = $"{menuAction.Title} Menu Item";

                    menuItem.Enabled = menuAction.Action != null &&
                                       menuAction.IsEnabled?.Invoke() != false;

                    menuItem.ClearRemovedFlag();

                    if (menuItem.Enabled)
                    {
                        menuItem.Click += (s, e) =>
                        {
                            menuAction.Action();
                        };
                    }
                }
            }

            return(popupMenu);
        }
コード例 #8
0
        private static PopupMenu CreatePopupMenu()
        {
            var menuTheme = ApplicationController.Instance.MenuTheme;

            var popupMenu = new PopupMenu(menuTheme)
            {
                MinimumSize = new Vector2(300, 0)
            };

            var linkIcon = StaticData.Instance.LoadIcon("fa-link_16.png", 16, 16, menuTheme.InvertIcons);

            PopupMenu.MenuItem menuItem;

            menuItem        = popupMenu.CreateMenuItem("Help".Localize(), StaticData.Instance.LoadIcon("help_page.png", 16, 16, menuTheme.InvertIcons));
            menuItem.Click += (s, e) => ApplicationController.Instance.ShowApplicationHelp("Docs");

            menuItem        = popupMenu.CreateMenuItem("Interface Tour".Localize(), StaticData.Instance.LoadIcon("tour.png", 16, 16, menuTheme.InvertIcons));
            menuItem.Click += (s, e) =>
            {
                UiThread.RunOnIdle(() =>
                {
                    DialogWindow.Show <Tour.WelcomePage>();
                });
            };

            if (Application.EnableNetworkTraffic)
            {
                popupMenu.CreateSeparator();

                menuItem        = popupMenu.CreateMenuItem("Check For Update".Localize(), StaticData.Instance.LoadIcon("update.png", 16, 16, menuTheme.InvertIcons));
                menuItem.Click += (s, e) => UiThread.RunOnIdle(() =>
                {
                    UpdateControlData.Instance.CheckForUpdate();
                    DialogWindow.Show <CheckForUpdatesPage>();
                });
            }

            popupMenu.CreateSeparator();

            menuItem        = popupMenu.CreateMenuItem("Settings".Localize(), StaticData.Instance.LoadIcon("fa-cog_16.png", 16, 16, menuTheme.InvertIcons));
            menuItem.Click += (s, e) => DialogWindow.Show <ApplicationSettingsPage>();
            menuItem.Name   = "Settings MenuItem";

            popupMenu.CreateSeparator();

            ImageBuffer indicatorIcon = null;

            if (IntPtr.Size == 8)
            {
                indicatorIcon = StaticData.Instance.LoadIcon("x64.png", 16, 16, menuTheme.InvertIcons);
            }

            popupMenu.CreateSubMenu("Community".Localize(), menuTheme, (modifyMenu) =>
            {
                menuItem        = modifyMenu.CreateMenuItem("Forums".Localize(), linkIcon);
                menuItem.Click += (s, e) => ApplicationController.LaunchBrowser("https://forums.matterhackers.com/category/20/mattercontrol");

                menuItem        = modifyMenu.CreateMenuItem("Guides and Articles".Localize(), linkIcon);
                menuItem.Click += (s, e) => ApplicationController.LaunchBrowser("https://www.matterhackers.com/topic/mattercontrol");

                menuItem        = modifyMenu.CreateMenuItem("Support".Localize(), linkIcon);
                menuItem.Click += (s, e) => ApplicationController.LaunchBrowser("https://www.matterhackers.com/mattercontrol/support");

                menuItem        = modifyMenu.CreateMenuItem("Release Notes".Localize(), linkIcon);
                menuItem.Click += (s, e) => ApplicationController.LaunchBrowser("https://www.matterhackers.com/mattercontrol/support/release-notes");

                modifyMenu.CreateSeparator();

                menuItem        = modifyMenu.CreateMenuItem("Report a Bug".Localize(), StaticData.Instance.LoadIcon("feedback.png", 16, 16, menuTheme.InvertIcons));
                menuItem.Click += (s, e) => ApplicationController.LaunchBrowser("https://github.com/MatterHackers/MatterControl/issues");
            }, StaticData.Instance.LoadIcon("feedback.png", 16, 16, menuTheme.InvertIcons));

            popupMenu.CreateSeparator();

            var imageBuffer = new ImageBuffer(18, 18);

            // x64 indicator icon
            if (IntPtr.Size == 8)
            {
                var graphics = imageBuffer.NewGraphics2D();
                graphics.Clear(menuTheme.BackgroundColor);
                graphics.Rectangle(imageBuffer.GetBoundingRect(), menuTheme.PrimaryAccentColor);
                graphics.DrawString("64", imageBuffer.Width / 2, imageBuffer.Height / 2, 8, Agg.Font.Justification.Center, Agg.Font.Baseline.BoundsCenter, color: menuTheme.PrimaryAccentColor);
            }

            menuItem        = popupMenu.CreateMenuItem("About".Localize() + " MatterControl", imageBuffer);
            menuItem.Click += (s, e) => ApplicationController.Instance.ShowAboutPage();
            return(popupMenu);
        }
コード例 #9
0
        private GuiWidget CreateVisibilityOptions(ThemeConfig theme)
        {
            var visibilityOptionsButton = new PopupMenuButton("Visibility Options", theme)
            {
                VAnchor = VAnchor.Center
            };

            var popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);

            visibilityOptionsButton.PopupContent = popupMenu;

            // put in options for filtering various output
            popupMenu.CreateBoolMenuItem(
                "Line Checksums".Localize(),
                () => UserSettings.Instance.Fields.GetBool(UserSettingsKey.TerminalShowChecksum, true),
                (isChecked) =>
            {
                UserSettings.Instance.Fields.SetBool(UserSettingsKey.TerminalShowChecksum, isChecked);
                textScrollWidget.RebuildFilteredList();
            });

            popupMenu.CreateBoolMenuItem(
                "In / Out Indicators".Localize(),
                () => UserSettings.Instance.Fields.GetBool(UserSettingsKey.TerminalShowInputOutputMarks, true),
                (isChecked) =>
            {
                UserSettings.Instance.Fields.SetBool(UserSettingsKey.TerminalShowInputOutputMarks, isChecked);
                textScrollWidget.RebuildFilteredList();
            });

            // request section
            popupMenu.CreateSeparator();

            popupMenu.CreateBoolMenuItem(
                "Temperature Requests".Localize(),
                () => UserSettings.Instance.Fields.GetBool(UserSettingsKey.TerminalShowTempRequests, true),
                (isChecked) =>
            {
                UserSettings.Instance.Fields.SetBool(UserSettingsKey.TerminalShowTempRequests, isChecked);
                textScrollWidget.RebuildFilteredList();
            });

            popupMenu.CreateBoolMenuItem(
                "Movement Requests".Localize(),
                () => UserSettings.Instance.Fields.GetBool(UserSettingsKey.TerminalShowMovementRequests, true),
                (isChecked) =>
            {
                UserSettings.Instance.Fields.SetBool(UserSettingsKey.TerminalShowMovementRequests, isChecked);
                textScrollWidget.RebuildFilteredList();
            });

            // response section
            popupMenu.CreateSeparator();

            popupMenu.CreateBoolMenuItem(
                "Temperature Responses".Localize(),
                () => UserSettings.Instance.Fields.GetBool(UserSettingsKey.TerminalShowTempResponse, true),
                (isChecked) =>
            {
                UserSettings.Instance.Fields.SetBool(UserSettingsKey.TerminalShowTempResponse, isChecked);
                textScrollWidget.RebuildFilteredList();
            });

            popupMenu.CreateBoolMenuItem(
                "'Ok' Responses".Localize(),
                () => UserSettings.Instance.Fields.GetBool(UserSettingsKey.TerminalShowOks, true),
                (isChecked) =>
            {
                UserSettings.Instance.Fields.SetBool(UserSettingsKey.TerminalShowOks, isChecked);
                textScrollWidget.RebuildFilteredList();
            });

            popupMenu.CreateBoolMenuItem(
                "'Wait' Responses".Localize(),
                () => UserSettings.Instance.Fields.GetBool(UserSettingsKey.TerminalShowWaitResponse, false),
                (isChecked) =>
            {
                UserSettings.Instance.Fields.SetBool(UserSettingsKey.TerminalShowWaitResponse, isChecked);
                textScrollWidget.RebuildFilteredList();
            });

            return(visibilityOptionsButton);
        }
コード例 #10
0
        public static GuiWidget CreateViewOptionsMenuButton(ThemeConfig theme,
                                                            LibraryListView libraryView,
                                                            Action <bool> showContainers,
                                                            Func <bool> containersShown)
        {
            var viewMenuButton = new PopupMenuButton(
                new ImageWidget(StaticData.Instance.LoadIcon("mi-view-list_10.png", 32, 32, theme.InvertIcons))
            {
                // VAnchor = VAnchor.Center
            },
                theme)
            {
                AlignToRightEdge = true,
                ToolTipText      = "View Settings".Localize()
            };

            viewMenuButton.DynamicPopupContent = () =>
            {
                var popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);

                var listView = libraryView;

                var siblingList = new List <GuiWidget>();

                popupMenu.CreateBoolMenuItem(
                    "Show Folders".Localize(),
                    () => containersShown(),
                    (isChecked) =>
                {
                    showContainers(isChecked);
                    listView.Reload().ConfigureAwait(false);
                });

                popupMenu.CreateSeparator();

                popupMenu.CreateBoolMenuItem(
                    "View List".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.RowListView,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.RowListView;
                    listView.ListContentView = new RowListView(theme);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);
#if DEBUG
                popupMenu.CreateBoolMenuItem(
                    "View XSmall Icons".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.IconListView18,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.IconListView18;
                    listView.ListContentView = new IconListView(theme, 18);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                popupMenu.CreateBoolMenuItem(
                    "View Small Icons".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.IconListView70,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.IconListView70;
                    listView.ListContentView = new IconListView(theme, 70);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);
#endif
                popupMenu.CreateBoolMenuItem(
                    "View Icons".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.IconListView,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.IconListView;
                    listView.ListContentView = new IconListView(theme);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                popupMenu.CreateBoolMenuItem(
                    "View Large Icons".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.IconListView256,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.IconListView256;
                    listView.ListContentView = new IconListView(theme, 256);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                return(popupMenu);
            };

            return(viewMenuButton);
        }
コード例 #11
0
        public FlowLayoutWidget CreateMenuItems(PopupMenu popupMenu, IEnumerable <NamedAction> menuActions)
        {
            // Create menu items in the DropList for each element in this.menuActions
            foreach (var menuAction in menuActions)
            {
                if (menuAction is ActionSeparator)
                {
                    popupMenu.CreateSeparator();
                }
                else
                {
                    if (menuAction is NamedActionGroup namedActionButtons)
                    {
                        var content = new FlowLayoutWidget()
                        {
                            HAnchor = HAnchor.Fit | HAnchor.Stretch
                        };

                        var textWidget = new TextWidget(menuAction.Title, pointSize: this.DefaultFontSize, textColor: this.TextColor)
                        {
                            // Padding = MenuPadding,
                            VAnchor = VAnchor.Center
                        };
                        content.AddChild(textWidget);

                        content.AddChild(new HorizontalSpacer());

                        foreach (var actionButton in namedActionButtons.Group)
                        {
                            var button = new TextButton(actionButton.Title, this)
                            {
                                Border      = new BorderDouble(1, 0, 0, 0),
                                BorderColor = this.MinimalShade,
                                HoverColor  = this.AccentMimimalOverlay,
                                Enabled     = actionButton.IsEnabled()
                            };

                            content.AddChild(button);

                            if (actionButton.IsEnabled())
                            {
                                button.Click += (s, e) =>
                                {
                                    actionButton.Action();
                                    popupMenu.Unfocus();
                                };
                            }
                        }

                        var menuItem = new PopupMenu.MenuItem(content, this)
                        {
                            HAnchor    = HAnchor.Fit | HAnchor.Stretch,
                            VAnchor    = VAnchor.Fit,
                            HoverColor = Color.Transparent,
                        };
                        popupMenu.AddChild(menuItem);
                        menuItem.Padding = new BorderDouble(menuItem.Padding.Left,
                                                            menuItem.Padding.Bottom,
                                                            0,
                                                            menuItem.Padding.Top);
                    }
                    else
                    {
                        PopupMenu.MenuItem menuItem;

                        if (menuAction is NamedBoolAction boolAction)
                        {
                            menuItem = popupMenu.CreateBoolMenuItem(menuAction.Title, boolAction.GetIsActive, boolAction.SetIsActive);
                        }
                        else
                        {
                            menuItem = popupMenu.CreateMenuItem(menuAction.Title, menuAction.Icon, menuAction.Shortcut);
                        }

                        menuItem.Name = $"{menuAction.Title} Menu Item";

                        menuItem.Enabled = menuAction is NamedActionGroup ||
                                           (menuAction.Action != null && menuAction.IsEnabled?.Invoke() != false);

                        menuItem.ClearRemovedFlag();

                        if (menuItem.Enabled)
                        {
                            menuItem.Click += (s, e) =>
                            {
                                menuAction.Action();
                            };
                        }
                    }
                }
            }

            return(popupMenu);
        }
コード例 #12
0
        public LibraryWidget(MainViewWidget mainViewWidget, ThemeConfig theme)
        {
            this.theme          = theme;
            this.mainViewWidget = mainViewWidget;
            this.Padding        = 0;
            this.AnchorAll();

            var allControls = new FlowLayoutWidget(FlowDirection.TopToBottom);

            libraryContext = ApplicationController.Instance.LibraryTabContext;

            libraryView = new LibraryListView(libraryContext, theme)
            {
                Name = "LibraryView",
                // Drop containers if ShowContainers != 1
                ContainerFilter   = (container) => UserSettings.Instance.ShowContainers,
                BackgroundColor   = theme.BackgroundColor,
                Border            = new BorderDouble(top: 1),
                DoubleClickAction = LibraryListView.DoubleClickActions.PreviewItem
            };

            navBar = new OverflowBar(theme)
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Fit,
            };
            allControls.AddChild(navBar);
            theme.ApplyBottomBorder(navBar);

            breadCrumbWidget = new FolderBreadCrumbWidget(libraryContext, theme);
            navBar.AddChild(breadCrumbWidget);

            var searchPanel = new SearchInputBox(theme)
            {
                Visible = false,
                Margin  = new BorderDouble(10, 0, 5, 0),
            };

            searchPanel.searchInput.ActualTextEditWidget.EnterPressed += (s, e) =>
            {
                this.PerformSearch();
            };
            searchPanel.ResetButton.Click += (s, e) =>
            {
                breadCrumbWidget.Visible = true;
                searchPanel.Visible      = false;

                searchPanel.searchInput.Text = "";

                this.ClearSearch();
            };

            // Store a reference to the input field
            this.searchInput = searchPanel.searchInput;

            navBar.AddChild(searchPanel);

            searchButton         = theme.CreateSearchButton();
            searchButton.Enabled = false;
            searchButton.Name    = "Search Library Button";
            searchButton.Click  += (s, e) =>
            {
                if (searchPanel.Visible)
                {
                    PerformSearch();
                }
                else
                {
                    searchContainer = libraryContext.ActiveContainer;

                    breadCrumbWidget.Visible = false;
                    searchPanel.Visible      = true;
                    searchInput.Focus();
                }
            };
            navBar.AddChild(searchButton);

            PopupMenuButton viewOptionsButton;

            navBar.AddChild(
                viewOptionsButton = new PopupMenuButton(
                    new ImageWidget(AggContext.StaticData.LoadIcon("fa-sort_16.png", 32, 32, theme.InvertIcons))
            {
                //VAnchor = VAnchor.Center
            },
                    theme)
            {
                AlignToRightEdge = true,
                Name             = "Print Library View Options"
            });

            viewOptionsButton.DynamicPopupContent = () =>
            {
                var popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);

                var siblingList = new List <GuiWidget>();

                popupMenu.CreateBoolMenuItem(
                    "Date Created".Localize(),
                    () => libraryView.ActiveSort.HasFlag(SortKey.CreatedDate),
                    (v) => libraryView.ActiveSort = SortKey.CreatedDate,
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                popupMenu.CreateBoolMenuItem(
                    "Date Modified".Localize(),
                    () => libraryView.ActiveSort.HasFlag(SortKey.ModifiedDate),
                    (v) => libraryView.ActiveSort = SortKey.ModifiedDate,
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                popupMenu.CreateBoolMenuItem(
                    "Name".Localize(),
                    () => libraryView.ActiveSort.HasFlag(SortKey.Name),
                    (v) => libraryView.ActiveSort = SortKey.Name,
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                popupMenu.CreateSeparator();

                siblingList = new List <GuiWidget>();

                popupMenu.CreateBoolMenuItem(
                    "Ascending".Localize(),
                    () => libraryView.Ascending,
                    (v) => libraryView.Ascending = true,
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                popupMenu.CreateBoolMenuItem(
                    "Descending".Localize(),
                    () => !libraryView.Ascending,
                    (v) => libraryView.Ascending = false,
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                return(popupMenu);
            };

            PopupMenuButton viewMenuButton;

            navBar.AddChild(
                viewMenuButton = new PopupMenuButton(
                    new ImageWidget(AggContext.StaticData.LoadIcon("mi-view-list_10.png", 32, 32, theme.InvertIcons))
            {
                //VAnchor = VAnchor.Center
            },
                    theme)
            {
                AlignToRightEdge = true
            });

            viewMenuButton.DynamicPopupContent = () =>
            {
                var popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);

                var listView = this.libraryView;

                var siblingList = new List <GuiWidget>();

                popupMenu.CreateBoolMenuItem(
                    "View List".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.RowListView,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.RowListView;
                    listView.ListContentView = new RowListView(theme);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);
#if DEBUG
                popupMenu.CreateBoolMenuItem(
                    "View XSmall Icons".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.IconListView18,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.IconListView18;
                    listView.ListContentView = new IconListView(theme, 18);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                popupMenu.CreateBoolMenuItem(
                    "View Small Icons".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.IconListView70,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.IconListView70;
                    listView.ListContentView = new IconListView(theme, 70);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);
#endif
                popupMenu.CreateBoolMenuItem(
                    "View Icons".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.IconListView,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.IconListView;
                    listView.ListContentView = new IconListView(theme);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                popupMenu.CreateBoolMenuItem(
                    "View Large Icons".Localize(),
                    () => ApplicationController.Instance.ViewState.LibraryViewMode == ListViewModes.IconListView256,
                    (isChecked) =>
                {
                    ApplicationController.Instance.ViewState.LibraryViewMode = ListViewModes.IconListView256;
                    listView.ListContentView = new IconListView(theme, 256);
                    listView.Reload().ConfigureAwait(false);
                },
                    useRadioStyle: true,
                    siblingRadioButtonList: siblingList);

                return(popupMenu);
            };

            var horizontalSplitter = new Splitter()
            {
                SplitterDistance   = UserSettings.Instance.LibraryViewWidth,
                SplitterSize       = theme.SplitterWidth,
                SplitterBackground = theme.SplitterBackground
            };
            horizontalSplitter.AnchorAll();

            horizontalSplitter.DistanceChanged += (s, e) =>
            {
                UserSettings.Instance.LibraryViewWidth = horizontalSplitter.SplitterDistance;
            };

            allControls.AddChild(horizontalSplitter);

            libraryTreeView = new TreeView(theme)
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Stretch,
                Margin  = 5
            };
            libraryTreeView.AfterSelect += async(s, e) =>
            {
                if (libraryTreeView.SelectedNode is ContainerTreeNode treeNode)
                {
                    if (!treeNode.ContainerAcquired)
                    {
                        await this.EnsureExpanded(treeNode.Tag as ILibraryItem, treeNode);
                    }

                    if (treeNode.ContainerAcquired)
                    {
                        libraryContext.ActiveContainer = treeNode.Container;
                    }
                }
            };
            horizontalSplitter.Panel1.AddChild(libraryTreeView);

            var rootColumn = new FlowLayoutWidget(FlowDirection.TopToBottom)
            {
                HAnchor = HAnchor.Fit,
                VAnchor = VAnchor.Fit,
                Margin  = new BorderDouble(left: 10)
            };
            libraryTreeView.AddChild(rootColumn);

            if (AppContext.IsLoading)
            {
                ApplicationController.StartupActions.Add(new ApplicationController.StartupAction()
                {
                    Title    = "Initializing Library".Localize(),
                    Priority = 0,
                    Action   = () =>
                    {
                        this.LoadRootLibraryNodes(rootColumn);
                    }
                });
            }
            else
            {
                this.LoadRootLibraryNodes(rootColumn);
            }

            horizontalSplitter.Panel2.AddChild(libraryView);

            buttonPanel = new FlowLayoutWidget()
            {
                HAnchor = HAnchor.Stretch,
                Padding = theme.ToolbarPadding,
            };
            AddLibraryButtonElements();
            allControls.AddChild(buttonPanel);

            allControls.AnchorAll();

            this.AddChild(allControls);

            // Register listeners
            libraryView.SelectedItems.CollectionChanged += SelectedItems_CollectionChanged;
            libraryContext.ContainerChanged             += Library_ContainerChanged;
        }
コード例 #13
0
        public HardwareTabPage(ThemeConfig theme)
            : base(FlowDirection.TopToBottom)
        {
            this.theme   = theme;
            this.Padding = 0;
            this.HAnchor = HAnchor.Stretch;
            this.VAnchor = VAnchor.Stretch;

            var toolbar = new Toolbar(theme.TabbarPadding, theme.CreateSmallResetButton())
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Fit,
                Padding = theme.ToolbarPadding
            };

            theme.ApplyBottomBorder(toolbar);

            toolbar.AddChild(new TextButton("Inventory".Localize(), theme)
            {
                Padding     = new BorderDouble(6, 0),
                MinimumSize = new Vector2(0, theme.ButtonHeight),
                Selectable  = false
            });

            this.AddChild(toolbar);

            var horizontalSplitter = new Splitter()
            {
                SplitterDistance   = UserSettings.Instance.LibraryViewWidth,
                SplitterSize       = theme.SplitterWidth,
                SplitterBackground = theme.SplitterBackground,
                HAnchor            = HAnchor.Stretch,
                VAnchor            = VAnchor.Stretch,
            };

            horizontalSplitter.DistanceChanged += (s, e) =>
            {
                UserSettings.Instance.LibraryViewWidth = horizontalSplitter.SplitterDistance;
            };

            this.AddChild(horizontalSplitter);

            var treeView = new HardwareTreeView(theme)
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Stretch,
                Width   = 300,
                Margin  = 5
            };

            treeView.NodeMouseDoubleClick += (s, e) =>
            {
                if (e is MouseEventArgs mouseEvent &&
                    s is GuiWidget clickedWidget &&
                    mouseEvent.Button == MouseButtons.Left &&
                    mouseEvent.Clicks == 2)
                {
                    if (treeView?.SelectedNode.Tag is PrinterInfo printerInfo)
                    {
                        ApplicationController.Instance.OpenPrinter(printerInfo);
                    }
                }
            };

            treeView.NodeMouseClick += (s, e) =>
            {
                if (e is MouseEventArgs mouseEvent &&
                    s is GuiWidget clickedWidget &&
                    mouseEvent.Button == MouseButtons.Right)
                {
                    UiThread.RunOnIdle(() =>
                    {
                        var popupMenu = new PopupMenu(ApplicationController.Instance.MenuTheme);

                        var openMenuItem    = popupMenu.CreateMenuItem("Open".Localize());
                        openMenuItem.Click += (s2, e2) =>
                        {
                            if (treeView?.SelectedNode.Tag is PrinterInfo printerInfo)
                            {
                                ApplicationController.Instance.OpenPrinter(printerInfo);
                            }
                        };

                        popupMenu.CreateSeparator();

                        var deleteMenuItem    = popupMenu.CreateMenuItem("Delete".Localize());
                        deleteMenuItem.Click += (s2, e2) =>
                        {
                            if (treeView.SelectedNode.Tag is PrinterInfo printerInfo)
                            {
                                // Delete printer
                                StyledMessageBox.ShowMessageBox(
                                    (deletePrinter) =>
                                {
                                    if (deletePrinter)
                                    {
                                        ProfileManager.Instance.DeletePrinter(printerInfo.ID);
                                    }
                                },
                                    "Are you sure you want to delete printer '{0}'?".Localize().FormatWith(printerInfo.Name),
                                    "Delete Printer?".Localize(),
                                    StyledMessageBox.MessageType.YES_NO,
                                    "Delete Printer".Localize());
                            }
                        };

                        popupMenu.ShowMenu(clickedWidget, mouseEvent);
                    });
                }
            };

            treeView.ScrollArea.HAnchor = HAnchor.Stretch;

            treeView.AfterSelect += (s, e) =>
            {
                if (treeView.SelectedNode.Tag is PrinterInfo printerInfo)
                {
                    horizontalSplitter.Panel2.CloseChildren();
                    horizontalSplitter.Panel2.AddChild(new PrinterDetails(printerInfo, theme, true)
                    {
                        HAnchor = HAnchor.MaxFitOrStretch,
                        VAnchor = VAnchor.Stretch,
                        Padding = theme.DefaultContainerPadding
                    });
                }
            };
            horizontalSplitter.Panel1.AddChild(treeView);

            horizontalSplitter.Panel2.AddChild(new GuiWidget()
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Stretch,
            });
        }
コード例 #14
0
        public HardwareTabPage(ThemeConfig theme)
            : base(FlowDirection.TopToBottom)
        {
            this.theme   = theme;
            this.Padding = 0;
            this.HAnchor = HAnchor.Stretch;
            this.VAnchor = VAnchor.Stretch;

            var toolbar = new Toolbar(theme)
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Fit,
                Padding = theme.ToolbarPadding
            };

            theme.ApplyBottomBorder(toolbar);

            toolbar.AddChild(new TextButton("Inventory".Localize(), theme)
            {
                Padding     = new BorderDouble(6, 0),
                MinimumSize = new Vector2(0, theme.ButtonHeight),
                Selectable  = false
            });

            this.AddChild(toolbar);

            var horizontalSplitter = new Splitter()
            {
                SplitterDistance   = UserSettings.Instance.LibraryViewWidth,
                SplitterSize       = theme.SplitterWidth,
                SplitterBackground = theme.SplitterBackground,
                HAnchor            = HAnchor.Stretch,
                VAnchor            = VAnchor.Stretch,
            };

            horizontalSplitter.DistanceChanged += (s, e) =>
            {
                UserSettings.Instance.LibraryViewWidth = horizontalSplitter.SplitterDistance;
            };

            this.AddChild(horizontalSplitter);

            var treeView = new HardwareTreeView(theme)
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Stretch,
                Width   = 300,
                Margin  = 5
            };

            treeView.NodeMouseDoubleClick += (s, e) =>
            {
                if (e is MouseEventArgs mouseEvent &&
                    s is GuiWidget clickedWidget &&
                    mouseEvent.Button == MouseButtons.Left &&
                    mouseEvent.Clicks == 2)
                {
                    if (treeView?.SelectedNode.Tag is PrinterInfo printerInfo)
                    {
                        if (ApplicationController.Instance.ActivePrinters.FirstOrDefault(p => p.Settings.ID == printerInfo.ID) is PrinterConfig printer &&
                            ApplicationController.Instance.MainView.TabControl.AllTabs.FirstOrDefault(t => t.TabContent is PrinterTabPage printerTabPage && printerTabPage.printer == printer) is ITab tab)
                        {
                            // Switch to existing printer tab
                            ApplicationController.Instance.MainView.TabControl.ActiveTab = tab;
                        }
                        else
                        {
                            // Open new printer tab
                            ApplicationController.Instance.OpenPrinter(printerInfo.ID).ConfigureAwait(false);
                        }
                    }
                }
            };

            treeView.NodeMouseClick += (s, e) =>
            {
                if (e is MouseEventArgs mouseEvent &&
                    s is GuiWidget clickedWidget &&
                    mouseEvent.Button == MouseButtons.Right)
                {
                    UiThread.RunOnIdle(() =>
                    {
                        var menu = new PopupMenu(ApplicationController.Instance.MenuTheme);

                        var openMenuItem    = menu.CreateMenuItem("Open".Localize());
                        openMenuItem.Click += (s2, e2) =>
                        {
                            if (treeView?.SelectedNode.Tag is PrinterInfo printerInfo)
                            {
                                // Open printer
                                ApplicationController.Instance.OpenPrinter(printerInfo.ID).ConfigureAwait(false);
                            }
                        };

                        menu.CreateSeparator();

                        var deleteMenuItem    = menu.CreateMenuItem("Delete".Localize());
                        deleteMenuItem.Click += (s2, e2) =>
                        {
                            // Delete printer
                            StyledMessageBox.ShowMessageBox(
                                (deletePrinter) =>
                            {
                                if (deletePrinter)
                                {
                                    if (treeView.SelectedNode.Tag is PrinterInfo printerInfo)
                                    {
                                        ProfileManager.Instance.DeletePrinter(printerInfo.ID);
                                    }
                                }
                            },
                                "Are you sure you want to delete your currently selected printer?".Localize(),
                                "Delete Printer?".Localize(),
                                StyledMessageBox.MessageType.YES_NO,
                                "Delete Printer".Localize());
                        };


                        var systemWindow = this.Parents <SystemWindow>().FirstOrDefault();
                        systemWindow.ShowPopup(
                            new MatePoint(clickedWidget)
                        {
                            Mate    = new MateOptions(MateEdge.Left, MateEdge.Top),
                            AltMate = new MateOptions(MateEdge.Left, MateEdge.Top)
                        },
                            new MatePoint(menu)
                        {
                            Mate    = new MateOptions(MateEdge.Left, MateEdge.Top),
                            AltMate = new MateOptions(MateEdge.Right, MateEdge.Top)
                        },
                            altBounds: new RectangleDouble(mouseEvent.X + 1, mouseEvent.Y + 1, mouseEvent.X + 1, mouseEvent.Y + 1));
                    });
                }
            };

            treeView.ScrollArea.HAnchor = HAnchor.Stretch;

            treeView.AfterSelect += async(s, e) =>
            {
                if (treeView.SelectedNode.Tag is PrinterInfo printerInfo)
                {
                    horizontalSplitter.Panel2.CloseAllChildren();
                    horizontalSplitter.Panel2.AddChild(new PrinterDetails(printerInfo, theme)
                    {
                        HAnchor = HAnchor.MaxFitOrStretch,
                        VAnchor = VAnchor.Stretch,
                        Padding = theme.DefaultContainerPadding
                    });
                }
            };
            horizontalSplitter.Panel1.AddChild(treeView);

            horizontalSplitter.Panel2.AddChild(new GuiWidget()
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Stretch,
            });
        }