ui_saveconfig.c (6026B)
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 Foobar; 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 */ 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 */ 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 ); 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 */ 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 */ 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 */ 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 */ 209 void UI_SaveConfigMenu( void ) { 210 UI_SaveConfigMenu_Init(); 211 UI_PushMenu( &saveConfig.menu ); 212 }