Files
calculator/src/Calculator/Views/NumberPad.xaml.cpp

100 lines
3.5 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
//
// NumberPad.xaml.cpp
// Implementation of the NumberPad class
//
#include "pch.h"
#include "NumberPad.xaml.h"
#include "Controls/CalculatorButton.h"
#include "CalcViewModel/StandardCalculatorViewModel.h"
#include "CalcViewModel/Common/LocalizationSettings.h"
using namespace CalculatorApp;
using namespace CalculatorApp::ViewModel;
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;
using namespace CalculatorApp::Common;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
DEPENDENCY_PROPERTY_INITIALIZATION(NumberPad, ButtonStyle);
DEPENDENCY_PROPERTY_INITIALIZATION(NumberPad, CurrentRadixType);
NumberPad::NumberPad()
: m_isErrorVisualState(false)
{
InitializeComponent();
const auto& localizationSettings = LocalizationSettings::GetInstance();
this->DecimalSeparatorButton->Content = localizationSettings.GetDecimalSeparator();
this->Num0Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('0');
this->Num1Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('1');
this->Num2Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('2');
this->Num3Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('3');
this->Num4Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('4');
this->Num5Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('5');
this->Num6Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('6');
this->Num7Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('7');
this->Num8Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('8');
this->Num9Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('9');
}
void NumberPad::OnCurrentRadixTypePropertyChanged(NumberBase /* oldValue */, NumberBase newValue)
{
Num0Button->IsEnabled = true;
Num1Button->IsEnabled = true;
Num2Button->IsEnabled = true;
Num3Button->IsEnabled = true;
Num4Button->IsEnabled = true;
Num5Button->IsEnabled = true;
Num6Button->IsEnabled = true;
Num7Button->IsEnabled = true;
Num8Button->IsEnabled = true;
Num9Button->IsEnabled = true;
if (newValue == NumberBase::BinBase)
{
Num2Button->IsEnabled = false;
Num3Button->IsEnabled = false;
Num4Button->IsEnabled = false;
Num5Button->IsEnabled = false;
Num6Button->IsEnabled = false;
Num7Button->IsEnabled = false;
Num8Button->IsEnabled = false;
Num9Button->IsEnabled = false;
}
else if (newValue == NumberBase::OctBase)
{
Num8Button->IsEnabled = false;
Num9Button->IsEnabled = false;
}
}
bool NumberPad::IsErrorVisualState::get()
{
return m_isErrorVisualState;
}
void NumberPad::IsErrorVisualState::set(bool value)
{
if (m_isErrorVisualState != value)
{
m_isErrorVisualState = value;
String ^ newState = m_isErrorVisualState ? L"ErrorLayout" : L"NoErrorLayout";
VisualStateManager::GoToState(this, newState, false);
}
}