[Feature] Add root and log setting (#290)

* [setting + layout] add function setting

* [GitHub] GitHub Actions

* [GitHub/Fix] GitHub Actions

* Update config.mak

* Fix setting name

* Fix setting name

* Fix setting name

* Fix setting name

* Fix setting name

* Fix setting name

* Fix typo error

* Fix trad

Co-authored-by: Quentin Guidée <quentin.guidee@gmail.com>
This commit is contained in:
Evann DREUMONT
2020-06-13 00:10:33 +02:00
committed by GitHub
parent b7a5abe597
commit f0c46adebe
16 changed files with 182 additions and 6 deletions

View File

@@ -59,6 +59,10 @@ SymbolMultiplicationCross = "Kreuz "
SymbolMultiplicationMiddleDot = "Mittelpunkt "
SymbolMultiplicationStar = "Stern "
SymbolMultiplicationAutoSymbol = "automatisch "
SymbolFunction = "Ausdrucksformat "
SymbolDefaultFunction = "Standardl "
SymbolArgFunction = "Leer "
SymbolArgDefaultFunction = "Argument "
PythonFont = "Python Schriftart"
Large = "Groß "
Small = "Klein "

View File

@@ -59,6 +59,10 @@ SymbolMultiplicationCross = "Cross "
SymbolMultiplicationMiddleDot = "Dot "
SymbolMultiplicationStar = "Star "
SymbolMultiplicationAutoSymbol = "Auto "
SymbolFunction = "Expression format "
SymbolDefaultFunction = "Default "
SymbolArgFunction = "Empty "
SymbolArgDefaultFunction = "Argument "
PythonFont = "Python Font"
Large = "Large "
Small = "Small "

View File

@@ -59,6 +59,10 @@ SymbolMultiplicationCross = "Contrariar "
SymbolMultiplicationMiddleDot = "Punto "
SymbolMultiplicationStar = "Estrella "
SymbolMultiplicationAutoSymbol = "Auto "
SymbolFunction = "Formato expresión "
SymbolDefaultFunction = "Defecto "
SymbolArgFunction = "Vacío "
SymbolArgDefaultFunction = "Argumento "
PythonFont = "Fuente Python"
Large = "Grande "
Small = "Pequeña "

View File

@@ -59,6 +59,10 @@ SymbolMultiplicationCross = "Croix "
SymbolMultiplicationMiddleDot = "Point "
SymbolMultiplicationStar = "Etoile "
SymbolMultiplicationAutoSymbol = "Automatique "
SymbolFunction = "Format expressions "
SymbolDefaultFunction = "Défaut "
SymbolArgFunction = "Vide "
SymbolArgDefaultFunction = "Arguments "
PythonFont = "Police Python"
Large = "Grand "
Small = "Petit "

View File

@@ -59,6 +59,10 @@ SymbolMultiplicationCross = "Kereszt"
SymbolMultiplicationMiddleDot = "Pont "
SymbolMultiplicationStar = "Csillag "
SymbolMultiplicationAutoSymbol = "Automata "
SymbolFunction = "Kifejezési formátum "
SymbolDefaultFunction = "alapértelmezett "
SymbolArgFunction = "Üres "
SymbolArgDefaultFunction = "Argumentummal "
PythonFont = "Python Betütipus"
Large = "Nagy "
Small = "Kicsi "

View File

@@ -59,6 +59,10 @@ SymbolMultiplicationCross = "crómio "
SymbolMultiplicationMiddleDot = "ponto médio "
SymbolMultiplicationStar = "estrela "
SymbolMultiplicationAutoSymbol = "automático "
SymbolFunction = "Formato expressão "
SymbolDefaultFunction = "Padrão "
SymbolArgFunction = "Vazio "
SymbolArgDefaultFunction = "Argumento "
PythonFont = "Fonte Python"
Large = "Ampla "
Small = "Pequeno "

View File

@@ -14,8 +14,9 @@ constexpr SettingsMessageTree s_modelEditionModeChildren[2] = {SettingsMessageTr
constexpr SettingsMessageTree s_modelFloatDisplayModeChildren[4] = {SettingsMessageTree(I18n::Message::Decimal), SettingsMessageTree(I18n::Message::Scientific), SettingsMessageTree(I18n::Message::Engineering), SettingsMessageTree(I18n::Message::SignificantFigures)};
constexpr SettingsMessageTree s_modelComplexFormatChildren[3] = {SettingsMessageTree(I18n::Message::Real), SettingsMessageTree(I18n::Message::Cartesian), SettingsMessageTree(I18n::Message::Polar)};
constexpr SettingsMessageTree s_symbolChildren[4] = {SettingsMessageTree(I18n::Message::SymbolMultiplicationCross),SettingsMessageTree(I18n::Message::SymbolMultiplicationMiddleDot),SettingsMessageTree(I18n::Message::SymbolMultiplicationStar),SettingsMessageTree(I18n::Message::SymbolMultiplicationAutoSymbol)};
constexpr SettingsMessageTree s_modelResultDisplayChildren[2] = {SettingsMessageTree(I18n::Message::CompactResult), SettingsMessageTree(I18n::Message::DefaultResult)};
constexpr SettingsMessageTree s_modelMathOptionsChildren[6] = {SettingsMessageTree(I18n::Message::AngleUnit, s_modelAngleChildren), SettingsMessageTree(I18n::Message::DisplayMode, s_modelFloatDisplayModeChildren), SettingsMessageTree(I18n::Message::EditionMode, s_modelEditionModeChildren), SettingsMessageTree(I18n::Message::ComplexFormat, s_modelComplexFormatChildren), SettingsMessageTree(I18n::Message::SymbolMultiplication, s_symbolChildren), SettingsMessageTree(I18n::Message::ResultDisplay, s_modelResultDisplayChildren)};
constexpr SettingsMessageTree s_symbolFunctionChildren[3] = {SettingsMessageTree(I18n::Message::SymbolDefaultFunction), SettingsMessageTree(I18n::Message::SymbolArgDefaultFunction), SettingsMessageTree(I18n::Message::SymbolArgFunction)};
constexpr SettingsMessageTree s_modelResultDisplayChildren[2] = {SettingsMessageTree(I18n::Message::DefaultResult), SettingsMessageTree(I18n::Message::CompactResult)};
constexpr SettingsMessageTree s_modelMathOptionsChildren[7] = {SettingsMessageTree(I18n::Message::AngleUnit, s_modelAngleChildren), SettingsMessageTree(I18n::Message::DisplayMode, s_modelFloatDisplayModeChildren), SettingsMessageTree(I18n::Message::EditionMode, s_modelEditionModeChildren), SettingsMessageTree(I18n::Message::ComplexFormat, s_modelComplexFormatChildren), SettingsMessageTree(I18n::Message::SymbolMultiplication, s_symbolChildren), SettingsMessageTree(I18n::Message::ResultDisplay, s_modelResultDisplayChildren), SettingsMessageTree(I18n::Message::SymbolFunction, s_symbolFunctionChildren)};
constexpr SettingsMessageTree s_modelFontChildren[2] = {SettingsMessageTree(I18n::Message::LargeFont), SettingsMessageTree(I18n::Message::SmallFont)};
constexpr SettingsMessageTree s_accessibilityChildren[6] = {SettingsMessageTree(I18n::Message::AccessibilityInvertColors), SettingsMessageTree(I18n::Message::AccessibilityMagnify),SettingsMessageTree(I18n::Message::AccessibilityGamma),SettingsMessageTree(I18n::Message::AccessibilityGammaRed),SettingsMessageTree(I18n::Message::AccessibilityGammaGreen),SettingsMessageTree(I18n::Message::AccessibilityGammaBlue)};
constexpr SettingsMessageTree s_contributorsChildren[17] = {SettingsMessageTree(I18n::Message::Developers), SettingsMessageTree(I18n::Message::QuentinGuidee), SettingsMessageTree(I18n::Message::DannySimmons), SettingsMessageTree(I18n::Message::JoachimLeFournis), SettingsMessageTree(I18n::Message::JeanBaptisteBoric), SettingsMessageTree(I18n::Message::MaximeFriess), SettingsMessageTree(I18n::Message::David), SettingsMessageTree(I18n::Message::DamienNicolet), SettingsMessageTree(I18n::Message::EvannDreumont), SettingsMessageTree(I18n::Message::SzaboLevente), SettingsMessageTree(I18n::Message::VenceslasDuet), SettingsMessageTree(I18n::Message::CharlotteThomas), SettingsMessageTree(I18n::Message::BetaTesters), SettingsMessageTree(I18n::Message::CyprienMejat), SettingsMessageTree(I18n::Message::TimeoArnouts), SettingsMessageTree(I18n::Message::LouisC), SettingsMessageTree(I18n::Message::LelahelHideux)};

View File

@@ -18,8 +18,10 @@ extern const Shared::SettingsMessageTree s_modelEditionModeChildren[2];
extern const Shared::SettingsMessageTree s_modelFloatDisplayModeChildren[4];
extern const Shared::SettingsMessageTree s_modelComplexFormatChildren[3];
extern const Shared::SettingsMessageTree s_symbolChildren[4];
extern const Shared::SettingsMessageTree s_symbolFunctionChildren[3];
extern const Shared::SettingsMessageTree s_modelResultDisplayChildren[2];
extern const Shared::SettingsMessageTree s_modelMathOptionsChildren[6];
extern const Shared::SettingsMessageTree s_symbolFunctionChildren[3];
extern const Shared::SettingsMessageTree s_modelMathOptionsChildren[7];
extern const Shared::SettingsMessageTree s_modelFontChildren[2];
extern const Shared::SettingsMessageTree s_accessibilityChildren[6];
extern const Shared::SettingsMessageTree s_contributorsChildren[17];

View File

@@ -68,6 +68,9 @@ void MathOptionsController::willDisplayCellForIndex(HighlightCell * cell, int in
break;
case I18n::Message::ResultDisplay:
childIndex = (int)preferences->resultDisplay();
case I18n::Message::SymbolFunction:
childIndex = (int)preferences->symbolofFunction();
break;
default:
break;
}

View File

@@ -16,7 +16,7 @@ public:
int reusableCellCount(int type) override;
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
private:
constexpr static int k_totalNumberOfCell = 6;
constexpr static int k_totalNumberOfCell = 7;
MessageTableCellWithChevronAndMessage m_cells[k_totalNumberOfCell];
PreferencesController m_preferencesController;
DisplayModeController m_displayModeController;

View File

@@ -7,6 +7,7 @@
#include <poincare/code_point_layout.h>
#include <poincare/fraction_layout.h>
#include <poincare/vertical_offset_layout.h>
#include <poincare/nth_root_layout.h>
#include <algorithm>
using namespace Poincare;
@@ -181,7 +182,22 @@ Layout PreferencesController::layoutForPreferences(I18n::Message message) {
return CodePointLayout::Builder('*', k_layoutFont);
case I18n::Message::SymbolMultiplicationAutoSymbol:
return CodePointLayout::Builder(' ', k_layoutFont);
// Symbol function
case I18n::Message::SymbolDefaultFunction:
{
return NthRootLayout::Builder(CodePointLayout::Builder('x'));
}
case I18n::Message::SymbolArgDefaultFunction:
{
return NthRootLayout::Builder(CodePointLayout::Builder('x'), CodePointLayout::Builder('2'));
}
case I18n::Message::SymbolArgFunction:
{
return NthRootLayout::Builder(CodePointLayout::Builder('x'), CodePointLayout::Builder('y'));
}
// Result display
case I18n::Message::DefaultResult:
{
@@ -244,6 +260,8 @@ void PreferencesController::setPreferenceWithValueIndex(I18n::Message message, i
GlobalPreferences::sharedGlobalPreferences()->setTempExamMode((GlobalPreferences::ExamMode)((uint8_t)valueIndex + 1));
} else if (message == I18n::Message::SymbolMultiplication) {
preferences->setSymbolMultiplication((Preferences::SymbolMultiplication)valueIndex);
} else if (message == I18n::Message::SymbolFunction) {
preferences->setSymbolofFunction((Preferences::SymbolFunction)valueIndex);
} else if (message == I18n::Message::ResultDisplay) {
preferences->setResultDisplay((Preferences::ResultDisplay)valueIndex);
} else if (message == I18n::Message::FontSizes) {
@@ -274,6 +292,9 @@ int PreferencesController::valueIndexForPreference(I18n::Message message) const
if (message == I18n::Message::SymbolMultiplication) {
return (int)preferences->symbolofMultiplication();
}
if (message == I18n::Message::SymbolFunction) {
return (int)preferences->symbolofFunction();
}
if (message == I18n::Message::ResultDisplay) {
return (int)preferences->resultDisplay();
}

View File

@@ -343,7 +343,9 @@ bool LayoutField::handleEventWithText(const char * text, bool indentation, bool
} else if (strcmp(text, Ion::Events::Power.text()) == 0) {
cursor->addEmptyPowerLayout();
} else if (strcmp(text, Ion::Events::Sqrt.text()) == 0) {
cursor->addEmptySquareRootLayout();
m_contentView.cursor()->addRoot();
} else if (strcmp(text, Ion::Events::Log.text()) == 0) {
m_contentView.cursor()->addLog();
} else if (strcmp(text, Ion::Events::Square.text()) == 0) {
cursor->addEmptySquarePowerLayout();
} else if (strcmp(text, Ion::Events::EE.text()) == 0) {

View File

@@ -109,7 +109,14 @@ public:
void addEmptyExponentialLayout();
void addEmptyMatrixLayout();
void addEmptyPowerLayout();
void addRoot();
void addLog();
void addEmptyLog();
void addEmpty10Log();
void addEmptyArgLog();
void addEmptySquareRootLayout();
void addEmptyRootLayout();
void addEmptyArgSquareRootLayout();
void addEmptySquarePowerLayout();
void addEmptyTenPowerLayout();
void addFractionLayoutAndCollapseSiblings();

View File

@@ -52,6 +52,11 @@ public:
Star = 2,
Auto = 3
};
enum class SymbolFunction : uint8_t {
Default = 0,
ArgDefault = 1,
Arg = 2
};
enum class ResultDisplay : uint8_t {
Compact = 0,
Default = 1
@@ -76,6 +81,8 @@ public:
void setColorOfLED(LEDColor color) { m_colorOfLED = color; }
SymbolMultiplication symbolofMultiplication() const { return m_symbolMultiplication; }
void setSymbolMultiplication(SymbolMultiplication symbolofMultiplication) { m_symbolMultiplication = symbolofMultiplication; }
SymbolFunction symbolofFunction() const { return m_symbolFunction; }
void setSymbolofFunction(SymbolFunction symbolofFunction) { m_symbolFunction = symbolofFunction; }
ResultDisplay resultDisplay() const { return m_resultDisplay; }
void setResultDisplay(ResultDisplay resultDisplay) { m_resultDisplay = resultDisplay; }
PythonFont pythonFont() const { return m_pythonFont; }
@@ -89,6 +96,7 @@ private:
uint8_t m_numberOfSignificantDigits;
LEDColor m_colorOfLED;
SymbolMultiplication m_symbolMultiplication;
SymbolFunction m_symbolFunction;
ResultDisplay m_resultDisplay;
PythonFont m_pythonFont;
};

View File

@@ -3,6 +3,7 @@
#include <poincare/empty_layout.h>
#include <poincare/fraction_layout.h>
#include <poincare/horizontal_layout.h>
#include <poincare/layout_helper.h>
#include <poincare/layout.h>
#include <poincare/left_parenthesis_layout.h>
#include <poincare/matrix_layout.h>
@@ -108,6 +109,90 @@ void LayoutCursor::addEmptyMatrixLayout() {
m_position = Position::Right;
}
void LayoutCursor::addLog() {
Preferences * preferences = Preferences::sharedPreferences();
switch((int)preferences->symbolofFunction()){
case 1:
addEmpty10Log();
break;
case 2:
addEmptyArgLog();
break;
default:
addEmptyLog();
break;
}
}
void LayoutCursor::addEmptyLog() {
HorizontalLayout child1 = HorizontalLayout::Builder(EmptyLayout::Builder());
HorizontalLayout child2 = HorizontalLayout::Builder(EmptyLayout::Builder());
Layout logLayout = LayoutHelper::String("log", 3);
HorizontalLayout resultLayout = static_cast<HorizontalLayout &>(logLayout);
//VerticalOffsetLayout offsetLayout = VerticalOffsetLayout::Builder(child2, VerticalOffsetLayoutNode::Position::Subscript);
//resultLayout.addChildAtIndex(offsetLayout, resultLayout.numberOfChildren(), resultLayout.numberOfChildren(), nullptr);
resultLayout.addChildAtIndex(HorizontalLayout::Builder(
LeftParenthesisLayout::Builder(),
child1,
RightParenthesisLayout::Builder()
), resultLayout.numberOfChildren(), resultLayout.numberOfChildren(), nullptr);
m_layout.addSibling(this, resultLayout, true);
LayoutCursor::moveLeft(nullptr, false);
}
void LayoutCursor::addEmpty10Log() {
HorizontalLayout child1 = HorizontalLayout::Builder(EmptyLayout::Builder());
HorizontalLayout child2 = HorizontalLayout::Builder(CodePointLayout::Builder('1'),CodePointLayout::Builder('0'));
Layout logLayout = LayoutHelper::String("log", 3);
HorizontalLayout resultLayout = static_cast<HorizontalLayout &>(logLayout);
VerticalOffsetLayout offsetLayout = VerticalOffsetLayout::Builder(child2, VerticalOffsetLayoutNode::Position::Subscript);
resultLayout.addChildAtIndex(offsetLayout, resultLayout.numberOfChildren(), resultLayout.numberOfChildren(), nullptr);
resultLayout.addChildAtIndex(HorizontalLayout::Builder(
LeftParenthesisLayout::Builder(),
child1,
RightParenthesisLayout::Builder()
), resultLayout.numberOfChildren(), resultLayout.numberOfChildren(), nullptr);
m_layout.addSibling(this, resultLayout, true);
LayoutCursor::moveLeft(nullptr, false);
}
void LayoutCursor::addEmptyArgLog() {
HorizontalLayout child1 = HorizontalLayout::Builder(EmptyLayout::Builder());
HorizontalLayout child2 = HorizontalLayout::Builder(EmptyLayout::Builder());
Layout logLayout = LayoutHelper::String("log", 3);
HorizontalLayout resultLayout = static_cast<HorizontalLayout &>(logLayout);
VerticalOffsetLayout offsetLayout = VerticalOffsetLayout::Builder(child2, VerticalOffsetLayoutNode::Position::Subscript);
resultLayout.addChildAtIndex(offsetLayout, resultLayout.numberOfChildren(), resultLayout.numberOfChildren(), nullptr);
resultLayout.addChildAtIndex(HorizontalLayout::Builder(
LeftParenthesisLayout::Builder(),
child1,
RightParenthesisLayout::Builder()
), resultLayout.numberOfChildren(), resultLayout.numberOfChildren(), nullptr);
m_layout.addSibling(this, resultLayout, true);
LayoutCursor::moveLeft(nullptr, false);
}
void LayoutCursor::addRoot() {
Preferences * preferences = Preferences::sharedPreferences();
switch((int)preferences->symbolofFunction()){
case 1:
addEmptyArgSquareRootLayout();
break;
case 2:
addEmptyRootLayout();
break;
default:
addEmptySquareRootLayout();
break;
}
}
void LayoutCursor::addEmptySquareRootLayout() {
// TODO: add a horizontal layout only if several children
HorizontalLayout child1 = HorizontalLayout::Builder(EmptyLayout::Builder());
@@ -118,6 +203,28 @@ void LayoutCursor::addEmptySquareRootLayout() {
((Layout *)&newChild)->collapseSiblings(this);
}
void LayoutCursor::addEmptyRootLayout() {
// TODO: add a horizontal layout only if several children
HorizontalLayout child1 = HorizontalLayout::Builder(EmptyLayout::Builder());
HorizontalLayout child2 = HorizontalLayout::Builder(EmptyLayout::Builder());
NthRootLayout newChild = NthRootLayout::Builder(child1, child2);
m_layout.addSibling(this, newChild, false);
m_layout = newChild.childAtIndex(0);
m_position = Position::Right;
((Layout *)&newChild)->collapseSiblings(this);
}
void LayoutCursor::addEmptyArgSquareRootLayout() {
// TODO: add a horizontal layout only if several children
HorizontalLayout child1 = HorizontalLayout::Builder(EmptyLayout::Builder());
HorizontalLayout child2 = HorizontalLayout::Builder(CodePointLayout::Builder('2'));
NthRootLayout newChild = NthRootLayout::Builder(child1, child2);
m_layout.addSibling(this, newChild, false);
m_layout = newChild.childAtIndex(0);
m_position = Position::Right;
((Layout *)&newChild)->collapseSiblings(this);
}
void LayoutCursor::addEmptyPowerLayout() {
VerticalOffsetLayout offsetLayout = VerticalOffsetLayout::Builder(EmptyLayout::Builder(), VerticalOffsetLayoutNode::Position::Superscript);
privateAddEmptyPowerLayout(offsetLayout);

View File

@@ -15,6 +15,7 @@ Preferences::Preferences() :
m_numberOfSignificantDigits(PrintFloat::k_numberOfPrintedSignificantDigits),
m_colorOfLED(Preferences::LEDColor::Red),
m_symbolMultiplication(Preferences::SymbolMultiplication::Auto),
m_symbolFunction(Preferences::SymbolFunction::Default),
m_resultDisplay(Preferences::ResultDisplay::Compact),
m_pythonFont(Preferences::PythonFont::Large)
{}