diff --git a/apps/Makefile b/apps/Makefile index efba9b037..d7a0e9e59 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -13,6 +13,7 @@ app_objs += $(addprefix apps/,\ node_list_view_controller.o\ node_navigation_controller.o\ tool_box_controller.o\ + tool_box_node.o\ ) $(app_objs): $(inline_images:.png=.o) diff --git a/apps/node.cpp b/apps/node.cpp index 08f3b143a..cd26dc8d9 100644 --- a/apps/node.cpp +++ b/apps/node.cpp @@ -1,9 +1,5 @@ #include "node.h" -const Node * Node::children(int index) const { - return &m_children[index]; -} - int Node::numberOfChildren() { return m_numberOfChildren; } @@ -12,10 +8,6 @@ const char * Node::label() const { return m_label; } -const char * Node::text() const { - return m_text; -} - bool Node::isNull() { return (m_label == nullptr); } diff --git a/apps/node.h b/apps/node.h index 7f0893f55..d604de226 100644 --- a/apps/node.h +++ b/apps/node.h @@ -3,22 +3,17 @@ class Node { public: - constexpr Node(const char * label = nullptr, const char * text = nullptr, const Node * children = nullptr, int numberOfChildren = 0) : + constexpr Node(const char * label = nullptr, int numberOfChildren = 0) : m_label(label), - m_text(text), - m_children(children), m_numberOfChildren(numberOfChildren) { }; - const Node * children(int index) const; + virtual const Node * children(int index) const = 0; const char * label() const; - const char * text() const; int numberOfChildren(); bool isNull(); -private: +protected: const char * m_label; - const char * m_text; - const Node * m_children; int m_numberOfChildren; }; diff --git a/apps/tool_box_controller.cpp b/apps/tool_box_controller.cpp index d7ad6e0a4..89a149efa 100644 --- a/apps/tool_box_controller.cpp +++ b/apps/tool_box_controller.cpp @@ -1,25 +1,26 @@ #include "tool_box_controller.h" +#include "tool_box_node.h" /* TODO: find a shorter way to initiate tree models * We create one model tree: each node keeps the label of the row it refers to * and the text which would be edited by clicking on the row. When the node is a * subtree, the edited text is set at nullptr. */ -const Node calculChildren[4] = {Node("Nombre derivee", "diff(,)"), Node("Integrale", "Int(,,)"), Node("Somme", "sum(,,)"), Node("Produit", "Product(,,)")}; -const Node complexChildren[5] = {Node("Module", "abs()"), Node("Argument", "arg()"), Node("Partie reelle", "re()"), Node("Partie imaginaire", "im()"), Node("Conjugue", "conj()")}; -const Node probabilityChildren[4] = {Node("Combinaison", "binomial()"), Node("Arrangement", "permute(,)"), Node("Nombre aleatoire", "random(,)"), Node("Fonction gamma", "gamma()")}; -const Node arithmeticChildren[4] = {Node("PGCD", "gcd()"), Node("PPCM","lcm()"), Node("Reste division euclidienne", "rem()"), Node("Quotien division euclidienne", "quo()")}; -const Node matricesChildren[5] = {Node("Inverse", "inverse()"), Node("Determinant", "det()"), Node("Transposee", "transpose()"), Node("Trace", "trace()"), Node("Taille", "dim()")}; -const Node listesChildren[5] = {Node("Tri croissant", "sort<()"), Node("Tri decroissant", "sort>()"), Node("Maximum", "max()"), Node("Minimum", "min()"), Node("Taille", "dim()")}; -const Node approximationChildren[4] = {Node("Partie entiere", "floor()"), Node("Partie fractionnaire", "frac()"), Node("Plafond", "ceil()"), Node("Arrondi", "round(,)")}; -const Node trigonometryChildren[6] = {Node("cosh", "cosh()"), Node("sinh", "sinh()"), Node("tanh", "tanh()"), Node("acosh", "acosh()"), Node("asinh", "asinh()"), Node("atanh", "atanh()")}; +const ToolBoxNode calculChildren[4] = {ToolBoxNode("Nombre derivee", "diff(,)"), ToolBoxNode("Integrale", "Int(,,)"), ToolBoxNode("Somme", "sum(,,)"), ToolBoxNode("Produit", "Product(,,)")}; +const ToolBoxNode complexChildren[5] = {ToolBoxNode("Module", "abs()"), ToolBoxNode("Argument", "arg()"), ToolBoxNode("Partie reelle", "re()"), ToolBoxNode("Partie imaginaire", "im()"), ToolBoxNode("Conjugue", "conj()")}; +const ToolBoxNode probabilityChildren[4] = {ToolBoxNode("Combinaison", "binomial()"), ToolBoxNode("Arrangement", "permute(,)"), ToolBoxNode("Nombre aleatoire", "random(,)"), ToolBoxNode("Fonction gamma", "gamma()")}; +const ToolBoxNode arithmeticChildren[4] = {ToolBoxNode("PGCD", "gcd()"), ToolBoxNode("PPCM","lcm()"), ToolBoxNode("Reste division euclidienne", "rem()"), ToolBoxNode("Quotien division euclidienne", "quo()")}; +const ToolBoxNode matricesChildren[5] = {ToolBoxNode("Inverse", "inverse()"), ToolBoxNode("Determinant", "det()"), ToolBoxNode("Transposee", "transpose()"), ToolBoxNode("Trace", "trace()"), ToolBoxNode("Taille", "dim()")}; +const ToolBoxNode listesChildren[5] = {ToolBoxNode("Tri croissant", "sort<()"), ToolBoxNode("Tri decroissant", "sort>()"), ToolBoxNode("Maximum", "max()"), ToolBoxNode("Minimum", "min()"), ToolBoxNode("Taille", "dim()")}; +const ToolBoxNode approximationChildren[4] = {ToolBoxNode("Partie entiere", "floor()"), ToolBoxNode("Partie fractionnaire", "frac()"), ToolBoxNode("Plafond", "ceil()"), ToolBoxNode("Arrondi", "round(,)")}; +const ToolBoxNode trigonometryChildren[6] = {ToolBoxNode("cosh", "cosh()"), ToolBoxNode("sinh", "sinh()"), ToolBoxNode("tanh", "tanh()"), ToolBoxNode("acosh", "acosh()"), ToolBoxNode("asinh", "asinh()"), ToolBoxNode("atanh", "atanh()")}; -const Node menu[11] = {Node("|x|", "abs()"), Node("root(x)", "root(,)"), Node("log(x)", "log(,)"), - Node("Calcul", nullptr, calculChildren, 4), Node("Nombre complexe", nullptr, complexChildren, 5), - Node("Probabilite", nullptr, probabilityChildren, 4), Node("Arithmetique", nullptr, arithmeticChildren, 4), - Node("Matrice", nullptr,matricesChildren, 5), Node("Liste", nullptr, listesChildren, 5), - Node("Approximation", nullptr, approximationChildren, 4), Node("Trigonometrie", nullptr, trigonometryChildren, 6)}; -const Node toolBoxModel = Node("ToolBox", nullptr, menu, 11); +const ToolBoxNode menu[11] = {ToolBoxNode("|x|", "abs()"), ToolBoxNode("root(x)", "root(,)"), ToolBoxNode("log(x)", "log(,)"), + ToolBoxNode("Calcul", nullptr, calculChildren, 4), ToolBoxNode("Nombre complexe", nullptr, complexChildren, 5), + ToolBoxNode("Probabilite", nullptr, probabilityChildren, 4), ToolBoxNode("Arithmetique", nullptr, arithmeticChildren, 4), + ToolBoxNode("Matrice", nullptr, matricesChildren, 5), ToolBoxNode("Liste", nullptr, listesChildren, 5), + ToolBoxNode("Approximation", nullptr, approximationChildren, 4), ToolBoxNode("Trigonometrie", nullptr, trigonometryChildren, 6)}; +const ToolBoxNode toolBoxModel = ToolBoxNode("TOOLBOX", nullptr, menu, 11); const char * ToolBoxController::title() const { return "ToolBoxController"; @@ -30,7 +31,8 @@ Node * ToolBoxController::nodeModel() { } bool ToolBoxController::selectLeaf(Node * selectedNode){ - const char * editedText = selectedNode->text(); + ToolBoxNode * node = (ToolBoxNode *)selectedNode; + const char * editedText = node->text(); m_textFieldCaller->appendText(editedText); int cursorPosition = 0; int editedTextLength = strlen(editedText); diff --git a/apps/tool_box_node.cpp b/apps/tool_box_node.cpp new file mode 100644 index 000000000..50d433979 --- /dev/null +++ b/apps/tool_box_node.cpp @@ -0,0 +1,9 @@ +#include "tool_box_node.h" + +const char * ToolBoxNode::text() const { + return m_text; +} + +const Node * ToolBoxNode::children(int index) const { + return &m_children[index]; +} diff --git a/apps/tool_box_node.h b/apps/tool_box_node.h new file mode 100644 index 000000000..fda956e52 --- /dev/null +++ b/apps/tool_box_node.h @@ -0,0 +1,22 @@ +#ifndef APPS_TOOL_BOX_NODE_H +#define APPS_TOOL_BOX_NODE_H + +#include "node.h" + +class ToolBoxNode : public Node { +public: + constexpr ToolBoxNode(const char * label = nullptr, const char * text = nullptr, const ToolBoxNode * children = nullptr, int numberOfChildren = 0) : + Node(label, numberOfChildren), + m_children(children), + m_text(text) + { + }; + const Node * children(int index) const override; + const char * text() const; +private: + const ToolBoxNode * m_children; + const char * m_text; +}; + +#endif +