Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

ui_loadconfig.c

Go to the documentation of this file.
00001 /*
00002 ===========================================================================
00003 Copyright (C) 1999-2005 Id Software, Inc.
00004 
00005 This file is part of Quake III Arena source code.
00006 
00007 Quake III Arena source code is free software; you can redistribute it
00008 and/or modify it under the terms of the GNU General Public License as
00009 published by the Free Software Foundation; either version 2 of the License,
00010 or (at your option) any later version.
00011 
00012 Quake III Arena source code is distributed in the hope that it will be
00013 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 GNU General Public License for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Foobar; if not, write to the Free Software
00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020 ===========================================================================
00021 */
00022 //
00023 /*
00024 =============================================================================
00025 
00026 LOAD CONFIG MENU
00027 
00028 =============================================================================
00029 */
00030 
00031 #include "ui_local.h"
00032 
00033 
00034 #define ART_BACK0           "menu/art/back_0"
00035 #define ART_BACK1           "menu/art/back_1"   
00036 #define ART_FIGHT0          "menu/art/load_0"
00037 #define ART_FIGHT1          "menu/art/load_1"
00038 #define ART_FRAMEL          "menu/art/frame2_l"
00039 #define ART_FRAMER          "menu/art/frame1_r"
00040 #define ART_ARROWS          "menu/art/arrows_horz_0"
00041 #define ART_ARROWLEFT       "menu/art/arrows_horz_left"
00042 #define ART_ARROWRIGHT      "menu/art/arrows_horz_right"
00043 
00044 #define MAX_CONFIGS         128
00045 #define NAMEBUFSIZE         ( MAX_CONFIGS * 16 )
00046 
00047 #define ID_BACK             10
00048 #define ID_GO               11
00049 #define ID_LIST             12
00050 #define ID_LEFT             13
00051 #define ID_RIGHT            14
00052 
00053 #define ARROWS_WIDTH        128
00054 #define ARROWS_HEIGHT       48
00055 
00056 
00057 typedef struct {
00058     menuframework_s menu;
00059 
00060     menutext_s      banner;
00061     menubitmap_s    framel;
00062     menubitmap_s    framer;
00063 
00064     menulist_s      list;
00065 
00066     menubitmap_s    arrows;
00067     menubitmap_s    left;
00068     menubitmap_s    right;
00069     menubitmap_s    back;
00070     menubitmap_s    go;
00071 
00072     char            names[NAMEBUFSIZE];
00073     char*           configlist[MAX_CONFIGS];
00074 } configs_t;
00075 
00076 static configs_t    s_configs;
00077 
00078 
00079 /*
00080 ===============
00081 LoadConfig_MenuEvent
00082 ===============
00083 */
00084 static void LoadConfig_MenuEvent( void *ptr, int event ) {
00085     if( event != QM_ACTIVATED ) {
00086         return;
00087     }
00088 
00089     switch ( ((menucommon_s*)ptr)->id ) {
00090     case ID_GO:
00091         trap_Cmd_ExecuteText( EXEC_APPEND, va( "exec %s\n", s_configs.list.itemnames[s_configs.list.curvalue] ) );
00092         UI_PopMenu();
00093         break;
00094 
00095     case ID_BACK:
00096         UI_PopMenu();
00097         break;
00098 
00099     case ID_LEFT:
00100         ScrollList_Key( &s_configs.list, K_LEFTARROW );
00101         break;
00102 
00103     case ID_RIGHT:
00104         ScrollList_Key( &s_configs.list, K_RIGHTARROW );
00105         break;
00106     }
00107 }
00108 
00109 
00110 /*
00111 ===============
00112 LoadConfig_MenuInit
00113 ===============
00114 */
00115 static void LoadConfig_MenuInit( void ) {
00116     int     i;
00117     int     len;
00118     char    *configname;
00119 
00120     UI_LoadConfig_Cache();
00121 
00122     memset( &s_configs, 0 ,sizeof(configs_t) );
00123     s_configs.menu.wrapAround = qtrue;
00124     s_configs.menu.fullscreen = qtrue;
00125 
00126     s_configs.banner.generic.type   = MTYPE_BTEXT;
00127     s_configs.banner.generic.x      = 320;
00128     s_configs.banner.generic.y      = 16;
00129     s_configs.banner.string         = "LOAD CONFIG";
00130     s_configs.banner.color          = color_white;
00131     s_configs.banner.style          = UI_CENTER;
00132 
00133     s_configs.framel.generic.type   = MTYPE_BITMAP;
00134     s_configs.framel.generic.name   = ART_FRAMEL;
00135     s_configs.framel.generic.flags  = QMF_INACTIVE;
00136     s_configs.framel.generic.x      = 0;  
00137     s_configs.framel.generic.y      = 78;
00138     s_configs.framel.width          = 256;
00139     s_configs.framel.height         = 329;
00140 
00141     s_configs.framer.generic.type   = MTYPE_BITMAP;
00142     s_configs.framer.generic.name   = ART_FRAMER;
00143     s_configs.framer.generic.flags  = QMF_INACTIVE;
00144     s_configs.framer.generic.x      = 376;
00145     s_configs.framer.generic.y      = 76;
00146     s_configs.framer.width          = 256;
00147     s_configs.framer.height         = 334;
00148 
00149     s_configs.arrows.generic.type   = MTYPE_BITMAP;
00150     s_configs.arrows.generic.name   = ART_ARROWS;
00151     s_configs.arrows.generic.flags  = QMF_INACTIVE;
00152     s_configs.arrows.generic.x      = 320-ARROWS_WIDTH/2;
00153     s_configs.arrows.generic.y      = 400;
00154     s_configs.arrows.width          = ARROWS_WIDTH;
00155     s_configs.arrows.height         = ARROWS_HEIGHT;
00156 
00157     s_configs.left.generic.type     = MTYPE_BITMAP;
00158     s_configs.left.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
00159     s_configs.left.generic.x        = 320-ARROWS_WIDTH/2;
00160     s_configs.left.generic.y        = 400;
00161     s_configs.left.generic.id       = ID_LEFT;
00162     s_configs.left.generic.callback = LoadConfig_MenuEvent;
00163     s_configs.left.width            = ARROWS_WIDTH/2;
00164     s_configs.left.height           = ARROWS_HEIGHT;
00165     s_configs.left.focuspic         = ART_ARROWLEFT;
00166 
00167     s_configs.right.generic.type    = MTYPE_BITMAP;
00168     s_configs.right.generic.flags   = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY;
00169     s_configs.right.generic.x       = 320;
00170     s_configs.right.generic.y       = 400;
00171     s_configs.right.generic.id      = ID_RIGHT;
00172     s_configs.right.generic.callback = LoadConfig_MenuEvent;
00173     s_configs.right.width           = ARROWS_WIDTH/2;
00174     s_configs.right.height          = ARROWS_HEIGHT;
00175     s_configs.right.focuspic        = ART_ARROWRIGHT;
00176 
00177     s_configs.back.generic.type     = MTYPE_BITMAP;
00178     s_configs.back.generic.name     = ART_BACK0;
00179     s_configs.back.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
00180     s_configs.back.generic.id       = ID_BACK;
00181     s_configs.back.generic.callback = LoadConfig_MenuEvent;
00182     s_configs.back.generic.x        = 0;
00183     s_configs.back.generic.y        = 480-64;
00184     s_configs.back.width            = 128;
00185     s_configs.back.height           = 64;
00186     s_configs.back.focuspic         = ART_BACK1;
00187 
00188     s_configs.go.generic.type       = MTYPE_BITMAP;
00189     s_configs.go.generic.name       = ART_FIGHT0;
00190     s_configs.go.generic.flags      = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
00191     s_configs.go.generic.id         = ID_GO;
00192     s_configs.go.generic.callback   = LoadConfig_MenuEvent;
00193     s_configs.go.generic.x          = 640;
00194     s_configs.go.generic.y          = 480-64;
00195     s_configs.go.width              = 128;
00196     s_configs.go.height             = 64;
00197     s_configs.go.focuspic           = ART_FIGHT1;
00198 
00199     // scan for configs
00200     s_configs.list.generic.type     = MTYPE_SCROLLLIST;
00201     s_configs.list.generic.flags    = QMF_PULSEIFFOCUS;
00202     s_configs.list.generic.callback = LoadConfig_MenuEvent;
00203     s_configs.list.generic.id       = ID_LIST;
00204     s_configs.list.generic.x        = 118;
00205     s_configs.list.generic.y        = 130;
00206     s_configs.list.width            = 16;
00207     s_configs.list.height           = 14;
00208     s_configs.list.numitems         = trap_FS_GetFileList( "", "cfg", s_configs.names, NAMEBUFSIZE );
00209     s_configs.list.itemnames        = (const char **)s_configs.configlist;
00210     s_configs.list.columns          = 3;
00211 
00212     if (!s_configs.list.numitems) {
00213         strcpy(s_configs.names,"No Files Found.");
00214         s_configs.list.numitems = 1;
00215 
00216         //degenerate case, not selectable
00217         s_configs.go.generic.flags |= (QMF_INACTIVE|QMF_HIDDEN);
00218     }
00219     else if (s_configs.list.numitems > MAX_CONFIGS)
00220         s_configs.list.numitems = MAX_CONFIGS;
00221     
00222     configname = s_configs.names;
00223     for ( i = 0; i < s_configs.list.numitems; i++ ) {
00224         s_configs.list.itemnames[i] = configname;
00225         
00226         // strip extension
00227         len = strlen( configname );
00228         if (!Q_stricmp(configname +  len - 4,".cfg"))
00229             configname[len-4] = '\0';
00230 
00231         Q_strupr(configname);
00232 
00233         configname += len + 1;
00234     }
00235 
00236     Menu_AddItem( &s_configs.menu, &s_configs.banner );
00237     Menu_AddItem( &s_configs.menu, &s_configs.framel );
00238     Menu_AddItem( &s_configs.menu, &s_configs.framer );
00239     Menu_AddItem( &s_configs.menu, &s_configs.list );
00240     Menu_AddItem( &s_configs.menu, &s_configs.arrows );
00241     Menu_AddItem( &s_configs.menu, &s_configs.left );
00242     Menu_AddItem( &s_configs.menu, &s_configs.right );
00243     Menu_AddItem( &s_configs.menu, &s_configs.back );
00244     Menu_AddItem( &s_configs.menu, &s_configs.go );
00245 }
00246 
00247 /*
00248 =================
00249 UI_LoadConfig_Cache
00250 =================
00251 */
00252 void UI_LoadConfig_Cache( void ) {
00253     trap_R_RegisterShaderNoMip( ART_BACK0 );
00254     trap_R_RegisterShaderNoMip( ART_BACK1 );
00255     trap_R_RegisterShaderNoMip( ART_FIGHT0 );
00256     trap_R_RegisterShaderNoMip( ART_FIGHT1 );
00257     trap_R_RegisterShaderNoMip( ART_FRAMEL );
00258     trap_R_RegisterShaderNoMip( ART_FRAMER );
00259     trap_R_RegisterShaderNoMip( ART_ARROWS );
00260     trap_R_RegisterShaderNoMip( ART_ARROWLEFT );
00261     trap_R_RegisterShaderNoMip( ART_ARROWRIGHT );
00262 }
00263 
00264 
00265 /*
00266 ===============
00267 UI_LoadConfigMenu
00268 ===============
00269 */
00270 void UI_LoadConfigMenu( void ) {
00271     LoadConfig_MenuInit();
00272     UI_PushMenu( &s_configs.menu );
00273 }
00274 

Generated on Thu Aug 25 12:37:40 2005 for Quake III Arena by  doxygen 1.3.9.1