From f9c049a84b9e4dca17db007eb799ad9ec10f8e63 Mon Sep 17 00:00:00 2001 From: Rudy Huyn Date: Wed, 8 Jan 2020 10:34:05 -0800 Subject: [PATCH] Add preview tag to Graphing feature (#907) * Add preview tag to Graphing * Fix Graph Settings button in dark mode --- src/CalcViewModel/ApplicationViewModel.cpp | 1 + src/CalcViewModel/ApplicationViewModel.h | 1 + src/CalcViewModel/Common/NavCategory.cpp | 69 ++++++++++++++----- src/CalcViewModel/Common/NavCategory.h | 12 +++- src/Calculator/Calculator.vcxproj | 9 +++ .../Controls/PreviewTagControl.xaml | 57 +++++++++++++++ .../Controls/PreviewTagControl.xaml.cpp | 23 +++++++ .../Controls/PreviewTagControl.xaml.h | 16 +++++ .../GraphingCalculator.xaml | 3 +- src/Calculator/Views/MainPage.xaml | 32 ++++++--- src/Calculator/Views/MainPage.xaml.cpp | 12 +++- 11 files changed, 200 insertions(+), 35 deletions(-) create mode 100644 src/Calculator/Controls/PreviewTagControl.xaml create mode 100644 src/Calculator/Controls/PreviewTagControl.xaml.cpp create mode 100644 src/Calculator/Controls/PreviewTagControl.xaml.h diff --git a/src/CalcViewModel/ApplicationViewModel.cpp b/src/CalcViewModel/ApplicationViewModel.cpp index 40141ada..c3b4a4c2 100644 --- a/src/CalcViewModel/ApplicationViewModel.cpp +++ b/src/CalcViewModel/ApplicationViewModel.cpp @@ -58,6 +58,7 @@ void ApplicationViewModel::Mode::set(ViewMode value) { PreviousMode = m_mode; m_mode = value; + IsModePreview = NavCategory::IsViewModePreview(m_mode); SetDisplayNormalAlwaysOnTopOption(); OnModeChanged(); RaisePropertyChanged(ModePropertyName); diff --git a/src/CalcViewModel/ApplicationViewModel.h b/src/CalcViewModel/ApplicationViewModel.h index 7e4238d8..e56e9a45 100644 --- a/src/CalcViewModel/ApplicationViewModel.h +++ b/src/CalcViewModel/ApplicationViewModel.h @@ -26,6 +26,7 @@ namespace CalculatorApp OBSERVABLE_PROPERTY_RW(UnitConverterViewModel ^, ConverterViewModel); OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::ViewMode, PreviousMode); OBSERVABLE_PROPERTY_R(bool, IsAlwaysOnTop); + OBSERVABLE_PROPERTY_R(bool, IsModePreview); OBSERVABLE_NAMED_PROPERTY_RW(Platform::String ^, CategoryName); // Indicates whether calculator is currently in standard mode _and_ supports CompactOverlay _and_ is not in Always-on-Top mode diff --git a/src/CalcViewModel/Common/NavCategory.cpp b/src/CalcViewModel/Common/NavCategory.cpp index a3028713..1123dfab 100644 --- a/src/CalcViewModel/Common/NavCategory.cpp +++ b/src/CalcViewModel/Common/NavCategory.cpp @@ -118,7 +118,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::Number1, L"1", SUPPORTS_ALL, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Scientific, SCIENTIFIC_ID, L"Scientific", @@ -128,7 +129,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::Number2, L"2", SUPPORTS_ALL, - true } }; + true, + false } }; int currentIndex = 3; bool supportGraphingCalculator = IsGraphingModeAvailable(); @@ -144,7 +146,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::Number3, L"3", SUPPORTS_ALL, - isEnabled }); + isEnabled, + true }); ++currentIndex; } res.insert( @@ -158,7 +161,8 @@ static const list s_categoryManifest = [] { supportGraphingCalculator ? MyVirtualKey::Number4 : MyVirtualKey::Number3, towchar_t(currentIndex++), SUPPORTS_ALL, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Date, DATE_ID, L"Date", @@ -168,7 +172,8 @@ static const list s_categoryManifest = [] { supportGraphingCalculator ? MyVirtualKey::Number5 : MyVirtualKey::Number4, towchar_t(currentIndex++), SUPPORTS_ALL, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Currency, CURRENCY_ID, L"Currency", @@ -178,7 +183,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Volume, VOLUME_ID, L"Volume", @@ -188,7 +194,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Length, LENGTH_ID, L"Length", @@ -198,7 +205,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Weight, WEIGHT_ID, L"Weight and Mass", @@ -208,7 +216,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Temperature, TEMPERATURE_ID, L"Temperature", @@ -218,7 +227,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, SUPPORTS_NEGATIVE, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Energy, ENERGY_ID, L"Energy", @@ -228,7 +238,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Area, AREA_ID, L"Area", @@ -238,7 +249,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Speed, SPEED_ID, L"Speed", @@ -248,7 +260,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Time, TIME_ID, L"Time", @@ -258,7 +271,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Power, POWER_ID, L"Power", @@ -268,7 +282,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, SUPPORTS_NEGATIVE, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Data, DATA_ID, L"Data", @@ -278,7 +293,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Pressure, PRESSURE_ID, L"Pressure", @@ -288,7 +304,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, POSITIVE_ONLY, - true }, + true, + false }, NavCategoryInitializer{ ViewMode::Angle, ANGLE_ID, L"Angle", @@ -298,7 +315,8 @@ static const list s_categoryManifest = [] { MyVirtualKey::None, nullptr, SUPPORTS_NEGATIVE, - true } }); + true, + false } }); return res; }(); @@ -522,7 +540,8 @@ NavCategoryGroup::NavCategoryGroup(const NavCategoryGroupInitializer& groupIniti groupMode, categoryInitializer.viewMode, categoryInitializer.supportsNegative, - categoryInitializer.isEnabled)); + categoryInitializer.isEnabled, + categoryInitializer.isPreview)); } } } @@ -546,3 +565,15 @@ NavCategoryGroup ^ NavCategoryGroup::CreateConverterCategory() return ref new NavCategoryGroup( NavCategoryGroupInitializer{ CategoryGroupType::Converter, L"ConverterModeTextCaps", L"ConverterModeText", L"ConverterModePluralText" }); } + +bool NavCategory::IsViewModePreview(ViewMode mode) +{ + auto iter = + find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode](const NavCategoryInitializer& initializer) { return initializer.viewMode == mode; }); + + if (iter != s_categoryManifest.end()) + { + return iter->isPreview; + } + return false; +} diff --git a/src/CalcViewModel/Common/NavCategory.h b/src/CalcViewModel/Common/NavCategory.h index a2edc995..a850cee7 100644 --- a/src/CalcViewModel/Common/NavCategory.h +++ b/src/CalcViewModel/Common/NavCategory.h @@ -69,7 +69,8 @@ namespace CalculatorApp MyVirtualKey vKey, wchar_t const* aKey, bool categorySupportsNegative, - bool enabled) + bool enabled, + bool isPreview) : viewMode(mode) , serializationId(id) , friendlyName(name) @@ -80,6 +81,7 @@ namespace CalculatorApp , accessKey(aKey) , supportsNegative(categorySupportsNegative) , isEnabled(enabled) + , isPreview(isPreview) { } @@ -93,6 +95,7 @@ namespace CalculatorApp const wchar_t* const accessKey; const bool supportsNegative; const bool isEnabled; + const bool isPreview; }; private @@ -123,6 +126,7 @@ namespace CalculatorApp PROPERTY_R(Platform::String ^, AccessKey); PROPERTY_R(bool, SupportsNegative); PROPERTY_R(bool, IsEnabled); + PROPERTY_R(bool, IsPreview); property Platform::String ^ AutomationId { Platform::String ^ get() { return m_Mode.ToString(); } } @@ -138,7 +142,7 @@ namespace CalculatorApp static bool IsGraphingCalculatorViewMode(ViewMode mode); static bool IsDateCalculatorViewMode(ViewMode mode); static bool IsConverterViewMode(ViewMode mode); - + static bool IsViewModePreview(ViewMode mode); static Platform::String ^ GetFriendlyName(ViewMode mode); static Platform::String ^ GetNameResourceKey(ViewMode mode); static CategoryGroupType GetGroupType(ViewMode mode); @@ -159,7 +163,8 @@ namespace CalculatorApp Platform::String ^ mode, ViewMode viewMode, bool supportsNegative, - bool isEnabled) + bool isEnabled, + bool isPreview) : m_Name(name) , m_AutomationName(automationName) , m_Glyph(glyph) @@ -168,6 +173,7 @@ namespace CalculatorApp , m_Mode(viewMode) , m_SupportsNegative(supportsNegative) , m_IsEnabled(isEnabled) + , m_IsPreview(isPreview) { } diff --git a/src/Calculator/Calculator.vcxproj b/src/Calculator/Calculator.vcxproj index 00043a1e..5901fdec 100644 --- a/src/Calculator/Calculator.vcxproj +++ b/src/Calculator/Calculator.vcxproj @@ -247,6 +247,9 @@ + + Controls\PreviewTagControl.xaml + @@ -346,6 +349,9 @@ Designer + + Designer + Designer @@ -410,6 +416,9 @@ + + Controls\PreviewTagControl.xaml + diff --git a/src/Calculator/Controls/PreviewTagControl.xaml b/src/Calculator/Controls/PreviewTagControl.xaml new file mode 100644 index 00000000..bef547cd --- /dev/null +++ b/src/Calculator/Controls/PreviewTagControl.xaml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Calculator/Controls/PreviewTagControl.xaml.cpp b/src/Calculator/Controls/PreviewTagControl.xaml.cpp new file mode 100644 index 00000000..bec82a69 --- /dev/null +++ b/src/Calculator/Controls/PreviewTagControl.xaml.cpp @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "pch.h" +#include "PreviewTagControl.xaml.h" + +using namespace CalculatorApp; +using namespace CalculatorApp::Controls; +using namespace Platform; +using namespace Windows::Foundation; +using namespace Windows::Foundation::Collections; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Controls::Primitives; +using namespace Windows::UI::Xaml::Data; +using namespace Windows::UI::Xaml::Input; +using namespace Windows::UI::Xaml::Media; +using namespace Windows::UI::Xaml::Navigation; + +PreviewTagControl::PreviewTagControl() +{ + InitializeComponent(); +} diff --git a/src/Calculator/Controls/PreviewTagControl.xaml.h b/src/Calculator/Controls/PreviewTagControl.xaml.h new file mode 100644 index 00000000..5c739713 --- /dev/null +++ b/src/Calculator/Controls/PreviewTagControl.xaml.h @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "Controls\PreviewTagControl.g.h" + +namespace CalculatorApp::Controls +{ + [Windows::Foundation::Metadata::WebHostHidden] + public ref class PreviewTagControl sealed + { + public: + PreviewTagControl(); + }; +} diff --git a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml index 0e0f1136..92f18e6e 100644 --- a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml +++ b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml @@ -426,8 +426,7 @@ MinWidth="40" Style="{ThemeResource ThemedGraphButtonStyle}" contract7Present:CornerRadius="{ThemeResource RightButtonCornerRadius}" - Click="GraphSettingsButton_Click" - RequestedTheme="Light"> + Click="GraphSettingsButton_Click"> diff --git a/src/Calculator/Views/MainPage.xaml b/src/Calculator/Views/MainPage.xaml index 1d017727..0a7b7cdf 100644 --- a/src/Calculator/Views/MainPage.xaml +++ b/src/Calculator/Views/MainPage.xaml @@ -33,6 +33,13 @@ + + + + + + + @@ -157,23 +164,28 @@ - + - + + + +