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