Merge master into feature/GraphingCalculator branch (#660)
This commit is contained in:
@@ -35,8 +35,8 @@
|
||||
</DataTemplate>
|
||||
|
||||
<!-- TextBox Styles -->
|
||||
|
||||
<Style TargetType="controls:OverflowTextBlock">
|
||||
|
||||
<Style x:Key="NormalStyle" TargetType="controls:OverflowTextBlock">
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch"/>
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
@@ -94,6 +94,110 @@
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="AlwaysOnTopStyleS" 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">
|
||||
<Grid x:Name="TokenContainer" Background="{TemplateBinding Background}">
|
||||
<Grid.Resources>
|
||||
<ResourceDictionary>
|
||||
<ResourceDictionary.ThemeDictionaries>
|
||||
<ResourceDictionary x:Key="Light">
|
||||
<SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="Transparent"/>
|
||||
<SolidColorBrush x:Key="ButtonBackgroundPressed" Color="Transparent"/>
|
||||
<SolidColorBrush x:Key="ButtonBackgroundDisabled" Color="Transparent"/>
|
||||
<SolidColorBrush x:Key="ButtonForeground" Color="#99000000"/>
|
||||
<SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="{ThemeResource SystemAccentColor}" Opacity="0.8"/>
|
||||
<SolidColorBrush x:Key="ButtonForegroundPressed" Color="{ThemeResource SystemAccentColor}" Opacity="1.0"/>
|
||||
<SolidColorBrush x:Key="ButtonForegroundDisabled" Color="#33000000"/>
|
||||
</ResourceDictionary>
|
||||
<ResourceDictionary x:Key="HighContrast">
|
||||
<SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="Transparent"/>
|
||||
<SolidColorBrush x:Key="ButtonBackgroundPressed" Color="Transparent"/>
|
||||
<SolidColorBrush x:Key="ButtonBackgroundDisabled" Color="Transparent"/>
|
||||
<SolidColorBrush x:Key="ButtonForeground" Color="{ThemeResource SystemColorWindowTextColor}" Opacity="0.6"/>
|
||||
<SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="{ThemeResource SystemColorHighlightColor}" Opacity="0.8"/>
|
||||
<SolidColorBrush x:Key="ButtonForegroundPressed" Color="{ThemeResource SystemColorHighlightColor}" Opacity="1.0"/>
|
||||
<SolidColorBrush x:Key="ButtonForegroundDisabled" Color="{ThemeResource SystemColorGrayTextColor}" Opacity="0.2"/>
|
||||
</ResourceDictionary>
|
||||
<ResourceDictionary x:Key="Dark">
|
||||
<SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="Transparent"/>
|
||||
<SolidColorBrush x:Key="ButtonBackgroundPressed" Color="Transparent"/>
|
||||
<SolidColorBrush x:Key="ButtonBackgroundDisabled" Color="Transparent"/>
|
||||
<SolidColorBrush x:Key="ButtonForeground" Color="#99FFFFFF"/>
|
||||
<SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="{ThemeResource SystemAccentColorLight1}" Opacity="0.8"/>
|
||||
<SolidColorBrush x:Key="ButtonForegroundPressed" Color="{ThemeResource SystemAccentColorLight1}" Opacity="1.0"/>
|
||||
<SolidColorBrush x:Key="ButtonForegroundDisabled" Color="#33FFFFFF"/>
|
||||
</ResourceDictionary>
|
||||
</ResourceDictionary.ThemeDictionaries>
|
||||
</ResourceDictionary>
|
||||
</Grid.Resources>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<ScrollViewer x:Name="ExpressionContainer"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
Padding="0,0,0,0"
|
||||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
||||
Style="{StaticResource ResultsScrollerSnapped}"
|
||||
AutomationProperties.AccessibilityView="Control">
|
||||
<TextBlock x:Name="EditableToken"
|
||||
AutomationProperties.AccessibilityView="Raw"
|
||||
Text="{Binding DisplayValue, Mode=OneWay}"
|
||||
Margin="4,0,4,0"
|
||||
Padding="0"
|
||||
VerticalAlignment="Stretch"
|
||||
FontWeight="SemiBold"
|
||||
Grid.Row="2"
|
||||
HorizontalAlignment="Right"/>
|
||||
</ScrollViewer>
|
||||
<Border Background="{ThemeResource AppChromeAcrylicHostBackdropMediumLowBrush}"
|
||||
Grid.Column="0">
|
||||
<Button x:Name="ScrollLeft"
|
||||
x:Uid="scrollLeft"
|
||||
Margin="0,3,0,0"
|
||||
Style="{StaticResource AlwaysOnTopScrollButtonStyleS}"
|
||||
MinWidth="{TemplateBinding ColumnWidth}"
|
||||
MinHeight="{TemplateBinding ColumnHeight}"
|
||||
Background="Transparent">
|
||||
<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}"
|
||||
FontSize="{TemplateBinding ScrollButtonFontSize}"
|
||||
Glyph=""/>
|
||||
</Button>
|
||||
</Border>
|
||||
<Border Background="{ThemeResource AppChromeAcrylicHostBackdropMediumLowBrush}"
|
||||
Grid.Column="2">
|
||||
<Button x:Name="ScrollRight"
|
||||
x:Uid="scrollRight"
|
||||
Margin="0,3,0,0"
|
||||
Style="{StaticResource AlwaysOnTopScrollButtonStyleS}"
|
||||
MinWidth="{TemplateBinding ColumnWidth}"
|
||||
MinHeight="{TemplateBinding ColumnHeight}"
|
||||
Background="Transparent">
|
||||
<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}"
|
||||
FontSize="{TemplateBinding ScrollButtonFontSize}"
|
||||
Glyph=""/>
|
||||
</Button>
|
||||
</Border>
|
||||
</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}"
|
||||
@@ -119,6 +223,13 @@
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="AlwaysOnTopScrollButtonStyleS" TargetType="Button">
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="Padding" Value="0,0,0,0"/>
|
||||
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
</Style>
|
||||
|
||||
<!-- Flyout Styles -->
|
||||
|
||||
@@ -237,7 +348,6 @@
|
||||
<!-- Value Converters -->
|
||||
|
||||
<converters:BooleanToVisibilityNegationConverter x:Key="BooleanToVisibilityNegationConverter"/>
|
||||
|
||||
<converters:BooleanNegationConverter x:Key="BooleanNegationConverter"/>
|
||||
|
||||
<!-- DataTemplate Selectors and Style Selectors -->
|
||||
@@ -289,6 +399,28 @@
|
||||
<Storyboard Completed="OnErrorLayoutCompleted"/>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<!-- Always-on-Top specific -->
|
||||
<VisualStateGroup x:Name="AlwaysOnTopStates">
|
||||
<VisualState x:Name="AlwaysOnTop">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="ClearMemoryButton.IsEnabled" Value="False"/>
|
||||
<Setter Target="MemRecall.IsEnabled" Value="False"/>
|
||||
<Setter Target="MemPlus.IsEnabled" Value="False"/>
|
||||
<Setter Target="MemMinus.IsEnabled" Value="False"/>
|
||||
<Setter Target="MemButton.IsEnabled" Value="False"/>
|
||||
<Setter Target="RowExpression.Height" Value="0*"/>
|
||||
<Setter Target="RowHamburger.Height" Value="0"/>
|
||||
<Setter Target="RowMemoryControls.Height" Value="0*"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
<VisualState x:Name="Normal">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="RowExpression.Height" Value="20*"/>
|
||||
<Setter Target="RowHamburger.Height" Value="{StaticResource HamburgerHeightGridLength}"/>
|
||||
<Setter Target="RowMemoryControls.Height" Value="32*"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<!-- Mode specific -->
|
||||
<VisualStateGroup x:Name="Mode">
|
||||
<VisualState x:Name="Standard">
|
||||
@@ -319,7 +451,7 @@
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<!-- Layout specific -->
|
||||
<VisualStateGroup>
|
||||
<VisualStateGroup CurrentStateChanged="OnVisualStateChanged">
|
||||
<VisualState x:Name="Portrait768x1366">
|
||||
<VisualState.StateTriggers>
|
||||
<AdaptiveTrigger MinWindowHeight="1366" MinWindowWidth="768"/>
|
||||
@@ -365,7 +497,7 @@
|
||||
<AdaptiveTrigger MinWindowHeight="0" MinWindowWidth="0"/>
|
||||
</VisualState.StateTriggers>
|
||||
<VisualState.Setters>
|
||||
<Setter Target="RowMemoryControls.MinHeight" Value="24"/>
|
||||
<Setter Target="RowMemoryControls.MinHeight" Value="0"/>
|
||||
|
||||
<Setter Target="ClearMemoryButton.Style" Value="{StaticResource CaptionButtonStyle}"/>
|
||||
<Setter Target="MemRecall.Style" Value="{StaticResource CaptionButtonStyle}"/>
|
||||
@@ -378,6 +510,30 @@
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<!-- Results display specific -->
|
||||
<VisualStateGroup>
|
||||
<VisualState x:Name="RegularAlwaysOnTop">
|
||||
<VisualState.StateTriggers>
|
||||
<AdaptiveTrigger MinWindowHeight="260"/>
|
||||
</VisualState.StateTriggers>
|
||||
<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">
|
||||
<VisualState.StateTriggers>
|
||||
<AdaptiveTrigger MinWindowHeight="0"/>
|
||||
</VisualState.StateTriggers>
|
||||
<VisualState.Setters>
|
||||
<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}"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup>
|
||||
<VisualState x:Name="ResultsL">
|
||||
<VisualState.StateTriggers>
|
||||
@@ -420,24 +576,34 @@
|
||||
<RowDefinition x:Name="RowHamburger" Height="{StaticResource HamburgerHeightGridLength}"/>
|
||||
<RowDefinition x:Name="RowExpression"
|
||||
Height="20*"
|
||||
MinHeight="20"/>
|
||||
MinHeight="0"/>
|
||||
<RowDefinition x:Name="RowResult"
|
||||
Height="72*"
|
||||
MinHeight="72"/>
|
||||
MinHeight="20"/>
|
||||
<RowDefinition x:Name="RowDisplayControls" Height="0"/>
|
||||
<RowDefinition x:Name="RowMemoryControls"
|
||||
Height="32*"
|
||||
MinHeight="32"/>
|
||||
MinHeight="0"/>
|
||||
<RowDefinition x:Name="RowNumPad"
|
||||
Height="308*"
|
||||
MinHeight="0"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<controls:OverflowTextBlock x:Name="ExpressionText"
|
||||
Grid.Row="1"
|
||||
Margin="6,0,6,0"
|
||||
Style="{StaticResource NormalStyle}"
|
||||
VerticalAlignment="Bottom"
|
||||
AutomationProperties.AutomationId="CalculatorExpression"
|
||||
AutomationProperties.Name="{x:Bind Model.CalculationExpressionAutomationName, Mode=OneWay}"
|
||||
IsTabStop="False"
|
||||
TokensUpdated="{x:Bind Model.AreTokensUpdated, Mode=OneWay}"
|
||||
Visibility="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanToVisibilityNegationConverter}, Mode=OneWay}"/>
|
||||
<controls:CalculationResult x:Name="Results"
|
||||
x:Uid="CalculatorResults"
|
||||
Grid.Row="2"
|
||||
Margin="0,0,0,0"
|
||||
Style="{ThemeResource ResultsStyle}"
|
||||
Style="{StaticResource ResultsStyle}"
|
||||
AutomationProperties.AutomationId="CalculatorResults"
|
||||
AutomationProperties.HeadingLevel="Level1"
|
||||
AutomationProperties.Name="{x:Bind Model.CalculationResultAutomationName, Mode=OneWay}"
|
||||
@@ -448,15 +614,20 @@
|
||||
ExpressionVisibility="Visible"
|
||||
IsInError="{x:Bind Model.IsInError, Mode=OneWay}"
|
||||
IsOperatorCommand="{x:Bind Model.IsOperatorCommand, Mode=OneWay}"
|
||||
TabIndex="1"/>
|
||||
<controls:OverflowTextBlock x:Name="ExpressionText"
|
||||
Grid.Row="1"
|
||||
TabIndex="1"
|
||||
Visibility="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanToVisibilityNegationConverter}, Mode=OneWay}"/>
|
||||
<controls:OverflowTextBlock x:Name="AlwaysOnTopResults"
|
||||
x:Uid="CalculatorAlwaysOnTopResults"
|
||||
Grid.Row="2"
|
||||
Margin="6,0,6,0"
|
||||
VerticalAlignment="Bottom"
|
||||
AutomationProperties.AutomationId="CalculatorExpression"
|
||||
AutomationProperties.Name="{x:Bind Model.CalculationExpressionAutomationName, Mode=OneWay}"
|
||||
IsTabStop="False"
|
||||
TokensUpdated="{x:Bind Model.AreTokensUpdated, Mode=OneWay}"/>
|
||||
AutomationProperties.AutomationId="CalculatorAlwaysOnTopResults"
|
||||
AutomationProperties.HeadingLevel="Level1"
|
||||
AutomationProperties.Name="{x:Bind Model.CalculationResultAutomationName, Mode=OneWay}"
|
||||
TokensUpdated="{x:Bind Model.AreAlwaysOnTopResultsUpdated, Mode=OneWay}"
|
||||
HorizontalContentAlignment="Right"
|
||||
IsActive="True"
|
||||
UseSystemFocusVisuals="True"
|
||||
Visibility="{x:Bind Model.IsAlwaysOnTop, Mode=OneWay}"/>
|
||||
|
||||
<!-- Programmer display panel controls -->
|
||||
<local:CalculatorProgrammerOperators x:Name="ProgrammerOperators"
|
||||
@@ -473,25 +644,29 @@
|
||||
TabIndex="7"
|
||||
Visibility="{x:Bind Model.IsProgrammer, Mode=OneWay}"/>
|
||||
|
||||
<Button x:Name="HistoryButton"
|
||||
<Grid x:Name="HistoryButtonParent"
|
||||
Visibility="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanToVisibilityNegationConverter}, Mode=OneWay}">
|
||||
<Button x:Name="HistoryButton"
|
||||
x:Uid="HistoryButton"
|
||||
Grid.Row="0"
|
||||
IsEnabled="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanNegationConverter}, Mode=OneWay}"
|
||||
Style="{StaticResource HistoryButtonStyle}"
|
||||
AutomationProperties.AutomationId="HistoryButton"
|
||||
Command="{x:Bind HistoryButtonPressed, Mode=OneTime}"
|
||||
Content=""
|
||||
ExitDisplayModeOnAccessKeyInvoked="False"
|
||||
TabIndex="2">
|
||||
<FlyoutBase.AttachedFlyout>
|
||||
<Flyout x:Name="HistoryFlyout"
|
||||
AutomationProperties.AutomationId="HistoryFlyout"
|
||||
Closed="HistoryFlyout_Closed"
|
||||
FlyoutPresenterStyle="{ThemeResource HistoryFlyoutStyle}"
|
||||
Opened="HistoryFlyout_Opened"
|
||||
Placement="Full"/>
|
||||
</FlyoutBase.AttachedFlyout>
|
||||
</Button>
|
||||
|
||||
<FlyoutBase.AttachedFlyout>
|
||||
<Flyout x:Name="HistoryFlyout"
|
||||
AutomationProperties.AutomationId="HistoryFlyout"
|
||||
Closed="HistoryFlyout_Closed"
|
||||
FlyoutPresenterStyle="{StaticResource HistoryFlyoutStyle}"
|
||||
Opened="HistoryFlyout_Opened"
|
||||
Placement="Full"/>
|
||||
</FlyoutBase.AttachedFlyout>
|
||||
</Button>
|
||||
</Grid>
|
||||
|
||||
<!-- Scientific angle buttons -->
|
||||
<local:CalculatorScientificAngleButtons x:Name="ScientificAngleButtons"
|
||||
Grid.Row="3"
|
||||
@@ -505,6 +680,7 @@
|
||||
x:Uid="MemoryPanel"
|
||||
Grid.Row="4"
|
||||
Margin="3,0,3,0"
|
||||
Visibility="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanToVisibilityNegationConverter}, Mode=OneWay}"
|
||||
AutomationProperties.HeadingLevel="Level1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="1*" MaxWidth="80"/>
|
||||
@@ -583,7 +759,7 @@
|
||||
x:Uid="MemoryFlyout"
|
||||
AutomationProperties.AutomationId="MemoryFlyout"
|
||||
Closed="OnMemoryFlyoutClosed"
|
||||
FlyoutPresenterStyle="{ThemeResource MemoryFlyoutStyle}"
|
||||
FlyoutPresenterStyle="{StaticResource MemoryFlyoutStyle}"
|
||||
Opened="OnMemoryFlyoutOpened"
|
||||
Placement="Full"/>
|
||||
</FlyoutBase.AttachedFlyout>
|
||||
@@ -944,7 +1120,6 @@
|
||||
</Border.Resources>
|
||||
|
||||
<Pivot x:Name="DockPivot"
|
||||
SelectionChanged="DockPivot_SelectionChanged"
|
||||
TabIndex="5"
|
||||
Tapped="DockPanelTapped"
|
||||
Template="{StaticResource DockPanelTemplate}">
|
||||
|
||||
@@ -40,6 +40,7 @@ using namespace Windows::UI::ViewManagement;
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(Calculator, IsStandard);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(Calculator, IsScientific);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(Calculator, IsProgrammer);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(Calculator, IsAlwaysOnTop);
|
||||
|
||||
Calculator::Calculator()
|
||||
: m_doAnimate(false)
|
||||
@@ -60,6 +61,8 @@ Calculator::Calculator()
|
||||
auto resLoader = AppResourceProvider::GetInstance();
|
||||
CopyMenuItem->Text = resLoader.GetResourceString(L"copyMenuItem");
|
||||
PasteMenuItem->Text = resLoader.GetResourceString(L"pasteMenuItem");
|
||||
|
||||
this->SizeChanged += ref new SizeChangedEventHandler(this, &Calculator::Calculator_SizeChanged);
|
||||
}
|
||||
|
||||
void Calculator::LoadResourceStrings()
|
||||
@@ -97,7 +100,7 @@ void Calculator::SetFontSizeResources()
|
||||
{ L"Tibt", 104, 29.333, 20, 40, 56, 40, 56 }, { L"Default", 104, 29.333, 23, 40, 56, 40, 56 }
|
||||
};
|
||||
|
||||
DecimalFormatter^ formatter = LocalizationService::GetInstance()->GetRegionalSettingsAwareDecimalFormatter();
|
||||
DecimalFormatter ^ formatter = LocalizationService::GetInstance()->GetRegionalSettingsAwareDecimalFormatter();
|
||||
|
||||
const FontTable* currentItem = fontTables;
|
||||
while (currentItem->numericSystem.compare(std::wstring(L"Default")) != 0 && currentItem->numericSystem.compare(formatter->NumeralSystem->Data()) != 0)
|
||||
@@ -135,7 +138,7 @@ void Calculator::OnLoaded(_In_ Object ^, _In_ RoutedEventArgs ^)
|
||||
WeakReference weakThis(this);
|
||||
this->Dispatcher->RunAsync(
|
||||
CoreDispatcherPriority::Normal, ref new DispatchedHandler([weakThis]() {
|
||||
if (TraceLogger::GetInstance().UpdateWindowIdLog(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())))
|
||||
if (TraceLogger::GetInstance().IsWindowIdInLog(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())))
|
||||
{
|
||||
auto refThis = weakThis.Resolve<Calculator>();
|
||||
if (refThis != nullptr)
|
||||
@@ -279,6 +282,35 @@ void Calculator::OnIsProgrammerPropertyChanged(bool /*oldValue*/, bool newValue)
|
||||
UpdatePanelViewState();
|
||||
}
|
||||
|
||||
void Calculator::OnIsAlwaysOnTopPropertyChanged(bool /*oldValue*/, bool newValue)
|
||||
{
|
||||
if (newValue)
|
||||
{
|
||||
VisualStateManager::GoToState(this, L"AlwaysOnTop", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
VisualStateManager::GoToState(this, L"Normal", false);
|
||||
if (Model->IsInError)
|
||||
{
|
||||
VisualStateManager::GoToState(this, L"ErrorLayout", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableMemoryControls(true);
|
||||
}
|
||||
}
|
||||
|
||||
Model->IsMemoryEmpty = (Model->MemorizedNumbers->Size == 0) || IsAlwaysOnTop;
|
||||
|
||||
AlwaysOnTopResults->UpdateScrollButtons();
|
||||
Results->UpdateTextState();
|
||||
|
||||
UpdateViewState();
|
||||
UpdatePanelViewState();
|
||||
SetDefaultFocus();
|
||||
}
|
||||
|
||||
void Calculator::OnIsInErrorPropertyChanged()
|
||||
{
|
||||
bool isError = Model->IsInError;
|
||||
@@ -395,33 +427,36 @@ void Calculator::UpdateHistoryState()
|
||||
|
||||
void Calculator::UpdateMemoryState()
|
||||
{
|
||||
if (!Model->IsMemoryEmpty)
|
||||
if (!IsAlwaysOnTop)
|
||||
{
|
||||
MemRecall->IsEnabled = true;
|
||||
ClearMemoryButton->IsEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
MemRecall->IsEnabled = false;
|
||||
ClearMemoryButton->IsEnabled = false;
|
||||
}
|
||||
|
||||
String ^ viewState = App::GetAppViewState();
|
||||
if (viewState == ViewState::DockedView)
|
||||
{
|
||||
CloseMemoryFlyout();
|
||||
SetChildAsMemory();
|
||||
MemoryButton->Visibility = ::Visibility::Collapsed;
|
||||
|
||||
if (m_IsLastFlyoutMemory && !IsProgrammer)
|
||||
if (!Model->IsMemoryEmpty)
|
||||
{
|
||||
DockPivot->SelectedIndex = 1;
|
||||
MemRecall->IsEnabled = true;
|
||||
ClearMemoryButton->IsEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
MemRecall->IsEnabled = false;
|
||||
ClearMemoryButton->IsEnabled = false;
|
||||
}
|
||||
|
||||
String ^ viewState = App::GetAppViewState();
|
||||
if (viewState == ViewState::DockedView)
|
||||
{
|
||||
CloseMemoryFlyout();
|
||||
SetChildAsMemory();
|
||||
MemoryButton->Visibility = ::Visibility::Collapsed;
|
||||
|
||||
if (m_IsLastFlyoutMemory && !IsProgrammer)
|
||||
{
|
||||
DockPivot->SelectedIndex = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MemoryButton->Visibility = ::Visibility::Visible;
|
||||
DockMemoryHolder->Child = nullptr;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MemoryButton->Visibility = ::Visibility::Visible;
|
||||
DockMemoryHolder->Child = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -450,13 +485,11 @@ void Calculator::OnHistoryItemClicked(_In_ HistoryItemViewModel ^ e)
|
||||
unsigned int tokenSize;
|
||||
assert(e->GetTokens() != nullptr);
|
||||
e->GetTokens()->GetSize(&tokenSize);
|
||||
TraceLogger::GetInstance().LogHistoryItemLoadBegin();
|
||||
Model->SetHistoryExpressionDisplay(e->GetTokens(), e->GetCommands());
|
||||
Model->SetExpressionDisplay(e->GetTokens(), e->GetCommands());
|
||||
Model->SetPrimaryDisplay(e->Result->Data(), false);
|
||||
Model->IsFToEEnabled = false;
|
||||
|
||||
TraceLogger::GetInstance().LogHistoryItemLoadEnd(tokenSize);
|
||||
CloseHistoryFlyout();
|
||||
this->Focus(::FocusState::Programmatic);
|
||||
}
|
||||
@@ -468,8 +501,6 @@ void Calculator::HistoryFlyout_Opened(_In_ Object ^ sender, _In_ Object ^ args)
|
||||
m_IsLastFlyoutHistory = true;
|
||||
EnableControls(false);
|
||||
AutomationProperties::SetName(HistoryButton, m_closeHistoryFlyoutAutomationName);
|
||||
TraceLogger::GetInstance().LogHistoryFlyoutOpenEnd(Model->HistoryVM->ItemSize);
|
||||
TraceLogger::GetInstance().LogHistoryBodyOpened();
|
||||
}
|
||||
|
||||
void Calculator::HistoryFlyout_Closing(_In_ FlyoutBase ^ sender, _In_ FlyoutBaseClosingEventArgs ^ args)
|
||||
@@ -511,7 +542,14 @@ void Calculator::CloseMemoryFlyout()
|
||||
|
||||
void Calculator::SetDefaultFocus()
|
||||
{
|
||||
Results->Focus(::FocusState::Programmatic);
|
||||
if (!IsAlwaysOnTop)
|
||||
{
|
||||
Results->Focus(::FocusState::Programmatic);
|
||||
}
|
||||
else
|
||||
{
|
||||
AlwaysOnTopResults->Focus(::FocusState::Programmatic);
|
||||
}
|
||||
}
|
||||
|
||||
void Calculator::ToggleHistoryFlyout(Object ^ /*parameter*/)
|
||||
@@ -526,7 +564,6 @@ void Calculator::ToggleHistoryFlyout(Object ^ /*parameter*/)
|
||||
}
|
||||
else
|
||||
{
|
||||
TraceLogger::GetInstance().LogHistoryFlyoutOpenBegin(Model->HistoryVM->ItemSize);
|
||||
HistoryFlyout->Content = m_historyList;
|
||||
m_historyList->RowHeight = NumpadPanel->ActualHeight;
|
||||
FlyoutBase::ShowAttachedFlyout(HistoryButton);
|
||||
@@ -545,7 +582,6 @@ void Calculator::ToggleMemoryFlyout()
|
||||
}
|
||||
else
|
||||
{
|
||||
TraceLogger::GetInstance().LogMemoryFlyoutOpenBegin(Model->MemorizedNumbers->Size);
|
||||
MemoryFlyout->Content = GetMemory();
|
||||
m_memory->RowHeight = NumpadPanel->ActualHeight;
|
||||
FlyoutBase::ShowAttachedFlyout(MemoryButton);
|
||||
@@ -555,13 +591,11 @@ void Calculator::ToggleMemoryFlyout()
|
||||
|
||||
void Calculator::OnMemoryFlyoutOpened(_In_ Object ^ sender, _In_ Object ^ args)
|
||||
{
|
||||
TraceLogger::GetInstance().LogMemoryFlyoutOpenEnd(Model->MemorizedNumbers->Size);
|
||||
m_IsLastFlyoutMemory = true;
|
||||
m_IsLastFlyoutHistory = false;
|
||||
m_fIsMemoryFlyoutOpen = true;
|
||||
AutomationProperties::SetName(MemoryButton, m_closeMemoryFlyoutAutomationName);
|
||||
EnableControls(false);
|
||||
TraceLogger::GetInstance().LogMemoryBodyOpened();
|
||||
}
|
||||
|
||||
void Calculator::OnMemoryFlyoutClosing(_In_ FlyoutBase ^ sender, _In_ FlyoutBaseClosingEventArgs ^ args)
|
||||
@@ -700,14 +734,17 @@ void Calculator::OnMemoryAccessKeyInvoked(_In_ UIElement ^ sender, _In_ AccessKe
|
||||
DockPivot->SelectedItem = MemoryPivotItem;
|
||||
}
|
||||
|
||||
void CalculatorApp::Calculator::DockPivot_SelectionChanged(Platform::Object ^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs ^ e)
|
||||
void CalculatorApp::Calculator::OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e)
|
||||
{
|
||||
if (DockPivot->SelectedIndex == 0)
|
||||
auto mode = IsStandard ? ViewMode::Standard : IsScientific ? ViewMode::Scientific : ViewMode::Programmer;
|
||||
auto state = std::wstring(e->NewState->Name->Begin());
|
||||
TraceLogger::GetInstance().LogVisualStateChanged(mode, state, IsAlwaysOnTop);
|
||||
}
|
||||
|
||||
void Calculator::Calculator_SizeChanged(Object ^ /*sender*/, SizeChangedEventArgs ^ /*e*/)
|
||||
{
|
||||
if (Model->IsAlwaysOnTop)
|
||||
{
|
||||
TraceLogger::GetInstance().LogHistoryBodyOpened();
|
||||
}
|
||||
else
|
||||
{
|
||||
TraceLogger::GetInstance().LogMemoryBodyOpened();
|
||||
AlwaysOnTopResults->UpdateScrollButtons();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ public
|
||||
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(bool, IsStandard, false);
|
||||
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(bool, IsScientific, false);
|
||||
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(bool, IsProgrammer, false);
|
||||
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(bool, IsAlwaysOnTop, false);
|
||||
|
||||
COMMAND_FOR_METHOD(HistoryButtonPressed, Calculator::ToggleHistoryFlyout);
|
||||
|
||||
@@ -76,12 +77,12 @@ public
|
||||
void UpdateMemoryState();
|
||||
void UpdateHistoryState();
|
||||
|
||||
void CalculationResultsOnSelected(_In_ Platform::Object ^ sender);
|
||||
void OnContextRequested(Windows::UI::Xaml::UIElement ^ sender, Windows::UI::Xaml::Input::ContextRequestedEventArgs ^ e);
|
||||
void OnContextCanceled(Windows::UI::Xaml::UIElement ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void OnIsScientificPropertyChanged(bool oldValue, bool newValue);
|
||||
void OnIsProgrammerPropertyChanged(bool oldValue, bool newValue);
|
||||
void OnIsStandardPropertyChanged(bool oldValue, bool newValue);
|
||||
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);
|
||||
@@ -90,6 +91,7 @@ public
|
||||
void EnsureProgrammer();
|
||||
void SetFontSizeResources();
|
||||
std::wstring GetCurrentLayoutState();
|
||||
void Calculator_SizeChanged(Object ^ sender, Windows::UI::Xaml::SizeChangedEventArgs ^ e);
|
||||
|
||||
private:
|
||||
Windows::UI::Xaml::Controls::ListView ^ m_tokenList;
|
||||
@@ -139,6 +141,6 @@ public
|
||||
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 DockPivot_SelectionChanged(Platform::Object ^ sender, Windows::UI::Xaml::Controls::SelectionChangedEventArgs ^ e);
|
||||
void OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
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"
|
||||
@@ -14,11 +13,6 @@
|
||||
Unloaded="OnUnloaded"
|
||||
mc:Ignorable="d">
|
||||
<UserControl.Resources>
|
||||
<converters:BooleanNegationConverter x:Key="BooleanNegationConverter"/>
|
||||
<converters:BooleanToVisibilityNegationConverter x:Key="BooleanToVisibilityNegationConverter"/>
|
||||
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
|
||||
<converters:BitFlipAutomationNameConverter x:Key="BitFlipAutomationNameConverter"/>
|
||||
|
||||
<Style x:Key="FlippingToggleButtonStyle" TargetType="ToggleButton">
|
||||
<Setter Property="FontSize" Value="20"/>
|
||||
<Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}"/>
|
||||
@@ -141,7 +135,6 @@
|
||||
<Setter Property="Foreground" Value="{ThemeResource AppControlPageTextBaseMediumHighBrush}"/>
|
||||
<Setter Property="AutomationProperties.AccessibilityView" Value="Raw"/>
|
||||
</Style>
|
||||
|
||||
</UserControl.Resources>
|
||||
<Grid x:Name="BitFlipPanel"
|
||||
x:Uid="BitFlipPanel"
|
||||
@@ -304,569 +297,761 @@
|
||||
<controls:FlipButtons x:Name="Bit63"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='63', Mode=OneWay}"
|
||||
ButtonId="BINPOS63"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 63), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>63</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit62"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='62', Mode=OneWay}"
|
||||
ButtonId="BINPOS62"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 62), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>62</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit61"
|
||||
Grid.Column="3"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='61', Mode=OneWay}"
|
||||
ButtonId="BINPOS61"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 61), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>61</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit60"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='60', Mode=OneWay}"
|
||||
ButtonId="BINPOS60"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 60), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>60</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit59"
|
||||
Grid.Column="6"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='59', Mode=OneWay}"
|
||||
ButtonId="BINPOS59"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 59), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>59</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit58"
|
||||
Grid.Column="7"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='58', Mode=OneWay}"
|
||||
ButtonId="BINPOS58"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 58), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>58</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit57"
|
||||
Grid.Column="8"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='57', Mode=OneWay}"
|
||||
ButtonId="BINPOS57"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 57), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>57</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit56"
|
||||
Grid.Column="9"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='56', Mode=OneWay}"
|
||||
ButtonId="BINPOS56"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 56), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>56</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit55"
|
||||
Grid.Column="11"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='55', Mode=OneWay}"
|
||||
ButtonId="BINPOS55"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 55), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>55</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit54"
|
||||
Grid.Column="12"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='54', Mode=OneWay}"
|
||||
ButtonId="BINPOS54"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 54), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>54</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit53"
|
||||
Grid.Column="13"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='53', Mode=OneWay}"
|
||||
ButtonId="BINPOS53"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 53), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>53</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit52"
|
||||
Grid.Column="14"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='52', Mode=OneWay}"
|
||||
ButtonId="BINPOS52"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 52), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>52</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit51"
|
||||
Grid.Column="16"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='51', Mode=OneWay}"
|
||||
ButtonId="BINPOS51"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 51), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>51</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit50"
|
||||
Grid.Column="17"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='50', Mode=OneWay}"
|
||||
ButtonId="BINPOS50"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 50), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>50</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit49"
|
||||
Grid.Column="18"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='49', Mode=OneWay}"
|
||||
ButtonId="BINPOS49"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 49), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>49</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit48"
|
||||
Grid.Column="19"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='48', Mode=OneWay}"
|
||||
ButtonId="BINPOS48"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 48), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>48</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit47"
|
||||
Grid.Row="2"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='47', Mode=OneWay}"
|
||||
ButtonId="BINPOS47"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 47), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>47</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit46"
|
||||
Grid.Row="2"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='46', Mode=OneWay}"
|
||||
ButtonId="BINPOS46"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 46), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>46</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit45"
|
||||
Grid.Row="2"
|
||||
Grid.Column="3"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='45', Mode=OneWay}"
|
||||
ButtonId="BINPOS45"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 45), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>45</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit44"
|
||||
Grid.Row="2"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='44', Mode=OneWay}"
|
||||
ButtonId="BINPOS44"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 44), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>44</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit43"
|
||||
Grid.Row="2"
|
||||
Grid.Column="6"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='43', Mode=OneWay}"
|
||||
ButtonId="BINPOS43"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 43), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>43</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit42"
|
||||
Grid.Row="2"
|
||||
Grid.Column="7"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='42', Mode=OneWay}"
|
||||
ButtonId="BINPOS42"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 42), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>42</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit41"
|
||||
Grid.Row="2"
|
||||
Grid.Column="8"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='41', Mode=OneWay}"
|
||||
ButtonId="BINPOS41"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 41), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>41</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit40"
|
||||
Grid.Row="2"
|
||||
Grid.Column="9"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='40', Mode=OneWay}"
|
||||
ButtonId="BINPOS40"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 40), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>40</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit39"
|
||||
Grid.Row="2"
|
||||
Grid.Column="11"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='39', Mode=OneWay}"
|
||||
ButtonId="BINPOS39"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 39), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>39</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit38"
|
||||
Grid.Row="2"
|
||||
Grid.Column="12"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='38', Mode=OneWay}"
|
||||
ButtonId="BINPOS38"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 38), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>38</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit37"
|
||||
Grid.Row="2"
|
||||
Grid.Column="13"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='37', Mode=OneWay}"
|
||||
ButtonId="BINPOS37"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 37), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>37</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit36"
|
||||
Grid.Row="2"
|
||||
Grid.Column="14"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='36', Mode=OneWay}"
|
||||
ButtonId="BINPOS36"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 36), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>36</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit35"
|
||||
Grid.Row="2"
|
||||
Grid.Column="16"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='35', Mode=OneWay}"
|
||||
ButtonId="BINPOS35"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 35), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>35</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit34"
|
||||
Grid.Row="2"
|
||||
Grid.Column="17"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='34', Mode=OneWay}"
|
||||
ButtonId="BINPOS34"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 34), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>34</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit33"
|
||||
Grid.Row="2"
|
||||
Grid.Column="18"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='33', Mode=OneWay}"
|
||||
ButtonId="BINPOS33"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 33), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>33</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit32"
|
||||
Grid.Row="2"
|
||||
Grid.Column="19"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='32', Mode=OneWay}"
|
||||
ButtonId="BINPOS32"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsQwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 32), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>32</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit31"
|
||||
Grid.Row="4"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='31', Mode=OneWay}"
|
||||
ButtonId="BINPOS31"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 31), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>31</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit30"
|
||||
Grid.Row="4"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='30', Mode=OneWay}"
|
||||
ButtonId="BINPOS30"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 30), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>30</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit29"
|
||||
Grid.Row="4"
|
||||
Grid.Column="3"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='29', Mode=OneWay}"
|
||||
ButtonId="BINPOS29"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 29), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>29</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit28"
|
||||
Grid.Row="4"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='28', Mode=OneWay}"
|
||||
ButtonId="BINPOS28"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 28), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>28</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit27"
|
||||
Grid.Row="4"
|
||||
Grid.Column="6"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='27', Mode=OneWay}"
|
||||
ButtonId="BINPOS27"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 27), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>27</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit26"
|
||||
Grid.Row="4"
|
||||
Grid.Column="7"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='26', Mode=OneWay}"
|
||||
ButtonId="BINPOS26"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 26), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>26</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit25"
|
||||
Grid.Row="4"
|
||||
Grid.Column="8"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='25', Mode=OneWay}"
|
||||
ButtonId="BINPOS25"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 25), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>25</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit24"
|
||||
Grid.Row="4"
|
||||
Grid.Column="9"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='24', Mode=OneWay}"
|
||||
ButtonId="BINPOS24"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 24), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>24</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit23"
|
||||
Grid.Row="4"
|
||||
Grid.Column="11"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='23', Mode=OneWay}"
|
||||
ButtonId="BINPOS23"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 23), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>23</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit22"
|
||||
Grid.Row="4"
|
||||
Grid.Column="12"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='22', Mode=OneWay}"
|
||||
ButtonId="BINPOS22"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 22), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>22</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit21"
|
||||
Grid.Row="4"
|
||||
Grid.Column="13"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='21', Mode=OneWay}"
|
||||
ButtonId="BINPOS21"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 21), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>21</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit20"
|
||||
Grid.Row="4"
|
||||
Grid.Column="14"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='20', Mode=OneWay}"
|
||||
ButtonId="BINPOS20"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 20), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>20</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit19"
|
||||
Grid.Row="4"
|
||||
Grid.Column="16"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='19', Mode=OneWay}"
|
||||
ButtonId="BINPOS19"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 19), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>19</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit18"
|
||||
Grid.Row="4"
|
||||
Grid.Column="17"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='18', Mode=OneWay}"
|
||||
ButtonId="BINPOS18"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 18), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>18</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit17"
|
||||
Grid.Row="4"
|
||||
Grid.Column="18"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='17', Mode=OneWay}"
|
||||
ButtonId="BINPOS17"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 17), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>17</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit16"
|
||||
Grid.Row="4"
|
||||
Grid.Column="19"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='16', Mode=OneWay}"
|
||||
ButtonId="BINPOS16"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsDwordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 16), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>16</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit15"
|
||||
Grid.Row="6"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='15', Mode=OneWay}"
|
||||
ButtonId="BINPOS15"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsWordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 15), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>15</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit14"
|
||||
Grid.Row="6"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='14', Mode=OneWay}"
|
||||
ButtonId="BINPOS14"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsWordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 14), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>14</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit13"
|
||||
Grid.Row="6"
|
||||
Grid.Column="3"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='13', Mode=OneWay}"
|
||||
ButtonId="BINPOS13"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsWordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 13), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>13</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit12"
|
||||
Grid.Row="6"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='12', Mode=OneWay}"
|
||||
ButtonId="BINPOS12"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsWordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 12), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>12</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit11"
|
||||
Grid.Row="6"
|
||||
Grid.Column="6"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='11', Mode=OneWay}"
|
||||
ButtonId="BINPOS11"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsWordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 11), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>11</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit10"
|
||||
Grid.Row="6"
|
||||
Grid.Column="7"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='10', Mode=OneWay}"
|
||||
ButtonId="BINPOS10"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsWordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 10), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>10</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit9"
|
||||
Grid.Row="6"
|
||||
Grid.Column="8"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='9', Mode=OneWay}"
|
||||
ButtonId="BINPOS9"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsWordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 9), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>9</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit8"
|
||||
Grid.Row="6"
|
||||
Grid.Column="9"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='8', Mode=OneWay}"
|
||||
ButtonId="BINPOS8"
|
||||
Checked="OnBitToggled"
|
||||
IsEnabled="{x:Bind Model.IsWordEnabled, Mode=OneWay}"
|
||||
Unchecked="OnBitToggled"/>
|
||||
IsEnabled="{x:Bind ShouldEnableBit(Model.ValueBitLength, 8), Mode=OneWay}"
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>8</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit7"
|
||||
Grid.Row="6"
|
||||
Grid.Column="11"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='7', Mode=OneWay}"
|
||||
ButtonId="BINPOS7"
|
||||
Checked="OnBitToggled"
|
||||
Unchecked="OnBitToggled"/>
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>7</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit6"
|
||||
Grid.Row="6"
|
||||
Grid.Column="12"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='6', Mode=OneWay}"
|
||||
ButtonId="BINPOS6"
|
||||
Checked="OnBitToggled"
|
||||
Unchecked="OnBitToggled"/>
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>6</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit5"
|
||||
Grid.Row="6"
|
||||
Grid.Column="13"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='5', Mode=OneWay}"
|
||||
ButtonId="BINPOS5"
|
||||
Checked="OnBitToggled"
|
||||
Unchecked="OnBitToggled"/>
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>5</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit4"
|
||||
Grid.Row="6"
|
||||
Grid.Column="14"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='4', Mode=OneWay}"
|
||||
ButtonId="BINPOS4"
|
||||
Checked="OnBitToggled"
|
||||
Unchecked="OnBitToggled"/>
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>4</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
|
||||
<controls:FlipButtons x:Name="Bit3"
|
||||
Grid.Row="6"
|
||||
Grid.Column="16"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='3', Mode=OneWay}"
|
||||
ButtonId="BINPOS3"
|
||||
Checked="OnBitToggled"
|
||||
Unchecked="OnBitToggled"/>
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>3</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit2"
|
||||
Grid.Row="6"
|
||||
Grid.Column="17"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='2', Mode=OneWay}"
|
||||
ButtonId="BINPOS2"
|
||||
Checked="OnBitToggled"
|
||||
Unchecked="OnBitToggled"/>
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>2</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit1"
|
||||
Grid.Row="6"
|
||||
Grid.Column="18"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='1', Mode=OneWay}"
|
||||
ButtonId="BINPOS1"
|
||||
Checked="OnBitToggled"
|
||||
Unchecked="OnBitToggled"/>
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>1</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
<controls:FlipButtons x:Name="Bit0"
|
||||
Grid.Row="6"
|
||||
Grid.Column="19"
|
||||
Style="{StaticResource FlippingToggleButtonStyle}"
|
||||
AutomationProperties.Name="{x:Bind Model.BinaryDisplayValue, Converter={StaticResource BitFlipAutomationNameConverter}, ConverterParameter='0', Mode=OneWay}"
|
||||
ButtonId="BINPOS0"
|
||||
Checked="OnBitToggled"
|
||||
Unchecked="OnBitToggled"/>
|
||||
Unchecked="OnBitToggled">
|
||||
<controls:FlipButtons.Tag>
|
||||
<x:Int32>0</x:Int32>
|
||||
</controls:FlipButtons.Tag>
|
||||
</controls:FlipButtons>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#include "CalcViewModel/Common/TraceLogger.h"
|
||||
#include "CalcViewModel/Common/LocalizationSettings.h"
|
||||
#include "Converters/BooleanToVisibilityConverter.h"
|
||||
#include <CalcViewModel/Common/AppResourceProvider.h>
|
||||
#include "CalcViewModel/Common/LocalizationStringUtil.h"
|
||||
|
||||
using namespace CalculatorApp;
|
||||
using namespace CalculatorApp::Common;
|
||||
@@ -19,6 +21,7 @@ using namespace CalculatorApp::ViewModel;
|
||||
using namespace Platform;
|
||||
using namespace std;
|
||||
using namespace Windows::UI::Xaml;
|
||||
using namespace Windows::UI::Xaml::Automation;
|
||||
using namespace Windows::UI::Xaml::Controls;
|
||||
using namespace Windows::UI::Xaml::Data;
|
||||
using namespace Windows::UI::Xaml::Input;
|
||||
@@ -29,15 +32,11 @@ CalculatorProgrammerBitFlipPanel::CalculatorProgrammerBitFlipPanel()
|
||||
: m_updatingCheckedStates(false)
|
||||
{
|
||||
InitializeComponent();
|
||||
auto booleanToVisibilityConverter = ref new Converters::BooleanToVisibilityConverter;
|
||||
SetVisibilityBinding(BitFlipPanel, L"IsBinaryBitFlippingEnabled", booleanToVisibilityConverter);
|
||||
|
||||
AssignFlipButtons();
|
||||
}
|
||||
|
||||
void CalculatorProgrammerBitFlipPanel::OnLoaded(Object ^ sender, RoutedEventArgs ^ e)
|
||||
{
|
||||
UnsubscribePropertyChanged();
|
||||
SubscribePropertyChanged();
|
||||
}
|
||||
|
||||
@@ -51,8 +50,7 @@ void CalculatorProgrammerBitFlipPanel::SubscribePropertyChanged()
|
||||
if (Model != nullptr)
|
||||
{
|
||||
m_propertyChangedToken = Model->PropertyChanged += ref new PropertyChangedEventHandler(this, &CalculatorProgrammerBitFlipPanel::OnPropertyChanged);
|
||||
|
||||
UpdateCheckedStates();
|
||||
UpdateCheckedStates(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,9 +65,19 @@ void CalculatorProgrammerBitFlipPanel::UnsubscribePropertyChanged()
|
||||
|
||||
void CalculatorProgrammerBitFlipPanel::OnPropertyChanged(Object ^ sender, PropertyChangedEventArgs ^ e)
|
||||
{
|
||||
if (e->PropertyName == StandardCalculatorViewModel::BinaryDisplayValuePropertyName)
|
||||
if (e->PropertyName == StandardCalculatorViewModel::BinaryDigitsPropertyName)
|
||||
{
|
||||
UpdateCheckedStates();
|
||||
UpdateCheckedStates(false);
|
||||
}
|
||||
else if (e->PropertyName == StandardCalculatorViewModel::IsBitFlipCheckedPropertyName
|
||||
|| e->PropertyName == StandardCalculatorViewModel::IsProgrammerPropertyName)
|
||||
{
|
||||
if (Model->IsBitFlipChecked && Model->IsProgrammer)
|
||||
{
|
||||
// OnBitToggle won't update the automation properties when this control isn't displayed
|
||||
// We need to update all automation properties names manually when the BitFlipPanel is displayed again
|
||||
UpdateAutomationPropertiesNames();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,14 +156,6 @@ void CalculatorProgrammerBitFlipPanel::AssignFlipButtons()
|
||||
m_flipButtons[63] = this->Bit63;
|
||||
}
|
||||
|
||||
void CalculatorProgrammerBitFlipPanel::SetVisibilityBinding(_In_ FrameworkElement ^ element, _In_ String ^ path, _In_ IValueConverter ^ converter)
|
||||
{
|
||||
Binding ^ commandBinding = ref new Binding();
|
||||
commandBinding->Path = ref new PropertyPath(path);
|
||||
commandBinding->Converter = converter;
|
||||
element->SetBinding(VisibilityProperty, commandBinding);
|
||||
}
|
||||
|
||||
void CalculatorProgrammerBitFlipPanel::OnBitToggled(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
if (m_updatingCheckedStates)
|
||||
@@ -168,16 +168,16 @@ void CalculatorProgrammerBitFlipPanel::OnBitToggled(_In_ Object ^ sender, _In_ R
|
||||
// Also, if the mode is switched to other Calculator modes when the BitFlip panel is open,
|
||||
// a race condition exists in which the IsProgrammerMode property is still true and the UpdatePrimaryResult() is called,
|
||||
// which continuously alters the Display Value and the state of the Bit Flip buttons.
|
||||
if ((Model->IsBitFlipChecked) && Model->IsProgrammer)
|
||||
if (Model->IsBitFlipChecked && Model->IsProgrammer)
|
||||
{
|
||||
TraceLogger::GetInstance().LogBitFlipUsed();
|
||||
|
||||
auto flipButton = static_cast<FlipButtons ^>(sender);
|
||||
int index = static_cast<int>(flipButton->Tag);
|
||||
flipButton->SetValue(AutomationProperties::NameProperty, GenerateAutomationPropertiesName(index, flipButton->IsChecked->Value));
|
||||
Model->ButtonPressed->Execute(flipButton->ButtonId);
|
||||
}
|
||||
}
|
||||
|
||||
void CalculatorProgrammerBitFlipPanel::UpdateCheckedStates()
|
||||
void CalculatorProgrammerBitFlipPanel::UpdateCheckedStates(bool updateAutomationPropertiesNames)
|
||||
{
|
||||
assert(!m_updatingCheckedStates);
|
||||
assert(m_flipButtons.size() == s_numBits);
|
||||
@@ -187,35 +187,57 @@ void CalculatorProgrammerBitFlipPanel::UpdateCheckedStates()
|
||||
return;
|
||||
}
|
||||
|
||||
static const wchar_t ch0 = LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit(L'0');
|
||||
|
||||
// Filter any unwanted characters from the displayed string.
|
||||
static constexpr array<wchar_t, 4> unwantedChars = { L' ', Utils::LRE, Utils::PDF, Utils::LRO };
|
||||
|
||||
wstringstream stream;
|
||||
wstring displayValue = Model->BinaryDisplayValue->Data();
|
||||
for (const wchar_t& c : displayValue)
|
||||
{
|
||||
if (find(begin(unwantedChars), end(unwantedChars), c) == unwantedChars.end())
|
||||
{
|
||||
stream << c;
|
||||
}
|
||||
}
|
||||
|
||||
wstring rawDisplay = stream.str();
|
||||
size_t paddingCount = s_numBits - rawDisplay.length();
|
||||
wstring setBits = wstring(paddingCount, ch0) + rawDisplay;
|
||||
assert(setBits.length() == s_numBits);
|
||||
|
||||
m_updatingCheckedStates = true;
|
||||
for (unsigned int bitIndex = 0; bitIndex < s_numBits; bitIndex++)
|
||||
auto it = m_flipButtons.begin();
|
||||
int index = 0;
|
||||
for (bool val : Model->BinaryDigits)
|
||||
{
|
||||
// Highest bit (64) is at index 0 in bit string.
|
||||
// To get bit 0, grab from opposite end of string.
|
||||
wchar_t bit = setBits[s_numBits - bitIndex - 1];
|
||||
|
||||
m_flipButtons[bitIndex]->IsChecked = (bit != ch0);
|
||||
FlipButtons ^ flipButton = *it;
|
||||
if (updateAutomationPropertiesNames)
|
||||
{
|
||||
flipButton->SetValue(AutomationProperties::NameProperty, GenerateAutomationPropertiesName(index, flipButton->IsChecked->Value));
|
||||
}
|
||||
flipButton->IsChecked = val;
|
||||
++it;
|
||||
++index;
|
||||
}
|
||||
|
||||
m_updatingCheckedStates = false;
|
||||
}
|
||||
|
||||
void CalculatorProgrammerBitFlipPanel::UpdateAutomationPropertiesNames()
|
||||
{
|
||||
for (FlipButtons ^ flipButton : m_flipButtons)
|
||||
{
|
||||
int index = static_cast<int>(flipButton->Tag);
|
||||
flipButton->SetValue(AutomationProperties::NameProperty, GenerateAutomationPropertiesName(index, flipButton->IsChecked->Value));
|
||||
}
|
||||
}
|
||||
|
||||
bool CalculatorProgrammerBitFlipPanel::ShouldEnableBit(BitLength length, int index)
|
||||
{
|
||||
switch (length)
|
||||
{
|
||||
case BitLength::BitLengthQWord:
|
||||
return index <= 63;
|
||||
case BitLength::BitLengthDWord:
|
||||
return index <= 31;
|
||||
case BitLength::BitLengthWord:
|
||||
return index <= 15;
|
||||
case BitLength::BitLengthByte:
|
||||
return index <= 7;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
String ^ CalculatorProgrammerBitFlipPanel::GenerateAutomationPropertiesName(int position, bool value) const
|
||||
{
|
||||
auto resourceLoader = AppResourceProvider::GetInstance();
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
//
|
||||
@@ -10,9 +10,6 @@
|
||||
|
||||
#include "Views/CalculatorProgrammerBitFlipPanel.g.h"
|
||||
#include "Controls/FlipButtons.h"
|
||||
#include "Converters/BitFlipAutomationNameConverter.h"
|
||||
#include "Converters/BooleanNegationConverter.h"
|
||||
#include "Converters/VisibilityNegationConverter.h"
|
||||
#include "CalcViewModel/StandardCalculatorViewModel.h"
|
||||
|
||||
namespace CalculatorApp
|
||||
@@ -22,6 +19,8 @@ namespace CalculatorApp
|
||||
public:
|
||||
CalculatorProgrammerBitFlipPanel();
|
||||
|
||||
bool ShouldEnableBit(CalculatorApp::Common::BitLength length, int index);
|
||||
|
||||
property CalculatorApp::ViewModel::StandardCalculatorViewModel
|
||||
^ Model { CalculatorApp::ViewModel::StandardCalculatorViewModel ^ get(); }
|
||||
|
||||
@@ -34,15 +33,13 @@ namespace CalculatorApp
|
||||
|
||||
void AssignFlipButtons();
|
||||
|
||||
void SetVisibilityBinding(
|
||||
_In_ Windows::UI::Xaml::FrameworkElement ^ element,
|
||||
_In_ Platform::String ^ path,
|
||||
_In_ Windows::UI::Xaml::Data::IValueConverter ^ converter);
|
||||
void OnBitToggled(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void UpdateCheckedStates();
|
||||
|
||||
private:
|
||||
Windows::Foundation::EventRegistrationToken m_propertyChangedToken;
|
||||
Platform::String ^ GenerateAutomationPropertiesName(int position, bool value) const;
|
||||
void UpdateCheckedStates(bool updateAutomationPropertiesNames);
|
||||
void UpdateAutomationPropertiesNames();
|
||||
|
||||
static const unsigned int s_numBits = 64;
|
||||
std::array<CalculatorApp::Controls::FlipButtons ^, s_numBits> m_flipButtons;
|
||||
|
||||
@@ -70,7 +70,6 @@
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource ProgKeypadRadioButtonStyle}"
|
||||
AutomationProperties.AutomationId="bitFlip"
|
||||
Checked="ShowBitFlip"
|
||||
Content=""
|
||||
IsChecked="{x:Bind Model.IsBitFlipChecked, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "CalcViewModel/Common/TraceLogger.h"
|
||||
|
||||
using namespace CalculatorApp;
|
||||
using namespace CalculatorApp::Common;
|
||||
using namespace CalculatorApp::ViewModel;
|
||||
using namespace Platform;
|
||||
using namespace Windows::Foundation;
|
||||
@@ -26,14 +27,8 @@ CalculatorProgrammerDisplayPanel::CalculatorProgrammerDisplayPanel()
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
void CalculatorProgrammerDisplayPanel::ShowBitFlip(Object ^ sender, RoutedEventArgs ^ e)
|
||||
{
|
||||
TraceLogger::GetInstance().LogBitFlipPaneClicked();
|
||||
}
|
||||
|
||||
void CalculatorProgrammerDisplayPanel::OnBitLengthButtonPressed(Object ^ parameter)
|
||||
{
|
||||
TraceLogger::GetInstance().LogBitLengthButtonUsed(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
String ^ buttonId = parameter->ToString();
|
||||
|
||||
QwordButton->Visibility = ::Visibility::Collapsed;
|
||||
@@ -42,42 +37,29 @@ void CalculatorProgrammerDisplayPanel::OnBitLengthButtonPressed(Object ^ paramet
|
||||
ByteButton->Visibility = ::Visibility::Collapsed;
|
||||
if (buttonId == "0")
|
||||
{
|
||||
Model->ButtonPressed->Execute(NumbersAndOperatorsEnum::Dword);
|
||||
Model->ValueBitLength = BitLength::BitLengthDWord;
|
||||
DwordButton->Visibility = ::Visibility::Visible;
|
||||
DwordButton->Focus(::FocusState::Programmatic);
|
||||
Model->IsQwordEnabled = false;
|
||||
Model->IsDwordEnabled = true;
|
||||
Model->IsWordEnabled = true;
|
||||
}
|
||||
else if (buttonId == "1")
|
||||
{
|
||||
Model->ButtonPressed->Execute(NumbersAndOperatorsEnum::Word);
|
||||
Model->ValueBitLength = BitLength::BitLengthWord;
|
||||
WordButton->Visibility = ::Visibility::Visible;
|
||||
WordButton->Focus(::FocusState::Programmatic);
|
||||
Model->IsQwordEnabled = false;
|
||||
Model->IsDwordEnabled = false;
|
||||
Model->IsWordEnabled = true;
|
||||
}
|
||||
else if (buttonId == "2")
|
||||
{
|
||||
Model->ButtonPressed->Execute(NumbersAndOperatorsEnum::Byte);
|
||||
Model->ValueBitLength = BitLength::BitLengthByte;
|
||||
ByteButton->Visibility = ::Visibility::Visible;
|
||||
ByteButton->Focus(::FocusState::Programmatic);
|
||||
Model->IsQwordEnabled = false;
|
||||
Model->IsDwordEnabled = false;
|
||||
Model->IsWordEnabled = false;
|
||||
}
|
||||
else if (buttonId == "3")
|
||||
{
|
||||
Model->ButtonPressed->Execute(NumbersAndOperatorsEnum::Qword);
|
||||
Model->ValueBitLength = BitLength::BitLengthQWord;
|
||||
QwordButton->Visibility = ::Visibility::Visible;
|
||||
QwordButton->Focus(::FocusState::Programmatic);
|
||||
Model->IsQwordEnabled = true;
|
||||
Model->IsDwordEnabled = true;
|
||||
Model->IsWordEnabled = true;
|
||||
}
|
||||
// update memory list according to bit length
|
||||
Model->SetMemorizedNumbersString();
|
||||
|
||||
}
|
||||
|
||||
bool CalculatorProgrammerDisplayPanel::IsErrorVisualState::get()
|
||||
|
||||
@@ -38,7 +38,7 @@ CalculatorProgrammerOperators::CalculatorProgrammerOperators()
|
||||
|
||||
void CalculatorProgrammerOperators::HexButtonChecked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
TraceLogger::GetInstance().LogRadixButtonUsed(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
TraceLogger::GetInstance().UpdateButtonUsage(NumbersAndOperatorsEnum::HexButton, ViewMode::Programmer);
|
||||
if (Model)
|
||||
{
|
||||
Model->SwitchProgrammerModeBase(RADIX_TYPE::HEX_RADIX);
|
||||
@@ -47,7 +47,7 @@ void CalculatorProgrammerOperators::HexButtonChecked(_In_ Object ^ sender, _In_
|
||||
|
||||
void CalculatorProgrammerOperators::DecButtonChecked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
TraceLogger::GetInstance().LogRadixButtonUsed(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
TraceLogger::GetInstance().UpdateButtonUsage(NumbersAndOperatorsEnum::DecButton, ViewMode::Programmer);
|
||||
if (Model)
|
||||
{
|
||||
Model->SwitchProgrammerModeBase(RADIX_TYPE::DEC_RADIX);
|
||||
@@ -56,7 +56,7 @@ void CalculatorProgrammerOperators::DecButtonChecked(_In_ Object ^ sender, _In_
|
||||
|
||||
void CalculatorProgrammerOperators::OctButtonChecked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
TraceLogger::GetInstance().LogRadixButtonUsed(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
TraceLogger::GetInstance().UpdateButtonUsage(NumbersAndOperatorsEnum::OctButton, ViewMode::Programmer);
|
||||
if (Model)
|
||||
{
|
||||
Model->SwitchProgrammerModeBase(RADIX_TYPE::OCT_RADIX);
|
||||
@@ -65,7 +65,7 @@ void CalculatorProgrammerOperators::OctButtonChecked(_In_ Object ^ sender, _In_
|
||||
|
||||
void CalculatorProgrammerOperators::BinButtonChecked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
TraceLogger::GetInstance().LogRadixButtonUsed(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
TraceLogger::GetInstance().UpdateButtonUsage(NumbersAndOperatorsEnum::BinButton, ViewMode::Programmer);
|
||||
if (Model)
|
||||
{
|
||||
Model->SwitchProgrammerModeBase(RADIX_TYPE::BIN_RADIX);
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
FontSize="16"
|
||||
AutomationProperties.AutomationId="shiftButton"
|
||||
Checked="Shift_Clicked"
|
||||
Content=""
|
||||
Content=""
|
||||
Unchecked="Shift_Clicked"/>
|
||||
<controls:CalculatorButton x:Name="ModButton"
|
||||
x:Uid="modButton"
|
||||
@@ -430,6 +430,6 @@
|
||||
FontSize="12"
|
||||
AutomationProperties.AutomationId="negateButton"
|
||||
ButtonId="Negate"
|
||||
Content=""/>
|
||||
Content=""/>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
||||
@@ -27,9 +27,6 @@ CalculatorProgrammerRadixOperators::CalculatorProgrammerRadixOperators()
|
||||
: m_isErrorVisualState(false)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
auto booleanToVisibilityNegationConverter = ref new Converters::BooleanToVisibilityNegationConverter;
|
||||
SetVisibilityBinding(ProgRadixOps, L"IsBinaryBitFlippingEnabled", booleanToVisibilityNegationConverter);
|
||||
}
|
||||
|
||||
void CalculatorProgrammerRadixOperators::OnLoaded(Object ^, RoutedEventArgs ^)
|
||||
@@ -70,14 +67,6 @@ void CalculatorProgrammerRadixOperators::Shift_Clicked(Platform::Object ^ sender
|
||||
}
|
||||
}
|
||||
|
||||
void CalculatorProgrammerRadixOperators::SetVisibilityBinding(FrameworkElement ^ element, String ^ path, IValueConverter ^ converter)
|
||||
{
|
||||
Binding ^ commandBinding = ref new Binding();
|
||||
commandBinding->Path = ref new PropertyPath(path);
|
||||
commandBinding->Converter = converter;
|
||||
element->SetBinding(VisibilityProperty, commandBinding);
|
||||
}
|
||||
|
||||
void CalculatorProgrammerRadixOperators::ProgModeRadixChange()
|
||||
{
|
||||
NumberPad->ProgModeRadixChange();
|
||||
|
||||
@@ -32,7 +32,6 @@ namespace CalculatorApp
|
||||
|
||||
private:
|
||||
void Shift_Clicked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void SetVisibilityBinding(Windows::UI::Xaml::FrameworkElement ^ element, Platform::String ^ path, Windows::UI::Xaml::Data::IValueConverter ^ converter);
|
||||
void OnLoaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void OnUnloaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void ProgModeRadixChange();
|
||||
|
||||
@@ -37,7 +37,6 @@ CalculatorScientificAngleButtons::CalculatorScientificAngleButtons()
|
||||
|
||||
void CalculatorScientificAngleButtons::HypButton_Toggled(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
TraceLogger::GetInstance().LogHypButtonUsed(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
}
|
||||
|
||||
void CalculatorScientificAngleButtons::FToEButton_Toggled(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
@@ -48,7 +47,6 @@ void CalculatorScientificAngleButtons::FToEButton_Toggled(_In_ Object ^ sender,
|
||||
|
||||
void CalculatorApp::CalculatorScientificAngleButtons::OnAngleButtonPressed(_In_ Object ^ commandParameter)
|
||||
{
|
||||
TraceLogger::GetInstance().LogAngleButtonUsed(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
String ^ buttonId = static_cast<String ^>(commandParameter);
|
||||
|
||||
DegreeButton->Visibility = ::Visibility::Collapsed;
|
||||
|
||||
@@ -511,7 +511,7 @@
|
||||
Style="{StaticResource SymbolOperatorButtonStyle}"
|
||||
AutomationProperties.AutomationId="squareRootButton"
|
||||
ButtonId="Sqrt"
|
||||
Content=""/>
|
||||
Content=""/>
|
||||
<controls:CalculatorButton x:Name="PowerOf10Button"
|
||||
x:Uid="powerOf10Button"
|
||||
Grid.Column="1"
|
||||
@@ -600,7 +600,7 @@
|
||||
FontSize="20"
|
||||
AutomationProperties.AutomationId="shiftButton"
|
||||
Checked="shiftButton_Check"
|
||||
Content=""
|
||||
Content=""
|
||||
IsEnabled="{x:Bind IsShiftEnabled(IsWideLayout, IsErrorVisualState), Mode=OneWay}"
|
||||
IsEnabledChanged="shiftButton_IsEnabledChanged"
|
||||
Unchecked="shiftButton_Check"/>
|
||||
@@ -718,7 +718,7 @@
|
||||
FontSize="16"
|
||||
AutomationProperties.AutomationId="negateButton"
|
||||
ButtonId="Negate"
|
||||
Content=""
|
||||
Content=""
|
||||
IsEnabled="{x:Bind Model.IsNegateEnabled, Mode=OneWay}"/>
|
||||
<controls:CalculatorButton x:Name="OpenParenthesisButton"
|
||||
x:Uid="openParenthesisButton"
|
||||
|
||||
@@ -46,6 +46,60 @@
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup>
|
||||
<VisualState x:Name="NormalFontSize">
|
||||
<VisualState.StateTriggers>
|
||||
<AdaptiveTrigger MinWindowHeight="440" MinWindowWidth="0"/>
|
||||
</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="SmallFontSize">
|
||||
<VisualState.StateTriggers>
|
||||
<AdaptiveTrigger MinWindowHeight="260" MinWindowWidth="0"/>
|
||||
</VisualState.StateTriggers>
|
||||
<VisualState.Setters>
|
||||
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle18}"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
<VisualState x:Name="TinyFontSize">
|
||||
<VisualState.StateTriggers>
|
||||
<AdaptiveTrigger MinWindowHeight="0" MinWindowWidth="0"/>
|
||||
</VisualState.StateTriggers>
|
||||
<VisualState.Setters>
|
||||
<Setter Target="PercentButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="SquareRootButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="XPower2Button.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="InvertButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="NegateButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="ClearEntryButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="ClearButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="BackSpaceButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="DivideButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="MultiplyButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="MinusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="PlusButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
<Setter Target="EqualButton.FontSize" Value="{StaticResource CalcStandardOperatorCaptionSizeTiny}"/>
|
||||
|
||||
<Setter Target="NumberPad.ButtonStyle" Value="{StaticResource NumericButtonStyle12}"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup>
|
||||
<VisualState x:Name="Portrait768x1366">
|
||||
<VisualState.StateTriggers>
|
||||
@@ -238,11 +292,41 @@
|
||||
<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="StandardFunctions.Visibility" Value="Visible"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
<VisualState x:Name="DefaultLayout">
|
||||
<VisualState.StateTriggers>
|
||||
<AdaptiveTrigger MinWindowHeight="0" MinWindowWidth="0"/>
|
||||
</VisualState.StateTriggers>
|
||||
<VisualState.Setters>
|
||||
<Setter Target="R0.Height" Value="0*"/>
|
||||
<Setter Target="StandardFunctions.Visibility" Value="Collapsed"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
</VisualStateManager.VisualStateGroups>
|
||||
@@ -279,7 +363,7 @@
|
||||
Style="{StaticResource SymbolOperatorButtonStyle}"
|
||||
AutomationProperties.AutomationId="squareRootButton"
|
||||
ButtonId="Sqrt"
|
||||
Content=""/>
|
||||
Content=""/>
|
||||
<controls:CalculatorButton x:Name="XPower2Button"
|
||||
x:Uid="xpower2Button"
|
||||
Grid.Column="2"
|
||||
@@ -410,6 +494,6 @@
|
||||
Style="{StaticResource SymbolOperatorButtonStyle}"
|
||||
AutomationProperties.AutomationId="negateButton"
|
||||
ButtonId="Negate"
|
||||
Content=""/>
|
||||
Content=""/>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
//
|
||||
|
||||
@@ -358,7 +358,7 @@
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<VisualStateManager.VisualStateGroups>
|
||||
<VisualStateGroup>
|
||||
<VisualStateGroup CurrentStateChanged="OnVisualStateChanged">
|
||||
<VisualState x:Name="LeftAlignedLayout">
|
||||
<VisualState.StateTriggers>
|
||||
<AdaptiveTrigger MinWindowWidth="480"/>
|
||||
|
||||
@@ -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().LogDateDifferenceModeUsed(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
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().LogDateDifferenceModeUsed(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()));
|
||||
TraceLogger::GetInstance().LogDateCalculationModeUsed(false /* AddSubtractMode */);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -131,8 +131,7 @@ void DateCalculator::AddSubtract_DateChanged(_In_ CalendarDatePicker ^ sender, _
|
||||
{
|
||||
auto dateCalcViewModel = safe_cast<DateCalculatorViewModel ^>(this->DataContext);
|
||||
dateCalcViewModel->StartDate = e->NewDate->Value;
|
||||
TraceLogger::GetInstance().LogDateAddSubtractModeUsed(
|
||||
ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()), dateCalcViewModel->IsAddMode);
|
||||
TraceLogger::GetInstance().LogDateCalculationModeUsed(true /* AddSubtractMode */);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -143,8 +142,11 @@ void DateCalculator::AddSubtract_DateChanged(_In_ CalendarDatePicker ^ sender, _
|
||||
void CalculatorApp::DateCalculator::OffsetValue_Changed(_In_ Platform::Object ^ sender, _In_ SelectionChangedEventArgs ^ e)
|
||||
{
|
||||
auto dateCalcViewModel = safe_cast<DateCalculatorViewModel ^>(this->DataContext);
|
||||
TraceLogger::GetInstance().LogDateAddSubtractModeUsed(
|
||||
ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()), dateCalcViewModel->IsAddMode);
|
||||
// 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 */);
|
||||
}
|
||||
}
|
||||
|
||||
void DateCalculator::OnCopyMenuItemClicked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
@@ -232,3 +234,9 @@ void DateCalculator::AddSubtractOption_Checked(_In_ Object ^ sender, _In_ Routed
|
||||
{
|
||||
RaiseLiveRegionChangedAutomationEvent(/* DateDiff mode */ false);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -48,7 +48,9 @@ namespace CalculatorApp
|
||||
void OffsetDropDownClosed(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
|
||||
void CalendarFlyoutClosed(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
|
||||
void RaiseLiveRegionChangedAutomationEvent(_In_ bool isDateDiffMode);
|
||||
void OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e);
|
||||
|
||||
Windows::Foundation::EventRegistrationToken m_dateCalcOptionChangedEventToken;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
@@ -166,7 +166,7 @@ void GraphingCalculator::OnDataRequested(DataTransferManager^ sender, DataReques
|
||||
}
|
||||
catch(Exception ^ ex)
|
||||
{
|
||||
TraceLogger::GetInstance().LogPlatformException(__FUNCTIONW__, ex);
|
||||
TraceLogger::GetInstance().LogPlatformException(ViewMode::Graphing, __FUNCTIONW__, ex);
|
||||
|
||||
// Something went wrong, notify the user.
|
||||
auto errorTitleString = resourceLoader->GetString(L"ShareActionErrorMessage");
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
Invoked="OnDeleteSwipeInvoked"/>
|
||||
</muxc:SwipeItems>
|
||||
|
||||
<MenuFlyout x:Key="HistoryContextMenu">
|
||||
<MenuFlyout x:Name="HistoryContextMenu">
|
||||
<MenuFlyoutItem x:Uid="DeleteHistoryMenuItem"
|
||||
Click="OnDeleteMenuItemClicked"
|
||||
Icon="Delete"/>
|
||||
@@ -57,9 +57,7 @@
|
||||
|
||||
<DataTemplate x:Key="HistoryItemTemplate" x:DataType="model:HistoryItemViewModel">
|
||||
<muxc:SwipeControl RightItems="{StaticResource HistorySwipeItems}">
|
||||
<StackPanel Margin="0,6,4,6"
|
||||
Background="Transparent"
|
||||
ContextFlyout="{StaticResource HistoryContextMenu}">
|
||||
<StackPanel Margin="0,6,4,6" Background="Transparent">
|
||||
<TextBlock x:Name="ExprTextBlock"
|
||||
Margin="0,0,0,4"
|
||||
HorizontalAlignment="Right"
|
||||
@@ -85,6 +83,7 @@
|
||||
BasedOn="{StaticResource HistoryMemoryItemContainerStyle}"
|
||||
TargetType="ListViewItem">
|
||||
<Setter Property="Margin" Value="0,0,0,20"/>
|
||||
<Setter Property="ContextFlyout" Value="{StaticResource HistoryContextMenu}"/>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
|
||||
@@ -42,11 +42,11 @@ HistoryList::HistoryList()
|
||||
|
||||
void HistoryList::ListView_ItemClick(_In_ Object ^ sender, _In_ ItemClickEventArgs ^ e)
|
||||
{
|
||||
HistoryViewModel ^ historyVM = static_cast<HistoryViewModel ^>(this->DataContext);
|
||||
HistoryItemViewModel ^ clickedItem = safe_cast<HistoryItemViewModel ^>(e->ClickedItem);
|
||||
HistoryViewModel^ historyVM = dynamic_cast<HistoryViewModel ^>(this->DataContext);
|
||||
HistoryItemViewModel^ clickedItem = dynamic_cast<HistoryItemViewModel ^>(e->ClickedItem);
|
||||
|
||||
// When the user clears the history list in the overlay view and presses enter, the clickedItem is nullptr
|
||||
if (clickedItem != nullptr)
|
||||
if (clickedItem != nullptr && historyVM != nullptr)
|
||||
{
|
||||
historyVM->ShowItem(clickedItem);
|
||||
}
|
||||
@@ -54,16 +54,21 @@ void HistoryList::ListView_ItemClick(_In_ Object ^ sender, _In_ ItemClickEventAr
|
||||
|
||||
void HistoryList::OnDeleteMenuItemClicked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
auto clickedItem = safe_cast<HistoryItemViewModel ^>(safe_cast<FrameworkElement ^>(sender)->DataContext);
|
||||
|
||||
Model->DeleteItem(clickedItem);
|
||||
auto listViewItem = HistoryContextMenu->Target;
|
||||
auto itemViewModel = dynamic_cast<HistoryItemViewModel ^>(HistoryListView->ItemFromContainer(listViewItem));
|
||||
if (itemViewModel != nullptr)
|
||||
{
|
||||
Model->DeleteItem(itemViewModel);
|
||||
}
|
||||
}
|
||||
|
||||
void HistoryList::OnDeleteSwipeInvoked(_In_ MUXC::SwipeItem ^ sender, _In_ MUXC::SwipeItemInvokedEventArgs ^ e)
|
||||
{
|
||||
auto swipedItem = safe_cast<HistoryItemViewModel ^>(e->SwipeControl->DataContext);
|
||||
|
||||
Model->DeleteItem(swipedItem);
|
||||
auto swipedItem = dynamic_cast<HistoryItemViewModel ^>(e->SwipeControl->DataContext);
|
||||
if (swipedItem != nullptr)
|
||||
{
|
||||
Model->DeleteItem(swipedItem);
|
||||
}
|
||||
}
|
||||
|
||||
void HistoryList::ScrollToBottom()
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
<Style x:Key="NavViewItemStyle" TargetType="muxc:NavigationViewItem">
|
||||
<Setter Property="KeyTipPlacementMode" Value="Right"/>
|
||||
</Style>
|
||||
|
||||
<converters:BooleanToVisibilityNegationConverter x:Key="BooleanToVisibilityNegationConverter"/>
|
||||
<converters:BooleanNegationConverter x:Key="BooleanNegationConverter"/>
|
||||
</Page.Resources>
|
||||
|
||||
<Grid>
|
||||
@@ -83,7 +86,23 @@
|
||||
Command="{x:Bind Model.PasteCommand}"/>
|
||||
</StackPanel>
|
||||
|
||||
<local:TitleBar x:Name="CustomTitleBar" Grid.Row="0"/>
|
||||
<local:TitleBar Grid.Row="0" IsAlwaysOnTopMode="{x:Bind Model.IsAlwaysOnTop, Mode=OneWay}"
|
||||
AlwaysOnTopClick="TitleBarAlwaysOnTopButtonClick"/>
|
||||
|
||||
<Grid Grid.Row="1">
|
||||
<Border x:Name="CalcHolder">
|
||||
<!-- PLACEHOLDER!!!! This is where the calculator goes when it is delay loaded -->
|
||||
</Border>
|
||||
<Border x:Name="DateCalcHolder">
|
||||
<!-- PLACEHOLDER!!!! This is where the date calculator goes when it is delay loaded -->
|
||||
</Border>
|
||||
<Border x:Name="GraphingCalcHolder" Grid.Row="1">
|
||||
<!-- PLACEHOLDER!!!! This is where the graphing calculator goes when it is delay loaded -->
|
||||
</Border>
|
||||
<Border x:Name="ConverterHolder">
|
||||
<!-- PLACEHOLDER!!!! This is where the converter goes when it is delay loaded -->
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<muxc:NavigationView x:Name="NavView"
|
||||
x:Uid="NavView"
|
||||
@@ -92,7 +111,10 @@
|
||||
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"
|
||||
Loaded="OnNavLoaded"
|
||||
MenuItemsSource="{x:Bind CreateUIElementsForCategories(Model.Categories), Mode=OneWay}"
|
||||
OpenPaneLength="{StaticResource SplitViewOpenPaneLength}"
|
||||
@@ -100,9 +122,9 @@
|
||||
PaneOpened="OnNavPaneOpened"
|
||||
PaneOpening="OnNavPaneOpening"
|
||||
SelectionChanged="OnNavSelectionChanged"
|
||||
ItemInvoked="OnNavItemInvoked"
|
||||
TabIndex="1"
|
||||
UseSystemFocusVisuals="True">
|
||||
|
||||
<muxc:NavigationView.PaneFooter>
|
||||
<StackPanel HorizontalAlignment="Stretch" Orientation="Vertical">
|
||||
<muxc:NavigationViewList x:Name="NavFooter"
|
||||
@@ -135,27 +157,31 @@
|
||||
</muxc:NavigationViewList>
|
||||
</StackPanel>
|
||||
</muxc:NavigationView.PaneFooter>
|
||||
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock x:Name="Header"
|
||||
Grid.Column="0"
|
||||
Margin="52,6,12,0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Top"
|
||||
Style="{StaticResource SubtitleTextBlockStyle}"
|
||||
Text="{x:Bind Model.CategoryName, Mode=OneWay}"/>
|
||||
|
||||
<Border x:Name="CalcHolder">
|
||||
<!-- PLACEHOLDER!!!! This is where the calculator goes when it is delay loaded -->
|
||||
</Border>
|
||||
<Border x:Name="DateCalcHolder">
|
||||
<!-- PLACEHOLDER!!!! This is where the date calculator goes when it is delay loaded -->
|
||||
</Border>
|
||||
<Border x:Name="GraphingCalcHolder" Grid.Row="1">
|
||||
<!-- PLACEHOLDER!!!! This is where the graphing calculator goes when it is delay loaded -->
|
||||
</Border>
|
||||
<Border x:Name="ConverterHolder">
|
||||
<!-- PLACEHOLDER!!!! This is where the converter goes when it is delay loaded -->
|
||||
</Border>
|
||||
Text="{x:Bind Model.CategoryName, Mode=OneWay}"
|
||||
Visibility="{x:Bind Model.IsAlwaysOnTop, Converter={StaticResource BooleanToVisibilityNegationConverter}, Mode=OneWay}"/>
|
||||
<Button x:Name="NormalAlwaysOnTopButton"
|
||||
x:Uid="EnterAlwaysOnTopButton"
|
||||
Grid.Column="1"
|
||||
VerticalAlignment="Top"
|
||||
HorizontalContentAlignment="Center"
|
||||
Style="{StaticResource SquareIconButtonStyle}"
|
||||
Background="Transparent"
|
||||
FontFamily="{StaticResource CalculatorFontFamily}"
|
||||
AutomationProperties.AutomationId="NormalAlwaysOnTopButton"
|
||||
Click="AlwaysOnTopButtonClick"
|
||||
Content=""
|
||||
Visibility="{x:Bind Model.DisplayNormalAlwaysOnTopOption, Mode=OneWay}"/>
|
||||
</Grid>
|
||||
</muxc:NavigationView>
|
||||
</Grid>
|
||||
|
||||
@@ -70,7 +70,9 @@ MainPage::MainPage()
|
||||
|
||||
KeyboardShortcutManager::Initialize();
|
||||
|
||||
Application::Current->Suspending += ref new SuspendingEventHandler(this, &MainPage::App_Suspending);
|
||||
m_model->PropertyChanged += ref new PropertyChangedEventHandler(this, &MainPage::OnAppPropertyChanged);
|
||||
m_accessibilitySettings = ref new AccessibilitySettings();
|
||||
|
||||
double sizeInInches = 0.0;
|
||||
|
||||
@@ -196,11 +198,11 @@ void MainPage::OnAppPropertyChanged(_In_ Platform::Object ^ sender, _In_ Windows
|
||||
|
||||
void MainPage::ShowHideControls(ViewMode mode)
|
||||
{
|
||||
bool isCalcViewMode = NavCategory::IsCalculatorViewMode(mode);
|
||||
bool isDateCalcViewMode = NavCategory::IsDateCalculatorViewMode(mode);
|
||||
bool isGraphingCalcViewMode = NavCategory::IsGraphingCalculatorViewMode(mode);
|
||||
bool isConverterViewMode = NavCategory::IsConverterViewMode(mode);
|
||||
|
||||
auto isCalcViewMode = NavCategory::IsCalculatorViewMode(mode);
|
||||
auto isDateCalcViewMode = NavCategory::IsDateCalculatorViewMode(mode);
|
||||
auto isGraphingCalcViewMode = NavCategory::IsGraphingCalculatorViewMode(mode);
|
||||
auto isConverterViewMode = NavCategory::IsConverterViewMode(mode);
|
||||
|
||||
if (m_calculator)
|
||||
{
|
||||
m_calculator->Visibility = BooleanToVisibilityConverter::Convert(isCalcViewMode);
|
||||
@@ -254,6 +256,8 @@ void MainPage::OnPageLoaded(_In_ Object ^, _In_ RoutedEventArgs ^ args)
|
||||
}
|
||||
|
||||
m_windowSizeEventToken = Window::Current->SizeChanged += ref new WindowSizeChangedEventHandler(this, &MainPage::WindowSizeChanged);
|
||||
m_accessibilitySettingsToken = m_accessibilitySettings->HighContrastChanged +=
|
||||
ref new Windows::Foundation::TypedEventHandler<AccessibilitySettings ^, Object ^>(this, &CalculatorApp::MainPage::OnHighContrastChanged);
|
||||
UpdateViewState();
|
||||
|
||||
SetHeaderAutomationName();
|
||||
@@ -262,15 +266,23 @@ 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().UpdateWindowIdLog(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())))
|
||||
if (TraceLogger::GetInstance().IsWindowIdInLog(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())))
|
||||
{
|
||||
TraceLogger::GetInstance().LogAppLaunchComplete();
|
||||
AppLifecycleLogger::GetInstance().LaunchUIResponsive();
|
||||
AppLifecycleLogger::GetInstance().LaunchVisibleComplete();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
void MainPage::OnHighContrastChanged(_In_ AccessibilitySettings ^ /*sender*/, _In_ Object ^ /*args*/)
|
||||
{
|
||||
if (Model->IsAlwaysOnTop && this->ActualHeight < 394)
|
||||
{
|
||||
// Sets to default always-on-top size to force re-layout
|
||||
ApplicationView::GetForCurrentView()->TryResizeView(Size(320, 394));
|
||||
}
|
||||
}
|
||||
|
||||
void MainPage::SetDefaultFocus()
|
||||
{
|
||||
if (m_calculator != nullptr && m_calculator->Visibility == ::Visibility::Visible)
|
||||
@@ -308,13 +320,16 @@ void MainPage::EnsureCalculator()
|
||||
Binding ^ isProgramerBinding = ref new Binding();
|
||||
isProgramerBinding->Path = ref new PropertyPath(L"IsProgrammer");
|
||||
m_calculator->SetBinding(m_calculator->IsProgrammerProperty, isProgramerBinding);
|
||||
Binding ^ isAlwaysOnTopBinding = ref new Binding();
|
||||
isAlwaysOnTopBinding->Path = ref new PropertyPath(L"IsAlwaysOnTop");
|
||||
m_calculator->SetBinding(m_calculator->IsAlwaysOnTopProperty, isAlwaysOnTopBinding);
|
||||
m_calculator->Style = CalculatorBaseStyle;
|
||||
|
||||
CalcHolder->Child = m_calculator;
|
||||
|
||||
// Calculator's "default" state is visible, but if we get delay loaded
|
||||
// when in converter, we should not be visible. This is not a problem for converter
|
||||
// since it's default state is hidden.
|
||||
// since its default state is hidden.
|
||||
ShowHideControls(this->Model->Mode);
|
||||
}
|
||||
|
||||
@@ -505,6 +520,8 @@ void MainPage::UnregisterEventHandlers()
|
||||
{
|
||||
Window::Current->SizeChanged -= m_windowSizeEventToken;
|
||||
m_windowSizeEventToken.Value = 0;
|
||||
m_accessibilitySettings->HighContrastChanged -= m_accessibilitySettingsToken;
|
||||
m_accessibilitySettingsToken.Value = 0;
|
||||
|
||||
if (m_calculator != nullptr)
|
||||
{
|
||||
@@ -535,7 +552,6 @@ void MainPage::SetHeaderAutomationName()
|
||||
}
|
||||
|
||||
string::size_type found = full.find(L"%1");
|
||||
assert(found != wstring::npos);
|
||||
wstring strMode = m_model->CategoryName->Data();
|
||||
full = full.replace(found, 2, strMode);
|
||||
|
||||
@@ -556,3 +572,24 @@ void MainPage::OnNavItemInvoked(MUXC::NavigationView ^ /*sender*/, _In_ MUXC::Na
|
||||
{
|
||||
NavView->IsPaneOpen = false;
|
||||
}
|
||||
|
||||
void MainPage::TitleBarAlwaysOnTopButtonClick(_In_ Object ^ /*sender*/, _In_ RoutedEventArgs ^ /*e*/)
|
||||
{
|
||||
auto bounds = Window::Current->Bounds;
|
||||
Model->ToggleAlwaysOnTop(bounds.Width, bounds.Height);
|
||||
}
|
||||
|
||||
void MainPage::AlwaysOnTopButtonClick(_In_ Object ^ /*sender*/, _In_ RoutedEventArgs ^ /*e*/)
|
||||
{
|
||||
Model->ToggleAlwaysOnTop(0, 0);
|
||||
}
|
||||
|
||||
void MainPage::App_Suspending(Object ^ sender, Windows::ApplicationModel::SuspendingEventArgs ^ e)
|
||||
{
|
||||
if (m_model->IsAlwaysOnTop)
|
||||
{
|
||||
ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings;
|
||||
localSettings->Values->Insert(ApplicationViewModel::WidthLocalSettings, this->ActualWidth);
|
||||
localSettings->Values->Insert(ApplicationViewModel::HeightLocalSettings, this->ActualHeight);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,8 @@ public
|
||||
void OnAboutButtonClick(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::Controls::ItemClickEventArgs ^ e);
|
||||
void OnAboutFlyoutOpened(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
|
||||
void OnAboutFlyoutClosed(_In_ Platform::Object ^ sender, _In_ Platform::Object ^ e);
|
||||
void AlwaysOnTopButtonClick(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void TitleBarAlwaysOnTopButtonClick(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
|
||||
Microsoft::UI::Xaml::Controls::NavigationViewItemHeader ^ CreateNavViewHeaderFromGroup(CalculatorApp::Common::NavCategoryGroup ^ group);
|
||||
Microsoft::UI::Xaml::Controls::NavigationViewItem ^ CreateNavViewItemFromCategory(CalculatorApp::Common::NavCategory ^ category);
|
||||
@@ -64,8 +66,10 @@ public
|
||||
void ShowHideControls(CalculatorApp::Common::ViewMode mode);
|
||||
void UpdateViewState();
|
||||
void UpdatePanelViewState();
|
||||
void OnHighContrastChanged(Windows::UI::ViewManagement::AccessibilitySettings ^ sender, Platform::Object ^ args);
|
||||
|
||||
void OnPageLoaded(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void App_Suspending(Object ^ sender, Windows::ApplicationModel::SuspendingEventArgs ^ e);
|
||||
|
||||
void EnsureCalculator();
|
||||
void EnsureDateCalculator();
|
||||
@@ -75,14 +79,13 @@ public
|
||||
|
||||
void AnnounceCategoryName();
|
||||
|
||||
Calculator^ m_calculator;
|
||||
GraphingCalculator^ m_graphingCalculator;
|
||||
UnitConverter^ m_converter;
|
||||
DateCalculator^ m_dateCalculator;
|
||||
Windows::Foundation::EventRegistrationToken _windowSizeEventToken;
|
||||
Windows::Foundation::EventRegistrationToken m_hardwareButtonsBackPressedToken;
|
||||
Windows::Foundation::EventRegistrationToken m_colorValuesChangedToken;
|
||||
CalculatorApp::Calculator ^ m_calculator;
|
||||
CalculatorApp::UnitConverter ^ m_converter;
|
||||
CalculatorApp::DateCalculator ^ m_dateCalculator;
|
||||
CalculatorApp::GraphingCalculator^ m_graphingCalculator;
|
||||
Windows::Foundation::EventRegistrationToken m_windowSizeEventToken;
|
||||
ViewModel::ApplicationViewModel^ m_model;
|
||||
CalculatorApp::ViewModel::ApplicationViewModel ^ m_model;
|
||||
Windows::Foundation::EventRegistrationToken m_accessibilitySettingsToken;
|
||||
Windows::UI::ViewManagement::AccessibilitySettings ^ m_accessibilitySettings;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<converters:BooleanToVisibilityNegationConverter x:Key="BooleanToVisibilityNegationConverter"/>
|
||||
<converters:BooleanNegationConverter x:Key="BooleanNegationConverter"/>
|
||||
|
||||
<MenuFlyout x:Key="MemoryContextMenu">
|
||||
<MenuFlyout x:Name="MemoryContextMenu">
|
||||
<MenuFlyoutItem x:Uid="ClearMemoryMenuItem" Click="OnClearMenuItemClicked">
|
||||
<MenuFlyoutItem.Icon>
|
||||
<FontIcon FontFamily="{StaticResource CalculatorFontFamily}" Glyph=""/>
|
||||
@@ -42,6 +42,7 @@
|
||||
BasedOn="{StaticResource HistoryMemoryItemContainerStyle}"
|
||||
TargetType="ListViewItem">
|
||||
<Setter Property="Margin" Value="0,0,0,8"/>
|
||||
<Setter Property="ContextFlyout" Value="{StaticResource MemoryContextMenu}"/>
|
||||
</Style>
|
||||
</UserControl.Resources>
|
||||
|
||||
@@ -103,8 +104,6 @@
|
||||
<ListView x:Name="MemoryListView"
|
||||
Padding="0,12,0,0"
|
||||
HorizontalAlignment="Stretch"
|
||||
ContextCanceled="OnContextCanceled"
|
||||
ContextRequested="OnContextRequested"
|
||||
IsItemClickEnabled="true"
|
||||
ItemClick="MemoryListItemClick"
|
||||
ItemContainerStyle="{ThemeResource MemoryItemContainerStyle}"
|
||||
|
||||
@@ -39,7 +39,6 @@ Memory::Memory()
|
||||
: m_isErrorVisualState(false)
|
||||
{
|
||||
InitializeComponent();
|
||||
m_memoryItemFlyout = safe_cast<MenuFlyout ^>(Resources->Lookup("MemoryContextMenu"));
|
||||
|
||||
MemoryPaneEmpty->FlowDirection = LocalizationService::GetInstance()->GetFlowDirection();
|
||||
}
|
||||
@@ -56,53 +55,31 @@ void Memory::MemoryListItemClick(_In_ Object ^ sender, _In_ ItemClickEventArgs ^
|
||||
}
|
||||
}
|
||||
|
||||
void Memory::OnContextRequested(Windows::UI::Xaml::UIElement ^ sender, Windows::UI::Xaml::Input::ContextRequestedEventArgs ^ e)
|
||||
{
|
||||
// Walk up the tree to find the ListViewItem.
|
||||
// There may not be one if the click wasn't on an item.
|
||||
auto requestedElement = safe_cast<FrameworkElement ^>(e->OriginalSource);
|
||||
while ((requestedElement != sender) && !dynamic_cast<ListViewItem ^>(requestedElement))
|
||||
{
|
||||
requestedElement = safe_cast<FrameworkElement ^>(VisualTreeHelper::GetParent(requestedElement));
|
||||
}
|
||||
|
||||
if (requestedElement != sender)
|
||||
{
|
||||
// The context menu request was for a ListViewItem.
|
||||
auto memorySlot = safe_cast<MemoryItemViewModel ^>(MemoryListView->ItemFromContainer(requestedElement));
|
||||
Point point;
|
||||
if (e->TryGetPosition(requestedElement, &point))
|
||||
{
|
||||
m_memoryItemFlyout->ShowAt(requestedElement, point);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Not invoked via pointer, so let XAML choose a default location.
|
||||
m_memoryItemFlyout->ShowAt(requestedElement);
|
||||
}
|
||||
|
||||
e->Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
void Memory::OnContextCanceled(Windows::UI::Xaml::UIElement ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e)
|
||||
{
|
||||
m_memoryItemFlyout->Hide();
|
||||
}
|
||||
|
||||
void Memory::OnClearMenuItemClicked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
GetMemoryItemForCurrentFlyout()->Clear();
|
||||
auto memoryItem = GetMemoryItemForCurrentFlyout();
|
||||
if (memoryItem != nullptr)
|
||||
{
|
||||
memoryItem->Clear();
|
||||
}
|
||||
}
|
||||
|
||||
void Memory::OnMemoryAddMenuItemClicked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
GetMemoryItemForCurrentFlyout()->MemoryAdd();
|
||||
auto memoryItem = GetMemoryItemForCurrentFlyout();
|
||||
if (memoryItem != nullptr)
|
||||
{
|
||||
memoryItem->MemoryAdd();
|
||||
}
|
||||
}
|
||||
|
||||
void Memory::OnMemorySubtractMenuItemClicked(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
GetMemoryItemForCurrentFlyout()->MemorySubtract();
|
||||
auto memoryItem = GetMemoryItemForCurrentFlyout();
|
||||
if (memoryItem != nullptr)
|
||||
{
|
||||
memoryItem->MemorySubtract();
|
||||
}
|
||||
}
|
||||
|
||||
bool Memory::IsErrorVisualState::get()
|
||||
@@ -122,7 +99,6 @@ void Memory::IsErrorVisualState::set(bool value)
|
||||
|
||||
MemoryItemViewModel ^ Memory::GetMemoryItemForCurrentFlyout()
|
||||
{
|
||||
auto listViewItem = m_memoryItemFlyout->Target;
|
||||
|
||||
return safe_cast<MemoryItemViewModel ^>(MemoryListView->ItemFromContainer(listViewItem));
|
||||
auto listViewItem = MemoryContextMenu->Target;
|
||||
return dynamic_cast<MemoryItemViewModel ^>(MemoryListView->ItemFromContainer(listViewItem));
|
||||
}
|
||||
|
||||
@@ -36,14 +36,11 @@ namespace CalculatorApp
|
||||
}
|
||||
|
||||
private:
|
||||
Windows::UI::Xaml::Controls::MenuFlyout ^ m_memoryItemFlyout;
|
||||
Windows::Foundation::Rect m_visibleBounds;
|
||||
Windows::Foundation::Rect m_coreBounds;
|
||||
bool m_isErrorVisualState;
|
||||
|
||||
void MemoryListItemClick(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::Controls::ItemClickEventArgs ^ e);
|
||||
void OnContextRequested(Windows::UI::Xaml::UIElement ^ sender, Windows::UI::Xaml::Input::ContextRequestedEventArgs ^ e);
|
||||
void OnContextCanceled(Windows::UI::Xaml::UIElement ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void OnClearMenuItemClicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void OnMemoryAddMenuItemClicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void OnMemorySubtractMenuItemClicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
|
||||
@@ -1,15 +1,12 @@
|
||||
<UserControl x:Class="CalculatorApp.OperatorsPanel"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
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"
|
||||
UseLayoutRounding="False"
|
||||
d:DesignHeight="315"
|
||||
d:DesignWidth="235"
|
||||
UseLayoutRounding="False"
|
||||
mc:Ignorable="d">
|
||||
<Grid>
|
||||
<local:CalculatorStandardOperators x:Name="StandardOperators"
|
||||
@@ -25,14 +22,12 @@
|
||||
|
||||
<local:CalculatorProgrammerBitFlipPanel x:Name="BitFlipPanel"
|
||||
x:Load="False"
|
||||
IsEnabled="{x:Bind Model.IsBinaryBitFlippingEnabled, Mode=OneWay}"
|
||||
Visibility="{x:Bind IsBitFlipChecked, Mode=OneWay}"/>
|
||||
Visibility="{x:Bind Model.IsBinaryBitFlippingEnabled, Mode=OneWay}"/>
|
||||
|
||||
<local:CalculatorProgrammerRadixOperators x:Name="ProgrammerRadixOperators"
|
||||
x:Load="False"
|
||||
IsEnabled="{x:Bind Model.AreProgrammerRadixOperatorsEnabled, Mode=OneWay}"
|
||||
TabIndex="16"
|
||||
Visibility="{x:Bind Model.IsProgrammer, Mode=OneWay}"/>
|
||||
Visibility="{x:Bind Model.AreProgrammerRadixOperatorsEnabled, Mode=OneWay}"/>
|
||||
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
||||
@@ -16,15 +16,44 @@
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup x:Name="AOTStates">
|
||||
<VisualState x:Name="AOTNormalState"/>
|
||||
<VisualState x:Name="AOTMiniState">
|
||||
<VisualState.Setters>
|
||||
<Setter Target="AppName.Visibility" Value="Collapsed"/>
|
||||
<Setter Target="ExitAlwaysOnTopButton.Visibility" Value="Visible"/>
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
</VisualStateManager.VisualStateGroups>
|
||||
<TextBlock x:Name="AppName"
|
||||
x:Uid="AppName"
|
||||
Margin="12,0,12,0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
Foreground="{ThemeResource TitleBarForegroundBaseHighBrush}"
|
||||
FontSize="12"
|
||||
TextAlignment="Left"
|
||||
TextTrimming="CharacterEllipsis"/>
|
||||
<Grid x:Name="BackgroundElement"
|
||||
Height="32"
|
||||
Background="Transparent">
|
||||
<TextBlock x:Name="AppName"
|
||||
x:Uid="AppName"
|
||||
Margin="12,0,12,0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Center"
|
||||
Foreground="{ThemeResource TitleBarForegroundBaseHighBrush}"
|
||||
FontSize="12"
|
||||
TextAlignment="Left"
|
||||
TextTrimming="CharacterEllipsis"/>
|
||||
</Grid>
|
||||
<Button x:Name="ExitAlwaysOnTopButton"
|
||||
x:Uid="ExitAlwaysOnTopButton"
|
||||
Width="46"
|
||||
Height="Auto"
|
||||
HorizontalAlignment="Left"
|
||||
HorizontalContentAlignment="Center"
|
||||
Style="{ThemeResource CommandBarFlyoutEllipsisButtonStyle}"
|
||||
Background="Transparent"
|
||||
FontFamily="{StaticResource CalculatorFontFamily}"
|
||||
FontSize="14"
|
||||
FontWeight="Thin"
|
||||
x:Load="False"
|
||||
AutomationProperties.AutomationId="ExitAlwaysOnTopButton"
|
||||
Click="AlwaysOnTopButton_Click"
|
||||
Content=""
|
||||
Visibility="Collapsed"/>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
||||
@@ -15,11 +15,15 @@ using namespace Windows::UI;
|
||||
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::Media;
|
||||
using namespace Windows::Foundation::Collections;
|
||||
using namespace Concurrency;
|
||||
|
||||
namespace CalculatorApp
|
||||
{
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(TitleBar, IsAlwaysOnTopMode);
|
||||
|
||||
TitleBar::TitleBar()
|
||||
: m_coreTitleBar(CoreApplication::GetCurrentView()->TitleBar)
|
||||
{
|
||||
@@ -27,10 +31,16 @@ namespace CalculatorApp
|
||||
m_accessibilitySettings = ref new AccessibilitySettings();
|
||||
InitializeComponent();
|
||||
|
||||
m_coreTitleBar->ExtendViewIntoTitleBar = true;
|
||||
Window::Current->SetTitleBar(BackgroundElement);
|
||||
|
||||
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");
|
||||
#else
|
||||
AppName->Text = AppResourceProvider::GetInstance().GetResourceString(L"DevAppName");
|
||||
#endif // IS_STORE_BUILD
|
||||
}
|
||||
|
||||
void TitleBar::OnLoaded(_In_ Object ^ /*sender*/, _In_ RoutedEventArgs ^ /*e*/)
|
||||
@@ -52,7 +62,7 @@ namespace CalculatorApp
|
||||
// Set properties
|
||||
LayoutRoot->Height = m_coreTitleBar->Height;
|
||||
SetTitleBarControlColors();
|
||||
SetTitleBarExtendView();
|
||||
|
||||
SetTitleBarVisibility();
|
||||
SetTitleBarPadding();
|
||||
}
|
||||
@@ -72,14 +82,9 @@ namespace CalculatorApp
|
||||
m_windowActivatedToken.Value = 0;
|
||||
}
|
||||
|
||||
void TitleBar::SetTitleBarExtendView()
|
||||
{
|
||||
m_coreTitleBar->ExtendViewIntoTitleBar = !m_accessibilitySettings->HighContrast;
|
||||
}
|
||||
|
||||
void TitleBar::SetTitleBarVisibility()
|
||||
{
|
||||
this->LayoutRoot->Visibility = m_coreTitleBar->IsVisible && !m_accessibilitySettings->HighContrast ? ::Visibility::Visible : ::Visibility::Collapsed;
|
||||
this->LayoutRoot->Visibility = m_coreTitleBar->IsVisible || IsAlwaysOnTopMode ? ::Visibility::Visible : ::Visibility::Collapsed;
|
||||
}
|
||||
|
||||
void TitleBar::SetTitleBarPadding()
|
||||
@@ -157,7 +162,6 @@ namespace CalculatorApp
|
||||
{
|
||||
Dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([this]() {
|
||||
SetTitleBarControlColors();
|
||||
SetTitleBarExtendView();
|
||||
SetTitleBarVisibility();
|
||||
}));
|
||||
}
|
||||
@@ -167,4 +171,15 @@ namespace CalculatorApp
|
||||
VisualStateManager::GoToState(
|
||||
this, e->WindowActivationState == CoreWindowActivationState::Deactivated ? WindowNotFocused->Name : WindowFocused->Name, false);
|
||||
}
|
||||
|
||||
void TitleBar::OnIsAlwaysOnTopModePropertyChanged(bool /*oldValue*/, bool newValue)
|
||||
{
|
||||
SetTitleBarVisibility();
|
||||
VisualStateManager::GoToState(this, newValue ? "AOTMiniState" : "AOTNormalState", false);
|
||||
}
|
||||
|
||||
void TitleBar::AlwaysOnTopButton_Click(_In_ Object ^ /*sender*/, _In_ RoutedEventArgs ^ e)
|
||||
{
|
||||
AlwaysOnTopClick(this, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "Views/TitleBar.g.h"
|
||||
#include "CalcViewModel\ApplicationViewModel.h"
|
||||
|
||||
namespace CalculatorApp
|
||||
{
|
||||
@@ -18,6 +19,10 @@ public
|
||||
public:
|
||||
TitleBar();
|
||||
|
||||
DEPENDENCY_PROPERTY_OWNER(TitleBar);
|
||||
DEPENDENCY_PROPERTY_WITH_CALLBACK(bool, IsAlwaysOnTopMode);
|
||||
|
||||
event Windows::UI::Xaml::RoutedEventHandler ^ AlwaysOnTopClick;
|
||||
private:
|
||||
void OnLoaded(_In_ Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
void OnUnloaded(_In_ Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
@@ -26,10 +31,10 @@ public
|
||||
void SetTitleBarVisibility();
|
||||
void SetTitleBarPadding();
|
||||
void SetTitleBarControlColors();
|
||||
void SetTitleBarExtendView();
|
||||
void ColorValuesChanged(_In_ Windows::UI::ViewManagement::UISettings ^ sender, _In_ Platform::Object ^ e);
|
||||
void OnHighContrastChanged(Windows::UI::ViewManagement::AccessibilitySettings ^ sender, Platform::Object ^ args);
|
||||
void OnWindowActivated(Platform::Object ^ sender, Windows::UI::Core::WindowActivatedEventArgs ^ e);
|
||||
void OnIsAlwaysOnTopModePropertyChanged(bool oldValue, bool newValue);
|
||||
|
||||
Platform::Agile<Windows::ApplicationModel::Core::CoreApplicationViewTitleBar ^> m_coreTitleBar;
|
||||
Windows::Foundation::EventRegistrationToken m_layoutChangedToken;
|
||||
@@ -39,5 +44,6 @@ public
|
||||
Windows::Foundation::EventRegistrationToken m_accessibilitySettingsToken;
|
||||
Windows::UI::ViewManagement::UISettings ^ m_uiSettings;
|
||||
Windows::UI::ViewManagement::AccessibilitySettings ^ m_accessibilitySettings;
|
||||
void AlwaysOnTopButton_Click(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -341,7 +341,7 @@
|
||||
</VisualState.Setters>
|
||||
</VisualState>
|
||||
</VisualStateGroup>
|
||||
<VisualStateGroup x:Name="Sizing">
|
||||
<VisualStateGroup x:Name="Sizing" CurrentStateChanged="OnVisualStateChanged">
|
||||
<VisualState x:Name="Wide">
|
||||
<VisualState.StateTriggers>
|
||||
<AdaptiveTrigger MinWindowHeight="768" MinWindowWidth="1280"/>
|
||||
@@ -706,7 +706,7 @@
|
||||
Style="{StaticResource SymbolOperatorButtonStyle}"
|
||||
FontSize="16"
|
||||
ButtonId="Negate"
|
||||
Content=""
|
||||
Content=""
|
||||
TabIndex="6"
|
||||
Visibility="{x:Bind Model.CurrentCategory.NegateVisibility, Mode=OneWay}"/>
|
||||
</Grid>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#include "pch.h"
|
||||
#include "UnitConverter.xaml.h"
|
||||
#include "CalcViewModel/Common/TraceLogger.h"
|
||||
#include "CalcViewModel/UnitConverterViewModel.h"
|
||||
#include "Controls/CalculationResult.h"
|
||||
#include "Controls/CalculatorButton.h"
|
||||
@@ -245,7 +246,7 @@ 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, Model->Mode);
|
||||
Model->OnPaste(pastedString);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -368,3 +369,10 @@ void CalculatorApp::UnitConverter::SupplementaryResultsPanelInGrid_SizeChanged(P
|
||||
// We add 0.01 to be sure to not create an infinite loop with SizeChanged events cascading due to float approximation
|
||||
RowDltrUnits->MinHeight = max(48.0, e->NewSize.Height + 0.01);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -89,5 +89,6 @@ namespace CalculatorApp
|
||||
|
||||
bool m_isAnimationEnabled;
|
||||
void SupplementaryResultsPanelInGrid_SizeChanged(Platform::Object ^ sender, Windows::UI::Xaml::SizeChangedEventArgs ^ e);
|
||||
void OnVisualStateChanged(Platform::Object ^ sender, Windows::UI::Xaml::VisualStateChangedEventArgs ^ e);
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user