mirror of
https://github.com/Microsoft/calculator.git
synced 2025-07-06 21:21:09 -07:00
Merge master into feature/GraphingCalculator branch (#660)
This commit is contained in:
parent
1c9755d38a
commit
41fbcfe9c5
199 changed files with 5809 additions and 2925 deletions
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#include "pch.h"
|
||||
|
@ -31,6 +31,8 @@ using namespace Windows::UI::Xaml::Controls;
|
|||
using namespace Windows::UI::Xaml::Data;
|
||||
using namespace Windows::UI::Xaml::Input;
|
||||
using namespace Windows::UI::Xaml::Media;
|
||||
using namespace Windows::Foundation;
|
||||
using namespace Concurrency;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@ -38,14 +40,14 @@ namespace
|
|||
StringReference ClearMemoryVisibilityPropertyName(L"ClearMemoryVisibility");
|
||||
}
|
||||
|
||||
ApplicationViewModel::ApplicationViewModel() :
|
||||
m_CalculatorViewModel(nullptr),
|
||||
m_DateCalcViewModel(nullptr),
|
||||
m_GraphingCalcViewModel(nullptr),
|
||||
m_ConverterViewModel(nullptr),
|
||||
m_PreviousMode(ViewMode::None),
|
||||
m_mode(ViewMode::None),
|
||||
m_categories(nullptr)
|
||||
ApplicationViewModel::ApplicationViewModel()
|
||||
: m_CalculatorViewModel(nullptr)
|
||||
, m_DateCalcViewModel(nullptr)
|
||||
, m_GraphingCalcViewModel(nullptr)
|
||||
, m_ConverterViewModel(nullptr)
|
||||
, m_PreviousMode(ViewMode::None)
|
||||
, m_mode(ViewMode::None)
|
||||
, m_categories(nullptr)
|
||||
{
|
||||
SetMenuCategories();
|
||||
}
|
||||
|
@ -56,6 +58,7 @@ void ApplicationViewModel::Mode::set(ViewMode value)
|
|||
{
|
||||
PreviousMode = m_mode;
|
||||
m_mode = value;
|
||||
SetDisplayNormalAlwaysOnTopOption();
|
||||
OnModeChanged();
|
||||
RaisePropertyChanged(ModePropertyName);
|
||||
}
|
||||
|
@ -83,7 +86,7 @@ void ApplicationViewModel::Initialize(ViewMode mode)
|
|||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
TraceLogger::GetInstance().LogStandardException(__FUNCTIONW__, e);
|
||||
TraceLogger::GetInstance().LogStandardException(mode, __FUNCTIONW__, e);
|
||||
if (!TryRecoverFromNavigationModeFailure())
|
||||
{
|
||||
// Could not navigate to standard mode either.
|
||||
|
@ -93,7 +96,7 @@ void ApplicationViewModel::Initialize(ViewMode mode)
|
|||
}
|
||||
catch (Exception ^ e)
|
||||
{
|
||||
TraceLogger::GetInstance().LogPlatformException(__FUNCTIONW__, e);
|
||||
TraceLogger::GetInstance().LogPlatformException(mode, __FUNCTIONW__, e);
|
||||
if (!TryRecoverFromNavigationModeFailure())
|
||||
{
|
||||
// Could not navigate to standard mode either.
|
||||
|
@ -122,10 +125,8 @@ bool ApplicationViewModel::TryRecoverFromNavigationModeFailure()
|
|||
void ApplicationViewModel::OnModeChanged()
|
||||
{
|
||||
assert(NavCategory::IsValidViewMode(m_mode));
|
||||
TraceLogger::GetInstance().LogModeChangeBegin(m_PreviousMode, m_mode, ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
if (NavCategory::IsCalculatorViewMode(m_mode))
|
||||
{
|
||||
TraceLogger::GetInstance().LogCalculatorModeViewed(m_mode, ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
if (!m_CalculatorViewModel)
|
||||
{
|
||||
m_CalculatorViewModel = ref new StandardCalculatorViewModel();
|
||||
|
@ -141,7 +142,6 @@ void ApplicationViewModel::OnModeChanged()
|
|||
}
|
||||
else if (NavCategory::IsDateCalculatorViewMode(m_mode))
|
||||
{
|
||||
TraceLogger::GetInstance().LogDateCalculatorModeViewed(m_mode, ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
if (!m_DateCalcViewModel)
|
||||
{
|
||||
m_DateCalcViewModel = ref new DateCalculatorViewModel();
|
||||
|
@ -149,7 +149,6 @@ void ApplicationViewModel::OnModeChanged()
|
|||
}
|
||||
else if (NavCategory::IsConverterViewMode(m_mode))
|
||||
{
|
||||
TraceLogger::GetInstance().LogConverterModeViewed(m_mode, ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
if (!m_ConverterViewModel)
|
||||
{
|
||||
auto dataLoader = make_shared<UnitConverterDataLoader>(ref new GeographicRegion());
|
||||
|
@ -163,13 +162,21 @@ void ApplicationViewModel::OnModeChanged()
|
|||
auto resProvider = AppResourceProvider::GetInstance();
|
||||
CategoryName = resProvider.GetResourceString(NavCategory::GetNameResourceKey(m_mode));
|
||||
|
||||
// This is the only place where a ViewMode enum should be cast to an int.
|
||||
//
|
||||
// Cast mode to an int in order to save it to app data.
|
||||
// Save the changed mode, so that the new window launches in this mode.
|
||||
// Don't save until after we have adjusted to the new mode, so we don't save a mode that fails to load.
|
||||
ApplicationData::Current->LocalSettings->Values->Insert(ModePropertyName, NavCategory::Serialize(m_mode));
|
||||
|
||||
TraceLogger::GetInstance().LogModeChangeEnd(m_mode, ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
// Log ModeChange event when not first launch, log WindowCreated on first launch
|
||||
if (NavCategory::IsValidViewMode(m_PreviousMode))
|
||||
{
|
||||
TraceLogger::GetInstance().LogModeChange(m_mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
TraceLogger::GetInstance().LogWindowCreated(m_mode, ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
}
|
||||
|
||||
RaisePropertyChanged(ClearMemoryVisibilityPropertyName);
|
||||
}
|
||||
|
||||
|
@ -208,3 +215,62 @@ void ApplicationViewModel::SetMenuCategories()
|
|||
// property setter logic.
|
||||
Categories = NavCategoryGroup::CreateMenuOptions();
|
||||
}
|
||||
|
||||
void ApplicationViewModel::ToggleAlwaysOnTop(float width, float height)
|
||||
{
|
||||
HandleToggleAlwaysOnTop(width, height);
|
||||
}
|
||||
|
||||
#pragma optimize("", off)
|
||||
task<void> ApplicationViewModel::HandleToggleAlwaysOnTop(float width, float height)
|
||||
{
|
||||
if (ApplicationView::GetForCurrentView()->ViewMode == ApplicationViewMode::CompactOverlay)
|
||||
{
|
||||
ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings;
|
||||
localSettings->Values->Insert(WidthLocalSettings, width);
|
||||
localSettings->Values->Insert(HeightLocalSettings, height);
|
||||
|
||||
bool success = co_await ApplicationView::GetForCurrentView()->TryEnterViewModeAsync(ApplicationViewMode::Default);
|
||||
CalculatorViewModel->AreHistoryShortcutsEnabled = success;
|
||||
CalculatorViewModel->HistoryVM->AreHistoryShortcutsEnabled = success;
|
||||
CalculatorViewModel->IsAlwaysOnTop = !success;
|
||||
IsAlwaysOnTop = !success;
|
||||
}
|
||||
else
|
||||
{
|
||||
ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings;
|
||||
ViewModePreferences ^ compactOptions = ViewModePreferences::CreateDefault(ApplicationViewMode::CompactOverlay);
|
||||
if (!localSettings->Values->GetView()->HasKey(LaunchedLocalSettings))
|
||||
{
|
||||
compactOptions->CustomSize = Size(320, 394);
|
||||
localSettings->Values->Insert(LaunchedLocalSettings, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (localSettings->Values->GetView()->HasKey(WidthLocalSettings) && localSettings->Values->GetView()->HasKey(HeightLocalSettings))
|
||||
{
|
||||
float oldWidth = safe_cast<IPropertyValue ^>(localSettings->Values->GetView()->Lookup(WidthLocalSettings))->GetSingle();
|
||||
float oldHeight = safe_cast<IPropertyValue ^>(localSettings->Values->GetView()->Lookup(HeightLocalSettings))->GetSingle();
|
||||
compactOptions->CustomSize = Size(oldWidth, oldHeight);
|
||||
}
|
||||
else
|
||||
{
|
||||
compactOptions->CustomSize = Size(320, 394);
|
||||
}
|
||||
}
|
||||
|
||||
bool success = co_await ApplicationView::GetForCurrentView()->TryEnterViewModeAsync(ApplicationViewMode::CompactOverlay, compactOptions);
|
||||
CalculatorViewModel->AreHistoryShortcutsEnabled = !success;
|
||||
CalculatorViewModel->HistoryVM->AreHistoryShortcutsEnabled = !success;
|
||||
CalculatorViewModel->IsAlwaysOnTop = success;
|
||||
IsAlwaysOnTop = success;
|
||||
}
|
||||
SetDisplayNormalAlwaysOnTopOption();
|
||||
};
|
||||
#pragma optimize("", on)
|
||||
|
||||
void ApplicationViewModel::SetDisplayNormalAlwaysOnTopOption()
|
||||
{
|
||||
DisplayNormalAlwaysOnTopOption =
|
||||
m_mode == ViewMode::Standard && ApplicationView::GetForCurrentView()->IsViewModeSupported(ApplicationViewMode::CompactOverlay) && !IsAlwaysOnTop;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue