#include "../menu.qh"
#include "../item.qh"
-#include "../mutators/events.qh"
+#include <menu/item/dialog.qh>
+#include <menu/mutators/_mod.qh>
-#include <common/command/generic.qh>
+#include <common/command/_mod.qh>
+.void(entity me, int argsbuf) readInputArgs;
.entity firstChild, nextSibling;
string _dumptree_space;
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)
if (me.firstChild)
{
_dumptree_space = substring(_dumptree_space, 0, strlen(_dumptree_space) - 2);
- LOG_INFO(_dumptree_space, "}\n");
+ print(_dumptree_space, "}\n");
}
}
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 <command> [<item>], where possible commands are:");
+ LOG_HELP(" 'sync' reloads all cvars on the current menu page");
+ LOG_HELP(" 'directmenu' shows the menu window named <item> (or the menu window containing an item named <item>)");
+ LOG_HELP(" 'closemenu' closes the menu window named <item> (or the menu window containing an item named <item>)");
+ LOG_HELP(" if <item> 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;
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 != "", LAMBDA(
+ FOREACH_ENTITY_ORDERED(it.name != "", {
if (it.classname == "vtbl") continue;
string s = it.name;
if (filter)
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;
}
return;
}
+ if (argv(0) == "settings")
+ {
+ m_goto("settings");
+ return;
+ }
+
+ if (argv(0) == "inputsettings")
+ {
+ m_goto("inputsettings");
+ return;
+ }
+
if (argv(0) == "videosettings")
{
m_goto("videosettings");
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.");
}