1 /*
2 ===========================================================================
3 Copyright (C) 1999-2005 Id Software, Inc.
4
5 This file is part of Quake III Arena source code.
6
7 Quake III Arena source code is free software; you can redistribute it
8 and/or modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the License,
10 or (at your option) any later version.
11
12 Quake III Arena source code is distributed in the hope that it will be
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Quake III Arena source code; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 ===========================================================================
21 */
22 //
23 /*
24 =============================================================================
25
26 SAVE CONFIG MENU
27
28 =============================================================================
29 */
30
31 #include "ui_local.h"
32
33
34 #define ART_BACK0 "menu/art/back_0"
35 #define ART_BACK1 "menu/art/back_1"
36 #define ART_SAVE0 "menu/art/save_0"
37 #define ART_SAVE1 "menu/art/save_1"
38 #define ART_BACKGROUND "menu/art/cut_frame"
39
40 #define ID_NAME 10
41 #define ID_BACK 11
42 #define ID_SAVE 12
43
44
45 typedef struct {
46 menuframework_s menu;
47
48 menutext_s banner;
49 menubitmap_s background;
50 menufield_s savename;
51 menubitmap_s back;
52 menubitmap_s save;
53 } saveConfig_t;
54
55 static saveConfig_t saveConfig;
56
57
58 /*
59 ===============
60 UI_SaveConfigMenu_BackEvent
61 ===============
62 */
UI_SaveConfigMenu_BackEvent(void * ptr,int event)63 static void UI_SaveConfigMenu_BackEvent( void *ptr, int event ) {
64 if( event != QM_ACTIVATED ) {
65 return;
66 }
67
68 UI_PopMenu();
69 }
70
71
72 /*
73 ===============
74 UI_SaveConfigMenu_SaveEvent
75 ===============
76 */
UI_SaveConfigMenu_SaveEvent(void * ptr,int event)77 static void UI_SaveConfigMenu_SaveEvent( void *ptr, int event ) {
78 char configname[MAX_QPATH];
79
80 if( event != QM_ACTIVATED ) {
81 return;
82 }
83
84 if( !saveConfig.savename.field.buffer[0] ) {
85 return;
86 }
87
88 COM_StripExtension(saveConfig.savename.field.buffer, configname, sizeof(configname));
89 trap_Cmd_ExecuteText( EXEC_APPEND, va( "writeconfig %s.cfg\n", configname ) );
90 UI_PopMenu();
91 }
92
93
94 /*
95 ===============
96 UI_SaveConfigMenu_SavenameDraw
97 ===============
98 */
UI_SaveConfigMenu_SavenameDraw(void * self)99 static void UI_SaveConfigMenu_SavenameDraw( void *self ) {
100 menufield_s *f;
101 int style;
102 float *color;
103
104 f = (menufield_s *)self;
105
106 if( f == Menu_ItemAtCursor( &saveConfig.menu ) ) {
107 style = UI_LEFT|UI_PULSE|UI_SMALLFONT;
108 color = text_color_highlight;
109 }
110 else {
111 style = UI_LEFT|UI_SMALLFONT;
112 color = colorRed;
113 }
114
115 UI_DrawProportionalString( 320, 192, "Enter filename:", UI_CENTER|UI_SMALLFONT, color_orange );
116 UI_FillRect( f->generic.x, f->generic.y, f->field.widthInChars*SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, colorBlack );
117 MField_Draw( &f->field, f->generic.x, f->generic.y, style, color );
118 }
119
120
121 /*
122 =================
123 UI_SaveConfigMenu_Init
124 =================
125 */
UI_SaveConfigMenu_Init(void)126 static void UI_SaveConfigMenu_Init( void ) {
127 memset( &saveConfig, 0, sizeof(saveConfig) );
128
129 UI_SaveConfigMenu_Cache();
130 saveConfig.menu.wrapAround = qtrue;
131 saveConfig.menu.fullscreen = qtrue;
132
133 saveConfig.banner.generic.type = MTYPE_BTEXT;
134 saveConfig.banner.generic.x = 320;
135 saveConfig.banner.generic.y = 16;
136 saveConfig.banner.string = "SAVE CONFIG";
137 saveConfig.banner.color = color_white;
138 saveConfig.banner.style = UI_CENTER;
139
140 saveConfig.background.generic.type = MTYPE_BITMAP;
141 saveConfig.background.generic.name = ART_BACKGROUND;
142 saveConfig.background.generic.flags = QMF_INACTIVE;
143 saveConfig.background.generic.x = 142;
144 saveConfig.background.generic.y = 118;
145 saveConfig.background.width = 359;
146 saveConfig.background.height = 256;
147
148 saveConfig.savename.generic.type = MTYPE_FIELD;
149 saveConfig.savename.generic.flags = QMF_NODEFAULTINIT|QMF_UPPERCASE;
150 saveConfig.savename.generic.ownerdraw = UI_SaveConfigMenu_SavenameDraw;
151 saveConfig.savename.field.widthInChars = 20;
152 saveConfig.savename.field.maxchars = 20;
153 saveConfig.savename.generic.x = 240;
154 saveConfig.savename.generic.y = 155+72;
155 saveConfig.savename.generic.left = 240;
156 saveConfig.savename.generic.top = 155+72;
157 saveConfig.savename.generic.right = 233 + 20*SMALLCHAR_WIDTH;
158 saveConfig.savename.generic.bottom = 155+72 + SMALLCHAR_HEIGHT+2;
159
160 saveConfig.back.generic.type = MTYPE_BITMAP;
161 saveConfig.back.generic.name = ART_BACK0;
162 saveConfig.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
163 saveConfig.back.generic.id = ID_BACK;
164 saveConfig.back.generic.callback = UI_SaveConfigMenu_BackEvent;
165 saveConfig.back.generic.x = 0;
166 saveConfig.back.generic.y = 480-64;
167 saveConfig.back.width = 128;
168 saveConfig.back.height = 64;
169 saveConfig.back.focuspic = ART_BACK1;
170
171 saveConfig.save.generic.type = MTYPE_BITMAP;
172 saveConfig.save.generic.name = ART_SAVE0;
173 saveConfig.save.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
174 saveConfig.save.generic.id = ID_SAVE;
175 saveConfig.save.generic.callback = UI_SaveConfigMenu_SaveEvent;
176 saveConfig.save.generic.x = 640;
177 saveConfig.save.generic.y = 480-64;
178 saveConfig.save.width = 128;
179 saveConfig.save.height = 64;
180 saveConfig.save.focuspic = ART_SAVE1;
181
182 Menu_AddItem( &saveConfig.menu, &saveConfig.banner );
183 Menu_AddItem( &saveConfig.menu, &saveConfig.background );
184 Menu_AddItem( &saveConfig.menu, &saveConfig.savename );
185 Menu_AddItem( &saveConfig.menu, &saveConfig.back );
186 Menu_AddItem( &saveConfig.menu, &saveConfig.save );
187 }
188
189
190 /*
191 =================
192 UI_SaveConfigMenu_Cache
193 =================
194 */
UI_SaveConfigMenu_Cache(void)195 void UI_SaveConfigMenu_Cache( void ) {
196 trap_R_RegisterShaderNoMip( ART_BACK0 );
197 trap_R_RegisterShaderNoMip( ART_BACK1 );
198 trap_R_RegisterShaderNoMip( ART_SAVE0 );
199 trap_R_RegisterShaderNoMip( ART_SAVE1 );
200 trap_R_RegisterShaderNoMip( ART_BACKGROUND );
201 }
202
203
204 /*
205 ===============
206 UI_SaveConfigMenu
207 ===============
208 */
UI_SaveConfigMenu(void)209 void UI_SaveConfigMenu( void ) {
210 UI_SaveConfigMenu_Init();
211 UI_PushMenu( &saveConfig.menu );
212 }
213