Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Epic: Settings UI v2 #10000

Open
11 of 65 tasks
zadjii-msft opened this issue Apr 29, 2021 · 3 comments
Open
11 of 65 tasks

Epic: Settings UI v2 #10000

zadjii-msft opened this issue Apr 29, 2021 · 3 comments
Assignees
Labels
Area-SettingsUI Anything specific to the SUI Issue-Scenario Product-Terminal The new Windows Terminal.

Comments

@zadjii-msft
Copy link
Member

zadjii-msft commented Apr 29, 2021

The goal of this issue is to track work on the settings UI to achieve (1) parity with the JSON experience and (2) experiences that are generally expected of a standard settings UI. Work items included here are not final, and can be removed/added at any time.

JSON Parity

All of these settings exist in the JSON, but not the SUI. For the most part, these require some kind of design to make it a good experience. A few notes I want to point out...

  • we can iterate on these designs. For example, "launch position" would be cool if we had a control that let you place the window in a specific position, but that's a bit costly to commit to at the moment. We should prioritize having a (good) experience over having "the best" experience.
  • settings that interact with each other can be exposed differently from the JSON.
  • some settings don't make sense to be in the SUI (i.e. unstable or better experience without cluttering SUI). That's fine, let's just have a discussion about it to track it

Startup page

Interaction page

Appearance page

  • experimental.useBackgroundImageForWindow

Appearance > Themes page

  • What do we even want from this page??

Extensions page

  • Make the page at all
  • disable dynamic profiles
  • List fragments, profiles from fragments?

Compatibility page

Profile settings

  • font features
  • font axes
  • padding (support for #,# or #,#,#,#) (PR Add separate padding settings for left, top, right and bottom #17909)
  • adjustIndistinguishableColors
  • experimental.pixelShaderPath
  • bellSound (supports one or multiple sound file paths)
  • experimental.connection.passthroughMode
  • experimental.showMarksInScrollbar
  • experimental.autoMarkPrompts
  • The icon setting should have a cool emoji picker OR file picker OR some preset icons OR whatever, you get it. Dustin has ~ t h o u g h t s ~ on this
  • nullable colors (PR Add nullable colors and improve Profile.Icon in settings UI #17870)
    • selection background (design: nullable color)
    • foreground color (design: nullable color)
    • background color (design: nullable color)
    • tab color (design: nullable color)
    • cursor color (design: nullable color)

Warnings

  • Add warnings to the SUI (PR Add Warnings to Settings UI #17933)
    - [ ] largePasteWarning
    - [ ] multiLinePasteWarning
    - [ ] confirmCloseAllTabs (see also Add the setting "confirmCloseAllTabs" to the UI #14413)
  • idea: add a checkbox to the warnings saying "don't show this again"
    • flow should probably update warning setting and add it to the state to block it from popping up again. Problem is that when we change the settings, it triggers a setting reload which could interrupt flow.

Actions

Profile reordering / Dropdown Menu

Command palette

  • (is this different from the actions page? probably not, yea?)
  • rename a command
  • add an icon to the command
  • nested commands
  • iterable commands

Features

These are SUI features that just make sense to have. They're experiences that are kind of expected in any SUI.

Tasks

  • Remove experimental from...
    • experimental.detectUrls
    • experimental.retroTerminalEffects
    • experimental.pixelShaderPath
    • experimental.showMarksInScrollbar
    • experimental.autoMarkPrompts
  • code health
    • Deduplicate Browse button logic
    • Polish TabBase #8452
    • Remove visibility hacks (i.e. acrylic opacity slider), and use ProfileViewModel instead

Follow-ups from actions page...

  • "the unbound bug"
    • Edit switchToTab to win+shift+q. Save. Edit switchToTab to ctrl+shift+t.
    • "unbound": "win+shift+q" appears but doesn't need to exist.
  • Actions::_GetContainerIndexByKeyChord optimization
    • We're just doing a O(n) search for a matching key chord, but we could technically do this much faster.
    • The list is already sorted by command name, so if we...
      1. use GetActionByKeyChord() to get the Command
      2. perform a binary search on the list using Command::Name() (assuming it has a name)
    • we should be able to accomplish this search in O(log n) time (usually)'
  • Performance
    • Clicking Actions in the left bar of Settings takes about 3 seconds to load and doesn't cache/keep it
  • Keybinding editor could be clearer #11341
@zadjii-msft zadjii-msft added the ⛺ Reserved For future use label Apr 29, 2021
@carlos-zamora carlos-zamora added Product-Terminal The new Windows Terminal. Issue-Scenario Area-SettingsUI Anything specific to the SUI and removed ⛺ Reserved For future use labels Jun 27, 2022
@carlos-zamora carlos-zamora changed the title <reserved> Epic: Settings UI v2 Jun 27, 2022
@carlos-zamora
Copy link
Member

A few notes from sync today:

  • experimental.input.forceVT
    • move to Profiles > Advanced (docs too)
  • experimental.useBackgroundImageForWindow
    • hide behind a feature flag if we feel uncomfortable with the quality
  • font features and font axes
    • P2/3. Should be behind an "advanced" font button. Refer to Settings app for an idea of how they do it.
  • selectionBackground, foreground, and background
  • warnings
    • maybe delete settings from TSM. Should purely live in state.json.

@carlos-zamora
Copy link
Member

carlos-zamora commented Jun 27, 2022

@carlos-zamora carlos-zamora self-assigned this Jun 27, 2022
@carlos-zamora carlos-zamora added the Needs-Discussion Something that requires a team discussion before we can proceed label Jul 6, 2022
@zadjii-msft zadjii-msft removed the Needs-Discussion Something that requires a team discussion before we can proceed label Jul 11, 2022
@bennettnicholas
Copy link
Contributor

As requested from Carlos. We should consider updating Color Scheme in the profile appearance settings UI to now be two dropdown selections, "Dark Color Scheme" and "Light Color Scheme", to align with the changes made in PR #14064

This allows users to be able to configure their profiles to change when the application or system theme changes.

microsoft-github-policy-service bot pushed a commit that referenced this issue Feb 29, 2024
## Summary of the Pull Request
Allow editing of font features and axes in the SUI to get the UI closer
towards JSON parity

The allowed font axes are obtained directly from the currently selected
font, and their display names are presented to the user in the user's
current locale (if it exists). Otherwise, we just display the axis tag
to the user.

## References and Relevant Issues
#10000 

## Validation Steps Performed

- [x] Font Axes can be added/changed/removed from the Settings UI


![image](https://github.com/microsoft/terminal/assets/26824113/b1c3ed57-e329-4893-9f15-7b60154b5ea0)

![image](https://github.com/microsoft/terminal/assets/26824113/e1f1ea22-857d-4392-8a15-f81539fe9257)

## PR Checklist
- [ ] Closes #xxx
- [ ] Tests added/passed
- [ ] Documentation updated
- If checked, please file a pull request on [our docs
repo](https://github.com/MicrosoftDocs/terminal) and link it here: #xxx
- [ ] Schema updated (if necessary)
microsoft-github-policy-service bot pushed a commit that referenced this issue Feb 29, 2024
## Summary of the Pull Request
**Targets #16104** 

Same as #16104, but for font features

## References and Relevant Issues
#10000 

## Validation Steps Performed
Font features are detected correctly and can be set in the settings UI

![image](https://github.com/microsoft/terminal/assets/26824113/054c30fa-c584-4b71-872d-d956526c373b)

![image](https://github.com/microsoft/terminal/assets/26824113/484a20eb-abe9-478c-99cf-f63939ab4c5b)

## PR Checklist
- [ ] Closes #xxx
- [ ] Tests added/passed
- [ ] Documentation updated
- If checked, please file a pull request on [our docs
repo](https://github.com/MicrosoftDocs/terminal) and link it here: #xxx
- [ ] Schema updated (if necessary)
DHowett pushed a commit that referenced this issue Aug 23, 2024
Adds functionality throughout the settings model to keep track of which
settings have been set.

There are two entry points:
- AppLogic.cpp: this is where we perform a settings reload by loading
the JSON
- MainPage.cpp: this is where the Save button is clicked in the settings
UI

Both of these entry points call into
`CascadiaSettings::LogSettingChanges()` where we aggregate the list of
changes (specifically, _which_ settings changed, not _what_ their value
is).

Just about all of the settings model objects now have a
`LogSettingChanges(std::set& changes, std::string_view context)` on
them.
- `changes` is where we aggregate all of the changes to. In it being a
set, we don't need to worry about duplicates and can do things like
iterate across all of the profiles.
- `context` prepends a string to the setting. This'll allow us to better
identify where a setting was changes (i.e. "global.X" are global
settings). We also use this to distinguish between settings set in the
~base layer~ profile defaults vs individual profiles.

The change log in each object is modified via two ways:
- `LayerJson()` changes: this is useful for detecting JSON changes! All
we're doing is checking if the setting has a value (due to inheritance,
just about everything is an optional here!). If the value is set, we add
the json key to the change log
- `INHERITABLE_SETTING_WITH_LOGGING` in IInheritable.h: we already use
this macro to define getters and setters. This new macro updates the
setter to check if the value was set to something different. If so, log
it!

 Other notes:
- We're not distinguishing between `defaultAppearance` and
`unfocusedAppearance`
- We are distinguishing between `profileDefaults` and `profile` (any
other profile)
- New Tab Menu Customization:
- we really just care about the entry types. Handled in
`GlobalAppSettings`
- Font:
- We still have support for legacy values here. We still want to track
them, but just use the modern keys.
- `Theme`:
- We don't do inheritance here, so we have to approach it differently.
During the JSON load, we log each setting. However, we don't have
`LayerJson`! So instead, do the work in `CascadiaSettings` and store the
changes there. Note that we don't track any changes made via setters.
This is fine for now since themes aren't even in the settings UI, so we
wouldn't get much use out of it anyways.
- Actions:
- Actions are weird because we can have nested and iterable actions too,
but `ActionsAndArgs` as a whole add a ton of functionality. I handled it
over in `Command::LogSettingChanges` and we generally just serialize it
to JSON to get the keys. It's a lot easier than dealing with the object
model.

Epic: #10000
Auto-Save (ish): #12424
carlos-zamora added a commit that referenced this issue Sep 25, 2024
Adds the following settings to the Interaction page under a Warnings subsection:
- ConfirmCloseAllTabs
- InputServiceWarning
- WarnAboutLargePaste
- WarnAboutMultiLinePaste

This also changes the JSON keys of those settings to be in the `warning` namespace as a QOL change for JSON users. We still handle the legacy keys, don't worry 😉.

#10000
DHowett pushed a commit that referenced this issue Oct 10, 2024
## Summary of the Pull Request
Adds the following settings to the settings UI:
- $profile.RainbowSuggestions
- $profile.CellWidth
- $global.SearchWebDefaultQueryUrl
- $global.EnableColorSelection
- $global.ShowAdminShield
- $global.EnableUnfocusedAcrylic

Additionally, the following settings have graduated from experimental 🎓:
- $profile.rightClickContextMenu

Part of #10000
DHowett pushed a commit that referenced this issue Oct 10, 2024
## Summary of the Pull Request
Adds a global Compatibility page to the settings UI. This page exposes
several existing settings and introduces a few new settings:
- compatibility.allowHeadless
- compatibility.isolatedMode
- compatibility.textMeasurement
- debugFeatures

This also adds a Terminal subpage for profiles in the settings UI. This
page includes:
- suppressApplicationTitle
- compatibility.input.forceVT
- compatibility.allowDECRQCRA
- answerbackMessage

Several smaller changes were accomplished as a part of this PR:
- `experimental.input.forceVT` was renamed to
`compatibility.input.forceVT`
- introduced the `compatibility.allowDECRQCRA` setting
- updated the schema for these new settings and
`compatibility.allowHeadless` (which was missing)
- add `Feature_DebugModeUI` feature flag to control if debug features
should be shown in the SUI

Verified accessible via Accessibility Insights

A part of #10000
Closes #16672
DHowett pushed a commit that referenced this issue Oct 22, 2024
## Summary of the Pull Request
Improves the UI for the Profile.Icon setting by adding an "Icon Type"
combo box. This allows the user to pick from multiple options:
- None: sets the icon to "none" which is interpreted as no icon
- Built-in Icon: presents a combo box that enumerates the Segoe MDL 2
assets
- Emoji: presents a text box with a hint to open the emoji picker
- File: presents a text box to input the path of the image to use

Additionally, the rendered icon is displayed in the setting container.
If "none", "none" is presented to the user (localized).
✅ Verified as accessible using Accessibility Insights
#10000
carlos-zamora added a commit that referenced this issue Dec 12, 2024
## Summary of the Pull Request
Adds some pre-existing settings ($profile.foreground,
$profile.background, $profile.selectionBackground, $profile.cursorColor)
to the settings UI. This was accomplished by introducing a new control:
NullableColorPicker. This control allows the user to pick a color from
the color scheme, set the color to null, and select a color from an
advanced color picker.

Improves the UI for the Profile.Icon setting by adding an "Icon Type"
combo box. This allows the user to pick from multiple options:
- None: sets the icon to "none" which is interpreted as no icon
- Built-in Icon: presents a combo box that enumerates the Segoe MDL 2
assets
- Emoji: presents a text box with a hint to open the emoji picker
- File: presents a text box to input the path of the image to use

Additionally, the rendered icon is displayed in the setting container.
If "none", "none" is presented to the user (localized).

## References and Relevant Issues
#10000

## Detailed Description of the Pull Request / Additional comments
- NullableColorPicker control
- includes a built-in NullColorButton to set the current value to null
- includes a "More colors..." button to display an advanced color picker
- uses data templates on data templates (data templates squared?) to
convert the current color scheme into a grid of color chips
- color chips display a checkmark (similar to Windows settings
personalization). This automatically updates its color to stay compliant
with color contrast.
- color chips are added to a list so we can (un)check them when a new
color is selected
- SettingsContainer changes
- Forked `ExpanderSettingContainerStyle` to allow for a custom preview
template. This way, we can display the current value in the expander and
we're not just limited to text.
- changed type of `CurrentValue` property from `String` to
`IInspectable`
- added `CurrentValueTemplate` property to control how to display the
current value
- Miscellaneous:
- Added a few converters (`BooleanToVisibility`, `ColorToString`,
`ColorToBrush`)
- Added `NameWithHexCode` to `ColorTableEntry` to expose a color as `Red
#RRGGBB` (used for tooltips and a11y)
- Added `ForegroundPreview` (and equivalent for other colors) to
AppearanceViewModel to deduce the color that will be used

## Validation Steps Performed
- [X] a11y pass (NVDA, keyboard)
- [X] set the color to one of the color chips
- [X] set the color to null
- [X] set the color to a value from the integrated color picker
- [X] control updates properly when a new color scheme is selected
- [X] control updates properly when a color scheme has multiple colors
of the same value

## Follow-ups
- [A11y] Screen readers don't read expander's preview text
- Add Tab Color to settings UI
- Update CursorColor preview to display #FFFFFF as "invert"
- Use Leonard's font picker UI, with the Segoe icon picker, so that you
can filter the list
carlos-zamora added a commit that referenced this issue Dec 12, 2024
## Summary of the Pull Request
Adds the Profile.BellSound setting to the Settings UI under the Profile > Advanced page. 
- View changes:
   - The setting is exposed via an expander placed near the Profile.BellStyle setting.
   - Added a button to be able to preview the added sound
   - Added a browse button that opens a file picker
   - Added a delete button to be able to delete each sound entry
- View model changes:
   - `CurrentBellSounds` keeps track of the bell sounds added and exposed via the UI.
   - `BellSoundViewModel` wraps each sound. This allows us to listen (and propagate) changes to the registered sounds.
   - `BellSoundPreview` provides a written preview of the current bell sound to display in the expander

#10000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-SettingsUI Anything specific to the SUI Issue-Scenario Product-Terminal The new Windows Terminal.
Projects
None yet
Development

No branches or pull requests

3 participants