]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/menu/command/menu_cmd.qc
Merge branch 'master' into terencehill/menu_quit_game
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / command / menu_cmd.qc
index 72aadf6247bac401778744fe630ea81443979fba..b56e8e9e4afd4ba69e8047d6afbdc04cd64119d7 100644 (file)
@@ -3,10 +3,11 @@
 #include "../menu.qh"
 #include "../item.qh"
 
-#include "../mutators/events.qh"
+#include <menu/mutators/_mod.qh>
 
 #include <common/command/_mod.qh>
 
+.void(entity me, int argsbuf) readInputArgs;
 .entity firstChild, nextSibling;
 
 string _dumptree_space;
@@ -16,15 +17,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 +33,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 +44,16 @@ 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_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("   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_INFO("\nGeneric commands shared by all programs:\n");
+               LOG_HELP("\nGeneric commands shared by all programs:");
                GenericCommand_macro_help();
 
                return;
@@ -76,7 +80,7 @@ void GameCommand(string theCommand)
 
                if (argc == 1)
                {
-                       LOG_INFO(_("Available options:\n"));
+                       LOG_HELP("Available items:");
 
                        FOREACH_ENTITY_ORDERED(it.name != "", {
                                if (it.classname == "vtbl") continue;
@@ -86,7 +90,7 @@ void GameCommand(string theCommand)
                                        if (!startsWith(s, filter)) continue;
                                        s = substring(s, strlen(filter), strlen(s) - strlen(filter));
                                }
-                               LOG_INFOF(" %s\n", s);
+                               LOG_HELP(" ", s);
                        });
                }
                else if (argc == 2 && !isdemo())     // don't allow this command in demos
@@ -94,6 +98,45 @@ void GameCommand(string theCommand)
                        m_play_click_sound(MENU_SOUND_OPEN);
                        m_goto(strcat(filter, argv(1))); // switch to a menu item
                }
+               else if(argc > 2 && !isdemo())
+               {
+                       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);
+                                               m_goto(strcat(filter, s));
+                                       }
+                                       if(argsbuf >= 0)
+                                               buf_del(argsbuf);
+                               }
+               }
+               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 +152,12 @@ void GameCommand(string theCommand)
                return;
        }
 
+       if (argv(0) == "inputsettings")
+       {
+               m_goto("inputsettings");
+               return;
+       }
+
        if (argv(0) == "videosettings")
        {
                m_goto("videosettings");
@@ -125,5 +174,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.");
 }