mirror of
https://github.com/Microsoft/calculator.git
synced 2025-08-22 14:13:30 -07:00
take feedback into account and modify OverflowTextblock::OnApplyTemplate to make this control customizable by other developers
This commit is contained in:
parent
79cdc54c05
commit
b83657e66f
4 changed files with 62 additions and 39 deletions
|
@ -67,6 +67,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel() :
|
||||||
m_BinaryDisplayValue(L"0"),
|
m_BinaryDisplayValue(L"0"),
|
||||||
m_OctalDisplayValue(L"0"),
|
m_OctalDisplayValue(L"0"),
|
||||||
m_standardCalculatorManager(&m_calculatorDisplay, &m_resourceProvider),
|
m_standardCalculatorManager(&m_calculatorDisplay, &m_resourceProvider),
|
||||||
|
m_ExpressionTokens(ref new Vector<DisplayExpressionToken^>()),
|
||||||
m_MemorizedNumbers(ref new Vector<MemoryItemViewModel^>()),
|
m_MemorizedNumbers(ref new Vector<MemoryItemViewModel^>()),
|
||||||
m_IsMemoryEmpty(true),
|
m_IsMemoryEmpty(true),
|
||||||
m_IsFToEChecked(false),
|
m_IsFToEChecked(false),
|
||||||
|
@ -129,7 +130,6 @@ StandardCalculatorViewModel::StandardCalculatorViewModel() :
|
||||||
AreHistoryShortcutsEnabled = true;
|
AreHistoryShortcutsEnabled = true;
|
||||||
AreProgrammerRadixOperatorsEnabled = false;
|
AreProgrammerRadixOperatorsEnabled = false;
|
||||||
|
|
||||||
m_ExpressionTokens = ref new Vector<DisplayExpressionToken^>();
|
|
||||||
m_tokenPosition = -1;
|
m_tokenPosition = -1;
|
||||||
m_isLastOperationHistoryLoad = false;
|
m_isLastOperationHistoryLoad = false;
|
||||||
}
|
}
|
||||||
|
@ -1431,29 +1431,29 @@ void StandardCalculatorViewModel::SaveEditedCommand(_In_ unsigned int tokenPosit
|
||||||
|
|
||||||
switch (nOpCode)
|
switch (nOpCode)
|
||||||
{
|
{
|
||||||
case static_cast<int>(Command::CommandASIN) :
|
case static_cast<int>(Command::CommandASIN) :
|
||||||
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandSIN), true, angleType);
|
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandSIN), true, angleType);
|
||||||
break;
|
break;
|
||||||
case static_cast<int>(Command::CommandACOS) :
|
case static_cast<int>(Command::CommandACOS) :
|
||||||
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandCOS), true, angleType);
|
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandCOS), true, angleType);
|
||||||
break;
|
break;
|
||||||
case static_cast<int>(Command::CommandATAN) :
|
case static_cast<int>(Command::CommandATAN) :
|
||||||
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandTAN), true, angleType);
|
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandTAN), true, angleType);
|
||||||
break;
|
break;
|
||||||
case static_cast<int>(Command::CommandASINH) :
|
case static_cast<int>(Command::CommandASINH) :
|
||||||
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandSINH), true, angleType);
|
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandSINH), true, angleType);
|
||||||
break;
|
break;
|
||||||
case static_cast<int>(Command::CommandACOSH) :
|
case static_cast<int>(Command::CommandACOSH) :
|
||||||
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandCOSH), true, angleType);
|
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandCOSH), true, angleType);
|
||||||
break;
|
break;
|
||||||
case static_cast<int>(Command::CommandATANH) :
|
case static_cast<int>(Command::CommandATANH) :
|
||||||
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandTANH), true, angleType);
|
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandTANH), true, angleType);
|
||||||
break;
|
break;
|
||||||
case static_cast<int>(Command::CommandPOWE) :
|
case static_cast<int>(Command::CommandPOWE) :
|
||||||
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandLN), true, angleType);
|
updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast<int>(Command::CommandLN), true, angleType);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
updatedToken = CCalcEngine::OpCodeToUnaryString(nOpCode, false, angleType);
|
updatedToken = CCalcEngine::OpCodeToUnaryString(nOpCode, false, angleType);
|
||||||
}
|
}
|
||||||
if ((token.first.length() > 0) && (token.first[token.first.length() - 1] == L'('))
|
if ((token.first.length() > 0) && (token.first[token.first.length() - 1] == L'('))
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,21 +30,39 @@ DEPENDENCY_PROPERTY_INITIALIZATION(OverflowTextBlock, TokensUpdated);
|
||||||
|
|
||||||
void OverflowTextBlock::OnApplyTemplate()
|
void OverflowTextBlock::OnApplyTemplate()
|
||||||
{
|
{
|
||||||
assert(((m_scrollLeft == nullptr) && (m_scrollRight == nullptr)) || ((m_scrollLeft != nullptr) && (m_scrollRight != nullptr)));
|
UnregisterEventHandlers();
|
||||||
|
|
||||||
m_expressionContainer = safe_cast<ScrollViewer^>(GetTemplateChild("expressionContainer"));
|
auto uiElement = GetTemplateChild("expressionContainer");
|
||||||
m_expressionContainer->ChangeView(m_expressionContainer->ExtentWidth - m_expressionContainer->ViewportWidth, nullptr, nullptr);
|
if (uiElement != nullptr)
|
||||||
m_expressionContainer->ViewChanged += ref new Windows::Foundation::EventHandler<Windows::UI::Xaml::Controls::ScrollViewerViewChangedEventArgs ^>(this, &CalculatorApp::Controls::OverflowTextBlock::OnViewChanged);
|
{
|
||||||
m_scrollLeft = safe_cast<Button^>(GetTemplateChild("scrollLeft"));
|
m_expressionContainer = safe_cast<ScrollViewer^>(uiElement);
|
||||||
m_scrollRight = safe_cast<Button^>(GetTemplateChild("scrollRight"));
|
m_expressionContainer->ChangeView(m_expressionContainer->ExtentWidth - m_expressionContainer->ViewportWidth, nullptr, nullptr);
|
||||||
|
m_containerViewChangedToken = m_expressionContainer->ViewChanged += ref new EventHandler<ScrollViewerViewChangedEventArgs ^>(this, &OverflowTextBlock::OnViewChanged);
|
||||||
|
}
|
||||||
|
|
||||||
m_scrollLeftClickEventToken = m_scrollLeft->Click += ref new RoutedEventHandler(this, &OverflowTextBlock::OnScrollClick);
|
uiElement = GetTemplateChild("scrollLeft");
|
||||||
m_scrollRightClickEventToken = m_scrollRight->Click += ref new RoutedEventHandler(this, &OverflowTextBlock::OnScrollClick);
|
if (uiElement != nullptr)
|
||||||
|
{
|
||||||
|
m_scrollLeft = safe_cast<Button^>(uiElement);
|
||||||
|
m_scrollLeftClickEventToken = m_scrollLeft->Click += ref new RoutedEventHandler(this, &OverflowTextBlock::OnScrollClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
uiElement = GetTemplateChild("scrollRight");
|
||||||
|
if (uiElement != nullptr)
|
||||||
|
{
|
||||||
|
m_scrollRight = safe_cast<Button^>(GetTemplateChild("scrollRight"));
|
||||||
|
m_scrollRightClickEventToken = m_scrollRight->Click += ref new RoutedEventHandler(this, &OverflowTextBlock::OnScrollClick);
|
||||||
|
}
|
||||||
|
|
||||||
m_scrollingLeft = false;
|
m_scrollingLeft = false;
|
||||||
m_scrollingRight = false;
|
m_scrollingRight = false;
|
||||||
|
|
||||||
m_itemsControl = safe_cast<ItemsControl^>(GetTemplateChild("TokenList"));
|
uiElement = GetTemplateChild("TokenList");
|
||||||
|
if (uiElement != nullptr)
|
||||||
|
{
|
||||||
|
m_itemsControl = safe_cast<ItemsControl^>(uiElement);
|
||||||
|
}
|
||||||
|
|
||||||
UpdateAllState();
|
UpdateAllState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,10 +207,14 @@ void OverflowTextBlock::UnregisterEventHandlers()
|
||||||
{
|
{
|
||||||
m_scrollRight->Click -= m_scrollRightClickEventToken;
|
m_scrollRight->Click -= m_scrollRightClickEventToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_expressionContainer != nullptr)
|
||||||
|
{
|
||||||
|
m_expressionContainer->ViewChanged -= m_containerViewChangedToken;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OverflowTextBlock::OnViewChanged(_In_opt_ Object^ /*sender*/, _In_opt_ ScrollViewerViewChangedEventArgs^ /*args*/)
|
||||||
void CalculatorApp::Controls::OverflowTextBlock::OnViewChanged(Platform::Object ^sender, Windows::UI::Xaml::Controls::ScrollViewerViewChangedEventArgs ^args)
|
|
||||||
{
|
{
|
||||||
UpdateScrollButtons();
|
UpdateScrollButtons();
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ namespace CalculatorApp
|
||||||
void OnPointerExited(_In_ Platform::Object^ sender, _In_ Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
|
void OnPointerExited(_In_ Platform::Object^ sender, _In_ Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e);
|
||||||
void ShowHideScrollButtons(Windows::UI::Xaml::Visibility vLeft, Windows::UI::Xaml::Visibility vRight);
|
void ShowHideScrollButtons(Windows::UI::Xaml::Visibility vLeft, Windows::UI::Xaml::Visibility vRight);
|
||||||
void OnTokensUpdatedPropertyChanged(bool oldValue, bool newValue);
|
void OnTokensUpdatedPropertyChanged(bool oldValue, bool newValue);
|
||||||
|
void OnViewChanged(_In_opt_ Platform::Object ^sender, _In_opt_ Windows::UI::Xaml::Controls::ScrollViewerViewChangedEventArgs ^args);
|
||||||
|
|
||||||
void UpdateVisualState();
|
void UpdateVisualState();
|
||||||
void UpdateExpressionState();
|
void UpdateExpressionState();
|
||||||
|
@ -52,7 +53,7 @@ namespace CalculatorApp
|
||||||
|
|
||||||
Windows::Foundation::EventRegistrationToken m_scrollLeftClickEventToken;
|
Windows::Foundation::EventRegistrationToken m_scrollLeftClickEventToken;
|
||||||
Windows::Foundation::EventRegistrationToken m_scrollRightClickEventToken;
|
Windows::Foundation::EventRegistrationToken m_scrollRightClickEventToken;
|
||||||
void OnViewChanged(Platform::Object ^sender, Windows::UI::Xaml::Controls::ScrollViewerViewChangedEventArgs ^args);
|
Windows::Foundation::EventRegistrationToken m_containerViewChangedToken;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,20 +18,20 @@
|
||||||
<TextBlock Margin="2,0,0,0"
|
<TextBlock Margin="2,0,0,0"
|
||||||
Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"
|
Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"
|
||||||
IsTextScaleFactorEnabled="False"
|
IsTextScaleFactorEnabled="False"
|
||||||
Text="{x:Bind Token}"/>
|
Text="{x:Bind Token, Mode=OneWay}"/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<DataTemplate x:Key="Operator" x:DataType="common:DisplayExpressionToken">
|
<DataTemplate x:Key="Operator" x:DataType="common:DisplayExpressionToken">
|
||||||
<TextBlock Margin="2,0,0,0"
|
<TextBlock Margin="2,0,0,0"
|
||||||
Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"
|
Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"
|
||||||
IsTextScaleFactorEnabled="False"
|
IsTextScaleFactorEnabled="False"
|
||||||
Text="{x:Bind Token}"/>
|
Text="{x:Bind Token, Mode=OneWay}"/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<DataTemplate x:Key="Separator" x:DataType="common:DisplayExpressionToken">
|
<DataTemplate x:Key="Separator" x:DataType="common:DisplayExpressionToken">
|
||||||
<TextBlock x:Name="MainText"
|
<TextBlock x:Name="MainText"
|
||||||
IsTextScaleFactorEnabled="False"
|
IsTextScaleFactorEnabled="False"
|
||||||
Text="{x:Bind Token}"/>
|
Text="{x:Bind Token, Mode=OneWay}"/>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|
||||||
<!-- TextBox Styles -->
|
<!-- TextBox Styles -->
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue