mirror of
https://github.com/Microsoft/calculator.git
synced 2025-07-16 02:02:51 -07:00
Fix usability issues with settings flyout (#1049)
* various settings fixes * PR fixes
This commit is contained in:
parent
1f56b4946d
commit
0c8d6dd83c
6 changed files with 8 additions and 103 deletions
|
@ -20,7 +20,7 @@ GraphingSettingsViewModel::GraphingSettingsViewModel()
|
|||
, m_XMaxError(false)
|
||||
, m_YMinError(false)
|
||||
, m_YMaxError(false)
|
||||
, m_dontUpdateDisplayRange(false)
|
||||
, m_dontUpdateDisplayRange()
|
||||
, m_XIsMinLastChanged(true)
|
||||
, m_YIsMinLastChanged(true)
|
||||
{
|
||||
|
@ -71,75 +71,13 @@ void GraphingSettingsViewModel::InitRanges()
|
|||
m_dontUpdateDisplayRange = false;
|
||||
}
|
||||
|
||||
void GraphingSettingsViewModel::UpdateDisplayRange(bool XValuesModified)
|
||||
void GraphingSettingsViewModel::UpdateDisplayRange()
|
||||
{
|
||||
if (m_Graph == nullptr || m_dontUpdateDisplayRange || HasError())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_Graph->ForceProportionalAxes)
|
||||
{
|
||||
// If ForceProportionalAxes is set, the graph will try to automatically adjust ranges to remain proportional.
|
||||
// but without a logic to choose which values can be modified or not.
|
||||
// To solve this problem, we calculate the new ranges here, taking care to not modify the current axis and
|
||||
// modifying only the least recently updated value of the other axis.
|
||||
|
||||
if (XValuesModified)
|
||||
{
|
||||
if (m_YIsMinLastChanged)
|
||||
{
|
||||
auto yMaxValue = m_YMinValue + (m_XMaxValue - m_XMinValue) * m_Graph->ActualHeight / m_Graph->ActualWidth;
|
||||
if (m_YMaxValue != yMaxValue)
|
||||
{
|
||||
m_YMaxValue = yMaxValue;
|
||||
auto valueStr = to_wstring(m_YMaxValue);
|
||||
TrimTrailingZeros(valueStr);
|
||||
m_YMax = ref new String(valueStr.c_str());
|
||||
RaisePropertyChanged("YMax");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto yMinValue = m_YMaxValue - (m_XMaxValue - m_XMinValue) * m_Graph->ActualHeight / m_Graph->ActualWidth;
|
||||
if (m_YMinValue != yMinValue)
|
||||
{
|
||||
m_YMinValue = yMinValue;
|
||||
auto valueStr = to_wstring(m_YMinValue);
|
||||
TrimTrailingZeros(valueStr);
|
||||
m_YMin = ref new String(valueStr.c_str());
|
||||
RaisePropertyChanged("YMin");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_XIsMinLastChanged)
|
||||
{
|
||||
auto xMaxValue = m_XMinValue + (m_YMaxValue - m_YMinValue) * m_Graph->ActualWidth / m_Graph->ActualHeight;
|
||||
if (m_XMaxValue != xMaxValue)
|
||||
{
|
||||
m_XMaxValue = xMaxValue;
|
||||
auto valueStr = to_wstring(m_XMaxValue);
|
||||
TrimTrailingZeros(valueStr);
|
||||
m_XMax = ref new String(valueStr.c_str());
|
||||
RaisePropertyChanged("XMax");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto xMinValue = m_XMaxValue - (m_YMaxValue - m_YMinValue) * m_Graph->ActualWidth / m_Graph->ActualHeight;
|
||||
if (m_XMinValue != xMinValue)
|
||||
{
|
||||
m_XMinValue = xMinValue;
|
||||
auto valueStr = to_wstring(m_XMinValue);
|
||||
TrimTrailingZeros(valueStr);
|
||||
m_XMin = ref new String(valueStr.c_str());
|
||||
RaisePropertyChanged("XMin");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
m_Graph->SetDisplayRanges(m_XMinValue, m_XMaxValue, m_YMinValue, m_YMaxValue);
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ namespace CalculatorApp::ViewModel
|
|||
}
|
||||
RaisePropertyChanged("XError");
|
||||
RaisePropertyChanged("XMin");
|
||||
UpdateDisplayRange(true);
|
||||
UpdateDisplayRange();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -112,7 +112,7 @@ namespace CalculatorApp::ViewModel
|
|||
}
|
||||
RaisePropertyChanged("XError");
|
||||
RaisePropertyChanged("XMax");
|
||||
UpdateDisplayRange(true);
|
||||
UpdateDisplayRange();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -153,7 +153,7 @@ namespace CalculatorApp::ViewModel
|
|||
}
|
||||
RaisePropertyChanged("YError");
|
||||
RaisePropertyChanged("YMin");
|
||||
UpdateDisplayRange(false);
|
||||
UpdateDisplayRange();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -194,7 +194,7 @@ namespace CalculatorApp::ViewModel
|
|||
}
|
||||
RaisePropertyChanged("YError");
|
||||
RaisePropertyChanged("YMax");
|
||||
UpdateDisplayRange(false);
|
||||
UpdateDisplayRange();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -270,7 +270,7 @@ namespace CalculatorApp::ViewModel
|
|||
}
|
||||
|
||||
public:
|
||||
void UpdateDisplayRange(bool XValuesModified);
|
||||
void UpdateDisplayRange();
|
||||
|
||||
public:
|
||||
void SetGrapher(GraphControl::Grapher ^ grapher);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue