mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/calculation] Display the exact layout only when the exp is Store
This commit is contained in:
@@ -53,11 +53,15 @@ KDCoordinate Calculation::height(Context * context) {
|
||||
Layout inputLayout = createInputLayout();
|
||||
KDCoordinate inputHeight = inputLayout.layoutSize().height();
|
||||
Layout approximateLayout = createApproximateOutputLayout(context);
|
||||
KDCoordinate approximateOutputHeight = approximateLayout.layoutSize().height();
|
||||
Layout exactLayout = createExactOutputLayout();
|
||||
if (shouldOnlyDisplayApproximateOutput(context)) {
|
||||
KDCoordinate approximateOutputHeight = approximateLayout.layoutSize().height();
|
||||
m_height = inputHeight+approximateOutputHeight;
|
||||
} else if (shouldOnlyDisplayExactOutput()) {
|
||||
KDCoordinate exactOutputHeight = exactLayout.layoutSize().height();
|
||||
m_height = inputHeight+exactOutputHeight;
|
||||
} else {
|
||||
Layout exactLayout = createExactOutputLayout();
|
||||
KDCoordinate approximateOutputHeight = approximateLayout.layoutSize().height();
|
||||
KDCoordinate exactOutputHeight = exactLayout.layoutSize().height();
|
||||
KDCoordinate outputHeight = max(exactLayout.baseline(), approximateLayout.baseline()) + max(exactOutputHeight-exactLayout.baseline(), approximateOutputHeight-approximateLayout.baseline());
|
||||
m_height = inputHeight + outputHeight;
|
||||
@@ -143,6 +147,10 @@ bool Calculation::shouldOnlyDisplayApproximateOutput(Context * context) {
|
||||
return input().isApproximate(*context) || exactOutput().isApproximate(*context);
|
||||
}
|
||||
|
||||
bool Calculation::shouldOnlyDisplayExactOutput() {
|
||||
return strchr(m_inputText, Ion::Charset::Sto) != nullptr;
|
||||
}
|
||||
|
||||
Calculation::EqualSign Calculation::exactAndApproximateDisplayedOutputsAreEqual(Poincare::Context * context) {
|
||||
if (m_equalSign != EqualSign::Unknown) {
|
||||
return m_equalSign;
|
||||
|
||||
@@ -34,6 +34,7 @@ public:
|
||||
bool isEmpty();
|
||||
void tidy();
|
||||
bool shouldOnlyDisplayApproximateOutput(Poincare::Context * context);
|
||||
bool shouldOnlyDisplayExactOutput();
|
||||
EqualSign exactAndApproximateDisplayedOutputsAreEqual(Poincare::Context * context);
|
||||
constexpr static int k_printedExpressionSize = 2*::TextField::maxBufferSize();
|
||||
private:
|
||||
|
||||
@@ -105,13 +105,21 @@ void HistoryViewCell::setCalculation(Calculation * calculation) {
|
||||
/* Both output expressions have to be updated at the same time. Otherwise,
|
||||
* when updating one layout, if the second one still points to a deleted
|
||||
* layout, calling to layoutSubviews() would fail. */
|
||||
assert(!calculation->shouldOnlyDisplayApproximateOutput(calculationApp->localContext()) || !calculation->shouldOnlyDisplayExactOutput());
|
||||
if (!m_exactOutputLayout.isUninitialized()) {
|
||||
m_exactOutputLayout = Poincare::Layout();
|
||||
}
|
||||
if (!calculation->shouldOnlyDisplayApproximateOutput(calculationApp->localContext())) {
|
||||
m_exactOutputLayout = calculation->createExactOutputLayout();
|
||||
if (!m_approximateOutputLayout.isUninitialized()) {
|
||||
m_approximateOutputLayout = Poincare::Layout();
|
||||
}
|
||||
if (calculation->shouldOnlyDisplayExactOutput()) {
|
||||
m_approximateOutputLayout = calculation->createExactOutputLayout();
|
||||
} else {
|
||||
m_approximateOutputLayout = calculation->createApproximateOutputLayout(calculationApp->localContext());
|
||||
if (!calculation->shouldOnlyDisplayApproximateOutput(calculationApp->localContext())) {
|
||||
m_exactOutputLayout = calculation->createExactOutputLayout();
|
||||
}
|
||||
}
|
||||
m_approximateOutputLayout = calculation->createApproximateOutputLayout(calculationApp->localContext());
|
||||
m_scrollableOutputView.setLayouts(m_approximateOutputLayout, m_exactOutputLayout);
|
||||
I18n::Message equalMessage = calculation->exactAndApproximateDisplayedOutputsAreEqual(calculationApp->localContext()) == Calculation::EqualSign::Equal ? I18n::Message::Equal : I18n::Message::AlmostEqual;
|
||||
m_scrollableOutputView.setEqualMessage(equalMessage);
|
||||
|
||||
Reference in New Issue
Block a user