msft-calculator/src/CalcViewModel/GraphingCalculator/VariableViewModel.h
Pepe Rivera 28dbdb3d94
Persist variable settings after graph is plotted (#1055)
* Allow copying graph as image

* Persist variables

* Revert "Allow copying graph as image"

This reverts commit 4fc9d798bc.

* fix binding bug

* undo cert change

* fix animation

* remove extra lines

* remove overrides

* undo key comment
2020-03-17 11:27:00 -07:00

113 lines
2.9 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#pragma once
#include "../Common/Utils.h"
#include "EquationViewModel.h"
namespace CalculatorApp::ViewModel
{
public
value struct VariableChangedEventArgs sealed
{
Platform::String ^ variableName;
double newValue;
};
[Windows::UI::Xaml::Data::Bindable] public ref class VariableViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged
{
public:
VariableViewModel(Platform::String ^ name, GraphControl::Variable ^ variable)
: m_Name(name)
, m_variable{ variable }
, m_SliderSettingsVisible(false)
{
}
OBSERVABLE_OBJECT();
OBSERVABLE_PROPERTY_R(Platform::String ^, Name);
OBSERVABLE_PROPERTY_RW(bool, SliderSettingsVisible);
property double Min
{
double get()
{
return m_variable->Min;
}
void set(double value)
{
if (m_variable->Min != value)
{
m_variable->Min = value;
RaisePropertyChanged("Min");
}
}
}
property double Step
{
double get()
{
return m_variable->Step;
}
void set(double value)
{
if (m_variable->Step != value)
{
m_variable->Step = value;
RaisePropertyChanged("Step");
}
}
}
property double Max
{
double get()
{
return m_variable->Max;
}
void set(double value)
{
if (m_variable->Max != value)
{
m_variable->Max = value;
RaisePropertyChanged("Max");
}
}
}
event Windows::Foundation::EventHandler<VariableChangedEventArgs> ^ VariableUpdated;
property double Value
{
double get()
{
return m_variable->Value;
}
void set(double value)
{
if (value < m_variable->Min)
{
m_variable->Min = value;
RaisePropertyChanged(L"Min");
}
else if (value > m_variable->Max)
{
m_variable->Max = value;
RaisePropertyChanged(L"Max");
}
if (m_variable->Value != value)
{
m_variable->Value = value;
VariableUpdated(this, VariableChangedEventArgs{ Name, value });
RaisePropertyChanged(L"Value");
}
}
}
private:
GraphControl::Variable ^ m_variable;
};
}