void Router::navigate() { system("CLS"); displayMenu(step); int param = _getch(); switch (param) { case 72: system("CLS"); step--; if (step < 0) if (parent != NULL) step = getMenuSize() + 1; else step = getMenuSize(); navigate(); break; case 80: system("CLS"); step++; if (step > getMenuSize() + (parent != NULL) ? 1 : 0) step = 0; navigate(); break; case 224: //system("CLS"); navigate(); break; case 13: setActive(&step); break; default: navigate(); } }
static void setAdvancedSubmenu (Menu *submenu) { Menu *parent = getMenuParent(submenu); if (parent) { unsigned int size = getMenuSize(parent); if (size) { MenuItem *item = getMenuItem(parent, size-1); if (item) setMenuItemTester(item, testAdvancedSubmenu); } } }
// fonction d'affichage void Menu::show() { // on récupère la source (i.e le fichier chargé en argument du constructeur) apply_surface2(0,0,this->get_source(),NULL); // la position en y où on collera les liens int rowY; // on définit la position pour chaque élément et on les écarte par 10 pixels for(int i = 0; i< getMenuSize(); i++) { rowY = this->e_y + i * this->m_menuElementList.at(i).surfaceHover->h + 10; // On colle le lien du menu selon le statut "sélectionné" ou "non sélectionné" if(this->m_currentIndex == i) { apply_surface2(e_x, rowY+400,this->m_menuElementList.at(i).surfaceHover,NULL); } else { apply_surface2(e_x, rowY+400,this->m_menuElementList.at(i).surfaceNormal,NULL); } } }
void Menu::incIndex() { uint8_t lines = LCD_LINES; if(size_ < lines) lines = size_; if(pos_ < lines - 1) pos_++; else if( begin_ + pos_ < getMenuSize() - 1) begin_++; }