From d182cf38e7f982e366a7a9ec4f3c0777a7064b8c Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Fri, 6 Nov 2020 10:34:14 -0800 Subject: [PATCH] Introduce ProfileDefaults, CreateNewProfile, default icon This commit is an amalgamation of some of the TSM changes in PR #8048. It: * Introduces CascadiaSettings.CreateNewProfile to add a new profile * Introduces CascadiaSettings.ProfileDefaults, which returns the "defaults" object as a profile * Fixes the font weight deserializer to work on uint16_ts * Fixes a property getter in ColorScheme to not be a property getter * Fixes a reserialization error with default profiles * Sets a default icon for all profiles (to the C:\ Segoe MDL2 icon) --- .../CascadiaSettings.cpp | 29 +++++++++++++++++++ .../TerminalSettingsModel/CascadiaSettings.h | 2 ++ .../CascadiaSettings.idl | 3 ++ .../TerminalSettingsModel/ColorScheme.idl | 5 +++- .../GlobalAppSettings.cpp | 1 + src/cascadia/TerminalSettingsModel/Profile.h | 3 +- .../TerminalSettingsSerializationHelpers.h | 24 +++++++-------- 7 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp index 735dce960639..2f978f3ee993 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp @@ -202,6 +202,35 @@ winrt::Microsoft::Terminal::Settings::Model::GlobalAppSettings CascadiaSettings: return *_globals; } +// Method Description: +// - Get a reference to our profiles.defaults object +// Arguments: +// - +// Return Value: +// - a reference to our profile.defaults object +winrt::Microsoft::Terminal::Settings::Model::Profile CascadiaSettings::ProfileDefaults() const +{ + return *_userDefaultProfileSettings; +} + +// Method Description: +// - Create a new profile based off the default profile settings. +// Arguments: +// - +// Return Value: +// - a reference to the new profile +winrt::Microsoft::Terminal::Settings::Model::Profile CascadiaSettings::CreateNewProfile() +{ + auto newProfile{ _userDefaultProfileSettings->CreateChild() }; + _allProfiles.Append(*newProfile); + + // Give the new profile a distinct name so a guid is properly generated + const winrt::hstring newName{ fmt::format(L"Profile {}", _allProfiles.Size()) }; + newProfile->Name(newName); + + return *newProfile; +} + // Method Description: // - Gets our list of warnings we found during loading. These are things that we // knew were bad when we called `_ValidateSettings` last. diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.h b/src/cascadia/TerminalSettingsModel/CascadiaSettings.h index bcc792eb6652..fa2050ffa7c1 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.h +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.h @@ -80,10 +80,12 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation static hstring SettingsPath(); static hstring DefaultSettingsPath(); + Model::Profile ProfileDefaults() const; static winrt::hstring ApplicationDisplayName(); static winrt::hstring ApplicationVersion(); + Model::Profile CreateNewProfile(); Model::Profile FindProfile(guid profileGuid) const noexcept; Model::ColorScheme GetColorSchemeForProfile(const guid profileGuid) const; diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl b/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl index 346287413f94..afeb82ab36c2 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.idl @@ -25,6 +25,8 @@ namespace Microsoft.Terminal.Settings.Model GlobalAppSettings GlobalSettings { get; }; + Profile ProfileDefaults { get; }; + Windows.Foundation.Collections.IObservableVector AllProfiles { get; }; Windows.Foundation.Collections.IObservableVector ActiveProfiles { get; }; @@ -34,6 +36,7 @@ namespace Microsoft.Terminal.Settings.Model Windows.Foundation.IReference GetLoadingError { get; }; String GetSerializationErrorMessage { get; }; + Profile CreateNewProfile(); Profile FindProfile(Guid profileGuid); ColorScheme GetColorSchemeForProfile(Guid profileGuid); diff --git a/src/cascadia/TerminalSettingsModel/ColorScheme.idl b/src/cascadia/TerminalSettingsModel/ColorScheme.idl index 02aaf514bce2..89a1dc6a7004 100644 --- a/src/cascadia/TerminalSettingsModel/ColorScheme.idl +++ b/src/cascadia/TerminalSettingsModel/ColorScheme.idl @@ -11,7 +11,10 @@ namespace Microsoft.Terminal.Settings.Model Windows.UI.Color SelectionBackground; Windows.UI.Color CursorColor; - Windows.UI.Color[] Table { get; }; + // winrt::com_arrays prevent data binding. + // Instead of representing Table as a property, + // we expose the getter as a function. + Windows.UI.Color[] Table(); void SetColorTableEntry(UInt8 index, Windows.UI.Color value); } } diff --git a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp index 28a1f1aa529c..71c8336f6ed5 100644 --- a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp @@ -161,6 +161,7 @@ void GlobalAppSettings::DefaultProfile(const winrt::guid& defaultProfile) noexce { _validDefaultProfile = true; _defaultProfile = defaultProfile; + _UnparsedDefaultProfile = Utils::GuidToString(defaultProfile); } winrt::guid GlobalAppSettings::DefaultProfile() const diff --git a/src/cascadia/TerminalSettingsModel/Profile.h b/src/cascadia/TerminalSettingsModel/Profile.h index 7159c66a0c63..f254d92bc27c 100644 --- a/src/cascadia/TerminalSettingsModel/Profile.h +++ b/src/cascadia/TerminalSettingsModel/Profile.h @@ -67,7 +67,8 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation GETSET_SETTING(bool, Hidden, false); GETSET_SETTING(guid, ConnectionType); - GETSET_SETTING(hstring, Icon); + // Default Icon: Segoe MDL2 CommandPrompt icon + GETSET_SETTING(hstring, Icon, L"\uE756"); GETSET_SETTING(CloseOnExitMode, CloseOnExit, CloseOnExitMode::Graceful); GETSET_SETTING(hstring, TabTitle); diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h b/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h index 7fb2e8e297c0..7d9b8f184f44 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h +++ b/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h @@ -135,23 +135,23 @@ JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::CloseOnExitMode) template<> struct ::Microsoft::Terminal::Settings::Model::JsonUtils::ConversionTrait<::winrt::Windows::UI::Text::FontWeight> : public ::Microsoft::Terminal::Settings::Model::JsonUtils::EnumMapper< - unsigned int, + uint16_t, ::Microsoft::Terminal::Settings::Model::JsonUtils::ConversionTrait<::winrt::Windows::UI::Text::FontWeight>> { // The original parser used the font weight getters Bold(), Normal(), etc. // They were both cumbersome and *not constant expressions* JSON_MAPPINGS(11) = { - pair_type{ "thin", 100u }, - pair_type{ "extra-light", 200u }, - pair_type{ "light", 300u }, - pair_type{ "semi-light", 350u }, - pair_type{ "normal", 400u }, - pair_type{ "medium", 500u }, - pair_type{ "semi-bold", 600u }, - pair_type{ "bold", 700u }, - pair_type{ "extra-bold", 800u }, - pair_type{ "black", 900u }, - pair_type{ "extra-black", 950u }, + pair_type{ "thin", static_cast(100u) }, + pair_type{ "extra-light", static_cast(200u) }, + pair_type{ "light", static_cast(300u) }, + pair_type{ "semi-light", static_cast(350u) }, + pair_type{ "normal", static_cast(400u) }, + pair_type{ "medium", static_cast(500u) }, + pair_type{ "semi-bold", static_cast(600u) }, + pair_type{ "bold", static_cast(700u) }, + pair_type{ "extra-bold", static_cast(800u) }, + pair_type{ "black", static_cast(900u) }, + pair_type{ "extra-black", static_cast(950u) }, }; // Override mapping parser to add boolean parsing