2c0b1edf38aa33fcd42e6117bf4a5c6c108bd04a
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / command / menu_cmd.qc
1 string _dumptree_space;
2 void _dumptree_open(entity pass, entity me)
3 {
4         string s;
5         s = me.toString(me);
6         if(s == "")
7                 s = me.classname;
8         else
9                 s = strcat(me.classname, ": ", s);
10         print(_dumptree_space, etos(me), " (", s, ")");
11         if(me.firstChild)
12         {
13                 print(" {\n");
14                 _dumptree_space = strcat(_dumptree_space, "  ");
15         }
16         else
17                 print("\n");
18 }
19 void _dumptree_close(entity pass, entity me)
20 {
21         if(me.firstChild)
22         {
23                 _dumptree_space = substring(_dumptree_space, 0, strlen(_dumptree_space) - 2);
24                 print(_dumptree_space, "}\n");
25         }
26 }
27
28 void GameCommand(string theCommand)
29 {
30         float argc;
31         argc = tokenize_console(theCommand);
32
33         if(argv(0) == "help" || argc == 0)
34         {
35                 print(_("Usage: menu_cmd command..., where possible commands are:\n"));
36                 print(_("  sync - reloads all cvars on the current menu page\n"));
37                 print(_("  directmenu ITEM - select a menu item as main item\n"));
38
39                 print("\nGeneric commands shared by all programs:\n");
40                 GenericCommand_macro_help();
41
42                 return;
43         }
44
45         if(GenericCommand(theCommand))
46                 return;
47
48         if(argv(0) == "sync")
49         {
50                 m_sync();
51                 return;
52         }
53
54         if(argv(0) == "directmenu" || argv(0) == "directpanelhudmenu")
55         {
56                 string filter = string_null;
57                 if(argv(0) == "directpanelhudmenu")
58                         filter = strzone("HUD");
59
60                 if(argc == 1)
61                 {
62                         print(_("Available options:\n"));
63                         float i;
64                         entity e;
65                         string s;
66
67                         for(i = 0, e = world; (e = nextent(e)); )
68                                 if(e.classname != "vtbl" && e.name != "")
69                                 {
70                                         s = e.name;
71                                         if(filter)
72                                         {
73                                                 if(substring(s, 0, strlen(filter)) != filter)
74                                                         continue;
75                                                 s = substring(s, strlen(filter), strlen(s) - strlen(filter));
76                                         }
77                                         print(strcat(" ", s ,"\n"));
78                                         ++i;
79                                 }
80                 }
81                 else if(argc == 2 && !isdemo()) // don't allow this command in demos
82                         m_goto(strcat(filter, argv(1))); // switch to a menu item
83                 if(filter)
84                         strunzone(filter);
85                 return;
86         }
87
88         if(argv(0) == "skinselect")
89         {
90                 m_goto("skinselector");
91                 return;
92         }
93
94         if(argv(0) == "languageselect")
95         {
96                 m_goto("languageselector");
97                 return;
98         }
99
100         if(argv(0) == "videosettings")
101         {
102                 m_goto("videosettings");
103                 return;
104         }
105
106         if(argv(0) == "dumptree")
107         {
108                 _dumptree_space = "";
109                 depthfirst(main, parent, firstChild, nextSibling, _dumptree_open, _dumptree_close, NULL);
110                 return;
111         }
112
113         print(_("Invalid command. For a list of supported commands, try menu_cmd help.\n"));
114 }