X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fmenu%2Fcommand%2Fmenu_cmd.qc;h=bb55a671bad802feb51cc1e4fb1dcd3be92ade08;hp=fb0ac17993edc742722fd08ae7c2a2c4b3c8b1b2;hb=HEAD;hpb=c533c16caf393c1440a10aa49d3581e280c9f4bd diff --git a/qcsrc/menu/command/menu_cmd.qc b/qcsrc/menu/command/menu_cmd.qc index fb0ac1799..97deef1d4 100644 --- a/qcsrc/menu/command/menu_cmd.qc +++ b/qcsrc/menu/command/menu_cmd.qc @@ -3,10 +3,12 @@ #include "../menu.qh" #include "../item.qh" -#include "../mutators/events.qh" +#include +#include -#include +#include +.void(entity me, int argsbuf) readInputArgs; .entity firstChild, nextSibling; string _dumptree_space; @@ -16,15 +18,15 @@ void _dumptree_open(entity pass, entity me) s = me.toString(me); if (s == "") s = me.classname; else s = strcat(me.classname, ": ", s); - LOG_INFO(_dumptree_space, etos(me), " (", s, ")"); + print(_dumptree_space, etos(me), " (", s, ")"); if (me.firstChild) { - LOG_INFO(" {\n"); + print(" {\n"); _dumptree_space = strcat(_dumptree_space, " "); } else { - LOG_INFO("\n"); + print("\n"); } } void _dumptree_close(entity pass, entity me) @@ -32,7 +34,7 @@ void _dumptree_close(entity pass, entity me) if (me.firstChild) { _dumptree_space = substring(_dumptree_space, 0, strlen(_dumptree_space) - 2); - LOG_INFO(_dumptree_space, "}\n"); + print(_dumptree_space, "}\n"); } } @@ -43,13 +45,17 @@ void GameCommand(string theCommand) int argc = tokenize_console(theCommand); string ss = strtolower(argv(0)); + // TODO port these commands to the command system if (argv(0) == "help" || argc == 0) { - LOG_INFO(_("Usage: menu_cmd command..., where possible commands are:\n")); - LOG_INFO(_(" sync - reloads all cvars on the current menu page\n")); - LOG_INFO(_(" directmenu ITEM - select a menu item as main item\n")); - - LOG_INFO("\nGeneric commands shared by all programs:\n"); + LOG_HELP("Usage:^3 menu_cmd [], where possible commands are:"); + LOG_HELP(" 'sync' reloads all cvars on the current menu page"); + LOG_HELP(" 'directmenu' shows the menu window named (or the menu window containing an item named )"); + LOG_HELP(" 'closemenu' closes the menu window named (or the menu window containing an item named )"); + LOG_HELP(" if is not specified it shows the list of available items in the console"); + LOG_HELP(" 'dumptree' dumps the state of the menu as a tree to the console"); + + LOG_HELP("\nGeneric commands shared by all programs:"); GenericCommand_macro_help(); return; @@ -69,14 +75,25 @@ void GameCommand(string theCommand) return; } - if (argv(0) == "directmenu" || argv(0) == "directpanelhudmenu") + string cmd = argv(0); + string filter = string_null; + bool close_mode = false; + if (cmd == "closemenu") + { + close_mode = true; + cmd = "directmenu"; + } + else if (cmd == "directpanelhudmenu") { - string filter = string_null; - if (argv(0) == "directpanelhudmenu") filter = "HUD"; + filter = "HUD"; + cmd = "directmenu"; + } + if (cmd == "directmenu") + { if (argc == 1) { - LOG_INFO(_("Available options:\n")); + LOG_HELP("Available items (* = closable):"); FOREACH_ENTITY_ORDERED(it.name != "", { if (it.classname == "vtbl") continue; @@ -86,14 +103,64 @@ void GameCommand(string theCommand) if (!startsWith(s, filter)) continue; s = substring(s, strlen(filter), strlen(s) - strlen(filter)); } - LOG_INFOF(" %s\n", s); + if (it.instanceOfContainer && it.closable) + LOG_HELP(" * ", s); + else + LOG_HELP(" ", s); }); } - else if (argc == 2 && !isdemo()) // don't allow this command in demos + else if (argc == 2 && !close_mode && (!isdemo() || argv(1) == "Welcome")) // don't allow this command in demos { m_play_click_sound(MENU_SOUND_OPEN); m_goto(strcat(filter, argv(1))); // switch to a menu item } + else if(argc > 2 && (!isdemo() || argv(1) == "Welcome")) + { + entity e = NULL; + float argsbuf = 0; + string s = strzone(argv(1)); // dialog name + for(int i = 0; (e = nextent(e)); ) + if(e.classname != "vtbl" && e.name == strcat(filter, s)) + { + argsbuf = buf_create(); + if(argsbuf >= 0) + if(e.readInputArgs) + { + for(i = 2; i < argc; ++i) + bufstr_add(argsbuf, argv(i), 1); + e.readInputArgs(e, argsbuf); + if (!close_mode) + m_goto(strcat(filter, s)); + } + if(argsbuf >= 0) + buf_del(argsbuf); + + // NOTE input args are read even in close mode + if (close_mode) + { + if (e.instanceOfContainer && e.closable && e.focused) + Dialog_Close(e, e); + } + } + } + return; + } + + if (argv(0) == "nexposee") + { + m_goto("nexposee"); + return; + } + + if (argv(0) == "servers") + { + m_goto("servers"); + return; + } + + if (argv(0) == "profile") + { + m_goto("profile"); return; } @@ -109,6 +176,18 @@ void GameCommand(string theCommand) return; } + if (argv(0) == "settings") + { + m_goto("settings"); + return; + } + + if (argv(0) == "inputsettings") + { + m_goto("inputsettings"); + return; + } + if (argv(0) == "videosettings") { m_goto("videosettings"); @@ -125,5 +204,5 @@ void GameCommand(string theCommand) if(MUTATOR_CALLHOOK(Menu_ConsoleCommand, ss, argc, theCommand)) // handled by a mutator return; - LOG_INFO(_("Invalid command. For a list of supported commands, try menu_cmd help.\n")); + LOG_INFO("Invalid command. For a list of supported commands, try menu_cmd help."); }