[apps/math_toolbox] Add fork nodes in tree

Some nodes of the ToolboxMessageTree can be marked as "forks",
dispatching one branch or the other depending on preferences.
They are used in the Unit menu to provide a different toolbox depending
on the unit system.

Change-Id: I591f7abc3d24e682e827a540a9defac1877871b5
This commit is contained in:
Gabriel Ozouf
2020-09-21 18:02:09 +02:00
committed by Émilie Feral
parent 6105f44a46
commit 2e2845370a
5 changed files with 31 additions and 11 deletions

View File

@@ -39,7 +39,7 @@ void Toolbox::willDisplayCellForIndex(HighlightCell * cell, int index) {
}
int Toolbox::typeAtLocation(int i, int j) {
MessageTree * messageTree = (MessageTree *)m_messageTreeModel->childAtIndex(j);
const MessageTree * messageTree = m_messageTreeModel->childAtIndex(j);
if (messageTree->numberOfChildren() == 0) {
return LeafCellType;
}
@@ -48,7 +48,11 @@ int Toolbox::typeAtLocation(int i, int j) {
bool Toolbox::selectSubMenu(int selectedRow) {
m_selectableTableView.deselectTable();
m_messageTreeModel = (ToolboxMessageTree *)m_messageTreeModel->childAtIndex(selectedRow);
m_messageTreeModel = static_cast<const ToolboxMessageTree *>(m_messageTreeModel->childAtIndex(selectedRow));
if (m_messageTreeModel->isFork()) {
assert(m_messageTreeModel->numberOfChildren() < 0);
m_messageTreeModel = static_cast<const ToolboxMessageTree *>(m_messageTreeModel->childAtIndex(indexAfterFork()));
}
return NestedMenuController::selectSubMenu(selectedRow);
}
@@ -56,15 +60,14 @@ bool Toolbox::returnToPreviousMenu() {
m_selectableTableView.deselectTable();
int currentDepth = m_stack.depth();
int index = 0;
// We want to get the current ToolboxMessageTree's parent ToolboxMessageTree,
// but there is no ToolboxMessageTree::getParent() method. We thus have to
// start from the root ToolboxMessageTree and sequentially get the selected
// child until it has the wanted depth.
ToolboxMessageTree * parentMessageTree = (ToolboxMessageTree *)rootModel();
Stack::State * previousState = m_stack.stateAtIndex(index++);
while (currentDepth-- > 1) {
parentMessageTree = (ToolboxMessageTree *)parentMessageTree->childAtIndex(previousState->selectedRow());
previousState = m_stack.stateAtIndex(index++);
if (parentMessageTree->isFork()) {
parentMessageTree = (ToolboxMessageTree *)parentMessageTree->childAtIndex(indexAfterFork());
}
}
m_messageTreeModel = parentMessageTree;
return NestedMenuController::returnToPreviousMenu();