//------------------------------------------------------------------------- // Called from the editor... does one instance of the object dialog box //------------------------------------------------------------------------- int do_object_dialog() { char Xmessage[MATT_LEN], Ymessage[MATT_LEN], Zmessage[MATT_LEN]; object *obj=&Objects[Cur_object_index]; if (obj->type == OBJ_ROBOT) //don't do this for robots return 0; // Only open 1 instance of this window... if ( MattWindow != NULL ) return 0; Cur_goody_count = 0; // Open a window with a quit button MattWindow = ui_open_window( TMAPBOX_X+20, TMAPBOX_Y+20, 765-TMAPBOX_X, 545-TMAPBOX_Y, WIN_DIALOG ); QuitButton = ui_add_gadget_button( MattWindow, 20, 286, 40, 32, "Done", NULL ); QuitButton->hotkey = KEY_ENTER; // These are the radio buttons for each mode InitialMode[0] = ui_add_gadget_radio( MattWindow, 10, 50, 16, 16, 0, "None" ); InitialMode[1] = ui_add_gadget_radio( MattWindow, 80, 50, 16, 16, 0, "Spinning" ); InitialMode[obj->movement_type == MT_SPINNING?1:0]->flag = 1; sprintf(Xmessage,"%.2f",f2fl(obj->mtype.spin_rate.x)); sprintf(Ymessage,"%.2f",f2fl(obj->mtype.spin_rate.y)); sprintf(Zmessage,"%.2f",f2fl(obj->mtype.spin_rate.z)); ui_wprintf_at( MattWindow, 10, 132,"&X:" ); Xtext = ui_add_gadget_inputbox( MattWindow, 30, 132, MATT_LEN, MATT_LEN, Xmessage ); ui_wprintf_at( MattWindow, 10, 162,"&Y:" ); Ytext = ui_add_gadget_inputbox( MattWindow, 30, 162, MATT_LEN, MATT_LEN, Ymessage ); ui_wprintf_at( MattWindow, 10, 192,"&Z:" ); Ztext = ui_add_gadget_inputbox( MattWindow, 30, 192, MATT_LEN, MATT_LEN, Zmessage ); ui_gadget_calc_keys(MattWindow); MattWindow->keyboard_focus_gadget = (UI_GADGET *) InitialMode[0]; mprintf((0, "X = %08x, Y = %08x, Z = %08x\n", atoi(Xmessage), atoi(Ymessage), atoi(Zmessage))); return 1; }
//------------------------------------------------------------------------- // Called from the editor... does one instance of the object dialog box //------------------------------------------------------------------------- int do_object_dialog() { char Xmessage[MATT_LEN], Ymessage[MATT_LEN], Zmessage[MATT_LEN]; dxxobject *obj=&Objects[Cur_object_index]; object_dialog *o; if (obj->type == OBJ_ROBOT) //don't do this for robots return 0; // Only open 1 instance of this window... if ( MattWindow != NULL ) return 0; MALLOC(o, object_dialog, 1); if (!o) return 0; Cur_goody_count = 0; // Open a window with a quit button MattWindow = ui_create_dialog( TMAPBOX_X+20, TMAPBOX_Y+20, 765-TMAPBOX_X, 545-TMAPBOX_Y, DF_DIALOG, (int (*)(UI_DIALOG *, d_event *, void *))object_dialog_handler, o ); o->quitButton = ui_add_gadget_button( MattWindow, 20, 286, 40, 32, "Done", NULL ); o->quitButton->hotkey = KEY_ENTER; // These are the radio buttons for each mode o->initialMode[0] = ui_add_gadget_radio( MattWindow, 10, 50, 16, 16, 0, "None" ); o->initialMode[1] = ui_add_gadget_radio( MattWindow, 80, 50, 16, 16, 0, "Spinning" ); o->initialMode[obj->movement_type == MT_SPINNING?1:0]->flag = 1; sprintf(Xmessage,"%.2f",f2fl(obj->mtype.spin_rate.x)); sprintf(Ymessage,"%.2f",f2fl(obj->mtype.spin_rate.y)); sprintf(Zmessage,"%.2f",f2fl(obj->mtype.spin_rate.z)); o->xtext = ui_add_gadget_inputbox( MattWindow, 30, 132, MATT_LEN, MATT_LEN, Xmessage ); o->ytext = ui_add_gadget_inputbox( MattWindow, 30, 162, MATT_LEN, MATT_LEN, Ymessage ); o->ztext = ui_add_gadget_inputbox( MattWindow, 30, 192, MATT_LEN, MATT_LEN, Zmessage ); ui_gadget_calc_keys(MattWindow); MattWindow->keyboard_focus_gadget = (UI_GADGET *) o->initialMode[0]; return 1; }
//------------------------------------------------------------------------- // Called from the editor... does one instance of the hostage dialog box //------------------------------------------------------------------------- int do_hostage_dialog() { int i; // Only open 1 instance of this window... if ( MainWindow != NULL ) return 0; // Close other windows close_all_windows(); CurrentHostageIndex = 0; SelectClosestHostage(); // Open a window with a quit button MainWindow = ui_open_window( TMAPBOX_X+10, TMAPBOX_Y+20, 765-TMAPBOX_X, 545-TMAPBOX_Y, WIN_DIALOG ); QuitButton = ui_add_gadget_button( MainWindow, 20, 222, 48, 40, "Done", NULL ); ui_wprintf_at( MainWindow, 10, 32,"&Message:" ); HostageText = ui_add_gadget_inputbox( MainWindow, 10, 50, HOSTAGE_MESSAGE_LEN, HOSTAGE_MESSAGE_LEN, HostageMessage ); // The little box the hostage vclip will play in. HostageViewBox = ui_add_gadget_userbox( MainWindow,10, 90+10, 64, 64 ); // A bunch of buttons... i = 90; //@@ ui_add_gadget_button( MainWindow,155,i,70, 26, "<< Type", SelectPrevVclip ); //@@ ui_add_gadget_button( MainWindow,155+70,i,70, 26, "Type >>", SelectNextVclip );i += 29; //@@ ui_add_gadget_button( MainWindow,155,i,70, 26, "<< Sound", find_prev_hostage_sound ); //@@ ui_add_gadget_button( MainWindow,155+70,i,70, 26, "Sound >>", find_next_hostage_sound );i += 29; ui_add_gadget_button( MainWindow,155,i,70, 26, "<< Face", SelectPrevFace ); ui_add_gadget_button( MainWindow,155+70,i,70, 26, "Face >>", SelectNextFace );i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Play sound", PlayHostageSound );i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Next Hostage", SelectNextHostage ); i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Prev Hostage", SelectPrevHostage ); i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Compress All", CompressHostages ); i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Delete", ObjectDelete ); i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Create New", PlaceHostage ); i += 29; Time = timer_get_fixed_seconds(); LastHostageIndex = -2; // Set to some dummy value so everything works ok on the first frame. // if ( CurrentHostageIndex == -1 ) // SelectNextHostage(); return 1; }
int ui_get_filename( char * filename, const char * filespec, const char * message ) { char InputText[PATH_MAX]; char *p; int i; file_browser *b; UI_DIALOG *dlg; window *wind; int rval = 0; MALLOC(b, file_browser, 1); if (!b) return 0; if ((p = strrchr(filename, '/'))) { *p++ = 0; strcpy(b->view_dir, filename); strcpy(InputText, p); } else { strcpy(b->view_dir, ""); strcpy(InputText, filename); } b->filename_list = file_getfilelist(&b->num_files, filespec, b->view_dir); if (!b->filename_list) { d_free(b); return 0; } b->directory_list = file_getdirlist(&b->num_dirs, b->view_dir); if (!b->directory_list) { PHYSFS_freeList(b->filename_list); d_free(b); return 0; } //ui_messagebox( -2,-2, 1,"DEBUG:0", "Ok" ); for (i=0; i<35; i++) b->spaces[i] = ' '; b->spaces[34] = 0; dlg = ui_create_dialog( 200, 100, 400, 370, static_cast<dialog_flags>(DF_DIALOG | DF_MODAL), (int (*)(UI_DIALOG *, d_event *, void *))browser_handler, b ); b->user_file = ui_add_gadget_inputbox( dlg, 60, 30, PATH_MAX, 40, InputText ); b->listbox1 = ui_add_gadget_listbox(dlg, 20, 110, 125, 200, b->num_files, b->filename_list); b->listbox2 = ui_add_gadget_listbox(dlg, 210, 110, 100, 200, b->num_dirs, b->directory_list); b->button1 = ui_add_gadget_button( dlg, 20, 330, 60, 25, "Ok", NULL ); b->button2 = ui_add_gadget_button( dlg, 100, 330, 60, 25, "Cancel", NULL ); b->help_button = ui_add_gadget_button( dlg, 180, 330, 60, 25, "Help", NULL ); dlg->keyboard_focus_gadget = (UI_GADGET *)b->user_file; b->button1->hotkey = KEY_CTRLED + KEY_ENTER; b->button2->hotkey = KEY_ESC; b->help_button->hotkey = KEY_F1; b->listbox1->hotkey = KEY_ALTED + KEY_F; b->listbox2->hotkey = KEY_ALTED + KEY_D; b->user_file->hotkey = KEY_ALTED + KEY_A; ui_gadget_calc_keys(dlg); b->filename = filename; b->filespec = filespec; b->message = message; wind = ui_dialog_get_window(dlg); while (window_exists(wind)) event_process(); //key_flush(); if (b->filename_list) PHYSFS_freeList(b->filename_list); if (b->directory_list) PHYSFS_freeList(b->directory_list); rval = b->filename_list != NULL; d_free(b); return rval; }
int ui_get_filename( char * filename, char * Filespec, char * message ) { char ViewDir[PATH_MAX]; char InputText[PATH_MAX]; char *p; PHYSFS_file *TempFile; int NumFiles, NumDirs,i; char **filename_list; char **directory_list; char Spaces[35]; UI_WINDOW *wnd; UI_GADGET_BUTTON *Button1, *Button2, *HelpButton; UI_GADGET_LISTBOX *ListBox1; UI_GADGET_LISTBOX *ListBox2; UI_GADGET_INPUTBOX *UserFile; int new_listboxes; if ((p = strrchr(filename, '/'))) { *p++ = 0; strcpy(ViewDir, filename); strcpy(InputText, p); } else { strcpy(ViewDir, ""); strcpy(InputText, filename); } filename_list = file_getfilelist(&NumFiles, Filespec, ViewDir); directory_list = file_getdirlist(&NumDirs, ViewDir); // Running out of memory may become likely in the future if (!filename_list && !directory_list) return 0; if (!filename_list) { PHYSFS_freeList(directory_list); return 0; } if (!directory_list) { PHYSFS_freeList(filename_list); return 0; } //ui_messagebox( -2,-2, 1,"DEBUG:0", "Ok" ); for (i=0; i<35; i++) Spaces[i] = ' '; Spaces[34] = 0; wnd = ui_open_window( 200, 100, 400, 370, WIN_DIALOG ); ui_wprintf_at( wnd, 10, 5, message ); ui_wprintf_at( wnd, 20, 32,"N&ame" ); UserFile = ui_add_gadget_inputbox( wnd, 60, 30, PATH_MAX, 40, InputText ); ui_wprintf_at( wnd, 20, 86,"&Files" ); ui_wprintf_at( wnd, 210, 86,"&Dirs" ); ListBox1 = ui_add_gadget_listbox(wnd, 20, 110, 125, 200, NumFiles, filename_list); ListBox2 = ui_add_gadget_listbox(wnd, 210, 110, 100, 200, NumDirs, directory_list); Button1 = ui_add_gadget_button( wnd, 20, 330, 60, 25, "Ok", NULL ); Button2 = ui_add_gadget_button( wnd, 100, 330, 60, 25, "Cancel", NULL ); HelpButton = ui_add_gadget_button( wnd, 180, 330, 60, 25, "Help", NULL ); wnd->keyboard_focus_gadget = (UI_GADGET *)UserFile; Button1->hotkey = KEY_CTRLED + KEY_ENTER; Button2->hotkey = KEY_ESC; HelpButton->hotkey = KEY_F1; ListBox1->hotkey = KEY_ALTED + KEY_F; ListBox2->hotkey = KEY_ALTED + KEY_D; UserFile->hotkey = KEY_ALTED + KEY_A; ui_gadget_calc_keys(wnd); ui_wprintf_at( wnd, 20, 60, "%s", Spaces ); ui_wprintf_at( wnd, 20, 60, "%s", ViewDir ); new_listboxes = 0; while( 1 ) { ui_mega_process(); ui_window_do_gadgets(wnd); if ( Button2->pressed ) { PHYSFS_freeList(filename_list); PHYSFS_freeList(directory_list); ui_close_window(wnd); return 0; } if ( HelpButton->pressed ) ui_messagebox( -1, -1, 1, "Sorry, no help is available!", "Ok" ); if (ListBox1->moved || new_listboxes) { if (ListBox1->current_item >= 0 ) ui_inputbox_set_text(UserFile, filename_list[ListBox1->current_item]); } if (ListBox2->moved || new_listboxes) { if (ListBox2->current_item >= 0 ) ui_inputbox_set_text(UserFile, directory_list[ListBox2->current_item]); } new_listboxes = 0; if (Button1->pressed || UserFile->pressed || (ListBox1->selected_item > -1 ) || (ListBox2->selected_item > -1 )) { ui_mouse_hide(); if (ListBox2->selected_item > -1 ) strcpy(UserFile->text, directory_list[ListBox2->selected_item]); strncpy(filename, ViewDir, PATH_MAX); p = UserFile->text; while (!strncmp(p, "..", 2)) // shorten the path manually { char *sep = strrchr(filename, '/'); if (sep) *sep = 0; else *filename = 0; // look directly in search paths p += 2; if (*p == '/') p++; } if (*filename && *p) strncat(filename, "/", PATH_MAX - strlen(filename)); strncat(filename, p, PATH_MAX - strlen(filename)); if (!PHYSFS_isDirectory(filename)) { TempFile = PHYSFS_openRead(filename); if (TempFile) { // Looks like a valid filename that already exists! PHYSFS_close(TempFile); break; } // File doesn't exist, but can we create it? TempFile = PHYSFS_openWrite(filename); if (TempFile) { // Looks like a valid filename! PHYSFS_close(TempFile); PHYSFS_delete(filename); break; } } else { if (filename[strlen(filename) - 1] == '/') // user typed a separator on the end filename[strlen(filename) - 1] = 0; strcpy(ViewDir, filename); //mprintf( 0, "----------------------------\n" ); //mprintf( 0, "Full dir: '%s'\n", ViewDir ); PHYSFS_freeList(filename_list); filename_list = file_getfilelist(&NumFiles, Filespec, ViewDir); if (!filename_list) { PHYSFS_freeList(directory_list); return 0; } ui_inputbox_set_text(UserFile, Filespec); PHYSFS_freeList(directory_list); directory_list = file_getdirlist(&NumDirs, ViewDir); if (!directory_list) { PHYSFS_freeList(filename_list); return 0; } ui_listbox_change(wnd, ListBox1, NumFiles, filename_list); ui_listbox_change(wnd, ListBox2, NumDirs, directory_list); new_listboxes = 0; ui_wprintf_at( wnd, 20, 60, "%s", Spaces ); ui_wprintf_at( wnd, 20, 60, "%s", ViewDir ); //i = TICKER; //while ( TICKER < i+2 ); } ui_mouse_show(); } vid_update(); } //key_flush(); ui_close_window(wnd); if (filename_list) PHYSFS_freeList(filename_list); if (directory_list) PHYSFS_freeList(directory_list); return 1; }
double ui_input_number( short xc, short yc, char * text, double OrgNumber ) { UI_WINDOW * wnd; UI_GADGET_INPUTBOX * InputBox; int text_width, text_height, avg; short box_width, box_height, width, height, x, y; short w, h; char string[100]; sprintf( string, "%f", OrgNumber ); box_width = box_height = 0; gr_set_current_canvas( &grd_curscreen->sc_canvas ); box_width = 8*20; box_height = 20; gr_get_string_size(text, &text_width, &text_height, &avg ); width = box_width + 50; text_width += avg*6; text_width += 10; if (text_width > width ) width = text_width; height = text_height; height += box_height; height += 4*5; // Center X and Y w = grd_curscreen->sc_w; h = grd_curscreen->sc_h; if ( xc == -1 ) xc = Mouse.x; if ( yc == -1 ) yc = Mouse.y - box_height/2; if ( xc == -2 ) xc = w/2; if ( yc == -2 ) yc = h/2; x = xc - width/2; y = yc - height/2; // Make sure that we're onscreen if (x < 0 ) x = 0; if ( (x+width-1) >= w ) x = w - width; if (y < 0 ) y = 0; if ( (y+height-1) >= h ) y = h - height; wnd = ui_open_window( x, y, width, height, WIN_DIALOG ); y = TEXT_EXTRA_HEIGHT + text_height/2 - 1; ui_string_centered( width/2, y, text ); y = 2*TEXT_EXTRA_HEIGHT + text_height; y = height - TEXT_EXTRA_HEIGHT - box_height-10; InputBox = ui_add_gadget_inputbox( wnd, 10, y, 20, 20, string ); ui_gadget_calc_keys(wnd); //key_flush(); wnd->keyboard_focus_gadget = (UI_GADGET *)InputBox; while(1) { ui_mega_process(); ui_window_do_gadgets(wnd); if (InputBox->pressed) break; } ui_close_window(wnd); OrgNumber = atof(InputBox->text); return OrgNumber; }