void item(char *text, char *action) { auto &menu = menus.last(); auto &mi = menu.items.add(); mi.text = NEWSTRING(text); mi.action = action[0] ? NEWSTRING(action) : NEWSTRING(text); mi.manual = 0; }
void keypress(int code, bool isdown) { if (saycommandon) { // keystrokes go to commandline if (isdown) { switch (code) { case SDLK_RETURN: break; case SDLK_BACKSPACE: case SDLK_LEFT: loopi(cmdbuf[i]) if (!cmdbuf[i+1]) cmdbuf[i] = 0; script::resetcomplete(); break; case SDLK_UP: if (histpos) strcpy_s(cmdbuf, vhistory[--histpos]); break; case SDLK_DOWN: if (histpos<vhistory.size()) strcpy_s(cmdbuf, vhistory[histpos++]); break; case SDLK_TAB: script::complete(cmdbuf); break; default: script::resetcomplete(); break; } } else { if (code==SDLK_RETURN) { if (cmdbuf[0]) { if (vhistory.empty() || strcmp(vhistory.back(), cmdbuf.c_str())) vhistory.push_back(NEWSTRING(cmdbuf.c_str())); // cap this? histpos = vhistory.size(); if (cmdbuf[0]=='/') { setkeydownflag(true); script::execstring(cmdbuf.c_str()+1); } else client::toserver(cmdbuf.c_str()); } saycommand(NULL); } else if (code==SDLK_ESCAPE) saycommand(NULL); } } else if (!menu::key(code, isdown)) { // keystrokes go to menu
void newm(const char *name) { auto &menu = menus.add(); menu.name = NEWSTRING(name); menu.menusel = 0; }