00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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
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
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
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
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
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
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
00268
00269
00270 void UI_LoadConfigMenu( void ) {
00271 LoadConfig_MenuInit();
00272 UI_PushMenu( &s_configs.menu );
00273 }
00274