2608e94822
Introduces a new TerminalSettingsModel (TSM) project. This project is responsible for (de)serializing and exposing Windows Terminal's settings as WinRT objects. ## References #885: TSM epic #1564: Settings UI is dependent on this for data binding and settings access #6904: TSM Spec In the process of ripping out TSM from TerminalApp, a few other changes were made to make this possible: 1. AppLogic's `ApplicationDisplayName` and `ApplicationVersion` was moved to `CascadiaSettings` - These are defined as static functions. They also no longer check if `AppLogic::Current()` is nullptr. 2. `enum LaunchMode` was moved from TerminalApp to TSM 3. `AzureConnectionType` and `TelnetConnectionType` were moved from the profile generators to their respective TerminalConnections 4. CascadiaSettings' `SettingsPath` and `DefaultSettingsPath` are exposed as `hstring` instead of `std::filesystem::path` 5. `Command::ExpandCommands()` was exposed via the IDL - This required some of the warnings to be saved to an `IVector` instead of `std::vector`, among some other small changes. 6. The localization resources had to be split into two halves. - Resource file linked in init.cpp. Verified at runtime thanks to the StaticResourceLoader. 7. Added constructors to some `ActionArgs` 8. Utils.h/cpp were moved to `cascadia/inc`. `JsonKey()` was moved to `JsonUtils`. Both TermApp and TSM need access to Utils.h/cpp. A large amount of work includes moving to the new namespace (`TerminalApp` --> `Microsoft::Terminal::Settings::Model`). Fixing the tests had its own complications. Testing required us to split up TSM into a DLL and LIB, similar to TermApp. Discussion on creating a non-local test variant can be found in #7743. Closes #885
130 lines
5.9 KiB
C++
130 lines
5.9 KiB
C++
/*++
|
|
Copyright (c) Microsoft Corporation
|
|
Licensed under the MIT license.
|
|
|
|
Module Name:
|
|
- TerminalSettings.h
|
|
|
|
Abstract:
|
|
- The implementation of the TerminalSettings winrt class. Provides both
|
|
terminal control settings and terminal core settings.
|
|
Author(s):
|
|
- Mike Griese - March 2019
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
#include "TerminalSettings.g.h"
|
|
#include "../inc/cppwinrt_utils.h"
|
|
#include <DefaultSettings.h>
|
|
#include <conattrs.hpp>
|
|
|
|
// fwdecl unittest classes
|
|
namespace TerminalAppLocalTests
|
|
{
|
|
class SettingsTests;
|
|
}
|
|
|
|
namespace winrt::TerminalApp::implementation
|
|
{
|
|
struct TerminalSettings : TerminalSettingsT<TerminalSettings>
|
|
{
|
|
TerminalSettings() = default;
|
|
TerminalSettings(const Microsoft::Terminal::Settings::Model::CascadiaSettings& appSettings,
|
|
guid profileGuid,
|
|
const Microsoft::Terminal::TerminalControl::IKeyBindings& keybindings);
|
|
|
|
static std::tuple<guid, TerminalApp::TerminalSettings> BuildSettings(const Microsoft::Terminal::Settings::Model::CascadiaSettings& appSettings,
|
|
const Microsoft::Terminal::Settings::Model::NewTerminalArgs& newTerminalArgs,
|
|
const Microsoft::Terminal::TerminalControl::IKeyBindings& keybindings);
|
|
|
|
void ApplyColorScheme(const Microsoft::Terminal::Settings::Model::ColorScheme& scheme);
|
|
|
|
// TECHNICALLY, the hstring copy assignment can throw, but the GETSET_PROPERTY
|
|
// macro defines the operator as `noexcept`. We're not really worried about it,
|
|
// because the only time it will throw is when we're out of memory, and then
|
|
// we've got much worse problems. So just suppress that warning for now.
|
|
#pragma warning(push)
|
|
#pragma warning(disable : 26447)
|
|
// --------------------------- Core Settings ---------------------------
|
|
// All of these settings are defined in ICoreSettings.
|
|
|
|
// GetColorTableEntry needs to be implemented manually, to get a
|
|
// particular value from the array.
|
|
uint32_t GetColorTableEntry(int32_t index) const noexcept;
|
|
|
|
GETSET_PROPERTY(uint32_t, DefaultForeground, DEFAULT_FOREGROUND_WITH_ALPHA);
|
|
GETSET_PROPERTY(uint32_t, DefaultBackground, DEFAULT_BACKGROUND_WITH_ALPHA);
|
|
GETSET_PROPERTY(uint32_t, SelectionBackground, DEFAULT_FOREGROUND);
|
|
GETSET_PROPERTY(int32_t, HistorySize, DEFAULT_HISTORY_SIZE);
|
|
GETSET_PROPERTY(int32_t, InitialRows, 30);
|
|
GETSET_PROPERTY(int32_t, InitialCols, 80);
|
|
|
|
GETSET_PROPERTY(bool, SnapOnInput, true);
|
|
GETSET_PROPERTY(bool, AltGrAliasing, true);
|
|
GETSET_PROPERTY(uint32_t, CursorColor, DEFAULT_CURSOR_COLOR);
|
|
GETSET_PROPERTY(Microsoft::Terminal::TerminalControl::CursorStyle, CursorShape, Microsoft::Terminal::TerminalControl::CursorStyle::Vintage);
|
|
GETSET_PROPERTY(uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT);
|
|
GETSET_PROPERTY(hstring, WordDelimiters, DEFAULT_WORD_DELIMITERS);
|
|
GETSET_PROPERTY(bool, CopyOnSelect, false);
|
|
|
|
GETSET_PROPERTY(Windows::Foundation::IReference<uint32_t>, TabColor, nullptr);
|
|
|
|
// ------------------------ End of Core Settings -----------------------
|
|
|
|
GETSET_PROPERTY(hstring, ProfileName);
|
|
GETSET_PROPERTY(bool, UseAcrylic, false);
|
|
GETSET_PROPERTY(double, TintOpacity, 0.5);
|
|
GETSET_PROPERTY(hstring, Padding, DEFAULT_PADDING);
|
|
GETSET_PROPERTY(hstring, FontFace, DEFAULT_FONT_FACE);
|
|
GETSET_PROPERTY(int32_t, FontSize, DEFAULT_FONT_SIZE);
|
|
|
|
GETSET_PROPERTY(winrt::Windows::UI::Text::FontWeight, FontWeight);
|
|
|
|
GETSET_PROPERTY(hstring, BackgroundImage);
|
|
GETSET_PROPERTY(double, BackgroundImageOpacity, 1.0);
|
|
|
|
GETSET_PROPERTY(winrt::Windows::UI::Xaml::Media::Stretch,
|
|
BackgroundImageStretchMode,
|
|
winrt::Windows::UI::Xaml::Media::Stretch::UniformToFill);
|
|
GETSET_PROPERTY(winrt::Windows::UI::Xaml::HorizontalAlignment,
|
|
BackgroundImageHorizontalAlignment,
|
|
winrt::Windows::UI::Xaml::HorizontalAlignment::Center);
|
|
GETSET_PROPERTY(winrt::Windows::UI::Xaml::VerticalAlignment,
|
|
BackgroundImageVerticalAlignment,
|
|
winrt::Windows::UI::Xaml::VerticalAlignment::Center);
|
|
|
|
GETSET_PROPERTY(Microsoft::Terminal::TerminalControl::IKeyBindings, KeyBindings, nullptr);
|
|
|
|
GETSET_PROPERTY(hstring, Commandline);
|
|
GETSET_PROPERTY(hstring, StartingDirectory);
|
|
GETSET_PROPERTY(hstring, StartingTitle);
|
|
GETSET_PROPERTY(bool, SuppressApplicationTitle);
|
|
GETSET_PROPERTY(hstring, EnvironmentVariables);
|
|
|
|
GETSET_PROPERTY(Microsoft::Terminal::TerminalControl::ScrollbarState, ScrollState, Microsoft::Terminal::TerminalControl::ScrollbarState::Visible);
|
|
|
|
GETSET_PROPERTY(Microsoft::Terminal::TerminalControl::TextAntialiasingMode, AntialiasingMode, Microsoft::Terminal::TerminalControl::TextAntialiasingMode::Grayscale);
|
|
|
|
GETSET_PROPERTY(bool, RetroTerminalEffect, false);
|
|
GETSET_PROPERTY(bool, ForceFullRepaintRendering, false);
|
|
GETSET_PROPERTY(bool, SoftwareRendering, false);
|
|
GETSET_PROPERTY(bool, ForceVTInput, false);
|
|
|
|
#pragma warning(pop)
|
|
|
|
private:
|
|
std::array<uint32_t, COLOR_TABLE_SIZE> _colorTable{};
|
|
|
|
void _ApplyProfileSettings(const Microsoft::Terminal::Settings::Model::Profile& profile, const Windows::Foundation::Collections::IMapView<hstring, Microsoft::Terminal::Settings::Model::ColorScheme>& schemes);
|
|
void _ApplyGlobalSettings(const Microsoft::Terminal::Settings::Model::GlobalAppSettings& globalSettings) noexcept;
|
|
|
|
friend class TerminalAppLocalTests::SettingsTests;
|
|
};
|
|
}
|
|
|
|
namespace winrt::TerminalApp::factory_implementation
|
|
{
|
|
BASIC_FACTORY(TerminalSettings);
|
|
}
|