// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. #pragma once #include "Utils.h" namespace CalculatorApp::Common { public enum class TokenType { Operator, Operand, Separator }; [Windows::UI::Xaml::Data::Bindable] public ref class DisplayExpressionToken sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { internal : DisplayExpressionToken(Platform::String ^ token, int tokenPosition, bool fEditable, TokenType type) : m_Token(token) , m_TokenPosition(tokenPosition) , m_IsTokenEditable(fEditable) , m_Type(type) , m_OriginalToken(token) , m_InEditMode(false) { } public: OBSERVABLE_OBJECT(); OBSERVABLE_PROPERTY_RW(Platform::String ^, Token); OBSERVABLE_PROPERTY_RW(int, TokenPosition); OBSERVABLE_PROPERTY_RW(bool, IsTokenEditable); OBSERVABLE_PROPERTY_RW(int, CommandIndex); OBSERVABLE_PROPERTY_R(Platform::String ^, OriginalToken); property bool IsTokenInEditMode { bool get() { return m_InEditMode; } void set(bool val) { if (!val) { m_OriginalToken = ref new Platform::String(m_Token->Data()); } m_InEditMode = val; } } internal : OBSERVABLE_PROPERTY_RW(TokenType, Type); private: bool m_InEditMode; }; }