// déclaration de la structure qui contient un menu et ses sous menus
struct MenuItem {
const char *nom;
void (*action)();
size_t numSubmenu; // <== on a besoin du compte pour parcourir le tableau du sous menu
MenuItem *submenu;
void print() {
Serial.print(nom);
if (action != nullptr) {
Serial.print(F(" -> ")); action();
}
Serial.println();
for (size_t i = 0; i < numSubmenu; i++) {
Serial.write('\t'); submenu[i].print();
}
}
};
// déclaration des callbacks (en avance car besoin dans la définition du menu)
void fadimAction();
void aboubacarAction();
void aichaAction();
void mariamAction();
void mansourAction();
// définition des sous menus
MenuItem mohamedSubMenu[] = {
{"FADIM", fadimAction, 0, nullptr},
{"KARIMA", nullptr, 0, nullptr},
{"FATOUMA", nullptr, 0, nullptr},
{"BAFODE", nullptr, 0, nullptr},
};
const size_t numMohamedSubMenu = sizeof mohamedSubMenu / sizeof * mohamedSubMenu;
MenuItem alhousseinSubMenu[] = {
{"ABOUBACAR", aboubacarAction, 0, nullptr},
{"BINTOU", nullptr, 0, nullptr},
{"IBRAHIM", nullptr, 0, nullptr},
};
const size_t numAlhousseinSubMenu = sizeof alhousseinSubMenu / sizeof * alhousseinSubMenu;
MenuItem amineSubMenu[] = {
{"AICHA", aichaAction, 0, nullptr},
{"MOUSSA", nullptr, 0, nullptr},
{"YAHYA", nullptr, 0, nullptr},
{"YOUSSOUF", nullptr, 0, nullptr},
};
const size_t numAmineSubMenu = sizeof amineSubMenu / sizeof * amineSubMenu;
MenuItem abdoulahSubMenu[] = {
{"MARIAM", mariamAction, 0, nullptr},
{"DALOBA", nullptr, 0, nullptr},
};
const size_t numAbdoulahSubMenu = sizeof abdoulahSubMenu / sizeof * abdoulahSubMenu;
MenuItem mouctarSubMenu[] = {
{"MANSOUR", mansourAction, 0, nullptr},
{"BOBO" , nullptr, 0, nullptr},
{"SIDIKI", nullptr, 0, nullptr},
};
const size_t numMouctarSubMenu = sizeof mouctarSubMenu / sizeof * mouctarSubMenu;
// définition du menu principal
MenuItem menu[] = {
{"MOHAMED", nullptr, numMohamedSubMenu, mohamedSubMenu},
{"ALHOUSSEIN", nullptr, numAlhousseinSubMenu, alhousseinSubMenu},
{"AMINE", nullptr, numAmineSubMenu, amineSubMenu},
{"ABDOULAH", nullptr, numAbdoulahSubMenu, abdoulahSubMenu},
{"MOUCTAR", nullptr, numMouctarSubMenu, mouctarSubMenu},
};
size_t numMenuItems = sizeof menu / sizeof * menu;
// définition des callbacks
void fadimAction() {
Serial.print(F("Fadim Action"));
}
void aboubacarAction() {
Serial.print(F("Aboubacar Action"));
}
void aichaAction() {
Serial.print(F("Aicha Action"));
}
void mariamAction() {
Serial.print(F("Mariam Action"));
}
void mansourAction() {
Serial.print(F("Mansour Action"));
}
// --------------
void setup() {
Serial.begin(115200); Serial.println();
for (auto & m : menu) {
Serial.println(F("--------"));
m.print();
}
}
void loop() {}