diff --git a/CHANGELOG.md b/CHANGELOG.md index 43807ee..cb29594 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,9 +25,8 @@ is not part of this repository. restart of the machine. - The JSON of a plan carries `delayedAuto` next to `startType`, the same way `bws list --json` does, and `alsoStop` for a plan that also stops. -- A Help button in the top right corner, also opened with F1. It lists the keyboard shortcuts - - each item does what its key does - opens the query language page and the project's website in - your browser, and shows the version of the program, which you can copy. +- A Help button in the top right corner, also opened with F1. It opens the query language page + on the project's website in your browser. - After the list is exported, the foot of the window says how many entries went into which file. The sentence goes away as soon as you change the search. - "Set startup type" in the row menu, with the same four settings as the action bar. @@ -72,6 +71,14 @@ is not part of this repository. both, and rows narrow each other. The row labels no longer repeat the same tooltip. - The row menu names its actions the way the action bar does: "Stop...", "Start...", "Restart...", "Force stop..." and "Force restart...". Each still opens a plan first. +- "Show the list" on the machine overview is a blue button, so it is easy to find the first time + the window opens. +- In the plan panel, the name of the entry stands out in bold in the title and in every step. + +### Removed + +- "Copy display name" and "Copy description" from the row menu. Both are still copied by "Copy + everything". ### Fixed diff --git a/src/Bws.Gui/ExternalLinks.cs b/src/Bws.Gui/ExternalLinks.cs index 41aa6c4..e14c653 100644 --- a/src/Bws.Gui/ExternalLinks.cs +++ b/src/Bws.Gui/ExternalLinks.cs @@ -11,9 +11,9 @@ namespace Bws.Gui; /// -/// The addresses this window hands to a browser, and the two ways it hands them over. One until -/// 2026-09-24 - the support page - and three since the help menu (UX-GUI-014) offered the project's -/// website and its query language page. +/// The addresses this window hands to a browser, and the two ways it hands them over: the support +/// page and the query language page. The help menu (UX-GUI-014) offered the project's website as a +/// third for one day, 2026-09-24. /// /// THE SECOND FILE IN THIS WINDOW ALLOWED TO START SOMETHING, and that is the owner's decision /// of 2026-09-23 rather than an arrangement of mine. was the only one @@ -88,9 +88,6 @@ internal static class ExternalLinks /// internal static Task OpenSupportAsync() => Supporting.Ask(); - /// The project's website, from the help menu - UX-GUI-014, 2026-09-24. - internal const string ProjectPage = "https://betterwindowsservices.donislawdev.com/"; - /// /// The page describing the query language, from the help menu. The same address the README /// gives, so a person who found it there finds the same page here. @@ -98,19 +95,14 @@ internal static class ExternalLinks internal const string QueryLanguagePage = "https://betterwindowsservices.donislawdev.com/query-language/"; /// - /// The two pages the help menu offers, each with a hand-over of its own for the reason + /// The page the help menu offers, with a hand-over of its own for the reason /// has one: a second press while the shell still has the first joins /// it rather than starting another. THE SAME TWO WAYS AS THE SUPPORT PAGE AND NO THIRD - an /// elevated window hands the address to the desktop, and this adds no call into the shell. + /// The project's website had one beside it until 2026-09-24, when it left the menu. /// - private static readonly ShellHandover Project = Page(ProjectPage); - - /// private static readonly ShellHandover QueryLanguage = Page(QueryLanguagePage); - /// Hands the project's website to a browser, or says why it did not. - internal static Task OpenProjectPageAsync() => Project.Ask(); - /// Hands the query language page to a browser, or says why it did not. internal static Task OpenQueryLanguagePageAsync() => QueryLanguage.Ask(); diff --git a/src/Bws.Gui/HelpMenu.cs b/src/Bws.Gui/HelpMenu.cs index 32f56af..be3e9fc 100644 --- a/src/Bws.Gui/HelpMenu.cs +++ b/src/Bws.Gui/HelpMenu.cs @@ -1,72 +1,34 @@ namespace Bws.Gui; /// -/// What the Help button offers: the keyboard shortcuts, the two pages on the project's website, and -/// the version of this program. UX-GUI-014 with the shortcut half of UX-GUI-010, owner's decision -/// 2026-09-24 - until that day the window named Ctrl+F, Ctrl+C and Ctrl+A nowhere and said its own -/// version nowhere. +/// What the Help button offers: the query language page on the project's website, and nothing +/// else since 2026-09-24 - owner's decision. /// -/// A LIST OF DATA BUILT BY , NOT A SECOND MENU WRITTEN OUT - GUI -/// rules 2 and 8. An item here has exactly the shape of an item on a row: words, a key written -/// beside them, and what a press does. So it is the row menu's entry and the row menu's item style, -/// and the name "row" on them is the one place this reuse shows. +/// IT HELD NINE ITEMS FOR ONE DAY. UX-GUI-014 built it earlier the same day with the six +/// keyboard shortcuts, the project's website and the version of this program, and the owner cut it +/// to this one. The price is said rather than left for somebody to find: F5, Ctrl+F, +/// Ctrl+A and Esc are named in no text of the window again (the half of UX-GUI-010 this menu had +/// answered), and the window no longer says its own version - `bws --version` does. Ctrl+C and +/// Enter are still written beside their items in the row menu. +/// +/// STILL A MENU WITH ONE ITEM RATHER THAN A BUTTON THAT OPENS THE PAGE - owner's choice +/// between the two. A press on "Help" that leaves the program for a browser with nothing in between +/// would be a surprise, and a menu can take a second item back without the button changing what +/// it does. /// -/// EVERY SHORTCUT ITEM DOES WHAT IT NAMES, through the same the key -/// goes through. A menu that described the keys while a second road carried them out would be -/// two answers to one question, which this window was caught by on 2026-09-02. The one exception is -/// Ctrl+A, which is the grid's own key rather than one of ours, and the item asks the grid for the -/// same thing. +/// A LIST OF DATA BUILT BY , NOT A SECOND MENU WRITTEN OUT - GUI +/// rules 2 and 8, and the item is the row menu's entry for that reason. /// -/// The two pages go out through and nothing else, exactly as -/// Donate does - an elevated window hands the address to the desktop, and this program still -/// connects to nothing (`ADR-19`). +/// The page goes out through and nothing else, exactly as Donate +/// does - an elevated window hands the address to the desktop, and this program still connects to +/// nothing (`ADR-19`). /// internal static class HelpMenu { internal static IReadOnlyList> GroupsFor(MainWindow window) => [ [ - new RowMenuEntry("gui.help.find", "gui.help.find.gesture", () => Pressed(window, Shortcut.FocusQuery)), - new RowMenuEntry("gui.help.refresh", "gui.help.refresh.gesture", () => Pressed(window, Shortcut.Refresh)), - new RowMenuEntry("gui.help.details", "gui.menu.details.gesture", () => Pressed(window, Shortcut.OpenDetails)), - new RowMenuEntry("gui.help.copy", "gui.menu.copyAll.gesture", () => Pressed(window, Shortcut.CopyRow)), - new RowMenuEntry("gui.help.selectAll", "gui.help.selectAll.gesture", () => Task.FromResult(window.SelectEverything())), - new RowMenuEntry("gui.help.back", "gui.help.back.gesture", () => Pressed(window, Shortcut.Back)) - ], - [ - new RowMenuEntry("gui.help.queryLanguage", null, () => window.OpenPage(ExternalLinks.OpenQueryLanguagePageAsync)), - new RowMenuEntry("gui.help.projectPage", null, () => window.OpenPage(ExternalLinks.OpenProjectPageAsync)) - ], - [ - new RowMenuEntry("gui.help.version", null, () => Copied(window), () => VersionNumber) + new RowMenuEntry("gui.help.queryLanguage", null, () => window.OpenPage(ExternalLinks.OpenQueryLanguagePageAsync)) ] ]; - - /// - /// What the version item says and copies: the stamped number, or words saying there is none - - /// rule 8 of CLAUDE.md applied to one number rather than a guess that looks like one. - /// - internal static string VersionNumber => Release.Number ?? Texts.Of("gui.help.versionUnknown"); - - /// - /// A press of the key the item names. The work the key starts travels with it, so an item - /// that reads the machine again is awaited as the key's own press is. - /// - private static Task Pressed(MainWindow window, Shortcut shortcut) - { - window.Act(shortcut, out var work); - - return work; - } - - /// - /// The version on the clipboard, for somebody reporting a fault. A refusal from the clipboard is - /// said in the status line by , as it is for a copied row. - /// - private static Task Copied(MainWindow window) - { - window.Put(VersionNumber); - - return Task.CompletedTask; - } } diff --git a/src/Bws.Gui/MainWindow.Help.cs b/src/Bws.Gui/MainWindow.Help.cs index f834d73..c58a53c 100644 --- a/src/Bws.Gui/MainWindow.Help.cs +++ b/src/Bws.Gui/MainWindow.Help.cs @@ -3,8 +3,8 @@ namespace Bws.Gui; /// -/// The window's half of the Help button: the menu under it, F1, and the two things the menu does -/// that are not a key press already - UX-GUI-014, owner's decision 2026-09-24. +/// The window's half of the Help button: the menu under it, F1, and opening the page the menu +/// offers - UX-GUI-014, owner's decision 2026-09-24. /// /// A partial of its own because the constructor is at the analyser's length, the reason /// MainWindow.Overview.cs gives for the same shape: one line there, and the wiring here. What the @@ -15,8 +15,7 @@ public partial class MainWindow /// /// Hangs the help menu under its button. Called once, from the constructor. /// - /// Built with the row menu's builder and the row menu's item style, which is what makes - /// the key beside each shortcut appear - the style binds InputGestureText, and HelpMenu says why + /// Built with the row menu's builder and the row menu's item style, and HelpMenu says why /// the entry is the row's. /// private void IntroduceTheHelp() @@ -31,17 +30,6 @@ private void IntroduceTheHelp() /// internal bool OpenHelp() => ButtonMenu.OpenUnder(Scope.Help); - /// - /// Picks every entry in the list - what Ctrl+A does in the grid, asked of the grid rather than - /// done a second way, so the menu item and the key are the same act. - /// - internal bool SelectEverything() - { - Entries.SelectAll(); - - return true; - } - /// /// Hands one of the project's pages to a browser through , and says /// in the status line why it did not when it did not - the same shape as the Donate button. diff --git a/src/Bws.Gui/OverviewView.xaml b/src/Bws.Gui/OverviewView.xaml index f3b66c6..69e3bf6 100644 --- a/src/Bws.Gui/OverviewView.xaml +++ b/src/Bws.Gui/OverviewView.xaml @@ -109,12 +109,7 @@ ending at three heights read as a mistake rather than as three independent things. A row of equal cards is a row, a ragged one is a pile. --> - +