merge with master

This commit is contained in:
Rudy Huyn
2019-12-02 19:36:54 -08:00
parent 39885668ae
commit 73d6a32add
247 changed files with 27860 additions and 8218 deletions

View File

@@ -53,22 +53,23 @@
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Style="{StaticResource ResultsScrollerSnapped}"
AutomationProperties.AccessibilityView="Raw">
<ItemsControl x:Name="TokenList"
Padding="0"
VerticalAlignment="Stretch"
HorizontalContentAlignment="Right"
VerticalContentAlignment="Stretch"
IsTabStop="False"
ItemTemplateSelector="{StaticResource ExpressionItemTemplateSelector}"
ItemsSource="{Binding ExpressionTokens}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel HorizontalAlignment="Right"
VerticalAlignment="Stretch"
Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<Grid x:Name="ExpressionContent">
<ItemsControl x:Name="TokenList"
VerticalAlignment="Stretch"
HorizontalContentAlignment="Right"
VerticalContentAlignment="Stretch"
IsTabStop="False"
ItemTemplateSelector="{StaticResource ExpressionItemTemplateSelector}"
ItemsSource="{Binding ExpressionTokens}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel HorizontalAlignment="Right"
VerticalAlignment="Stretch"
Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
</ScrollViewer>
<Button x:Name="ScrollLeft"
x:Uid="scrollLeft"
@@ -94,11 +95,8 @@
</Setter>
</Style>
<Style x:Key="AlwaysOnTopStyleS" TargetType="controls:OverflowTextBlock">
<Style x:Key="AOTResultsStyle" TargetType="controls:OverflowTextBlock">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="ColumnWidth" Value="14"/>
<Setter Property="ColumnHeight" Value="14"/>
<Setter Property="ScrollButtonFontSize" Value="12"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:OverflowTextBlock">
@@ -164,56 +162,49 @@
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Style="{StaticResource ResultsScrollerSnapped}"
AutomationProperties.AccessibilityView="Control">
<TextBlock x:Name="EditableToken"
Grid.Row="2"
Margin="4,0,4,0"
Padding="0"
HorizontalAlignment="Right"
VerticalAlignment="Stretch"
FontWeight="SemiBold"
AutomationProperties.AccessibilityView="Raw"
Text="{Binding DisplayValue, Mode=OneWay}"/>
<Grid x:Name="ExpressionContent">
<TextBlock x:Name="EditableToken"
Grid.Row="2"
Margin="4,0,4,0"
Padding="0"
HorizontalAlignment="Right"
VerticalAlignment="Stretch"
FontWeight="SemiBold"
AutomationProperties.AccessibilityView="Raw"
Text="{Binding DisplayValue, Mode=OneWay}"/>
</Grid>
</ScrollViewer>
<Border Grid.Column="0" Background="{ThemeResource AppChromeAcrylicHostBackdropMediumLowBrush}">
<Button x:Name="ScrollLeft"
x:Uid="scrollLeft"
MinWidth="{TemplateBinding ColumnWidth}"
MinHeight="{TemplateBinding ColumnHeight}"
Margin="0,3,0,0"
Style="{StaticResource AlwaysOnTopScrollButtonStyleS}"
Background="Transparent">
<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}"
FontSize="{TemplateBinding ScrollButtonFontSize}"
Glyph="&#xE26C;"/>
</Button>
</Border>
<Border Grid.Column="2" Background="{ThemeResource AppChromeAcrylicHostBackdropMediumLowBrush}">
<Button x:Name="ScrollRight"
x:Uid="scrollRight"
MinWidth="{TemplateBinding ColumnWidth}"
MinHeight="{TemplateBinding ColumnHeight}"
Margin="0,3,0,0"
Style="{StaticResource AlwaysOnTopScrollButtonStyleS}"
Background="Transparent">
<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}"
FontSize="{TemplateBinding ScrollButtonFontSize}"
Glyph="&#xE26B;"/>
</Button>
</Border>
<Button x:Name="ScrollLeft"
x:Uid="scrollLeft"
Grid.Column="0"
Width="{TemplateBinding ScrollButtonsWidth}"
Margin="0,3,0,0"
VerticalAlignment="Stretch"
Style="{StaticResource AlwaysOnTopScrollButtonStyleS}"
Background="Transparent">
<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}"
FontSize="{TemplateBinding ScrollButtonsFontSize}"
Glyph="&#xE26C;"/>
</Button>
<Button x:Name="ScrollRight"
x:Uid="scrollRight"
Grid.Column="2"
Width="{TemplateBinding ScrollButtonsWidth}"
Margin="0,3,0,0"
VerticalAlignment="Stretch"
Style="{StaticResource AlwaysOnTopScrollButtonStyleS}"
Background="Transparent">
<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}"
FontSize="{TemplateBinding ScrollButtonsFontSize}"
Glyph="&#xE26B;"/>
</Button>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="AlwaysOnTopStyleM"
BasedOn="{StaticResource AlwaysOnTopStyleS}"
TargetType="controls:OverflowTextBlock">
<Setter Property="ColumnWidth" Value="28"/>
<Setter Property="ColumnHeight" Value="280"/>
<Setter Property="ScrollButtonFontSize" Value="28"/>
</Style>
<!-- Calculation Result Styles -->
<Style x:Key="ResultsStyle"
BasedOn="{StaticResource CalculationResultStyle}"
@@ -412,12 +403,12 @@
<Setter Target="MemMinus.IsEnabled" Value="False"/>
<Setter Target="MemButton.IsEnabled" Value="False"/>
</VisualState.Setters>
<Storyboard Completed="OnErrorLayoutCompleted"/>
<Storyboard Completed="OnErrorVisualStateCompleted"/>
</VisualState>
</VisualStateGroup>
<!-- Always-on-Top specific -->
<VisualStateGroup x:Name="AlwaysOnTopStates">
<VisualState x:Name="AlwaysOnTop">
<VisualStateGroup x:Name="DisplayModeVisualStates">
<VisualState x:Name="DisplayModeAlwaysOnTop">
<VisualState.Setters>
<Setter Target="ClearMemoryButton.IsEnabled" Value="False"/>
<Setter Target="MemRecall.IsEnabled" Value="False"/>
@@ -428,19 +419,21 @@
<Setter Target="RowHamburger.Height" Value="0"/>
<Setter Target="RowMemoryControls.Height" Value="0*"/>
</VisualState.Setters>
<Storyboard Completed="OnDisplayVisualStateCompleted"/>
</VisualState>
<VisualState x:Name="Normal">
<VisualState x:Name="DisplayModeNormal">
<VisualState.Setters>
<Setter Target="RowExpression.Height" Value="20*"/>
<Setter Target="RowHamburger.Height" Value="{StaticResource HamburgerHeightGridLength}"/>
<Setter Target="RowMemoryControls.Height" Value="32*"/>
</VisualState.Setters>
<Storyboard Completed="OnDisplayVisualStateCompleted"/>
</VisualState>
</VisualStateGroup>
<!-- Mode specific -->
<VisualStateGroup x:Name="Mode">
<VisualStateGroup x:Name="ModeVisualStates">
<VisualState x:Name="Standard">
<Storyboard Completed="OnStoryboardCompleted"/>
<Storyboard Completed="OnModeVisualStateCompleted"/>
</VisualState>
<VisualState x:Name="Scientific">
<VisualState.Setters>
@@ -448,7 +441,7 @@
<Setter Target="RowDisplayControls.MinHeight" Value="32"/>
<Setter Target="RowNumPad.Height" Value="276*"/>
</VisualState.Setters>
<Storyboard Completed="OnStoryboardCompleted"/>
<Storyboard Completed="OnModeVisualStateCompleted"/>
</VisualState>
<VisualState x:Name="Programmer">
<VisualState.Setters>
@@ -461,13 +454,12 @@
<Setter Target="M5.MaxWidth" Value="80"/>
<Setter Target="MemButton.(Grid.Column)" Value="5"/>
<Setter Target="MemoryButton.(Grid.Column)" Value="6"/>
<Setter Target="HistoryButton.Visibility" Value="Collapsed"/>
</VisualState.Setters>
<Storyboard Completed="OnStoryboardCompleted"/>
<Storyboard Completed="OnModeVisualStateCompleted"/>
</VisualState>
</VisualStateGroup>
<!-- Layout specific -->
<VisualStateGroup CurrentStateChanged="OnVisualStateChanged">
<VisualStateGroup x:Name="LayoutVisualStates" CurrentStateChanged="OnVisualStateChanged">
<VisualState x:Name="Portrait768x1366">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="1366" MinWindowWidth="768"/>
@@ -477,7 +469,7 @@
<Setter Target="DockPanel.Visibility" Value="Visible"/>
<Setter Target="M6.Width" Value="0"/>
</VisualState.Setters>
<Storyboard Completed="OnLayoutStateChanged"/>
<Storyboard Completed="OnLayoutVisualStateCompleted"/>
</VisualState>
<VisualState x:Name="LargeWideView">
<VisualState.StateTriggers>
@@ -488,7 +480,7 @@
<Setter Target="DockPanel.Visibility" Value="Visible"/>
<Setter Target="M6.Width" Value="0"/>
</VisualState.Setters>
<Storyboard Completed="OnLayoutStateChanged"/>
<Storyboard Completed="OnLayoutVisualStateCompleted"/>
</VisualState>
<VisualState x:Name="DockVisible">
<VisualState.StateTriggers>
@@ -500,13 +492,13 @@
<Setter Target="DockPanel.Visibility" Value="Visible"/>
<Setter Target="M6.Width" Value="0"/>
</VisualState.Setters>
<Storyboard Completed="OnLayoutStateChanged"/>
<Storyboard Completed="OnLayoutVisualStateCompleted"/>
</VisualState>
<VisualState x:Name="MinSizeLayout">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="{StaticResource AppMinWindowHeight}" MinWindowWidth="{StaticResource AppMinWindowWidth}"/>
</VisualState.StateTriggers>
<Storyboard Completed="OnLayoutStateChanged"/>
<Storyboard Completed="OnLayoutVisualStateCompleted"/>
</VisualState>
<VisualState x:Name="DefaultLayout">
<VisualState.StateTriggers>
@@ -514,7 +506,6 @@
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="RowMemoryControls.MinHeight" Value="0"/>
<Setter Target="ClearMemoryButton.Style" Value="{StaticResource CaptionButtonStyle}"/>
<Setter Target="MemRecall.Style" Value="{StaticResource CaptionButtonStyle}"/>
<Setter Target="MemPlus.Style" Value="{StaticResource CaptionButtonStyle}"/>
@@ -522,7 +513,7 @@
<Setter Target="MemButton.Style" Value="{StaticResource CaptionButtonStyle}"/>
<Setter Target="MemoryButton.MinHeight" Value="0"/>
</VisualState.Setters>
<Storyboard Completed="OnLayoutStateChanged"/>
<Storyboard Completed="OnLayoutVisualStateCompleted"/>
</VisualState>
</VisualStateGroup>
<!-- Results display specific -->
@@ -534,8 +525,6 @@
<VisualState.Setters>
<Setter Target="RowResult.MinHeight" Value="54"/>
<Setter Target="RowResult.Height" Value="72*"/>
<Setter Target="AlwaysOnTopResults.FontSize" Value="40"/>
<Setter Target="AlwaysOnTopResults.Style" Value="{StaticResource AlwaysOnTopStyleM}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="MinAlwaysOnTop">
@@ -546,7 +535,8 @@
<Setter Target="RowResult.MinHeight" Value="20"/>
<Setter Target="RowResult.Height" Value="72*"/>
<Setter Target="AlwaysOnTopResults.FontSize" Value="18"/>
<Setter Target="AlwaysOnTopResults.Style" Value="{StaticResource AlwaysOnTopStyleS}"/>
<Setter Target="AlwaysOnTopResults.ScrollButtonsWidth" Value="14"/>
<Setter Target="AlwaysOnTopResults.ScrollButtonsFontSize" Value="12"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
@@ -637,10 +627,15 @@
Grid.Row="2"
Margin="6,0,6,0"
HorizontalContentAlignment="Right"
Style="{StaticResource AOTResultsStyle}"
FontSize="40"
AutomationProperties.AutomationId="CalculatorAlwaysOnTopResults"
AutomationProperties.HeadingLevel="Level1"
AutomationProperties.Name="{x:Bind Model.CalculationResultAutomationName, Mode=OneWay}"
IsActive="True"
ScrollButtonsFontSize="28"
ScrollButtonsPlacement="Above"
ScrollButtonsWidth="28"
TokensUpdated="{x:Bind Model.AreAlwaysOnTopResultsUpdated, Mode=OneWay}"
UseSystemFocusVisuals="True"
Visibility="{x:Bind Model.IsAlwaysOnTop, Mode=OneWay}"/>
@@ -648,47 +643,46 @@
<!-- Programmer display panel controls -->
<local:CalculatorProgrammerOperators x:Name="ProgrammerOperators"
Grid.Row="3"
x:Load="False"
IsEnabled="{x:Bind Model.IsProgrammer, Mode=OneWay}"
TabIndex="6"
Visibility="{x:Bind Model.IsProgrammer, Mode=OneWay}"/>
Visibility="{x:Bind Model.IsProgrammer, Mode=OneWay}"
IsEnabled="{x:Bind Model.IsProgrammer, Mode=OneWay}"
x:Load="False"/>
<local:CalculatorProgrammerDisplayPanel x:Name="ProgrammerDisplayPanel"
Grid.Row="4"
x:Load="False"
IsEnabled="{x:Bind Model.IsProgrammer, Mode=OneWay}"
TabIndex="7"
Visibility="{x:Bind Model.IsProgrammer, Mode=OneWay}"/>
Visibility="{x:Bind Model.IsProgrammer, Mode=OneWay}"
IsEnabled="{x:Bind Model.IsProgrammer, Mode=OneWay}"
x:Load="False"/>
<Grid x:Name="HistoryButtonParent" Visibility="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanToVisibilityNegationConverter}, Mode=OneWay}">
<Button x:Name="HistoryButton"
x:Uid="HistoryButton"
Grid.Row="0"
Style="{StaticResource HistoryButtonStyle}"
AutomationProperties.AutomationId="HistoryButton"
Command="{x:Bind HistoryButtonPressed, Mode=OneTime}"
Content="&#xe81c;"
ExitDisplayModeOnAccessKeyInvoked="False"
IsEnabled="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanNegationConverter}, Mode=OneWay}"
TabIndex="2">
<FlyoutBase.AttachedFlyout>
<Flyout x:Name="HistoryFlyout"
AutomationProperties.AutomationId="HistoryFlyout"
Closed="HistoryFlyout_Closed"
FlyoutPresenterStyle="{StaticResource HistoryFlyoutStyle}"
Opened="HistoryFlyout_Opened"
Placement="Full"/>
</FlyoutBase.AttachedFlyout>
</Button>
</Grid>
<Button x:Name="HistoryButton"
x:Uid="HistoryButton"
Grid.Row="0"
Style="{StaticResource HistoryButtonStyle}"
AutomationProperties.AutomationId="HistoryButton"
Command="{x:Bind HistoryButtonPressed, Mode=OneTime}"
Content="&#xe81c;"
ExitDisplayModeOnAccessKeyInvoked="False"
TabIndex="2"
Visibility="{x:Bind local:Calculator.ShouldDisplayHistoryButton(Model.IsAlwaysOnTop, Model.IsProgrammer, DockPanel.Visibility), Mode=OneWay}"
IsEnabled="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanNegationConverter}, Mode=OneWay}">
<FlyoutBase.AttachedFlyout>
<Flyout x:Name="HistoryFlyout"
AutomationProperties.AutomationId="HistoryFlyout"
Closed="HistoryFlyout_Closed"
FlyoutPresenterStyle="{StaticResource HistoryFlyoutStyle}"
Opened="HistoryFlyout_Opened"
Placement="Full"/>
</FlyoutBase.AttachedFlyout>
</Button>
<!-- Scientific angle buttons -->
<local:CalculatorScientificAngleButtons x:Name="ScientificAngleButtons"
Grid.Row="3"
x:Load="False"
IsEnabled="{x:Bind Model.IsScientific, Mode=OneWay}"
TabIndex="6"
Visibility="{x:Bind Model.IsScientific, Mode=OneWay}"/>
Visibility="{x:Bind Model.IsScientific, Mode=OneWay}"
IsEnabled="{x:Bind Model.IsScientific, Mode=OneWay}"
x:Load="False"/>
<!-- Memory panel controls -->
<Grid x:Name="MemoryPanel"
@@ -767,8 +761,8 @@
Click="ToggleMemoryFlyout"
Content="M0,9.46968e-006L1.96199,9.46968e-006L4.17099,5.59502C4.33899,6.02501 4.44899,6.34502 4.5,6.55602L4.52899,6.55602C4.67299,6.11501 4.791,5.78701 4.87999,5.57201L7.12999,9.46968e-006L9.023,9.46968e-006L9.023,8.402L7.64,8.402L7.64,2.96501C7.64,2.519 7.668,1.97401 7.722,1.33L7.69899,1.33C7.613,1.697 7.53699,1.96101 7.46999,2.12102L4.96199,8.402L4.002,8.402L1.48799,2.16801C1.418,1.98399 1.34299,1.705 1.265,1.33L1.24199,1.33C1.273,1.666 1.28899,2.21501 1.28899,2.976L1.28899,8.402L0,8.402zM10.5,0L15.5,0L12.99,2.5z"
ExitDisplayModeOnAccessKeyInvoked="False"
IsEnabled="{x:Bind Model.IsMemoryEmpty, Converter={StaticResource BooleanNegationConverter}, Mode=OneWay}"
TabIndex="15">
TabIndex="15"
IsEnabled="{x:Bind Model.IsMemoryEmpty, Converter={StaticResource BooleanNegationConverter}, Mode=OneWay}">
<FlyoutBase.AttachedFlyout>
<Flyout x:Name="MemoryFlyout"
x:Uid="MemoryFlyout"
@@ -1093,10 +1087,10 @@
VerticalAlignment="Top"
Background="Transparent"
Opacity="0"
IsEnabled="False"
IsTabStop="False"
Template="{StaticResource PreviousTemplate}"
UseSystemFocusVisuals="False"/>
UseSystemFocusVisuals="False"
IsEnabled="False"/>
<Button x:Name="NextButton"
Grid.Column="1"
Width="20"
@@ -1106,10 +1100,10 @@
VerticalAlignment="Top"
Background="Transparent"
Opacity="0"
IsEnabled="False"
IsTabStop="False"
Template="{StaticResource NextTemplate}"
UseSystemFocusVisuals="False"/>
UseSystemFocusVisuals="False"
IsEnabled="False"/>
<ContentPresenter x:Name="RightHeaderPresenter"
Grid.Column="2"
HorizontalAlignment="Stretch"

View File

@@ -7,7 +7,6 @@
#include "CalcViewModel/Common/TraceLogger.h"
#include "CalcViewModel/Common/CopyPasteManager.h"
#include "CalcViewModel/StandardCalculatorViewModel.h"
#include "CalcViewModel/ViewState.h"
#include "CalcViewModel/Common/LocalizationSettings.h"
#include "Memory.xaml.h"
#include "HistoryList.xaml.h"
@@ -59,8 +58,8 @@ Calculator::Calculator()
m_displayFlyout = static_cast<MenuFlyout ^>(Resources->Lookup(L"DisplayContextMenu"));
auto resLoader = AppResourceProvider::GetInstance();
CopyMenuItem->Text = resLoader.GetResourceString(L"copyMenuItem");
PasteMenuItem->Text = resLoader.GetResourceString(L"pasteMenuItem");
CopyMenuItem->Text = resLoader->GetResourceString(L"copyMenuItem");
PasteMenuItem->Text = resLoader->GetResourceString(L"pasteMenuItem");
this->SizeChanged += ref new SizeChangedEventHandler(this, &Calculator::Calculator_SizeChanged);
}
@@ -68,10 +67,10 @@ Calculator::Calculator()
void Calculator::LoadResourceStrings()
{
auto resProvider = AppResourceProvider::GetInstance();
m_openMemoryFlyoutAutomationName = resProvider.GetResourceString(L"MemoryButton_Open");
m_closeMemoryFlyoutAutomationName = resProvider.GetResourceString(L"MemoryButton_Close");
m_openHistoryFlyoutAutomationName = resProvider.GetResourceString(L"HistoryButton_Open");
m_closeHistoryFlyoutAutomationName = resProvider.GetResourceString(L"HistoryButton_Close");
m_openMemoryFlyoutAutomationName = resProvider->GetResourceString(L"MemoryButton_Open");
m_closeMemoryFlyoutAutomationName = resProvider->GetResourceString(L"MemoryButton_Close");
m_openHistoryFlyoutAutomationName = resProvider->GetResourceString(L"HistoryButton_Open");
m_closeHistoryFlyoutAutomationName = resProvider->GetResourceString(L"HistoryButton_Close");
AutomationProperties::SetName(MemoryButton, m_openMemoryFlyoutAutomationName);
AutomationProperties::SetName(HistoryButton, m_openHistoryFlyoutAutomationName);
}
@@ -123,9 +122,9 @@ void Calculator::OnLoaded(_In_ Object ^, _In_ RoutedEventArgs ^)
Model->HideMemoryClicked += ref new HideMemoryClickedHandler(this, &Calculator::OnHideMemoryClicked);
InitializeHistoryView(Model->HistoryVM);
String ^ historyPaneName = AppResourceProvider::GetInstance().GetResourceString(L"HistoryPane");
String ^ historyPaneName = AppResourceProvider::GetInstance()->GetResourceString(L"HistoryPane");
HistoryFlyout->FlyoutPresenterStyle->Setters->Append(ref new Setter(AutomationProperties::NameProperty, historyPaneName));
String ^ memoryPaneName = AppResourceProvider::GetInstance().GetResourceString(L"MemoryPane");
String ^ memoryPaneName = AppResourceProvider::GetInstance()->GetResourceString(L"MemoryPane");
MemoryFlyout->FlyoutPresenterStyle->Setters->Append(ref new Setter(AutomationProperties::NameProperty, memoryPaneName));
if (Windows::Foundation::Metadata::ApiInformation::IsEventPresent(L"Windows.UI.Xaml.Controls.Primitives.FlyoutBase", L"Closing"))
@@ -138,7 +137,7 @@ void Calculator::OnLoaded(_In_ Object ^, _In_ RoutedEventArgs ^)
WeakReference weakThis(this);
this->Dispatcher->RunAsync(
CoreDispatcherPriority::Normal, ref new DispatchedHandler([weakThis]() {
if (TraceLogger::GetInstance().IsWindowIdInLog(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())))
if (TraceLogger::GetInstance()->IsWindowIdInLog(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())))
{
auto refThis = weakThis.Resolve<Calculator>();
if (refThis != nullptr)
@@ -149,24 +148,21 @@ void Calculator::OnLoaded(_In_ Object ^, _In_ RoutedEventArgs ^)
}));
}
std::wstring Calculator::GetCurrentLayoutState()
Platform::String ^ Calculator::GetCurrentLayoutState()
{
std::wstring state;
if (IsProgrammer)
{
state = L"Programmer";
return L"Programmer";
}
else if (IsScientific)
{
state = L"Scientific";
return L"Scientific";
}
else
{
state = L"Standard";
return L"Standard";
}
return state;
}
void Calculator::UpdateViewState()
@@ -209,7 +205,7 @@ void Calculator::AnimateCalculator(bool resultAnimate)
// We are forcing the animation here
// It's because if last animation was in standard, then go to unit converter, then comes back to standard
// The state for the calculator does not change and the animation would not get run.
this->OnStoryboardCompleted(nullptr, nullptr);
this->OnModeVisualStateCompleted(nullptr, nullptr);
}
}
}
@@ -239,7 +235,7 @@ void Calculator::OnContextCanceled(UIElement ^ sender, RoutedEventArgs ^ e)
m_displayFlyout->Hide();
}
void Calculator::OnLayoutStateChanged(_In_ Object ^ sender, _In_ Object ^ e)
void Calculator::OnLayoutVisualStateCompleted(_In_ Object ^ sender, _In_ Object ^ e)
{
UpdatePanelViewState();
}
@@ -286,29 +282,23 @@ void Calculator::OnIsAlwaysOnTopPropertyChanged(bool /*oldValue*/, bool newValue
{
if (newValue)
{
VisualStateManager::GoToState(this, L"AlwaysOnTop", false);
VisualStateManager::GoToState(this, L"DisplayModeAlwaysOnTop", false);
AlwaysOnTopResults->UpdateScrollButtons();
}
else
{
VisualStateManager::GoToState(this, L"Normal", false);
if (Model->IsInError)
{
VisualStateManager::GoToState(this, L"ErrorLayout", false);
}
else
VisualStateManager::GoToState(this, L"DisplayModeNormal", false);
if (!Model->IsInError)
{
EnableMemoryControls(true);
}
Results->UpdateTextState();
}
Model->IsMemoryEmpty = (Model->MemorizedNumbers->Size == 0) || IsAlwaysOnTop;
AlwaysOnTopResults->UpdateScrollButtons();
Results->UpdateTextState();
UpdateViewState();
UpdatePanelViewState();
SetDefaultFocus();
}
void Calculator::OnIsInErrorPropertyChanged()
@@ -336,7 +326,7 @@ void Calculator::OnIsInErrorPropertyChanged()
// Once the storyboard that rearranges the buttons completed,
// We do the animation based on the Mode or Orientation change.
void Calculator::OnStoryboardCompleted(_In_ Object ^ sender, _In_ Object ^ e)
void Calculator::OnModeVisualStateCompleted(_In_ Object ^ sender, _In_ Object ^ e)
{
m_isLastAnimatedInScientific = IsScientific;
m_isLastAnimatedInProgrammer = IsProgrammer;
@@ -378,7 +368,7 @@ void Calculator::EnsureProgrammer()
}
OpsPanel->EnsureProgrammerRadixOps();
ProgrammerOperators->SetRadixButton(Model->GetCurrentRadixType());
ProgrammerOperators->SetRadixButton(Model->CurrentRadixType);
}
void Calculator::OnCalcPropertyChanged(_In_ Object ^ sender, _In_ PropertyChangedEventArgs ^ e)
@@ -402,13 +392,11 @@ void Calculator::UpdatePanelViewState()
void Calculator::UpdateHistoryState()
{
String ^ viewState = App::GetAppViewState();
if (viewState == ViewState::DockedView)
if (DockPanel->Visibility == ::Visibility::Visible)
{
// docked view
CloseHistoryFlyout();
SetChildAsHistory();
HistoryButton->Visibility = ::Visibility::Collapsed;
if (!IsProgrammer && m_IsLastFlyoutHistory)
{
@@ -416,7 +404,8 @@ void Calculator::UpdateHistoryState()
}
}
else
{ // flyout view
{
// flyout view
DockHistoryHolder->Child = nullptr;
if (!IsProgrammer)
{
@@ -440,8 +429,7 @@ void Calculator::UpdateMemoryState()
ClearMemoryButton->IsEnabled = false;
}
String ^ viewState = App::GetAppViewState();
if (viewState == ViewState::DockedView)
if (DockPanel->Visibility == ::Visibility::Visible)
{
CloseMemoryFlyout();
SetChildAsMemory();
@@ -482,13 +470,7 @@ void Calculator::OnHideHistoryClicked()
void Calculator::OnHistoryItemClicked(_In_ HistoryItemViewModel ^ e)
{
unsigned int tokenSize;
assert(e->GetTokens() != nullptr);
e->GetTokens()->GetSize(&tokenSize);
Model->SetHistoryExpressionDisplay(e->GetTokens(), e->GetCommands());
Model->SetExpressionDisplay(e->GetTokens(), e->GetCommands());
Model->SetPrimaryDisplay(e->Result->Data(), false);
Model->IsFToEEnabled = false;
Model->SelectHistoryItem(e);
CloseHistoryFlyout();
this->Focus(::FocusState::Programmatic);
@@ -554,38 +536,39 @@ void Calculator::SetDefaultFocus()
void Calculator::ToggleHistoryFlyout(Object ^ /*parameter*/)
{
String ^ viewState = App::GetAppViewState();
// If app starts correctly in snap mode and shortcut is used for history then we need to load history if not yet initialized.
if (viewState != ViewState::DockedView)
if (Model->IsProgrammer || DockPanel->Visibility == ::Visibility::Visible)
{
if (m_fIsHistoryFlyoutOpen)
{
HistoryFlyout->Hide();
}
else
{
HistoryFlyout->Content = m_historyList;
m_historyList->RowHeight = NumpadPanel->ActualHeight;
FlyoutBase::ShowAttachedFlyout(HistoryButton);
}
return;
}
if (m_fIsHistoryFlyoutOpen)
{
HistoryFlyout->Hide();
}
else
{
HistoryFlyout->Content = m_historyList;
m_historyList->RowHeight = NumpadPanel->ActualHeight;
FlyoutBase::ShowAttachedFlyout(HistoryButton);
}
}
void Calculator::ToggleMemoryFlyout()
{
String ^ viewState = App::GetAppViewState();
if (viewState != ViewState::DockedView)
if (DockPanel->Visibility == ::Visibility::Visible)
{
if (m_fIsMemoryFlyoutOpen)
{
MemoryFlyout->Hide();
}
else
{
MemoryFlyout->Content = GetMemory();
m_memory->RowHeight = NumpadPanel->ActualHeight;
FlyoutBase::ShowAttachedFlyout(MemoryButton);
}
return;
}
if (m_fIsMemoryFlyoutOpen)
{
MemoryFlyout->Hide();
}
else
{
MemoryFlyout->Content = GetMemory();
m_memory->RowHeight = NumpadPanel->ActualHeight;
FlyoutBase::ShowAttachedFlyout(MemoryButton);
}
}
@@ -624,7 +607,7 @@ Memory ^ Calculator::GetMemory()
if (m_memory == nullptr)
{
m_memory = ref new Memory();
VisualStateManager::GoToState(m_memory, ref new String(GetCurrentLayoutState().c_str()), true /*useTransitions*/);
VisualStateManager::GoToState(m_memory, GetCurrentLayoutState(), true /*useTransitions*/);
}
return m_memory;
@@ -680,28 +663,6 @@ void Calculator::OnHistoryFlyOutTapped(_In_ Object ^ sender, _In_ TappedRoutedEv
}
}
bool Calculator::IsValidRegularExpression(std::wstring str)
{
bool result = false;
std::wregex regexPatterns[3];
regexPatterns[0] = L"[-]{0,1}[0-9]{0,}[.]{0,1}[0-9]{0,}";
regexPatterns[1] = L"[-]{0,1}[0-9]{0,}[.]{0,1}[0-9]{0,}[e]{1}[+]{1}[0-9]{1,}";
regexPatterns[2] = L"[-]{0,1}[0-9]{0,}[.]{0,1}[0-9]{0,}[e]{1}[-]{1}[0-9]{1,}";
const auto& localizer = LocalizationSettings::GetInstance();
String ^ englishString = localizer.GetEnglishValueFromLocalizedDigits(str);
for (int i = 0; i < 3; ++i)
{
if (regex_match(englishString->Data(), regexPatterns[i]))
{
result = true;
break;
}
}
return result;
}
void Calculator::DockPanelTapped(_In_ TappedRoutedEventArgs ^ e)
{
int index = DockPivot->SelectedIndex;
@@ -719,7 +680,12 @@ void Calculator::UnregisterEventHandlers()
ExpressionText->UnregisterEventHandlers();
}
void Calculator::OnErrorLayoutCompleted(_In_ Object ^ sender, _In_ Object ^ e)
void Calculator::OnErrorVisualStateCompleted(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e)
{
SetDefaultFocus();
}
void Calculator::OnDisplayVisualStateCompleted(_In_ Object ^ sender, _In_ Object ^ e)
{
SetDefaultFocus();
}
@@ -737,8 +703,7 @@ void Calculator::OnMemoryAccessKeyInvoked(_In_ UIElement ^ sender, _In_ AccessKe
void CalculatorApp::Calculator::OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e)
{
auto mode = IsStandard ? ViewMode::Standard : IsScientific ? ViewMode::Scientific : ViewMode::Programmer;
auto state = std::wstring(e->NewState->Name->Begin());
TraceLogger::GetInstance().LogVisualStateChanged(mode, state, IsAlwaysOnTop);
TraceLogger::GetInstance()->LogVisualStateChanged(mode, e->NewState->Name, IsAlwaysOnTop);
}
void Calculator::Calculator_SizeChanged(Object ^ /*sender*/, SizeChangedEventArgs ^ /*e*/)
@@ -748,3 +713,8 @@ void Calculator::Calculator_SizeChanged(Object ^ /*sender*/, SizeChangedEventArg
AlwaysOnTopResults->UpdateScrollButtons();
}
}
::Visibility Calculator::ShouldDisplayHistoryButton(bool isAlwaysOnTop, bool isProgrammer, ::Visibility dockPanelVisibility)
{
return !isAlwaysOnTop && !isProgrammer && dockPanelVisibility == ::Visibility::Collapsed ? ::Visibility::Visible : ::Visibility::Collapsed;
}

View File

@@ -11,6 +11,8 @@
#include "Controls/CalculatorButton.h"
#include "Controls/CalculationResult.h"
#include "Controls/OverflowTextBlock.h"
#include "Controls/OperatorPanelListView.h"
#include "Controls/OperatorPanelButton.h"
#include "Controls/EquationTextBox.h"
#include "Controls/MathRichEditBox.h"
#include "CalcViewModel/HistoryViewModel.h"
@@ -21,7 +23,7 @@
#include "Views/HistoryList.xaml.h"
#include "Views/Memory.xaml.h"
#include "Views/OperatorsPanel.xaml.h"
#include "Views/GraphingCalculator/KeyGraphFeaturesPanel.xaml.h"
#include "Views/StateTriggers/ControlSizeTrigger.h"
namespace CalculatorApp
{
@@ -71,6 +73,8 @@ public
void SetDefaultFocus();
// Methods used by native bindings
static Windows::UI::Xaml::Visibility ShouldDisplayHistoryButton(bool isAlwaysOnTop, bool isProgrammer, Windows::UI::Xaml::Visibility dockPanelVisibility);
private:
void OnLoaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
@@ -88,12 +92,14 @@ public
void OnIsAlwaysOnTopPropertyChanged(bool oldValue, bool newValue);
void OnIsInErrorPropertyChanged();
void OnCalcPropertyChanged(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::Data::PropertyChangedEventArgs ^ e);
void OnStoryboardCompleted(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
void OnLayoutStateChanged(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
void OnLayoutVisualStateCompleted(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
void OnModeVisualStateCompleted(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
void OnErrorVisualStateCompleted(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
void OnDisplayVisualStateCompleted(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
void EnsureScientific();
void EnsureProgrammer();
void SetFontSizeResources();
std::wstring GetCurrentLayoutState();
Platform::String ^ GetCurrentLayoutState();
void Calculator_SizeChanged(Object ^ sender, Windows::UI::Xaml::SizeChangedEventArgs ^ e);
private:
@@ -139,11 +145,10 @@ public
void EnableMemoryControls(bool enable);
void OnMemoryFlyOutTapped(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::Input::TappedRoutedEventArgs ^ e);
void OnHistoryFlyOutTapped(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::Input::TappedRoutedEventArgs ^ e);
bool IsValidRegularExpression(std::wstring str);
void DockPanelTapped(_In_ Windows::UI::Xaml::Input::TappedRoutedEventArgs ^ e);
void OnErrorLayoutCompleted(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
void OnHistoryAccessKeyInvoked(_In_ Windows::UI::Xaml::UIElement ^ sender, _In_ Windows::UI::Xaml::Input::AccessKeyInvokedEventArgs ^ args);
void OnMemoryAccessKeyInvoked(_In_ Windows::UI::Xaml::UIElement ^ sender, _In_ Windows::UI::Xaml::Input::AccessKeyInvokedEventArgs ^ args);
void OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e);
};
};
}

View File

@@ -50,6 +50,7 @@ void CalculatorProgrammerBitFlipPanel::SubscribePropertyChanged()
if (Model != nullptr)
{
m_propertyChangedToken = Model->PropertyChanged += ref new PropertyChangedEventHandler(this, &CalculatorProgrammerBitFlipPanel::OnPropertyChanged);
m_currentValueBitLength = Model->ValueBitLength;
UpdateCheckedStates(true);
}
}
@@ -68,8 +69,10 @@ void CalculatorProgrammerBitFlipPanel::OnPropertyChanged(Object ^ sender, Proper
if (e->PropertyName == StandardCalculatorViewModel::BinaryDigitsPropertyName)
{
UpdateCheckedStates(false);
m_currentValueBitLength = Model->ValueBitLength;
}
else if (e->PropertyName == StandardCalculatorViewModel::IsBitFlipCheckedPropertyName
else if (
e->PropertyName == StandardCalculatorViewModel::IsBitFlipCheckedPropertyName
|| e->PropertyName == StandardCalculatorViewModel::IsProgrammerPropertyName)
{
if (Model->IsBitFlipChecked && Model->IsProgrammer)
@@ -190,14 +193,20 @@ void CalculatorProgrammerBitFlipPanel::UpdateCheckedStates(bool updateAutomation
m_updatingCheckedStates = true;
auto it = m_flipButtons.begin();
int index = 0;
bool mustUpdateTextOfMostSignificantDigits = m_currentValueBitLength != Model->ValueBitLength;
int previousMSDPosition = GetIndexOfLastBit(m_currentValueBitLength);
int newMSDPosition = GetIndexOfLastBit(Model->ValueBitLength);
for (bool val : Model->BinaryDigits)
{
FlipButtons ^ flipButton = *it;
if (updateAutomationPropertiesNames)
{
flipButton->SetValue(AutomationProperties::NameProperty, GenerateAutomationPropertiesName(index, flipButton->IsChecked->Value));
}
bool hasValueChanged = flipButton->IsChecked->Value != val;
flipButton->IsChecked = val;
if (updateAutomationPropertiesNames
|| hasValueChanged
|| (mustUpdateTextOfMostSignificantDigits && (index == previousMSDPosition || index == newMSDPosition)))
{
flipButton->SetValue(AutomationProperties::NameProperty, GenerateAutomationPropertiesName(index, val));
}
++it;
++index;
}
@@ -215,29 +224,53 @@ void CalculatorProgrammerBitFlipPanel::UpdateAutomationPropertiesNames()
}
bool CalculatorProgrammerBitFlipPanel::ShouldEnableBit(BitLength length, int index)
{
return index <= GetIndexOfLastBit(length);
}
int CalculatorProgrammerBitFlipPanel::GetIndexOfLastBit(BitLength length) const
{
switch (length)
{
case BitLength::BitLengthQWord:
return index <= 63;
return 63;
case BitLength::BitLengthDWord:
return index <= 31;
return 31;
case BitLength::BitLengthWord:
return index <= 15;
return 15;
case BitLength::BitLengthByte:
return index <= 7;
return 7;
}
return false;
return -1;
}
String ^ CalculatorProgrammerBitFlipPanel::GenerateAutomationPropertiesName(int position, bool value) const
String ^ CalculatorProgrammerBitFlipPanel::GenerateAutomationPropertiesName(int position, bool value)
{
auto resourceLoader = AppResourceProvider::GetInstance();
String ^ automationNameTemplate = resourceLoader->GetResourceString(L"BitFlipItemAutomationName");
String ^ bitPosition;
if (position == 0)
{
bitPosition = resourceLoader->GetResourceString(L"LeastSignificantBit");
}
else
{
int lastPosition = -1;
if (Model != nullptr)
{
lastPosition = GetIndexOfLastBit(Model->ValueBitLength);
}
String ^ indexName = resourceLoader.GetResourceString(ref new Platform::String(to_wstring(position).c_str()));
String ^ automationNameTemplate = resourceLoader.GetResourceString(L"BitFlipItemAutomationName");
String ^ bitPositionTemplate = resourceLoader.GetResourceString(L"BitPosition");
wstring bitPosition = LocalizationStringUtil::GetLocalizedString(bitPositionTemplate->Data(), indexName->Data());
return ref new String(LocalizationStringUtil::GetLocalizedString(automationNameTemplate->Data(), bitPosition.c_str(), value ? L"1" : L"0").c_str());
if (position == lastPosition)
{
bitPosition = resourceLoader->GetResourceString(L"MostSignificantBit");
}
else
{
String ^ indexName = resourceLoader->GetResourceString(ref new Platform::String(to_wstring(position).c_str()));
String ^ bitPositionTemplate = resourceLoader->GetResourceString(L"BitPosition");
bitPosition = LocalizationStringUtil::GetLocalizedString(bitPositionTemplate, indexName);
}
}
return LocalizationStringUtil::GetLocalizedString(automationNameTemplate, bitPosition, value ? L"1" : L"0");
}

View File

@@ -22,7 +22,7 @@ namespace CalculatorApp
bool ShouldEnableBit(CalculatorApp::Common::BitLength length, int index);
property CalculatorApp::ViewModel::StandardCalculatorViewModel
^ Model { CalculatorApp::ViewModel::StandardCalculatorViewModel ^ get(); }
^ Model { CalculatorApp::ViewModel::StandardCalculatorViewModel ^ get(); }
private : void OnLoaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void OnUnloaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
@@ -37,12 +37,14 @@ namespace CalculatorApp
private:
Windows::Foundation::EventRegistrationToken m_propertyChangedToken;
Platform::String ^ GenerateAutomationPropertiesName(int position, bool value) const;
Platform::String ^ GenerateAutomationPropertiesName(int position, bool value);
void UpdateCheckedStates(bool updateAutomationPropertiesNames);
void UpdateAutomationPropertiesNames();
int GetIndexOfLastBit(CalculatorApp::Common::BitLength length) const;
static const unsigned int s_numBits = 64;
std::array<CalculatorApp::Controls::FlipButtons ^, s_numBits> m_flipButtons;
bool m_updatingCheckedStates;
CalculatorApp::Common::BitLength m_currentValueBitLength;
};
}

View File

@@ -33,65 +33,65 @@ CalculatorProgrammerOperators::CalculatorProgrammerOperators()
{
InitializeComponent();
CopyMenuItem->Text = AppResourceProvider::GetInstance().GetResourceString(L"copyMenuItem");
CopyMenuItem->Text = AppResourceProvider::GetInstance()->GetResourceString(L"copyMenuItem");
}
void CalculatorProgrammerOperators::HexButtonChecked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
{
TraceLogger::GetInstance().UpdateButtonUsage(NumbersAndOperatorsEnum::HexButton, ViewMode::Programmer);
TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::HexButton, ViewMode::Programmer);
if (Model)
{
Model->SwitchProgrammerModeBase(RADIX_TYPE::HEX_RADIX);
Model->SwitchProgrammerModeBase(NumberBase::HexBase);
}
}
void CalculatorProgrammerOperators::DecButtonChecked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
{
TraceLogger::GetInstance().UpdateButtonUsage(NumbersAndOperatorsEnum::DecButton, ViewMode::Programmer);
TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::DecButton, ViewMode::Programmer);
if (Model)
{
Model->SwitchProgrammerModeBase(RADIX_TYPE::DEC_RADIX);
Model->SwitchProgrammerModeBase(NumberBase::DecBase);
}
}
void CalculatorProgrammerOperators::OctButtonChecked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
{
TraceLogger::GetInstance().UpdateButtonUsage(NumbersAndOperatorsEnum::OctButton, ViewMode::Programmer);
TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::OctButton, ViewMode::Programmer);
if (Model)
{
Model->SwitchProgrammerModeBase(RADIX_TYPE::OCT_RADIX);
Model->SwitchProgrammerModeBase(NumberBase::OctBase);
}
}
void CalculatorProgrammerOperators::BinButtonChecked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
{
TraceLogger::GetInstance().UpdateButtonUsage(NumbersAndOperatorsEnum::BinButton, ViewMode::Programmer);
TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::BinButton, ViewMode::Programmer);
if (Model)
{
Model->SwitchProgrammerModeBase(RADIX_TYPE::BIN_RADIX);
Model->SwitchProgrammerModeBase(NumberBase::BinBase);
}
}
void CalculatorProgrammerOperators::SetRadixButton(RADIX_TYPE radixType)
void CalculatorProgrammerOperators::SetRadixButton(NumberBase numberBase)
{
switch (radixType)
switch (numberBase)
{
case RADIX_TYPE::DEC_RADIX:
case NumberBase::DecBase:
{
DecimalButton->IsChecked = true;
break;
}
case RADIX_TYPE::HEX_RADIX:
case NumberBase::HexBase:
{
HexButton->IsChecked = true;
break;
}
case RADIX_TYPE::OCT_RADIX:
case NumberBase::OctBase:
{
OctButton->IsChecked = true;
break;
}
case RADIX_TYPE::BIN_RADIX:
case NumberBase::BinBase:
{
BinaryButton->IsChecked = true;
break;

View File

@@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
@@ -6,6 +6,7 @@
#include "Views/CalculatorProgrammerOperators.g.h"
#include "Controls/RadixButton.h"
#include "CalcViewModel/StandardCalculatorViewModel.h"
#include "CalcViewModel/Common/NumberBase.h"
namespace CalculatorApp
{
@@ -24,7 +25,7 @@ namespace CalculatorApp
DEPENDENCY_PROPERTY(_In_ Windows::UI::Xaml::Style ^, SymbolButtonStyle);
internal : void SetRadixButton(RADIX_TYPE radixType);
internal : void SetRadixButton(CalculatorApp::Common::NumberBase radixType);
private:
void DecButtonChecked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);

View File

@@ -1,20 +1,28 @@
<UserControl x:Class="CalculatorApp.CalculatorProgrammerRadixOperators"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Windows10version1803="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract, 7)"
xmlns:Windows10version1809="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)"
xmlns:common="using:CalculatorApp.Common"
xmlns:controls="using:CalculatorApp.Controls"
xmlns:converters="using:CalculatorApp.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CalculatorApp"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:triggers="using:CalculatorApp.Views.StateTriggers"
x:Name="ControlRoot"
d:DesignHeight="395"
d:DesignWidth="315"
Loaded="OnLoaded"
Unloaded="OnUnloaded"
XYFocusKeyboardNavigation="Enabled"
mc:Ignorable="d">
<UserControl.Resources>
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<converters:BooleanToVisibilityNegationConverter x:Key="BooleanToVisibilityNegationConverter"/>
</UserControl.Resources>
<Grid x:Name="ProgRadixOps">
<Grid.RowDefinitions>
<RowDefinition x:Name="OperatorPanelRow" Height="Auto"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
@@ -29,7 +37,6 @@
<ColumnDefinition x:Name="C2" Width="1*"/>
<ColumnDefinition x:Name="C3" Width="1*"/>
<ColumnDefinition x:Name="C4" Width="1*"/>
<ColumnDefinition x:Name="C5" Width="1*"/>
<ColumnDefinition x:Name="GutterRight" Width="0"/>
</Grid.ColumnDefinitions>
@@ -47,7 +54,6 @@
<Setter Target="NotButton.IsEnabled" Value="False"/>
<Setter Target="AndButton.IsEnabled" Value="False"/>
<Setter Target="ShiftButton.IsEnabled" Value="False"/>
<Setter Target="ModButton.IsEnabled" Value="False"/>
<Setter Target="DivideButton.IsEnabled" Value="False"/>
@@ -58,180 +64,489 @@
<Setter Target="OpenParenthesisButton.IsEnabled" Value="False"/>
<Setter Target="CloseParenthesisButton.IsEnabled" Value="False"/>
<Setter Target="NegateButton.IsEnabled" Value="False"/>
<Setter Target="BitShiftButton.IsEnabled" Value="False"/>
<Setter Target="BitwiseButton.IsEnabled" Value="False"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
<VisualStateGroup>
<VisualState x:Name="Portrait768x1366">
<VisualState x:Name="Large">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="1366" MinWindowWidth="768"/>
<triggers:ControlSizeTrigger MinWidth="1053"
MinHeight="729"
Source="{x:Bind ProgRadixOps}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle38}"/>
<Setter Target="AButton.Style" Value="{StaticResource NumericButtonStyle38}"/>
<Setter Target="BButton.Style" Value="{StaticResource NumericButtonStyle38}"/>
<Setter Target="CButton.Style" Value="{StaticResource NumericButtonStyle38}"/>
<Setter Target="DButton.Style" Value="{StaticResource NumericButtonStyle38}"/>
<Setter Target="EButton.Style" Value="{StaticResource NumericButtonStyle38}"/>
<Setter Target="FButton.Style" Value="{StaticResource NumericButtonStyle38}"/>
<Setter Target="ModButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="OpenParenthesisButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="CloseParenthesisButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="AndButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="OrButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="XorButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="NandButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="NorButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="RolButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="RorButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="RolCarryButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="RorCarryButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="LshButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="RshButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="LshLogicalButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="RshLogicalButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="NotButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="OperatorPanelRow.MinHeight" Value="{StaticResource OperatorPanelButtonRowSizeLarge}"/>
<Setter Target="BitwiseButton.ChevronFontSize" Value="{ThemeResource OperatorPanelChevronFontSizeLarge}"/>
<Setter Target="BitwiseButton.GlyphFontSize" Value="{ThemeResource OperatorPanelGlyphFontSizeLarge}"/>
<Setter Target="BitwiseButton.FontSize" Value="{ThemeResource OperatorPanelFontSizeLarge}"/>
<Setter Target="BitShiftButton.ChevronFontSize" Value="{ThemeResource OperatorPanelChevronFontSizeLarge}"/>
<Setter Target="BitShiftButton.GlyphFontSize" Value="{ThemeResource OperatorPanelGlyphFontSizeLarge}"/>
<Setter Target="BitShiftButton.FontSize" Value="{ThemeResource OperatorPanelFontSizeLarge}"/>
<Setter Target="BitwiseGrid.MinWidth" Value="387"/>
<Setter Target="BitwiseGrid.MinHeight" Value="192"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Medium">
<VisualState.StateTriggers>
<triggers:ControlSizeTrigger MinWidth="630"
MinHeight="437"
Source="{x:Bind ProgRadixOps}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle24}"/>
<Setter Target="AButton.Style" Value="{StaticResource NumericButtonStyle24}"/>
<Setter Target="BButton.Style" Value="{StaticResource NumericButtonStyle24}"/>
<Setter Target="CButton.Style" Value="{StaticResource NumericButtonStyle24}"/>
<Setter Target="DButton.Style" Value="{StaticResource NumericButtonStyle24}"/>
<Setter Target="EButton.Style" Value="{StaticResource NumericButtonStyle24}"/>
<Setter Target="FButton.Style" Value="{StaticResource NumericButtonStyle24}"/>
<Setter Target="ModButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="OpenParenthesisButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="CloseParenthesisButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="AndButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="OrButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="XorButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NandButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NorButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="RolButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="RorButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="RolCarryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="RorCarryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="LshButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="RshButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="LshLogicalButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="RshLogicalButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NotButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="OperatorPanelRow.MinHeight" Value="{StaticResource OperatorPanelButtonRowSizeMedium}"/>
<Setter Target="BitwiseButton.ChevronFontSize" Value="{ThemeResource OperatorPanelChevronFontSizeMedium}"/>
<Setter Target="BitwiseButton.GlyphFontSize" Value="{ThemeResource OperatorPanelGlyphFontSizeMedium}"/>
<Setter Target="BitwiseButton.FontSize" Value="{ThemeResource OperatorPanelFontSizeMedium}"/>
<Setter Target="BitShiftButton.ChevronFontSize" Value="{ThemeResource OperatorPanelChevronFontSizeMedium}"/>
<Setter Target="BitShiftButton.GlyphFontSize" Value="{ThemeResource OperatorPanelGlyphFontSizeMedium}"/>
<Setter Target="BitShiftButton.FontSize" Value="{ThemeResource OperatorPanelFontSizeMedium}"/>
<Setter Target="BitwiseGrid.MinWidth" Value="416"/>
<Setter Target="BitwiseGrid.MinHeight" Value="144"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Small">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="{StaticResource AppMinWindowHeight}" MinWindowWidth="{StaticResource AppMinWindowWidth}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle18}"/>
<Setter Target="AButton.Style" Value="{StaticResource NumericButtonStyle14}"/>
<Setter Target="BButton.Style" Value="{StaticResource NumericButtonStyle14}"/>
<Setter Target="CButton.Style" Value="{StaticResource NumericButtonStyle14}"/>
<Setter Target="DButton.Style" Value="{StaticResource NumericButtonStyle14}"/>
<Setter Target="EButton.Style" Value="{StaticResource NumericButtonStyle14}"/>
<Setter Target="FButton.Style" Value="{StaticResource NumericButtonStyle14}"/>
<Setter Target="ModButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="OpenParenthesisButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="CloseParenthesisButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="AButton.FontSize" Value="{StaticResource TitleFontSize}"/>
<Setter Target="BButton.FontSize" Value="{StaticResource TitleFontSize}"/>
<Setter Target="CButton.FontSize" Value="{StaticResource TitleFontSize}"/>
<Setter Target="DButton.FontSize" Value="{StaticResource TitleFontSize}"/>
<Setter Target="EButton.FontSize" Value="{StaticResource TitleFontSize}"/>
<Setter Target="FButton.FontSize" Value="{StaticResource TitleFontSize}"/>
<Setter Target="AndButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="OrButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="XorButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="NandButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="NorButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="RolButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="RorButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="RolCarryButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="RorCarryButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="LshButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="RshButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="LshLogicalButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="RshLogicalButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="NotButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle24}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="FullLayout">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="768" MinWindowWidth="1024"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle24}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="MinSizeLayout">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="{StaticResource AppMinWindowHeight}" MinWindowWidth="{StaticResource AppMinWindowWidth}"/>
</VisualState.StateTriggers>
</VisualState>
<VisualState x:Name="DefaultLayout">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="0" MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="OpenParenthesisButton.FontSize" Value="12"/>
<Setter Target="OpenParenthesisButton.Padding" Value="0"/>
<Setter Target="CloseParenthesisButton.FontSize" Value="12"/>
<Setter Target="CloseParenthesisButton.Padding" Value="0"/>
<Setter Target="OperatorPanelRow.MinHeight" Value="{StaticResource OperatorPanelButtonRowSizeSmall}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle12}"/>
<Setter Target="AButton.Style" Value="{StaticResource NumericButtonStyle12}"/>
<Setter Target="BButton.Style" Value="{StaticResource NumericButtonStyle12}"/>
<Setter Target="CButton.Style" Value="{StaticResource NumericButtonStyle12}"/>
<Setter Target="DButton.Style" Value="{StaticResource NumericButtonStyle12}"/>
<Setter Target="EButton.Style" Value="{StaticResource NumericButtonStyle12}"/>
<Setter Target="FButton.Style" Value="{StaticResource NumericButtonStyle12}"/>
<Setter Target="BitwiseButton.ChevronFontSize" Value="{ThemeResource OperatorPanelChevronFontSizeSmall}"/>
<Setter Target="BitwiseButton.GlyphFontSize" Value="{ThemeResource OperatorPanelGlyphFontSizeSmall}"/>
<Setter Target="BitwiseButton.FontSize" Value="{ThemeResource OperatorPanelFontSizeSmall}"/>
<Setter Target="ShiftButton.Style" Value="{StaticResource CaptionToggleButtonSmallStyle}"/>
<Setter Target="BitShiftButton.ChevronFontSize" Value="{ThemeResource OperatorPanelChevronFontSizeSmall}"/>
<Setter Target="BitShiftButton.GlyphFontSize" Value="{ThemeResource OperatorPanelGlyphFontSizeSmall}"/>
<Setter Target="BitShiftButton.FontSize" Value="{ThemeResource OperatorPanelFontSizeSmall}"/>
<Setter Target="BitwiseGrid.MinWidth" Value="194"/>
<Setter Target="BitwiseGrid.MinHeight" Value="96"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<controls:OperatorPanelListView x:Uid="ProgrammerOperatorPanel"
Grid.ColumnSpan="6"
Background="{ThemeResource AppOperatorPanelBackground}"
AutomationProperties.HeadingLevel="Level1">
<controls:OperatorPanelButton x:Name="BitwiseButton"
x:Uid="bitwiseButton"
Style="{StaticResource OperatorPanelButtonStyle}"
AutomationProperties.AutomationId="bitwiseButton"
Glyph="&#xF895;">
<controls:OperatorPanelButton.FlyoutMenu>
<Flyout x:Name="BitwiseFlyout"
Windows10version1803:Placement="Bottom"
Windows10version1809:AreOpenCloseAnimationsEnabled="False"
Windows10version1809:Placement="BottomEdgeAlignedLeft"
FlyoutPresenterStyle="{ThemeResource OperatorPanelFlyoutStyle}">
<Grid x:Name="BitwiseGrid"
MinWidth="258"
MinHeight="96"
XYFocusKeyboardNavigation="Enabled">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<!--
Because of the way we handle keyboard shortcuts, the IsEnabled property must be bound to a button outside the flyout.
This is because the content from within the Flyout do not inherit the IsEnabled property of the flyout parent,
causing the shortcut keys to be used when the control would normally be disabled.
-->
<controls:CalculatorButton x:Name="AndButton"
x:Uid="andButton"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="andButton"
ButtonId="And"
Click="FlyoutButton_Clicked"
Command="{x:Bind Model.ButtonPressed}"
Content="AND"
IsEnabled="{x:Bind BitwiseButton.IsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="OrButton"
x:Uid="orButton"
Grid.Column="1"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="orButton"
ButtonId="Or"
Click="FlyoutButton_Clicked"
Command="{x:Bind Model.ButtonPressed}"
Content="OR"
IsEnabled="{x:Bind BitwiseButton.IsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="NotButton"
x:Uid="notButton"
Grid.Column="2"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="notButton"
ButtonId="Not"
Click="FlyoutButton_Clicked"
Command="{x:Bind Model.ButtonPressed}"
Content="NOT"
IsEnabled="{x:Bind BitwiseButton.IsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="XorButton"
x:Uid="xorButton"
Grid.Row="1"
Grid.Column="2"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="xorButton"
ButtonId="Xor"
Click="FlyoutButton_Clicked"
Command="{x:Bind Model.ButtonPressed}"
Content="XOR"
IsEnabled="{x:Bind BitwiseButton.IsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="NandButton"
x:Uid="nandButton"
Grid.Row="1"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="nandButton"
ButtonId="Nand"
Click="FlyoutButton_Clicked"
Command="{x:Bind Model.ButtonPressed}"
Content="NAND"
IsEnabled="{x:Bind BitwiseButton.IsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="NorButton"
x:Uid="norButton"
Grid.Row="1"
Grid.Column="1"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="norButton"
ButtonId="Nor"
Click="FlyoutButton_Clicked"
Command="{x:Bind Model.ButtonPressed}"
Content="NOR"
IsEnabled="{x:Bind BitwiseButton.IsEnabled, Mode=OneWay}"/>
</Grid>
</Flyout>
</controls:OperatorPanelButton.FlyoutMenu>
</controls:OperatorPanelButton>
<controls:OperatorPanelButton x:Name="BitShiftButton"
x:Uid="bitShiftButton"
Style="{StaticResource OperatorPanelButtonStyle}"
AutomationProperties.AutomationId="bitShiftButton"
Glyph="&#xE301;">
<controls:OperatorPanelButton.FlyoutMenu>
<Flyout x:Name="BitShiftFlyout"
Windows10version1809:AreOpenCloseAnimationsEnabled="False"
FlyoutPresenterStyle="{ThemeResource OperatorPanelFlyoutStyle}"
Placement="Bottom">
<StackPanel MaxWidth="192" Padding="12">
<RadioButton x:Name="ArithmeticShiftButton"
x:Uid="arithmeticShiftButton"
AutomationProperties.AutomationId="arithmeticShiftButton"
Checked="BitshiftFlyout_Checked"
IsChecked="True"/>
<RadioButton x:Name="LogicalShiftButton"
x:Uid="logicalShiftButton"
AutomationProperties.AutomationId="logicalShiftButton"
Checked="BitshiftFlyout_Checked"/>
<RadioButton x:Name="RotateCircularButton"
x:Uid="rotateCircularButton"
AutomationProperties.AutomationId="rotateCircularButton"
Checked="BitshiftFlyout_Checked"/>
<RadioButton x:Name="RotateCarryShiftButton"
x:Uid="rotateCarryShiftButton"
AutomationProperties.AutomationId="rotateCarryShiftButton"
Checked="BitshiftFlyout_Checked"/>
</StackPanel>
</Flyout>
</controls:OperatorPanelButton.FlyoutMenu>
</controls:OperatorPanelButton>
</controls:OperatorPanelListView>
<Grid x:Uid="ProgrammerOperators"
Grid.Column="1"
Grid.ColumnSpan="6"
Grid.Row="1"
Grid.Column="2"
Grid.ColumnSpan="2"
AutomationProperties.HeadingLevel="Level1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<controls:CalculatorButton x:Name="RolButton"
x:Uid="rolButton"
Grid.Column="0"
Style="{StaticResource OperatorButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
x:DeferLoadStrategy="Lazy"
AutomationProperties.AutomationId="rolButton"
ButtonId="Rol"
Content="RoL"
Content="&#xF88E;"
Visibility="Collapsed"/>
<controls:CalculatorButton x:Name="RorButton"
x:Uid="rorButton"
Grid.Column="1"
Style="{StaticResource OperatorButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
x:DeferLoadStrategy="Lazy"
AutomationProperties.AutomationId="rorButton"
ButtonId="Ror"
Content="RoR"
Content="&#xF88F;"
Visibility="Collapsed"/>
<controls:CalculatorButton x:Name="RolCarryButton"
x:Uid="rolCarryButton"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
x:DeferLoadStrategy="Lazy"
AutomationProperties.AutomationId="rolButton"
ButtonId="RolC"
Content="&#xF88E;"
Visibility="Collapsed"/>
<controls:CalculatorButton x:Name="RorCarryButton"
x:Uid="rorCarryButton"
Grid.Column="1"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
x:DeferLoadStrategy="Lazy"
AutomationProperties.AutomationId="rorCarryButton"
ButtonId="RorC"
Content="&#xF88F;"
Visibility="Collapsed"/>
<controls:CalculatorButton x:Name="LshButton"
x:Uid="lshButton"
Grid.Column="0"
Style="{StaticResource OperatorButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="lshButton"
ButtonId="Lsh"
Content="Lsh"/>
Content="&#xF88E;"/>
<controls:CalculatorButton x:Name="RshButton"
x:Uid="rshButton"
Grid.Column="1"
Style="{StaticResource OperatorButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="rshButton"
ButtonId="Rsh"
Content="Rsh"/>
<controls:CalculatorButton x:Name="OrButton"
x:Uid="orButton"
Grid.Column="2"
Style="{StaticResource OperatorButtonStyle}"
Content="&#xF88F;"/>
<controls:CalculatorButton x:Name="LshLogicalButton"
x:Uid="LshLogicalButton"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="orButton"
ButtonId="Or"
Content="Or"/>
<controls:CalculatorButton x:Name="XorButton"
x:Uid="xorButton"
Grid.Column="3"
Style="{StaticResource OperatorButtonStyle}"
x:DeferLoadStrategy="Lazy"
AutomationProperties.AutomationId="lshLogicalButton"
ButtonId="Lsh"
Content="&#xF88E;"
Visibility="Collapsed"/>
<controls:CalculatorButton x:Name="RshLogicalButton"
x:Uid="rshLogicalButton"
Grid.Column="1"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="xorButton"
ButtonId="Xor"
Content="Xor"/>
<controls:CalculatorButton x:Name="NotButton"
x:Uid="notButton"
Grid.Column="4"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="notButton"
ButtonId="Not"
Content="Not"/>
<controls:CalculatorButton x:Name="AndButton"
x:Uid="andButton"
Grid.Column="5"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="andButton"
ButtonId="And"
Content="And"/>
x:DeferLoadStrategy="Lazy"
AutomationProperties.AutomationId="rshLogicalButton"
ButtonId="RshL"
Content="&#xF88F;"
Visibility="Collapsed"/>
</Grid>
<ToggleButton x:Name="ShiftButton"
x:Uid="shiftButton"
Grid.Row="1"
Grid.Column="1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Style="{StaticResource CaptionToggleButtonStyle}"
FontFamily="{StaticResource CalculatorFontFamily}"
FontSize="16"
AutomationProperties.AutomationId="shiftButton"
Checked="Shift_Clicked"
Content="&#xF897;"
Unchecked="Shift_Clicked"/>
<Grid x:Uid="DisplayControls"
Grid.Row="1"
Grid.Column="4"
Grid.ColumnSpan="2"
AutomationProperties.HeadingLevel="Level1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<controls:CalculatorButton x:Name="ClearButton"
x:Uid="clearButton"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="clearButton"
ButtonId="Clear"
Content="C"
Visibility="{x:Bind Model.IsInputEmpty, Mode=OneWay, Converter={StaticResource BooleanToVisibilityConverter}}"/>
<controls:CalculatorButton x:Name="ClearEntryButton"
x:Uid="clearEntryButton"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="clearEntryButton"
ButtonId="ClearEntry"
Content="CE"
Visibility="{x:Bind Model.IsInputEmpty, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}"/>
<controls:CalculatorButton x:Name="BackSpaceButton"
x:Uid="backSpaceButton"
Grid.Column="1"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="backSpaceButton"
ButtonId="Backspace"
Content="&#xE94F;"/>
</Grid>
<controls:CalculatorButton x:Name="OpenParenthesisButton"
x:Uid="openParenthesisButton"
Grid.Row="2"
Grid.Column="2"
Style="{StaticResource ParenthesisCalcButtonStyle}"
FontSize="18"
AutomationProperties.AutomationId="openParenthesisButton"
ButtonId="OpenParenthesis"
Content="("
GotFocus="OpenParenthesisButton_GotFocus"
Tag="{x:Bind ParenthesisCountToString(Model.OpenParenthesisCount), Mode=OneWay}"/>
<controls:CalculatorButton x:Name="CloseParenthesisButton"
x:Uid="closeParenthesisButton"
Grid.Row="2"
Grid.Column="3"
Style="{StaticResource OperatorButtonStyle}"
FontSize="18"
AutomationProperties.AutomationId="closeParenthesisButton"
ButtonId="CloseParenthesis"
Content=")"/>
<controls:CalculatorButton x:Name="ModButton"
x:Uid="modButton"
Grid.Row="1"
Grid.Column="2"
Grid.Row="2"
Grid.Column="4"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="modButton"
ButtonId="Mod"
Content="Mod"/>
Content="%"/>
<Grid x:Uid="StandardOperators"
Grid.Row="1"
Grid.Row="2"
Grid.RowSpan="5"
Grid.Column="6"
Grid.Column="5"
AutomationProperties.HeadingLevel="Level1">
<Grid.RowDefinitions>
<RowDefinition/>
@@ -243,86 +558,52 @@
<controls:CalculatorButton x:Name="DivideButton"
x:Uid="divideButton"
Grid.Row="0"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="divideButton"
ButtonId="Divide"
Content="&#xE94A;"/>
<controls:CalculatorButton x:Name="MultiplyButton"
x:Uid="multiplyButton"
Grid.Row="1"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="multiplyButton"
ButtonId="Multiply"
Content="&#xE947;"/>
<controls:CalculatorButton x:Name="MinusButton"
x:Uid="minusButton"
Grid.Row="2"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="minusButton"
ButtonId="Subtract"
Content="&#xE949;"/>
<controls:CalculatorButton x:Name="PlusButton"
x:Uid="plusButton"
Grid.Row="3"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="plusButton"
ButtonId="Add"
Content="&#xE948;"/>
<controls:CalculatorButton x:Name="EqualButton"
x:Uid="equalButton"
Grid.Row="4"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource AccentEmphasizedCalcButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="equalButton"
ButtonId="Equals"
Content="&#xE94E;"/>
</Grid>
<Grid x:Uid="DisplayControls"
Grid.Row="1"
Grid.Column="3"
Grid.ColumnSpan="3"
AutomationProperties.HeadingLevel="Level1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<controls:CalculatorButton x:Name="ClearEntryButton"
x:Uid="clearEntryButton"
Grid.Column="0"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
FontWeight="SemiBold"
AutomationProperties.AutomationId="clearEntryButton"
ButtonId="ClearEntry"
Content="CE"/>
<controls:CalculatorButton x:Name="ClearButton"
x:Uid="clearButton"
Grid.Column="1"
Style="{StaticResource OperatorButtonStyle}"
FontSize="12"
FontWeight="SemiBold"
AutomationProperties.AutomationId="clearButton"
ButtonId="Clear"
Content="C"/>
<controls:CalculatorButton x:Name="BackSpaceButton"
x:Uid="backSpaceButton"
Grid.Column="2"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="12"
AutomationProperties.AutomationId="backSpaceButton"
ButtonId="Backspace"
Content="&#xE94F;"/>
</Grid>
<Grid x:Uid="NumberPad"
Grid.Row="2"
Grid.RowSpan="4"
Grid.Row="1"
Grid.RowSpan="6"
Grid.Column="1"
Grid.ColumnSpan="5"
AutomationProperties.AutomationId="NumberPad"
@@ -332,6 +613,8 @@
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
@@ -340,12 +623,6 @@
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<local:NumberPad x:Name="NumberPad"
Grid.RowSpan="4"
Grid.Column="2"
Grid.ColumnSpan="3"
ButtonStyle="{StaticResource NumericButtonStyle18}"/>
<controls:CalculatorButton x:Name="AButton"
x:Uid="aButton"
Grid.Row="0"
@@ -355,79 +632,73 @@
ButtonId="A"
Content="A"
IsEnabled="{x:Bind Model.AreHEXButtonsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="BButton"
x:Uid="bButton"
Grid.Row="0"
Grid.Column="1"
Grid.Row="1"
Grid.Column="0"
Style="{StaticResource NumericButtonStyle12}"
AutomationProperties.AutomationId="bButton"
ButtonId="B"
Content="B"
IsEnabled="{x:Bind Model.AreHEXButtonsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="CButton"
x:Uid="cButton"
Grid.Row="1"
Grid.Row="2"
Grid.Column="0"
Style="{StaticResource NumericButtonStyle12}"
AutomationProperties.AutomationId="cButton"
ButtonId="C"
Content="C"
IsEnabled="{x:Bind Model.AreHEXButtonsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="DButton"
x:Uid="dButton"
Grid.Row="1"
Grid.Column="1"
Grid.Row="3"
Grid.Column="0"
Style="{StaticResource NumericButtonStyle12}"
AutomationProperties.AutomationId="dButton"
ButtonId="D"
Content="D"
IsEnabled="{x:Bind Model.AreHEXButtonsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="EButton"
x:Uid="eButton"
Grid.Row="2"
Grid.Row="4"
Grid.Column="0"
Style="{StaticResource NumericButtonStyle12}"
AutomationProperties.AutomationId="eButton"
ButtonId="E"
Content="E"
IsEnabled="{x:Bind Model.AreHEXButtonsEnabled, Mode=OneWay}"/>
<controls:CalculatorButton x:Name="FButton"
x:Uid="fButton"
Grid.Row="2"
Grid.Column="1"
Grid.Row="5"
Grid.Column="0"
Style="{StaticResource NumericButtonStyle12}"
AutomationProperties.AutomationId="fButton"
ButtonId="F"
Content="F"
IsEnabled="{x:Bind Model.AreHEXButtonsEnabled, Mode=OneWay}"/>
<local:NumberPad x:Name="NumberPad"
Grid.Row="2"
Grid.RowSpan="4"
Grid.Column="1"
Grid.ColumnSpan="3"
ButtonStyle="{StaticResource NumericButtonStyle18}"
CurrentRadixType="{x:Bind Model.CurrentRadixType, Mode=OneWay}"/>
</Grid>
<controls:CalculatorButton x:Name="OpenParenthesisButton"
x:Uid="openParenthesisButton"
Grid.Row="5"
Grid.Column="1"
Style="{StaticResource ParenthesisCalcButtonStyle}"
FontSize="18"
AutomationProperties.AutomationId="openParenthesisButton"
ButtonId="OpenParenthesis"
Content="("
GotFocus="OpenParenthesisButton_GotFocus"
Tag="{x:Bind ParenthesisCountToString(Model.OpenParenthesisCount), Mode=OneWay}"/>
<controls:CalculatorButton x:Name="CloseParenthesisButton"
x:Uid="closeParenthesisButton"
Grid.Row="5"
Grid.Column="2"
Style="{StaticResource OperatorButtonStyle}"
FontSize="18"
AutomationProperties.AutomationId="closeParenthesisButton"
ButtonId="CloseParenthesis"
Content=")"/>
<controls:CalculatorButton x:Name="NegateButton"
x:Uid="negateButton"
Grid.Row="5"
Grid.Column="3"
Style="{StaticResource SymbolOperatorButtonStyle}"
Grid.Row="6"
Grid.Column="2"
Style="{StaticResource SymbolOperatorKeypadButtonStyle}"
FontSize="12"
FontWeight="Normal"
AutomationProperties.AutomationId="negateButton"
ButtonId="Negate"
Content="&#xF898;"/>

View File

@@ -29,47 +29,92 @@ CalculatorProgrammerRadixOperators::CalculatorProgrammerRadixOperators()
InitializeComponent();
}
void CalculatorProgrammerRadixOperators::OnLoaded(Object ^, RoutedEventArgs ^)
void CalculatorProgrammerRadixOperators::FlyoutButton_Clicked(_In_ Platform::Object ^ /*sender*/, _In_ Windows::UI::Xaml::RoutedEventArgs ^ /*e*/)
{
m_progModeRadixChangeToken = Model->ProgModeRadixChange +=
ref new ProgModeRadixChangeHandler(this, &CalculatorProgrammerRadixOperators::ProgModeRadixChange);
}
void CalculatorProgrammerRadixOperators::OnUnloaded(Object ^, RoutedEventArgs ^)
{
Model->ProgModeRadixChange -= m_progModeRadixChangeToken;
this->BitwiseFlyout->Hide();
}
void CalculatorProgrammerRadixOperators::Shift_Clicked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e)
void CalculatorProgrammerRadixOperators::checkDefaultBitShift()
{
bool isShiftChecked = static_cast<ToggleButton ^>(sender)->IsChecked->Value;
auto scvm = safe_cast<StandardCalculatorViewModel ^>(this->DataContext);
scvm->IsShiftProgrammerChecked = isShiftChecked;
this->ArithmeticShiftButton->IsChecked = true;
}
void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e)
{
// Load deferred load buttons
if (RolButton == nullptr)
{
FindName("RolButton");
FindName("RorButton");
FindName("RolCarryButton");
FindName("RorCarryButton");
FindName("LshLogicalButton");
FindName("RshLogicalButton");
}
if (isShiftChecked)
// Since arithmeticShiftButton defaults to IsChecked = true, this event an fire before we can load the deferred loaded controls. If that is the case, just return and do nothing.
if (RolButton == nullptr || RorButton == nullptr || RolCarryButton == nullptr || RorCarryButton == nullptr || LshLogicalButton == nullptr
|| RshLogicalButton == nullptr)
{
return;
}
CollapseBitshiftButtons();
auto radioButton = static_cast<RadioButton^>(sender);
if (radioButton == ArithmeticShiftButton)
{
LshButton->Visibility = ::Visibility::Visible;
RshButton->Visibility = ::Visibility::Visible;
LshButton->IsEnabled = true;
RshButton->IsEnabled = true;
}
else if (radioButton == LogicalShiftButton)
{
LshLogicalButton->Visibility = ::Visibility::Visible;
RshLogicalButton->Visibility = ::Visibility::Visible;
LshLogicalButton->IsEnabled = true;
RshLogicalButton->IsEnabled = true;
}
else if (radioButton == RotateCircularButton)
{
RolButton->Visibility = ::Visibility::Visible;
RorButton->Visibility = ::Visibility::Visible;
LshButton->Visibility = ::Visibility::Collapsed;
RshButton->Visibility = ::Visibility::Collapsed;
RolButton->IsEnabled = true;
RorButton->IsEnabled = true;
}
else
else if (radioButton == RotateCarryShiftButton)
{
RolButton->Visibility = ::Visibility::Collapsed;
RorButton->Visibility = ::Visibility::Collapsed;
LshButton->Visibility = ::Visibility::Visible;
RshButton->Visibility = ::Visibility::Visible;
RolCarryButton->Visibility = ::Visibility::Visible;
RorCarryButton->Visibility = ::Visibility::Visible;
RolCarryButton->IsEnabled = true;
RorCarryButton->IsEnabled = true;
}
this->BitShiftFlyout->Hide();
}
void CalculatorProgrammerRadixOperators::ProgModeRadixChange()
void CalculatorProgrammerRadixOperators::CollapseBitshiftButtons()
{
NumberPad->ProgModeRadixChange();
RolButton->Visibility = ::Visibility::Collapsed;
RorButton->Visibility = ::Visibility::Collapsed;
RolCarryButton->Visibility = ::Visibility::Collapsed;
RorCarryButton->Visibility = ::Visibility::Collapsed;
LshButton->Visibility = ::Visibility::Collapsed;
RshButton->Visibility = ::Visibility::Collapsed;
LshLogicalButton->Visibility = ::Visibility::Collapsed;
RshLogicalButton->Visibility = ::Visibility::Collapsed;
// We need to set the collapsed buttons to disabled so that the KeyboardShortcutManager can skip the keybinds for the disabled buttons
RolButton->IsEnabled = false;
RorButton->IsEnabled = false;
RolCarryButton->IsEnabled = false;
RorCarryButton->IsEnabled = false;
LshButton->IsEnabled = false;
RshButton->IsEnabled = false;
LshLogicalButton->IsEnabled = false;
RshLogicalButton->IsEnabled = false;
}
bool CalculatorProgrammerRadixOperators::IsErrorVisualState::get()

View File

@@ -30,14 +30,14 @@ namespace CalculatorApp
DEPENDENCY_PROPERTY_OWNER(CalculatorProgrammerRadixOperators);
void checkDefaultBitShift();
private:
void Shift_Clicked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void OnLoaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void OnUnloaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void ProgModeRadixChange();
void BitshiftFlyout_Checked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void FlyoutButton_Clicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void CollapseBitshiftButtons();
bool m_isErrorVisualState;
Windows::Foundation::EventRegistrationToken m_progModeRadixChangeToken;
void OpenParenthesisButton_GotFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
};
}

View File

@@ -47,8 +47,6 @@
<Setter Target="DegreeButton.Style" Value="{StaticResource CaptionButtonSmallStyle}"/>
<Setter Target="RadianButton.Style" Value="{StaticResource CaptionButtonSmallStyle}"/>
<Setter Target="GradsButton.Style" Value="{StaticResource CaptionButtonSmallStyle}"/>
<Setter Target="HyperbolicButton.Style" Value="{StaticResource CaptionToggleButtonSmallStyle}"/>
<Setter Target="FtoeButton.Style" Value="{StaticResource CaptionToggleButtonSmallStyle}"/>
</VisualState.Setters>
</VisualState>
@@ -60,7 +58,6 @@
<Setter Target="DegreeButton.IsEnabled" Value="False"/>
<Setter Target="RadianButton.IsEnabled" Value="False"/>
<Setter Target="GradsButton.IsEnabled" Value="False"/>
<Setter Target="HyperbolicButton.IsEnabled" Value="False"/>
<Setter Target="FtoeButton.IsEnabled" Value="False"/>
</VisualState.Setters>
</VisualState>
@@ -89,20 +86,9 @@
CommandParameter="2"
Content="GRAD"
Visibility="Collapsed"/>
<ToggleButton x:Name="HyperbolicButton"
x:Uid="hyperbolicButton"
Grid.Column="1"
Style="{StaticResource CaptionToggleButtonStyle}"
Background="{ThemeResource SystemControlBackgroundTransparentBrush}"
FontWeight="SemiBold"
AutomationProperties.AutomationId="hyperbolicButton"
Checked="HypButton_Toggled"
Content="HYP"
IsChecked="{Binding IsHyperbolicChecked, Mode=TwoWay}"
Unchecked="HypButton_Toggled"/>
<ToggleButton x:Name="FtoeButton"
x:Uid="ftoeButton"
Grid.Column="2"
Grid.Column="1"
Style="{StaticResource CaptionToggleButtonStyle}"
Background="{ThemeResource SystemControlBackgroundTransparentBrush}"
FontWeight="SemiBold"

View File

@@ -35,10 +35,6 @@ CalculatorScientificAngleButtons::CalculatorScientificAngleButtons()
InitializeComponent();
}
void CalculatorScientificAngleButtons::HypButton_Toggled(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
{
}
void CalculatorScientificAngleButtons::FToEButton_Toggled(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
{
auto viewModel = safe_cast<StandardCalculatorViewModel ^>(this->DataContext);

View File

@@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
@@ -35,7 +35,6 @@ namespace CalculatorApp
private:
void OnAngleButtonPressed(_In_ Platform::Object ^ commandParameter);
void FToEButton_Toggled(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void HypButton_Toggled(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
bool m_isErrorVisualState;
};

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,7 @@
#include "pch.h"
#include "CalculatorScientificOperators.xaml.h"
#include "CalcViewModel/Common/KeyboardShortcutManager.h"
#include "CalcViewModel/Common/TraceLogger.h"
#include "Controls/CalculatorButton.h"
#include "CalcViewModel/StandardCalculatorViewModel.h"
@@ -20,6 +21,8 @@ using namespace std;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Core;
using namespace Windows::UI::ViewManagement;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
@@ -27,30 +30,15 @@ using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace Windows::UI::Core;
DEPENDENCY_PROPERTY_INITIALIZATION(CalculatorScientificOperators, IsErrorVisualState);
DEPENDENCY_PROPERTY_INITIALIZATION(CalculatorScientificOperators, IsWideLayout);
CalculatorScientificOperators::CalculatorScientificOperators()
{
InitializeComponent();
ExpButton->SetValue(Common::KeyboardShortcutManager::VirtualKeyProperty, Common::MyVirtualKey::E);
Common::KeyboardShortcutManager::ShiftButtonChecked(false);
}
void CalculatorScientificOperators::ShortLayout_Completed(_In_ Platform::Object ^ /*sender*/, _In_ Platform::Object ^ /*e*/)
{
IsWideLayout = false;
SetOperatorRowVisibility();
Common::KeyboardShortcutManager::ShiftButtonChecked(Model->IsShiftChecked);
}
void CalculatorScientificOperators::WideLayout_Completed(_In_ Platform::Object ^ /*sender*/, _In_ Platform::Object ^ /*e*/)
{
IsWideLayout = true;
SetOperatorRowVisibility();
Common::KeyboardShortcutManager::ShiftButtonChecked(Model->IsShiftChecked);
}
void CalculatorScientificOperators::OnIsErrorVisualStatePropertyChanged(bool /*oldValue*/, bool newValue)
@@ -60,31 +48,75 @@ void CalculatorScientificOperators::OnIsErrorVisualStatePropertyChanged(bool /*o
NumberPad->IsErrorVisualState = newValue;
}
void CalculatorScientificOperators::shiftButton_Check(_In_ Platform::Object ^ /*sender*/, _In_ Windows::UI::Xaml::RoutedEventArgs ^ /*e*/)
void CalculatorScientificOperators::ShiftButton_Check(_In_ Platform::Object ^ /*sender*/, _In_ Windows::UI::Xaml::RoutedEventArgs ^ /*e*/)
{
bool isChecked = ShiftButton->IsChecked->Value;
Model->IsShiftChecked = isChecked;
Common::KeyboardShortcutManager::ShiftButtonChecked(isChecked);
SetOperatorRowVisibility();
}
void CalculatorScientificOperators::shiftButton_IsEnabledChanged(
void CalculatorScientificOperators::ShiftButton_Uncheck(_In_ Platform::Object ^ /*sender*/, _In_ Windows::UI::Xaml::RoutedEventArgs ^ /*e*/)
{
ShiftButton->IsChecked = false;
SetOperatorRowVisibility();
ShiftButton->Focus(::FocusState::Programmatic);
}
void CalculatorScientificOperators::TrigFlyoutShift_Toggle(_In_ Platform::Object ^ /*sender*/, _In_ Windows::UI::Xaml::RoutedEventArgs ^ /*e*/)
{
SetTrigRowVisibility();
}
void CalculatorScientificOperators::TrigFlyoutHyp_Toggle(_In_ Platform::Object ^ /*sender*/, _In_ Windows::UI::Xaml::RoutedEventArgs ^ /*e*/)
{
SetTrigRowVisibility();
}
void CalculatorScientificOperators::FlyoutButton_Clicked(_In_ Platform::Object ^ /*sender*/, _In_ Windows::UI::Xaml::RoutedEventArgs ^ /*e*/)
{
this->HypButton->IsChecked = false;
this->TrigShiftButton->IsChecked = false;
this->Trigflyout->Hide();
this->FuncFlyout->Hide();
}
void CalculatorScientificOperators::ShiftButton_IsEnabledChanged(
_In_ Platform::Object ^ /*sender*/,
_In_ Windows::UI::Xaml::DependencyPropertyChangedEventArgs ^ /*e*/)
{
SetOperatorRowVisibility();
Common::KeyboardShortcutManager::ShiftButtonChecked(ShiftButton->IsEnabled && ShiftButton->IsChecked->Value);
}
void CalculatorScientificOperators::SetTrigRowVisibility()
{
bool isShiftChecked = TrigShiftButton->IsChecked->Value;
bool isHypeChecked = HypButton->IsChecked->Value;
InverseHyperbolicTrigFunctions->Visibility = ::Visibility::Collapsed;
InverseTrigFunctions->Visibility = ::Visibility::Collapsed;
HyperbolicTrigFunctions->Visibility = ::Visibility::Collapsed;
TrigFunctions->Visibility = ::Visibility::Collapsed;
if (isShiftChecked && isHypeChecked)
{
InverseHyperbolicTrigFunctions->Visibility = ::Visibility::Visible;
}
else if (isShiftChecked && !isHypeChecked)
{
InverseTrigFunctions->Visibility = ::Visibility::Visible;
}
else if (!isShiftChecked && isHypeChecked)
{
HyperbolicTrigFunctions->Visibility = ::Visibility::Visible;
}
else
{
TrigFunctions->Visibility = ::Visibility::Visible;
}
}
void CalculatorScientificOperators::SetOperatorRowVisibility()
{
::Visibility rowVis, invRowVis;
if (IsWideLayout)
{
rowVis = ::Visibility::Visible;
invRowVis = ::Visibility::Visible;
}
else if (ShiftButton->IsChecked->Value)
if (ShiftButton->IsChecked->Value)
{
rowVis = ::Visibility::Collapsed;
invRowVis = ::Visibility::Visible;
@@ -96,9 +128,7 @@ void CalculatorScientificOperators::SetOperatorRowVisibility()
}
Row1->Visibility = rowVis;
Row2->Visibility = rowVis;
InvRow1->Visibility = invRowVis;
InvRow2->Visibility = invRowVis;
}
void CalculatorScientificOperators::OpenParenthesisButton_GotFocus(Object ^ sender, RoutedEventArgs ^ e)

View File

@@ -29,21 +29,19 @@ namespace CalculatorApp
DEPENDENCY_PROPERTY_OWNER(CalculatorScientificOperators);
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(bool, IsErrorVisualState, false);
DEPENDENCY_PROPERTY_WITH_DEFAULT(bool, IsWideLayout, false);
bool IsShiftEnabled(bool isWideLayout, bool isErrorState)
{
return !(isWideLayout || isErrorState);
}
void OpenParenthesisButton_GotFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
Platform::String ^ ParenthesisCountToString(unsigned int count);
private:
void ShortLayout_Completed(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
void WideLayout_Completed(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
void OnIsErrorVisualStatePropertyChanged(bool oldValue, bool newValue);
void shiftButton_Check(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void shiftButton_IsEnabledChanged(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::DependencyPropertyChangedEventArgs ^ e);
void ShiftButton_Check(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void ShiftButton_Uncheck(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void TrigFlyoutShift_Toggle(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void TrigFlyoutHyp_Toggle(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void FlyoutButton_Clicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void ShiftButton_IsEnabledChanged(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::DependencyPropertyChangedEventArgs ^ e);
void SetOperatorRowVisibility();
void SetTrigRowVisibility();
};
}

View File

@@ -6,7 +6,9 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CalculatorApp"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:triggers="using:CalculatorApp.Views.StateTriggers"
x:Name="ControlRoot"
XYFocusKeyboardNavigation="Enabled"
mc:Ignorable="d">
<Grid x:Name="Root">
@@ -36,7 +38,6 @@
<Setter Target="PercentButton.IsEnabled" Value="False"/>
<Setter Target="SquareRootButton.IsEnabled" Value="False"/>
<Setter Target="XPower2Button.IsEnabled" Value="False"/>
<Setter Target="XPower3Button.IsEnabled" Value="False"/>
<Setter Target="InvertButton.IsEnabled" Value="False"/>
<Setter Target="DivideButton.IsEnabled" Value="False"/>
<Setter Target="MultiplyButton.IsEnabled" Value="False"/>
@@ -47,37 +48,77 @@
</VisualState>
</VisualStateGroup>
<VisualStateGroup>
<VisualState x:Name="NormalFontSize">
<VisualState x:Name="Large">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="440" MinWindowWidth="0"/>
<triggers:ControlSizeTrigger MinWidth="780"
MinHeight="814"
Source="{x:Bind Root}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PercentButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="SquareRootButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="XPower2Button.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="InvertButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="NegateButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="ClearEntryButton.Style" Value="{StaticResource OperatorButtonStyle}"/>
<Setter Target="ClearButton.Style" Value="{StaticResource OperatorButtonStyle}"/>
<Setter Target="BackSpaceButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="DivideButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="MultiplyButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="MinusButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="PlusButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="EqualButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcButtonCaptionSize}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle38}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Medium">
<VisualState.StateTriggers>
<triggers:ControlSizeTrigger MinWidth="468"
MinHeight="500"
Source="{x:Bind Root}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle24}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="SmallFontSize">
<VisualState x:Name="Small">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="260" MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcOperatorCaptionSize}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle18}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="TinyFontSize">
<VisualState x:Name="Tiny">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="0" MinWindowWidth="0"/>
</VisualState.StateTriggers>
@@ -101,239 +142,81 @@
</VisualState>
</VisualStateGroup>
<VisualStateGroup>
<VisualState x:Name="Portrait768x1366">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="1366" MinWindowWidth="768"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="XPower3Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle46}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Landscape13InchLaptop">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="768" MinWindowWidth="1366"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="C0.Width" Value="1*"/>
<Setter Target="R0.Height" Value="0"/>
<Setter Target="StandardFunctions.(Grid.Row)" Value="1"/>
<Setter Target="StandardFunctions.(Grid.Column)" Value="1"/>
<Setter Target="StandardFunctions.(Grid.RowSpan)" Value="5"/>
<Setter Target="StandardFunctions.(Grid.ColumnSpan)" Value="1"/>
<Setter Target="FnR1.Height" Value="1*"/>
<Setter Target="FnR2.Height" Value="1*"/>
<Setter Target="FnR3.Height" Value="1*"/>
<Setter Target="FnR4.Height" Value="1*"/>
<Setter Target="FnC1.Width" Value="0"/>
<Setter Target="FnC2.Width" Value="0"/>
<Setter Target="FnC3.Width" Value="0"/>
<Setter Target="SquareRootButton.(Grid.Row)" Value="1"/>
<Setter Target="SquareRootButton.(Grid.Column)" Value="0"/>
<Setter Target="XPower2Button.(Grid.Row)" Value="2"/>
<Setter Target="XPower2Button.(Grid.Column)" Value="0"/>
<Setter Target="XPower3Button.Visibility" Value="Visible"/>
<Setter Target="InvertButton.(Grid.Row)" Value="4"/>
<Setter Target="InvertButton.(Grid.Column)" Value="0"/>
<Setter Target="NegateButton.(Grid.Row)" Value="5"/>
<Setter Target="NegateButton.(Grid.Column)" Value="2"/>
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle34}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Landscape8InchTab">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="640" MinWindowWidth="1024"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="C0.Width" Value="1*"/>
<Setter Target="R0.Height" Value="0"/>
<Setter Target="StandardFunctions.(Grid.Row)" Value="1"/>
<Setter Target="StandardFunctions.(Grid.Column)" Value="1"/>
<Setter Target="StandardFunctions.(Grid.RowSpan)" Value="5"/>
<Setter Target="StandardFunctions.(Grid.ColumnSpan)" Value="1"/>
<Setter Target="FnR1.Height" Value="1*"/>
<Setter Target="FnR2.Height" Value="1*"/>
<Setter Target="FnR3.Height" Value="1*"/>
<Setter Target="FnR4.Height" Value="1*"/>
<Setter Target="FnC1.Width" Value="0"/>
<Setter Target="FnC2.Width" Value="0"/>
<Setter Target="FnC3.Width" Value="0"/>
<Setter Target="SquareRootButton.(Grid.Row)" Value="1"/>
<Setter Target="SquareRootButton.(Grid.Column)" Value="0"/>
<Setter Target="XPower2Button.(Grid.Row)" Value="2"/>
<Setter Target="XPower2Button.(Grid.Column)" Value="0"/>
<Setter Target="XPower3Button.Visibility" Value="Visible"/>
<Setter Target="InvertButton.(Grid.Row)" Value="4"/>
<Setter Target="InvertButton.(Grid.Column)" Value="0"/>
<Setter Target="NegateButton.(Grid.Row)" Value="5"/>
<Setter Target="NegateButton.(Grid.Column)" Value="2"/>
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="XPower3Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle28}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Portrait8InchTab">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="1024" MinWindowWidth="640"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="XPower3Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle28}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Portrait6InchPhone">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="854" MinWindowWidth="480"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeLarge}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle34}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Portrait5InchPhone">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="640" MinWindowWidth="360"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSize}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle28}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="MinSizeLayout">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="{StaticResource AppMinWindowHeight}" MinWindowWidth="{StaticResource AppMinWindowWidth}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="PercentButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="SquareRootButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="XPower2Button.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="InvertButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="NegateButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="ClearEntryButton.Style" Value="{StaticResource OperatorButtonStyle}"/>
<Setter Target="ClearButton.Style" Value="{StaticResource OperatorButtonStyle}"/>
<Setter Target="BackSpaceButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="DivideButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="MultiplyButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="MinusButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="PlusButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="EqualButton.Style" Value="{StaticResource SymbolOperatorButtonStyle}"/>
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle24}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="ShowStandardFunctions">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="394" MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="R0.Height" Value="1*"/>
<Setter Target="R1.Height" Value="1*"/>
<Setter Target="StandardFunctions.Visibility" Value="Visible"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="DefaultLayout">
<VisualState x:Name="HideStandardFunctions">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowHeight="0" MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="R0.Height" Value="0*"/>
<Setter Target="R1.Height" Value="0*"/>
<Setter Target="StandardFunctions.Visibility" Value="Collapsed"/>
<Setter Target="PercentButton.Visibility" Value="Collapsed"/>
<Setter Target="PercentColumn.Width" Value="0"/>
<Setter Target="DisplayControls.Column" Value="1"/>
<Setter Target="DisplayControls.ColumnSpan" Value="4"/>
<Setter Target="StandardOperators.Row" Value="0"/>
<Setter Target="StandardOperators.RowSpan" Value="6"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid x:Name="DisplayControls"
x:Uid="DisplayControls"
Grid.Row="0"
Grid.Column="2"
Grid.ColumnSpan="4"
AutomationProperties.HeadingLevel="Level1">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="PercentColumn"/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<controls:CalculatorButton x:Name="PercentButton"
x:Uid="percentButton"
Grid.Column="0"
Style="{StaticResource SymbolOperatorButtonStyle}"
AutomationProperties.AutomationId="percentButton"
ButtonId="Percent"
Content="&#xE94C;"/>
<controls:CalculatorButton x:Name="ClearEntryButton"
x:Uid="clearEntryButton"
Grid.Column="1"
Style="{StaticResource OperatorButtonStyle}"
FontSize="16"
AutomationProperties.AutomationId="clearEntryButton"
ButtonId="ClearEntry"
Content="CE"/>
<controls:CalculatorButton x:Name="ClearButton"
x:Uid="clearButton"
Grid.Column="2"
Style="{StaticResource OperatorButtonStyle}"
FontSize="16"
AutomationProperties.AutomationId="clearButton"
ButtonId="Clear"
Content="C"/>
<controls:CalculatorButton x:Name="BackSpaceButton"
x:Uid="backSpaceButton"
Grid.Column="3"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="16"
AutomationProperties.AutomationId="backSpaceButton"
ButtonId="Backspace"
Content="&#xE94F;"/>
</Grid>
<Grid x:Name="StandardFunctions"
x:Uid="StandardFunctions"
Grid.Row="0"
Grid.Row="1"
Grid.Column="2"
Grid.ColumnSpan="4"
AutomationProperties.HeadingLevel="Level1">
@@ -350,45 +233,28 @@
<ColumnDefinition x:Name="FnC2" Width="1*"/>
<ColumnDefinition x:Name="FnC3" Width="1*"/>
</Grid.ColumnDefinitions>
<controls:CalculatorButton x:Name="PercentButton"
x:Uid="percentButton"
Grid.Column="0"
Style="{StaticResource SymbolOperatorButtonStyle}"
AutomationProperties.AutomationId="percentButton"
ButtonId="Percent"
Content="&#xE94C;"/>
<controls:CalculatorButton x:Name="SquareRootButton"
x:Uid="squareRootButton"
Grid.Column="1"
Style="{StaticResource SymbolOperatorButtonStyle}"
AutomationProperties.AutomationId="squareRootButton"
ButtonId="Sqrt"
Content="&#xF899;"/>
<controls:CalculatorButton x:Name="XPower2Button"
x:Uid="xpower2Button"
Grid.Column="2"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="18"
AutomationProperties.AutomationId="xpower2Button"
ButtonId="XPower2"
Content="&#xf7c8;"/>
<controls:CalculatorButton x:Name="XPower3Button"
x:Uid="xpower3Button"
Grid.Row="3"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="18"
AutomationProperties.AutomationId="xpower3Button"
ButtonId="Cube"
Content="&#xf7cb;"
Visibility="Collapsed"/>
<controls:CalculatorButton x:Name="InvertButton"
x:Uid="invertButton"
Grid.Column="3"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="18"
AutomationProperties.AutomationId="invertButton"
ButtonId="Invert"
Content="&#xf7c9;"/>
<controls:CalculatorButton x:Name="XPower2Button"
x:Uid="xpower2Button"
Grid.Column="1"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="18"
AutomationProperties.AutomationId="xpower2Button"
ButtonId="XPower2"
Content="&#xf7c8;"/>
<controls:CalculatorButton x:Name="SquareRootButton"
x:Uid="squareRootButton"
Grid.Column="2"
Style="{StaticResource SymbolOperatorButtonStyle}"
AutomationProperties.AutomationId="squareRootButton"
ButtonId="Sqrt"
Content="&#xF899;"/>
</Grid>
<Grid x:Name="StandardOperators"
@@ -407,77 +273,40 @@
<controls:CalculatorButton x:Name="DivideButton"
x:Uid="divideButton"
Grid.Row="0"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
AutomationProperties.AutomationId="divideButton"
ButtonId="Divide"
Content="&#xE94A;"/>
<controls:CalculatorButton x:Name="MultiplyButton"
x:Uid="multiplyButton"
Grid.Row="1"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
AutomationProperties.AutomationId="multiplyButton"
ButtonId="Multiply"
Content="&#xE947;"/>
<controls:CalculatorButton x:Name="MinusButton"
x:Uid="minusButton"
Grid.Row="2"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
AutomationProperties.AutomationId="minusButton"
ButtonId="Subtract"
Content="&#xE949;"/>
<controls:CalculatorButton x:Name="PlusButton"
x:Uid="plusButton"
Grid.Row="3"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource SymbolOperatorButtonStyle}"
AutomationProperties.AutomationId="plusButton"
ButtonId="Add"
Content="&#xE948;"/>
<controls:CalculatorButton x:Name="EqualButton"
x:Uid="equalButton"
Grid.Row="4"
Style="{StaticResource AccentCalcButtonStyle}"
Style="{StaticResource AccentEmphasizedCalcButtonStyle}"
AutomationProperties.AutomationId="equalButton"
ButtonId="Equals"
Content="&#xE94E;"/>
</Grid>
<Grid x:Name="DisplayControls"
x:Uid="DisplayControls"
Grid.Row="1"
Grid.Column="2"
Grid.ColumnSpan="3"
AutomationProperties.HeadingLevel="Level1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<controls:CalculatorButton x:Name="ClearEntryButton"
x:Uid="clearEntryButton"
Grid.Column="0"
Style="{StaticResource OperatorButtonStyle}"
FontSize="16"
AutomationProperties.AutomationId="clearEntryButton"
ButtonId="ClearEntry"
Content="CE"/>
<controls:CalculatorButton x:Name="ClearButton"
x:Uid="clearButton"
Grid.Column="1"
Style="{StaticResource OperatorButtonStyle}"
FontSize="16"
AutomationProperties.AutomationId="clearButton"
ButtonId="Clear"
Content="C"/>
<controls:CalculatorButton x:Name="BackSpaceButton"
x:Uid="backSpaceButton"
Grid.Column="2"
Style="{StaticResource SymbolOperatorButtonStyle}"
FontSize="16"
AutomationProperties.AutomationId="backSpaceButton"
ButtonId="Backspace"
Content="&#xE94F;"/>
</Grid>
<local:NumberPad x:Name="NumberPad"
x:Uid="NumberPad"
Grid.Row="2"
@@ -491,7 +320,8 @@
x:Uid="negateButton"
Grid.Row="5"
Grid.Column="2"
Style="{StaticResource SymbolOperatorButtonStyle}"
Style="{StaticResource SymbolOperatorKeypadButtonStyle}"
FontWeight="Normal"
AutomationProperties.AutomationId="negateButton"
ButtonId="Negate"
Content="&#xF898;"/>

View File

@@ -8,6 +8,7 @@
#include "pch.h"
#include "CalculatorStandardOperators.xaml.h"
#include "Controls/CalculatorButton.h"
using namespace CalculatorApp;

View File

@@ -92,7 +92,7 @@ DateCalculator::DateCalculator()
DateDiff_FromDate->PlaceholderText = placeholderText;
DateDiff_ToDate->PlaceholderText = placeholderText;
CopyMenuItem->Text = AppResourceProvider::GetInstance().GetResourceString(L"copyMenuItem");
CopyMenuItem->Text = AppResourceProvider::GetInstance()->GetResourceString(L"copyMenuItem");
m_dateCalcOptionChangedEventToken = DateCalculationOption->SelectionChanged +=
ref new SelectionChangedEventHandler(this, &DateCalculator::DateCalcOption_Changed);
}
@@ -103,7 +103,7 @@ void DateCalculator::FromDate_DateChanged(_In_ CalendarDatePicker ^ sender, _In_
{
auto dateCalcViewModel = safe_cast<DateCalculatorViewModel ^>(this->DataContext);
dateCalcViewModel->FromDate = e->NewDate->Value;
TraceLogger::GetInstance().LogDateCalculationModeUsed(false /* AddSubtractMode */);
TraceLogger::GetInstance()->LogDateCalculationModeUsed(false /* AddSubtractMode */);
}
else
{
@@ -117,7 +117,7 @@ void DateCalculator::ToDate_DateChanged(_In_ CalendarDatePicker ^ sender, _In_ C
{
auto dateCalcViewModel = safe_cast<DateCalculatorViewModel ^>(this->DataContext);
dateCalcViewModel->ToDate = e->NewDate->Value;
TraceLogger::GetInstance().LogDateCalculationModeUsed(false /* AddSubtractMode */);
TraceLogger::GetInstance()->LogDateCalculationModeUsed(false /* AddSubtractMode */);
}
else
{
@@ -131,7 +131,7 @@ void DateCalculator::AddSubtract_DateChanged(_In_ CalendarDatePicker ^ sender, _
{
auto dateCalcViewModel = safe_cast<DateCalculatorViewModel ^>(this->DataContext);
dateCalcViewModel->StartDate = e->NewDate->Value;
TraceLogger::GetInstance().LogDateCalculationModeUsed(true /* AddSubtractMode */);
TraceLogger::GetInstance()->LogDateCalculationModeUsed(true /* AddSubtractMode */);
}
else
{
@@ -145,7 +145,7 @@ void CalculatorApp::DateCalculator::OffsetValue_Changed(_In_ Platform::Object ^
// do not log diagnostics for no-ops and initialization of combo boxes
if (dateCalcViewModel->DaysOffset != 0 || dateCalcViewModel->MonthsOffset != 0 || dateCalcViewModel->YearsOffset != 0)
{
TraceLogger::GetInstance().LogDateCalculationModeUsed(true /* AddSubtractMode */);
TraceLogger::GetInstance()->LogDateCalculationModeUsed(true /* AddSubtractMode */);
}
}
@@ -237,6 +237,5 @@ void DateCalculator::AddSubtractOption_Checked(_In_ Object ^ sender, _In_ Routed
void CalculatorApp::DateCalculator::OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e)
{
auto state = std::wstring(e->NewState->Name->Begin());
TraceLogger::GetInstance().LogVisualStateChanged(ViewMode::Date, state);
TraceLogger::GetInstance()->LogVisualStateChanged(ViewMode::Date, e->NewState->Name, false);
}

View File

@@ -314,6 +314,15 @@
</Setter>
</Style>
<Style x:Key="AccentCalcButtonStyle"
BasedOn="{StaticResource SymbolOperatorButtonStyle}"
TargetType="controls:CalculatorButton">
<Setter Property="HoverBackground" Value="{ThemeResource AppControlHighlightAccentRevealBackgroundBrush}"/>
<Setter Property="HoverForeground" Value="{ThemeResource SystemControlHighlightAltAltHighBrush}"/>
<Setter Property="PressBackground" Value="{ThemeResource AppControlBackgroundListAccentHighRevealBackgroundBrush}"/>
<Setter Property="PressForeground" Value="{ThemeResource SystemControlHighlightAltAltHighBrush}"/>
</Style>
<converters:BooleanToVisibilityConverter x:Name="BooleanToVisibilityConverter"/>
<converters:BooleanToVisibilityNegationConverter x:Name="BooleanToVisibilityNegationConverter"/>
<ResourceDictionary.ThemeDictionaries>
@@ -700,10 +709,10 @@
<!-- Ideally the KeyGraphFeaturesPanel should be a frame so that navigation to and from the panel could be handled nicely -->
<local:KeyGraphFeaturesPanel x:Name="KeyGraphFeaturesControl"
Grid.RowSpan="2"
x:Load="{x:Bind IsKeyGraphFeaturesVisible, Mode=OneWay}"
KeyGraphFeaturesClosed="OnKeyGraphFeaturesClosed"
ViewModel="{x:Bind EquationInputAreaControl.EquationVM, Mode=OneWay}"
Visibility="{x:Bind IsKeyGraphFeaturesVisible, Mode=OneWay}"/>
Visibility="{x:Bind IsKeyGraphFeaturesVisible, Mode=OneWay}"
x:Load="{x:Bind IsKeyGraphFeaturesVisible, Mode=OneWay}"/>
<!-- This control should be within a grid that limits the hight to keep the sticky footer functionality from breaking -->
<local:EquationInputArea x:Name="EquationInputAreaControl"

View File

@@ -58,7 +58,7 @@ GraphingCalculator::GraphingCalculator()
auto toolTip = ref new ToolTip();
auto resProvider = AppResourceProvider::GetInstance();
toolTip->Content = ActiveTracingOn ? resProvider.GetResourceString(L"disableTracingButtonToolTip") : resProvider.GetResourceString(L"enableTracingButtonToolTip");
toolTip->Content = ActiveTracingOn ? resProvider->GetResourceString(L"disableTracingButtonToolTip") : resProvider->GetResourceString(L"enableTracingButtonToolTip");
ToolTipService::SetToolTip(ActiveTracing, toolTip);
DataTransferManager ^ dataTransferManager = DataTransferManager::GetForCurrentView();
@@ -253,7 +253,7 @@ void GraphingCalculator::OnDataRequested(DataTransferManager ^ sender, DataReque
}
catch (Exception ^ ex)
{
TraceLogger::GetInstance().LogPlatformException(ViewMode::Graphing, __FUNCTIONW__, ex);
TraceLogger::GetInstance()->LogPlatformException(ViewMode::Graphing, __FUNCTIONW__, ex);
// Something went wrong, notify the user.
@@ -349,7 +349,7 @@ void GraphingCalculator::OnActiveTracingClick(Object ^ sender, RoutedEventArgs ^
auto toolTip = ref new ToolTip();
auto resProvider = AppResourceProvider::GetInstance();
toolTip->Content = ActiveTracingOn ? resProvider.GetResourceString(L"disableTracingButtonToolTip") : resProvider.GetResourceString(L"enableTracingButtonToolTip");
toolTip->Content = ActiveTracingOn ? resProvider->GetResourceString(L"disableTracingButtonToolTip") : resProvider->GetResourceString(L"enableTracingButtonToolTip");
ToolTipService::SetToolTip(ActiveTracing, toolTip);
}
@@ -397,11 +397,11 @@ Platform::String ^ GraphingCalculator::GetInfoForSwitchModeToggleButton(bool isC
{
if (isChecked)
{
return AppResourceProvider::GetInstance().GetResourceString(L"GraphSwitchToGraphMode");
return AppResourceProvider::GetInstance()->GetResourceString(L"GraphSwitchToGraphMode");
}
else
{
return AppResourceProvider::GetInstance().GetResourceString(L"GraphSwitchToEquationMode");
return AppResourceProvider::GetInstance()->GetResourceString(L"GraphSwitchToEquationMode");
}
}
@@ -411,11 +411,11 @@ void GraphingCalculator::SwitchModeToggleButton_Checked(Platform::Object ^ sende
String ^ announcementText;
if (SwitchModeToggleButton->IsChecked->Value)
{
announcementText = AppResourceProvider::GetInstance().GetResourceString(L"GraphSwitchedToEquationModeAnnouncement");
announcementText = AppResourceProvider::GetInstance()->GetResourceString(L"GraphSwitchedToEquationModeAnnouncement");
}
else
{
announcementText = AppResourceProvider::GetInstance().GetResourceString(L"GraphSwitchedToGraphModeAnnouncement");
announcementText = AppResourceProvider::GetInstance()->GetResourceString(L"GraphSwitchedToGraphModeAnnouncement");
}
auto announcement = CalculatorAnnouncement::GetGraphModeChangedAnnouncement(announcementText);

View File

@@ -7,6 +7,7 @@
#include "CalcViewModel\GraphingCalculator\EquationViewModel.h"
#include "Controls/MathRichEditBox.h"
#include "Controls/EquationTextBox.h"
#include "TemplateSelectors/KeyGraphFeaturesTemplateSelector.h"
namespace CalculatorApp
{

View File

@@ -50,6 +50,9 @@
</muxc:SwipeItems>
<MenuFlyout x:Name="HistoryContextMenu">
<MenuFlyoutItem x:Uid="CopyHistoryMenuItem"
Click="OnCopyMenuItemClicked"
Icon="Copy"/>
<MenuFlyoutItem x:Uid="DeleteHistoryMenuItem"
Click="OnDeleteMenuItemClicked"
Icon="Delete"/>

View File

@@ -8,6 +8,7 @@
#include "pch.h"
#include "HistoryList.xaml.h"
#include "CalcViewModel/Common/CopyPasteManager.h"
#include "CalcViewModel/Common/LocalizationService.h"
using namespace CalculatorApp;
@@ -52,6 +53,16 @@ void HistoryList::ListView_ItemClick(_In_ Object ^ sender, _In_ ItemClickEventAr
}
}
void HistoryList::OnCopyMenuItemClicked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
{
auto listViewItem = HistoryContextMenu->Target;
auto itemViewModel = dynamic_cast<HistoryItemViewModel ^>(HistoryListView->ItemFromContainer(listViewItem));
if (itemViewModel != nullptr)
{
CopyPasteManager::CopyToClipboard(itemViewModel->Result);
}
}
void HistoryList::OnDeleteMenuItemClicked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
{
auto listViewItem = HistoryContextMenu->Target;

View File

@@ -34,6 +34,7 @@ namespace CalculatorApp
Windows::Foundation::Rect m_visibleBounds;
Windows::Foundation::Rect m_coreBounds;
void ListView_ItemClick(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::Controls::ItemClickEventArgs ^ e);
void OnCopyMenuItemClicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void OnDeleteMenuItemClicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void OnDeleteSwipeInvoked(_In_ Microsoft::UI::Xaml::Controls::SwipeItem ^ sender, _In_ Microsoft::UI::Xaml::Controls::SwipeItemInvokedEventArgs ^ e);
};

View File

@@ -86,8 +86,9 @@
Command="{x:Bind Model.PasteCommand}"/>
</StackPanel>
<local:TitleBar Grid.Row="0" IsAlwaysOnTopMode="{x:Bind Model.IsAlwaysOnTop, Mode=OneWay}"
AlwaysOnTopClick="TitleBarAlwaysOnTopButtonClick"/>
<local:TitleBar Grid.Row="0"
AlwaysOnTopClick="TitleBarAlwaysOnTopButtonClick"
IsAlwaysOnTopMode="{x:Bind Model.IsAlwaysOnTop, Mode=OneWay}"/>
<Grid Grid.Row="1">
<Border x:Name="CalcHolder">
@@ -98,7 +99,7 @@
</Border>
<Border x:Name="GraphingCalcHolder">
<!-- PLACEHOLDER!!!! This is where the graphing calculator goes when it is delay loaded -->
</Border>
</Border>
<Border x:Name="ConverterHolder">
<!-- PLACEHOLDER!!!! This is where the converter goes when it is delay loaded -->
</Border>
@@ -111,7 +112,6 @@
DataContext="{x:Bind Model}"
ExpandedModeThresholdWidth="Infinity"
IsBackButtonVisible="Collapsed"
IsEnabled="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanNegationConverter}, Mode=OneWay}"
IsPaneToggleButtonVisible="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanNegationConverter}, Mode=OneWay}"
IsSettingsVisible="False"
ItemInvoked="OnNavItemInvoked"
@@ -129,9 +129,9 @@
<StackPanel HorizontalAlignment="Stretch" Orientation="Vertical">
<muxc:NavigationViewList x:Name="NavFooter"
Width="{x:Bind NavView.OpenPaneLength, Mode=Oneway}"
x:Load="False"
IsItemClickEnabled="True"
ItemClick="OnAboutButtonClick">
ItemClick="OnAboutButtonClick"
x:Load="False">
<muxc:NavigationViewList.ItemContainerTransitions>
<!-- Remove EntranceThemeTransition which is a default transition for NavigationViewList -->
<TransitionCollection/>
@@ -181,7 +181,11 @@
AutomationProperties.AutomationId="NormalAlwaysOnTopButton"
Click="AlwaysOnTopButtonClick"
Content="&#xEE49;"
Visibility="{x:Bind Model.DisplayNormalAlwaysOnTopOption, Mode=OneWay}"/>
Visibility="{x:Bind Model.DisplayNormalAlwaysOnTopOption, Mode=OneWay}">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Key="Up" Modifiers="Menu"/>
</Button.KeyboardAccelerators>
</Button>
</Grid>
</muxc:NavigationView>
</Grid>

View File

@@ -10,6 +10,7 @@
#include "CalcViewModel/Common/AppResourceProvider.h"
#include "Views/Memory.xaml.h"
#include "Converters/BooleanToVisibilityConverter.h"
#include "CalcViewModel/Common/LocalizationStringUtil.h"
#include "Common/AppLifecycleLogger.h"
using namespace CalculatorApp;
using namespace CalculatorApp::Common;
@@ -266,7 +267,7 @@ void MainPage::OnPageLoaded(_In_ Object ^, _In_ RoutedEventArgs ^ args)
// Delay load things later when we get a chance.
this->Dispatcher->RunAsync(
CoreDispatcherPriority::Normal, ref new DispatchedHandler([]() {
if (TraceLogger::GetInstance().IsWindowIdInLog(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())))
if (TraceLogger::GetInstance()->IsWindowIdInLog(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())))
{
AppLifecycleLogger::GetInstance().LaunchUIResponsive();
AppLifecycleLogger::GetInstance().LaunchVisibleComplete();
@@ -417,7 +418,7 @@ void MainPage::OnNavPaneOpening(_In_ MUXC::NavigationView ^ sender, _In_ Object
void MainPage::OnNavPaneOpened(_In_ MUXC::NavigationView ^ sender, _In_ Object ^ args)
{
KeyboardShortcutManager::HonorShortcuts(false);
TraceLogger::GetInstance().LogNavBarOpened();
TraceLogger::GetInstance()->LogNavBarOpened();
}
void MainPage::OnNavPaneClosed(_In_ MUXC::NavigationView ^ sender, _In_ Object ^ args)
@@ -537,25 +538,20 @@ void MainPage::SetHeaderAutomationName()
String ^ name;
if (NavCategory::IsDateCalculatorViewMode(mode))
{
name = resProvider.GetResourceString(L"HeaderAutomationName_Date");
name = resProvider->GetResourceString(L"HeaderAutomationName_Date");
}
else
{
wstring full;
String ^ full;
if (NavCategory::IsCalculatorViewMode(mode) || NavCategory::IsGraphingCalculatorViewMode(mode))
{
full = resProvider.GetResourceString(L"HeaderAutomationName_Calculator")->Data();
full = resProvider->GetResourceString(L"HeaderAutomationName_Calculator");
}
else if (NavCategory::IsConverterViewMode(mode))
{
full = resProvider.GetResourceString(L"HeaderAutomationName_Converter")->Data();
full = resProvider->GetResourceString(L"HeaderAutomationName_Converter");
}
string::size_type found = full.find(L"%1");
wstring strMode = m_model->CategoryName->Data();
full = full.replace(found, 2, strMode);
name = ref new String(full.c_str());
name = LocalizationStringUtil::GetLocalizedString(full, m_model->CategoryName);
}
AutomationProperties::SetName(Header, name);

View File

@@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
@@ -80,9 +80,9 @@ public
void AnnounceCategoryName();
CalculatorApp::Calculator ^ m_calculator;
GraphingCalculator^ m_graphingCalculator;
CalculatorApp::UnitConverter ^ m_converter;
CalculatorApp::DateCalculator ^ m_dateCalculator;
CalculatorApp::GraphingCalculator^ m_graphingCalculator;
Windows::Foundation::EventRegistrationToken m_windowSizeEventToken;
CalculatorApp::ViewModel::ApplicationViewModel ^ m_model;
Windows::Foundation::EventRegistrationToken m_accessibilitySettingsToken;

View File

@@ -1,4 +1,4 @@
<UserControl x:Class="CalculatorApp.NumberPad"
<UserControl x:Class="CalculatorApp.NumberPad"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:common="using:CalculatorApp.Common"
@@ -112,7 +112,6 @@
Grid.Row="3"
Grid.Column="2"
Style="{Binding ElementName=ControlRoot, Path=ButtonStyle}"
Background="{ThemeResource AppBackgroundAltMediumLowBrush}"
common:KeyboardShortcutManager.Character="."
AutomationProperties.AutomationId="decimalSeparatorButton"
ButtonId="Decimal"

View File

@@ -30,6 +30,7 @@ using namespace CalculatorApp::Common;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
DEPENDENCY_PROPERTY_INITIALIZATION(NumberPad, ButtonStyle);
DEPENDENCY_PROPERTY_INITIALIZATION(NumberPad, CurrentRadixType);
NumberPad::NumberPad()
: m_isErrorVisualState(false)
@@ -51,7 +52,7 @@ NumberPad::NumberPad()
this->Num9Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('9');
}
void NumberPad::ProgModeRadixChange()
void NumberPad::OnCurrentRadixTypePropertyChanged(NumberBase /* oldValue */, NumberBase newValue)
{
Num0Button->IsEnabled = true;
Num1Button->IsEnabled = true;
@@ -64,10 +65,7 @@ void NumberPad::ProgModeRadixChange()
Num8Button->IsEnabled = true;
Num9Button->IsEnabled = true;
auto vm = safe_cast<StandardCalculatorViewModel ^>(this->DataContext);
RADIX_TYPE radixType = vm->GetCurrentRadixType();
if (radixType == RADIX_TYPE::BIN_RADIX)
if (newValue == NumberBase::BinBase)
{
Num2Button->IsEnabled = false;
Num3Button->IsEnabled = false;
@@ -78,7 +76,7 @@ void NumberPad::ProgModeRadixChange()
Num8Button->IsEnabled = false;
Num9Button->IsEnabled = false;
}
else if (radixType == RADIX_TYPE::OCT_RADIX)
else if (newValue == NumberBase::OctBase)
{
Num8Button->IsEnabled = false;
Num9Button->IsEnabled = false;

View File

@@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
@@ -10,6 +10,8 @@
#include "Views/NumberPad.g.h"
#include "CalcViewModel/Common/KeyboardShortcutManager.h"
#include "CalcViewModel/Common/NumberBase.h"
#include "CalcManager/Header Files/RadixType.h"
namespace CalculatorApp
{
@@ -20,6 +22,7 @@ namespace CalculatorApp
DEPENDENCY_PROPERTY_OWNER(NumberPad);
DEPENDENCY_PROPERTY(Windows::UI::Xaml::Style ^, ButtonStyle);
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(CalculatorApp::Common::NumberBase, CurrentRadixType, CalculatorApp::Common::NumberBase::DecBase);
property bool IsErrorVisualState
{
@@ -27,9 +30,10 @@ namespace CalculatorApp
void set(bool value);
}
void ProgModeRadixChange();
private:
void OnCurrentRadixTypePropertyChanged(CalculatorApp::Common::NumberBase oldValue, CalculatorApp::Common::NumberBase newValue);
bool m_isErrorVisualState;
};
}

View File

@@ -10,24 +10,26 @@
mc:Ignorable="d">
<Grid>
<local:CalculatorStandardOperators x:Name="StandardOperators"
x:Load="{x:Bind Model.IsStandard, Mode=OneWay}"
TabIndex="17"
IsEnabled="{x:Bind Model.IsStandard, Mode=OneWay}"
TabIndex="17"/>
x:Load="{x:Bind Model.IsStandard, Mode=OneWay}"/>
<local:CalculatorScientificOperators x:Name="ScientificOperators"
x:Load="False"
IsEnabled="{x:Bind Model.IsScientific, Mode=OneWay}"
TabIndex="16"
Visibility="{x:Bind Model.IsScientific, Mode=OneWay}"/>
Visibility="{x:Bind Model.IsScientific, Mode=OneWay}"
IsEnabled="{x:Bind Model.IsScientific, Mode=OneWay}"
x:Load="False"/>
<local:CalculatorProgrammerBitFlipPanel x:Name="BitFlipPanel"
x:Load="False"
Visibility="{x:Bind Model.IsBinaryBitFlippingEnabled, Mode=OneWay}"/>
Visibility="{x:Bind Model.IsBinaryBitFlippingEnabled, Mode=OneWay}"
IsEnabled="{x:Bind Model.IsBinaryBitFlippingEnabled, Mode=OneWay}"
x:Load="False"/>
<local:CalculatorProgrammerRadixOperators x:Name="ProgrammerRadixOperators"
x:Load="False"
TabIndex="16"
Visibility="{x:Bind Model.AreProgrammerRadixOperatorsEnabled, Mode=OneWay}"/>
Visibility="{x:Bind Model.AreProgrammerRadixOperatorsEnabled, Mode=OneWay}"
IsEnabled="{x:Bind Model.AreProgrammerRadixOperatorsEnabled, Mode=OneWay}"
x:Load="False"/>
</Grid>
</UserControl>

View File

@@ -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"
@@ -71,6 +71,11 @@ void OperatorsPanel::EnsureProgrammerRadixOps()
{
this->FindName(L"ProgrammerRadixOperators");
}
if (ProgrammerRadixOperators)
{
ProgrammerRadixOperators->checkDefaultBitShift();
}
}
void OperatorsPanel::EnsureProgrammerBitFlipPanel()

View File

@@ -0,0 +1,72 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#include "pch.h"
#include "ControlSizeTrigger.h"
using namespace CalculatorApp::Views::StateTriggers;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
DEPENDENCY_PROPERTY_INITIALIZATION(ControlSizeTrigger, Source);
DEPENDENCY_PROPERTY_INITIALIZATION(ControlSizeTrigger, MinHeight);
DEPENDENCY_PROPERTY_INITIALIZATION(ControlSizeTrigger, MinWidth);
ControlSizeTrigger::ControlSizeTrigger()
{
SetActive(false);
}
ControlSizeTrigger::~ControlSizeTrigger()
{
UnregisterSizeChanged(Source);
}
void ControlSizeTrigger::OnSourcePropertyChanged(FrameworkElement ^ oldValue, FrameworkElement ^ newValue)
{
UnregisterSizeChanged(oldValue);
RegisterSizeChanged(newValue);
}
void ControlSizeTrigger::RegisterSizeChanged(FrameworkElement ^ element)
{
if (element == nullptr)
{
return;
}
if (element != Source)
{
UnregisterSizeChanged(Source);
}
m_sizeChangedToken = element->SizeChanged += ref new SizeChangedEventHandler(this, &ControlSizeTrigger::OnSizeChanged);
UpdateIsActive(element->RenderSize);
}
void ControlSizeTrigger::UnregisterSizeChanged(FrameworkElement ^ element)
{
if (element != nullptr && m_sizeChangedToken.Value != 0)
{
element->SizeChanged -= m_sizeChangedToken;
m_sizeChangedToken.Value = 0;
}
}
void ControlSizeTrigger::OnSizeChanged(Object ^ sender, SizeChangedEventArgs ^ e)
{
UpdateIsActive(e->NewSize);
}
void ControlSizeTrigger::UpdateIsActive(Size sourceSize)
{
if (MinHeight >= 0)
{
SetActive(sourceSize.Height >= MinHeight && (MinWidth < 0 || sourceSize.Width >= MinWidth));
}
else
{
SetActive(MinWidth >= 0 && sourceSize.Width >= MinWidth);
}
}

View File

@@ -0,0 +1,37 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
#include "CalcViewModel/Common/Utils.h"
namespace CalculatorApp::Views::StateTriggers
{
public ref class ControlSizeTrigger sealed : public Windows::UI::Xaml::StateTriggerBase
{
public:
ControlSizeTrigger();
DEPENDENCY_PROPERTY_OWNER(ControlSizeTrigger);
DEPENDENCY_PROPERTY_WITH_CALLBACK(Windows::UI::Xaml::FrameworkElement^, Source);
DEPENDENCY_PROPERTY_WITH_DEFAULT(double, MinHeight, -1);
DEPENDENCY_PROPERTY_WITH_DEFAULT(double, MinWidth, -1);
private:
~ControlSizeTrigger();
void OnSourcePropertyChanged(Windows::UI::Xaml::FrameworkElement^ oldValue, Windows::UI::Xaml::FrameworkElement^ newValue);
void RegisterSizeChanged(Windows::UI::Xaml::FrameworkElement^ element);
void UnregisterSizeChanged(Windows::UI::Xaml::FrameworkElement^ element);
void OnSizeChanged(Platform::Object^ sender, Windows::UI::Xaml::SizeChangedEventArgs^ e);
void UpdateIsActive(Windows::Foundation::Size sourceSize);
private:
Windows::Foundation::EventRegistrationToken m_sizeChangedToken;
};
}

View File

@@ -54,6 +54,10 @@
AutomationProperties.AutomationId="ExitAlwaysOnTopButton"
Click="AlwaysOnTopButton_Click"
Content="&#xEE47;"
Visibility="Collapsed"/>
Visibility="Collapsed">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Modifiers="Menu" Key="Down"/>
</Button.KeyboardAccelerators>
</Button>
</Grid>
</UserControl>

View File

@@ -37,9 +37,9 @@ namespace CalculatorApp
Loaded += ref new RoutedEventHandler(this, &TitleBar::OnLoaded);
Unloaded += ref new RoutedEventHandler(this, &TitleBar::OnUnloaded);
#ifdef IS_STORE_BUILD
AppName->Text = AppResourceProvider::GetInstance().GetResourceString(L"AppName");
AppName->Text = AppResourceProvider::GetInstance()->GetResourceString(L"AppName");
#else
AppName->Text = AppResourceProvider::GetInstance().GetResourceString(L"DevAppName");
AppName->Text = AppResourceProvider::GetInstance()->GetResourceString(L"DevAppName");
#endif // IS_STORE_BUILD
}

View File

@@ -260,14 +260,6 @@
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Name="TimestampFadeInAnimation">
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="CurrencyTimestampTextBlock"
Storyboard.TargetProperty="Opacity"
To="1"/>
</Storyboard>
<MenuFlyout x:Key="CalculationResultContextMenu">
<MenuFlyoutItem x:Name="CopyMenuItem"
x:Uid="CopyMenuItem"
@@ -448,14 +440,85 @@
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CurrencyLoadingStates">
<VisualStateGroup.Transitions>
<VisualTransition From="CurrencyLoadingState" To="CurrencyLoadedState">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Units1" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Value1Container" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Units2" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Value2Container" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="CurrencyRatioEqualityBlock"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="CurrencyTimestampTextBlock"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="Units1"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="Value1Container"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="Units2"
Storyboard.TargetProperty="Opacity"
To="1"/>
<DoubleAnimation Duration="0:0:1"
From="0"
Storyboard.TargetName="Value2Container"
Storyboard.TargetProperty="Opacity"
To="1"/>
</Storyboard>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="CurrencyLoadingState">
<VisualState.Setters>
<Setter Target="CurrencyRatioEqualityBlock.Opacity" Value="0"/>
<Setter Target="CurrencyTimestampTextBlock.Opacity" Value="0"/>
<Setter Target="CurrencyLoadingGrid.Visibility" Value="Visible"/>
<Setter Target="Units1.Visibility" Value="Collapsed"/>
<Setter Target="Value1Container.Visibility" Value="Collapsed"/>
<Setter Target="Units2.Visibility" Value="Collapsed"/>
<Setter Target="Value2Container.Visibility" Value="Collapsed"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="CurrencyLoadedState">
<VisualState.Setters>
<Setter Target="CurrencyRatioEqualityBlock.Opacity" Value="1"/>
<Setter Target="CurrencyTimestampTextBlock.Opacity" Value="1"/>
<Setter Target="CurrencyLoadingGrid.Visibility" Value="Collapsed"/>
<Setter Target="Units1.Visibility" Value="Visible"/>
<Setter Target="Value1Container.Visibility" Value="Visible"/>
<Setter Target="Units2.Visibility" Value="Visible"/>
<Setter Target="Value2Container.Visibility" Value="Visible"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid x:Name="CurrencyLoadingGrid"
Grid.Row="1"
Grid.RowSpan="5"
Grid.Column="0"
Grid.ColumnSpan="4"
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityConverter}}">
Grid.ColumnSpan="4">
<Grid.RowDefinitions>
<RowDefinition Height="10*"/>
<RowDefinition Height="7*"/>
@@ -475,8 +538,7 @@
Grid.Row="1"
Grid.Column="1"
HorizontalAlignment="{x:Bind FlowDirectionHorizontalAlignment}"
Style="{ThemeResource ValueContainerStyle}"
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}">
Style="{ThemeResource ValueContainerStyle}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
@@ -520,15 +582,13 @@
ItemTemplate="{StaticResource UnitTemplate}"
ItemsSource="{Binding Units, Converter={StaticResource AlwaysSelectedConverter}}"
SelectedItem="{Binding Unit1, Mode=TwoWay, Converter={StaticResource ValidSelectedItemConverter}}"
TabIndex="2"
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}"/>
TabIndex="2"/>
<Grid x:Name="Value2Container"
Grid.Row="3"
Grid.Column="1"
HorizontalAlignment="{x:Bind FlowDirectionHorizontalAlignment}"
Style="{ThemeResource ValueContainerStyle}"
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}">
Style="{ThemeResource ValueContainerStyle}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
@@ -572,8 +632,7 @@
ItemTemplate="{StaticResource UnitTemplate}"
ItemsSource="{Binding Units, Converter={StaticResource AlwaysSelectedConverter}}"
SelectedItem="{Binding Unit2, Mode=TwoWay, Converter={StaticResource ValidSelectedItemConverter}}"
TabIndex="4"
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}"/>
TabIndex="4"/>
<StackPanel x:Name="SupplementaryResultsPanelInGrid"
Grid.Row="5"
@@ -583,8 +642,7 @@
HorizontalAlignment="{x:Bind FlowDirectionHorizontalAlignment}"
VerticalAlignment="Top"
FlowDirection="{x:Bind LayoutDirection}"
SizeChanged="SupplementaryResultsPanelInGrid_SizeChanged"
Visibility="{x:Bind Model.IsCurrencyLoadingVisible, Mode=OneWay, Converter={StaticResource BooleanToVisibilityNegationConverter}}">
SizeChanged="SupplementaryResultsPanelInGrid_SizeChanged">
<local:SupplementaryResults x:Name="SupplementaryResults"
HorizontalAlignment="Left"
VerticalAlignment="Center"
@@ -644,7 +702,8 @@
Grid.Column="1"
Margin="3,0,3,3"
FlowDirection="LeftToRight"
RenderTransformOrigin="0.5,0.5">
RenderTransformOrigin="0.5,0.5"
XYFocusKeyboardNavigation="Enabled">
<Grid.RenderTransform>
<CompositeTransform/>
</Grid.RenderTransform>
@@ -703,7 +762,7 @@
x:Uid="converterNegateButton"
Grid.Row="4"
Grid.Column="0"
Style="{StaticResource SymbolOperatorButtonStyle}"
Style="{StaticResource SymbolOperatorKeypadButtonStyle}"
FontSize="16"
ButtonId="Negate"
Content="&#xF898;"

View File

@@ -40,8 +40,6 @@ using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace Windows::UI::ViewManagement;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
// Calculate number of 100-nanosecond intervals in 500 milliseconds.
// There are 10,000 intervals in 1 ms.
static const long long DURATION_500_MS = 10000 * 500;
@@ -66,14 +64,14 @@ UnitConverter::UnitConverter()
m_isAnimationEnabled = userSettings->AnimationsEnabled;
auto resLoader = AppResourceProvider::GetInstance();
m_chargesMayApplyText = resLoader.GetResourceString(L"DataChargesMayApply");
m_failedToRefreshText = resLoader.GetResourceString(L"FailedToRefresh");
m_chargesMayApplyText = resLoader->GetResourceString(L"DataChargesMayApply");
m_failedToRefreshText = resLoader->GetResourceString(L"FailedToRefresh");
InitializeOfflineStatusTextBlock();
m_resultsFlyout = static_cast<MenuFlyout ^>(Resources->Lookup(L"CalculationResultContextMenu"));
CopyMenuItem->Text = resLoader.GetResourceString(L"copyMenuItem");
PasteMenuItem->Text = resLoader.GetResourceString(L"pasteMenuItem");
CopyMenuItem->Text = resLoader->GetResourceString(L"copyMenuItem");
PasteMenuItem->Text = resLoader->GetResourceString(L"pasteMenuItem");
}
void UnitConverter::OnPropertyChanged(_In_ Object ^ sender, _In_ PropertyChangedEventArgs ^ e)
@@ -165,7 +163,7 @@ void UnitConverter::SetFailedToRefreshStatus()
void UnitConverter::InitializeOfflineStatusTextBlock()
{
auto resProvider = AppResourceProvider::GetInstance();
std::wstring offlineStatusHyperlinkText = static_cast<String ^>(resProvider.GetResourceString(L"OfflineStatusHyperlinkText"))->Data();
std::wstring offlineStatusHyperlinkText = resProvider->GetResourceString(L"OfflineStatusHyperlinkText")->Data();
// The resource string has the 'NetworkSettings' hyperlink wrapped with '%HL%'.
// Break the string and assign pieces appropriately.
@@ -245,9 +243,9 @@ void UnitConverter::OnCopyMenuItemClicked(_In_ Object ^ sender, _In_ RoutedEvent
void UnitConverter::OnPasteMenuItemClicked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
{
CopyPasteManager::GetStringToPaste(Model->Mode, CategoryGroupType::Converter).then([this](String ^ pastedString) {
Model->OnPaste(pastedString);
});
auto that(this);
create_task(CopyPasteManager::GetStringToPaste(Model->Mode, CategoryGroupType::Converter, NumberBase::Unknown, BitLength::BitLengthUnknown))
.then([that](String ^ pastedString) { that->Model->OnPaste(pastedString); });
}
void UnitConverter::AnimateConverter()
@@ -291,12 +289,17 @@ void UnitConverter::SetDefaultFocus()
void UnitConverter::CurrencyRefreshButton_Click(_In_ Object ^ /*sender*/, _In_ RoutedEventArgs ^ /*e*/)
{
if (Model->NetworkBehavior == NetworkAccessBehavior::OptIn)
// If IsCurrencyLoadingVisible is true that means CurrencyRefreshButton_Click was recently called
// and is still executing. In this case there is no reason to process the click.
if (!Model->IsCurrencyLoadingVisible)
{
m_meteredConnectionOverride = true;
}
if (Model->NetworkBehavior == NetworkAccessBehavior::OptIn)
{
m_meteredConnectionOverride = true;
}
Model->RefreshCurrencyRatios();
Model->RefreshCurrencyRatios();
}
}
void UnitConverter::OnDataContextChanged(_In_ FrameworkElement ^ sender, _In_ DataContextChangedEventArgs ^ args)
@@ -320,15 +323,16 @@ void UnitConverter::OnIsDisplayVisibleChanged()
{
if (Model->IsCurrencyLoadingVisible)
{
VisualStateManager::GoToState(this, L"CurrencyLoadingState", false);
StartProgressRingWithDelay();
}
else
{
HideProgressRing();
if (m_isAnimationEnabled && Model->IsCurrencyCurrentCategory && !Model->CurrencyTimestamp->IsEmpty())
if (Model->IsCurrencyCurrentCategory && !Model->CurrencyTimestamp->IsEmpty())
{
TimestampFadeInAnimation->Begin();
VisualStateManager::GoToState(this, L"CurrencyLoadedState", m_isAnimationEnabled);
}
}
}
@@ -373,6 +377,5 @@ void CalculatorApp::UnitConverter::SupplementaryResultsPanelInGrid_SizeChanged(P
void CalculatorApp::UnitConverter::OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e)
{
auto mode = NavCategory::Deserialize(Model->CurrentCategory->GetModelCategory().id);
auto state = std::wstring(e->NewState->Name->Begin());
TraceLogger::GetInstance().LogVisualStateChanged(mode, state);
TraceLogger::GetInstance()->LogVisualStateChanged(mode, e->NewState->Name, false);
}