Skip to content

Commit

Permalink
Replace ObjectModel references in SUI (#7970)
Browse files Browse the repository at this point in the history
This PR's main goal was to get rid of all our ObjectModel references and replace them with references to TSM. 

There's a lot of places in the SUI where I wasn't able to easily drop in the TSM. Usually those settings types aren't as simple as a boolean, so they'll require some templating and finessing. For those settings, I've either commented them out for now or attempted to replace them. Here's a TLDR of what I've done in this PR.

- Since `MainPage` is the entry point, it gets a `CascadiaSettings` object to hold on to, and that's the settings object the rest of the pages will bind to.
- Deleted everything inside of `ObjectModel` along with their references.
- Replaced the ObjectModel references in the `.xaml` files with a reference to the settings object obtained in `MainPage`
- Commented out a couple of settings here and there that might need converters and/or templating.
- Attempted to write out most of the templating and data binding code for `ColorSchemes.xaml`
  • Loading branch information
leonMSFT authored Oct 21, 2020
1 parent 788e685 commit b0b5fc1
Show file tree
Hide file tree
Showing 60 changed files with 687 additions and 2,788 deletions.
4 changes: 3 additions & 1 deletion OpenConsole.sln
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,9 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wt", "src\cascadia\wt\wt.vcxproj", "{506FD703-BAA7-4F6E-9361-64F550EC8FCA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Terminal.Settings.Editor", "src\cascadia\TerminalSettingsEditor\Microsoft.Terminal.Settings.Editor.vcxproj", "{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}"
ProjectSection(ProjectDependencies) = postProject
{CA5CAD1A-082C-4476-9F33-94B339494076} = {CA5CAD1A-082C-4476-9F33-94B339494076}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Terminal.Settings.Model.Lib", "src\cascadia\TerminalSettingsModel\Microsoft.Terminal.Settings.ModelLib.vcxproj", "{CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}"
ProjectSection(ProjectDependencies) = postProject
Expand Down Expand Up @@ -2030,7 +2033,6 @@ Global
{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|DotNet_x86Test.Build.0 = Release|x64
{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|DotNet_x86Test.Deploy.0 = Release|x64
{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x64.ActiveCfg = Release|x64
{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x64.Build.0 = Release|x64
{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x64.Deploy.0 = Release|x64
{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x86.ActiveCfg = Release|Win32
{CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x86.Build.0 = Release|Win32
Expand Down
4 changes: 2 additions & 2 deletions src/cascadia/TerminalApp/SettingsTab.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ namespace winrt

namespace winrt::TerminalApp::implementation
{
SettingsTab::SettingsTab()
SettingsTab::SettingsTab(winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings settings)
{
Content(winrt::Microsoft::Terminal::Settings::Editor::MainPage());
Content(winrt::Microsoft::Terminal::Settings::Editor::MainPage(settings));

_MakeTabViewItem();
_CreateContextMenu();
Expand Down
3 changes: 1 addition & 2 deletions src/cascadia/TerminalApp/SettingsTab.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ namespace winrt::TerminalApp::implementation
struct SettingsTab : SettingsTabT<SettingsTab>
{
public:
SettingsTab();

SettingsTab(winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings settings);
void Focus(winrt::Windows::UI::Xaml::FocusState focusState);
winrt::Windows::UI::Xaml::FocusState FocusState() const noexcept;

Expand Down
2 changes: 1 addition & 1 deletion src/cascadia/TerminalApp/TerminalPage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2555,7 +2555,7 @@ namespace winrt::TerminalApp::implementation
// If we're holding the settings tab's switch command, don't create a new one, switch to the existing one.
if (!_switchToSettingsCommand)
{
auto newTabImpl = winrt::make_self<SettingsTab>();
auto newTabImpl = winrt::make_self<SettingsTab>(_settings);
_MakeSwitchToTabCommand(*newTabImpl, _tabs.Size());

// Add the new tab to the list of our tabs.
Expand Down
2 changes: 0 additions & 2 deletions src/cascadia/TerminalApp/TerminalTab.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ namespace winrt::TerminalApp::implementation
struct TerminalTab : TerminalTabT<TerminalTab>
{
public:
TerminalTab() = delete;
TerminalTab(const GUID& profile, const winrt::Microsoft::Terminal::TerminalControl::TermControl& control);

// Called after construction to perform the necessary setup, which relies on weak_ptr
Expand Down Expand Up @@ -98,7 +97,6 @@ namespace winrt::TerminalApp::implementation
winrt::Windows::UI::Xaml::Controls::MenuFlyoutItem _closeTabsAfterMenuItem{};

winrt::Windows::UI::Xaml::FocusState _focusState{ winrt::Windows::UI::Xaml::FocusState::Unfocused };
winrt::Microsoft::UI::Xaml::Controls::TabViewItem _tabViewItem{ nullptr };

winrt::hstring _runtimeTabText{};
bool _inRename{ false };
Expand Down
142 changes: 77 additions & 65 deletions src/cascadia/TerminalSettingsEditor/ColorSchemes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,99 +2,111 @@
// Licensed under the MIT license.

#include "pch.h"
#include "MainPage.h"
#include "ColorSchemes.h"
#include "ColorTableEntry.g.cpp"
#include "ColorSchemes.g.cpp"
#include <ObjectModel\ColorScheme.h>

using namespace winrt;
using namespace winrt::Windows::UI;
using namespace winrt::Windows::UI::Xaml;
using namespace winrt::Windows::UI::Xaml::Controls;
using namespace winrt::Windows::UI::Xaml::Media;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Foundation::Collections;
using namespace winrt::Microsoft::Terminal::Settings::Model;

namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
{
ColorSchemes::ColorSchemes()
static constexpr std::array<std::string_view, 16> TableColors = {
"Black",
"Red",
"Green",
"Yellow",
"Blue",
"Purple",
"Cyan",
"White",
"Bright Black",
"Bright Red",
"Bright Green",
"Bright Yellow",
"Bright Blue",
"Bright Purple",
"Bright Cyan",
"Bright White"
};

ColorSchemes::ColorSchemes() :
_ColorSchemeList{ single_threaded_observable_vector<hstring>() },
_CurrentColorTable{ single_threaded_observable_vector<Editor::ColorTableEntry>() }
{
m_colorSchemeModel = winrt::make<Model::implementation::ColorSchemeModel>();
InitializeComponent();
}

Model::ColorSchemeModel ColorSchemes::ColorSchemeModel()
{
return m_colorSchemeModel;
// Initialize our list of color schemes and initially set color scheme and table.
auto colorSchemeMap = MainPage::Settings().GlobalSettings().ColorSchemes();
for (const auto& pair : MainPage::Settings().GlobalSettings().ColorSchemes())
{
_ColorSchemeList.Append(pair.Key());
}
}

void ColorSchemes::Background_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().Background(event.NewColor());
}
void ColorSchemes::Foreground_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().Foreground(event.NewColor());
}
void ColorSchemes::Black_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().Black(event.NewColor());
}
void ColorSchemes::BrightBlack_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().BrightBlack(event.NewColor());
}
void ColorSchemes::Blue_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().Blue(event.NewColor());
}
void ColorSchemes::BrightBlue_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().BrightBlue(event.NewColor());
}
void ColorSchemes::Cyan_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
IObservableVector<hstring> ColorSchemes::ColorSchemeList()
{
m_colorSchemeModel.ColorScheme().Cyan(event.NewColor());
return _ColorSchemeList;
}
void ColorSchemes::BrightCyan_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().BrightCyan(event.NewColor());
}
void ColorSchemes::Green_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().Green(event.NewColor());
}
void ColorSchemes::BrightGreen_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().BrightGreen(event.NewColor());
}
void ColorSchemes::Purple_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().Purple(event.NewColor());
}
void ColorSchemes::BrightPurple_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)
{
m_colorSchemeModel.ColorScheme().BrightPurple(event.NewColor());
}
void ColorSchemes::Red_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)

void ColorSchemes::ColorSchemeSelectionChanged(IInspectable const& /*sender*/,
SelectionChangedEventArgs const& args)
{
m_colorSchemeModel.ColorScheme().Red(event.NewColor());
// Update the color scheme this page is modifying
auto str = winrt::unbox_value<hstring>(args.AddedItems().GetAt(0));
auto colorScheme = MainPage::Settings().GlobalSettings().ColorSchemes().Lookup(str);
CurrentColorScheme(colorScheme);
_UpdateColorTable(colorScheme);
}
void ColorSchemes::BrightRed_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)

void ColorSchemes::_UpdateColorSchemeList()
{
m_colorSchemeModel.ColorScheme().BrightRed(event.NewColor());
auto colorSchemeMap = MainPage::Settings().GlobalSettings().ColorSchemes();
for (const auto& pair : MainPage::Settings().GlobalSettings().ColorSchemes())
{
_ColorSchemeList.Append(pair.Key());
}
}
void ColorSchemes::White_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)

void ColorSchemes::ColorPickerChanged(IInspectable const& sender,
ColorChangedEventArgs const& /*args*/)
{
m_colorSchemeModel.ColorScheme().White(event.NewColor());
if (auto picker = sender.try_as<ColorPicker>())
{
// TODO: Commented out for now because Tag currently won't bind to an index correctly.
// The idea is this function will grab the index from the tag and call SetColorTableEntry.
//auto index = winrt::unbox_value<uint8_t>(picker.Tag());
//CurrentColorScheme().SetColorTableEntry(index, args.NewColor());
}
}
void ColorSchemes::BrightWhite_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)

// Update the Page's displayed color table
void ColorSchemes::_UpdateColorTable(const Model::ColorScheme& colorScheme)
{
m_colorSchemeModel.ColorScheme().BrightWhite(event.NewColor());
_CurrentColorTable.Clear();
for (uint8_t i = 0; i < TableColors.size(); ++i)
{
auto entry = winrt::make<ColorTableEntry>(i, colorScheme.Table()[i]);
_CurrentColorTable.Append(entry);
}
}
void ColorSchemes::Yellow_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)

ColorTableEntry::ColorTableEntry(uint32_t index, Windows::UI::Color color)
{
m_colorSchemeModel.ColorScheme().Yellow(event.NewColor());
Index(winrt::box_value(index));
Color(color);
Name(to_hstring(TableColors[index]));
}
void ColorSchemes::BrightYellow_ColorChanged(ColorPicker const&, ColorChangedEventArgs const& event)

Windows::UI::Xaml::Media::Brush ColorTableEntry::ColorToBrush(Windows::UI::Color color)
{
m_colorSchemeModel.ColorScheme().BrightYellow(event.NewColor());
return SolidColorBrush(color);
}
}
50 changes: 28 additions & 22 deletions src/cascadia/TerminalSettingsEditor/ColorSchemes.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,44 @@

#pragma once

#include "ColorTableEntry.g.h"
#include "ColorSchemes.g.h"
#include "ObjectModel/ColorSchemeModel.h"
#include "Utils.h"

namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
{
struct ColorSchemes : ColorSchemesT<ColorSchemes>
{
ColorSchemes();
Model::ColorSchemeModel ColorSchemeModel();

void Background_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void Foreground_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void Black_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void BrightBlack_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void Blue_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void BrightBlue_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void Cyan_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void BrightCyan_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void Green_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void BrightGreen_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void Purple_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void BrightPurple_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void Red_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void BrightRed_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void White_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void BrightWhite_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void Yellow_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);
void BrightYellow_ColorChanged(Windows::UI::Xaml::Controls::ColorPicker const&, Windows::UI::Xaml::Controls::ColorChangedEventArgs const&);

void ColorSchemeSelectionChanged(winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::Controls::SelectionChangedEventArgs const& args);
void ColorPickerChanged(winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::Controls::ColorChangedEventArgs const& args);

Windows::Foundation::Collections::IObservableVector<winrt::hstring> ColorSchemeList();

WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler);
OBSERVABLE_GETSET_PROPERTY(winrt::Microsoft::Terminal::Settings::Model::ColorScheme, CurrentColorScheme, _PropertyChangedHandlers, nullptr);
GETSET_PROPERTY(Windows::Foundation::Collections::IObservableVector<winrt::Microsoft::Terminal::Settings::Editor::ColorTableEntry>, CurrentColorTable, nullptr);

private:
Model::ColorSchemeModel m_colorSchemeModel{ nullptr };
Windows::Foundation::Collections::IObservableVector<winrt::hstring> _ColorSchemeList{ nullptr };

void _UpdateColorTable(const winrt::Microsoft::Terminal::Settings::Model::ColorScheme& colorScheme);
void _UpdateColorSchemeList();
};

struct ColorTableEntry : ColorTableEntryT<ColorTableEntry>
{
public:
ColorTableEntry() = default;
ColorTableEntry(uint32_t index, Windows::UI::Color color);

Windows::UI::Xaml::Media::Brush ColorToBrush(Windows::UI::Color color);

WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler);
OBSERVABLE_GETSET_PROPERTY(winrt::hstring, Name, _PropertyChangedHandlers);
OBSERVABLE_GETSET_PROPERTY(IInspectable, Index, _PropertyChangedHandlers, nullptr);
OBSERVABLE_GETSET_PROPERTY(Windows::UI::Color, Color, _PropertyChangedHandlers);
};
}

Expand Down
16 changes: 13 additions & 3 deletions src/cascadia/TerminalSettingsEditor/ColorSchemes.idl
Original file line number Diff line number Diff line change
@@ -1,13 +1,23 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.

import "ObjectModel/ColorSchemeModel.idl";

namespace Microsoft.Terminal.Settings.Editor
{
[default_interface] runtimeclass ColorSchemes : Windows.UI.Xaml.Controls.Page
{
ColorSchemes();
Microsoft.Terminal.Settings.Editor.Model.ColorSchemeModel ColorSchemeModel { get; };

Microsoft.Terminal.Settings.Model.ColorScheme CurrentColorScheme { get; };
Windows.Foundation.Collections.IObservableVector<ColorTableEntry> CurrentColorTable;
Windows.Foundation.Collections.IObservableVector<String> ColorSchemeList { get; };
}

[default_interface] runtimeclass ColorTableEntry : Windows.UI.Xaml.Data.INotifyPropertyChanged
{
String Name { get; };
IInspectable Index { get; };
Windows.UI.Color Color;

Windows.UI.Xaml.Media.Brush ColorToBrush(Windows.UI.Color color);
}
}
Loading

0 comments on commit b0b5fc1

Please sign in to comment.