Use unique_ptr for centers_dialog

This commit is contained in:
Kp 2014-12-20 04:36:08 +00:00
parent f0c8482b8b
commit 7e4e8f3501

View file

@ -55,6 +55,8 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
#include "centers.h" #include "centers.h"
#include "u_mem.h" #include "u_mem.h"
#include "compiler-make_unique.h"
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// Variables for this module... // Variables for this module...
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
@ -75,9 +77,6 @@ static int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_d
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
int do_centers_dialog() int do_centers_dialog()
{ {
centers_dialog *c;
int i;
// Only open 1 instance of this window... // Only open 1 instance of this window...
if ( MainWindow != NULL ) return 0; if ( MainWindow != NULL ) return 0;
@ -87,42 +86,46 @@ int do_centers_dialog()
close_wall_window(); close_wall_window();
robot_close_window(); robot_close_window();
MALLOC(c, centers_dialog, 1); auto c = make_unique<centers_dialog>();
if (!c)
return 0;
// Open a window with a quit button // Open a window with a quit button
#if defined(DXX_BUILD_DESCENT_I) #if defined(DXX_BUILD_DESCENT_I)
MainWindow = ui_create_dialog( TMAPBOX_X+20, TMAPBOX_Y+20, 765-TMAPBOX_X, 545-TMAPBOX_Y, DF_DIALOG, centers_dialog_handler, c ); const unsigned x = TMAPBOX_X+20;
i = 80; const unsigned width = 765-TMAPBOX_X;
#elif defined(DXX_BUILD_DESCENT_II) #elif defined(DXX_BUILD_DESCENT_II)
MainWindow = ui_create_dialog( 20, TMAPBOX_Y+20, 740, 545-TMAPBOX_Y, DF_DIALOG, centers_dialog_handler, c ); const unsigned x = 20;
i = 40; const unsigned width = 740;
#endif #endif
c->quitButton = ui_add_gadget_button( MainWindow, 20, 252, 48, 40, "Done", NULL ); MainWindow = ui_create_dialog(x, TMAPBOX_Y+20, width, 545-TMAPBOX_Y, DF_DIALOG, centers_dialog_handler, std::move(c));
return 1;
}
static int centers_dialog_created(UI_DIALOG *const w, centers_dialog *const c)
{
#if defined(DXX_BUILD_DESCENT_I)
int i = 80;
#elif defined(DXX_BUILD_DESCENT_II)
int i = 40;
#endif
c->quitButton = ui_add_gadget_button(w, 20, 252, 48, 40, "Done", NULL);
// These are the checkboxes for each door flag. // These are the checkboxes for each door flag.
c->centerFlag[0] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "NONE" ); i += 24; c->centerFlag[0] = ui_add_gadget_radio(w, 18, i, 16, 16, 0, "NONE"); i += 24;
c->centerFlag[1] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "FuelCen" ); i += 24; c->centerFlag[1] = ui_add_gadget_radio(w, 18, i, 16, 16, 0, "FuelCen"); i += 24;
c->centerFlag[2] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "RepairCen" ); i += 24; c->centerFlag[2] = ui_add_gadget_radio(w, 18, i, 16, 16, 0, "RepairCen"); i += 24;
c->centerFlag[3] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "ControlCen" ); i += 24; c->centerFlag[3] = ui_add_gadget_radio(w, 18, i, 16, 16, 0, "ControlCen"); i += 24;
c->centerFlag[4] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "RobotCen" ); i += 24; c->centerFlag[4] = ui_add_gadget_radio(w, 18, i, 16, 16, 0, "RobotCen"); i += 24;
#if defined(DXX_BUILD_DESCENT_II) #if defined(DXX_BUILD_DESCENT_II)
c->centerFlag[5] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "Blue Goal" ); i += 24; c->centerFlag[5] = ui_add_gadget_radio(w, 18, i, 16, 16, 0, "Blue Goal"); i += 24;
c->centerFlag[6] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "Red Goal" ); i += 24; c->centerFlag[6] = ui_add_gadget_radio(w, 18, i, 16, 16, 0, "Red Goal"); i += 24;
#endif #endif
// These are the checkboxes for each robot flag. // These are the checkboxes for each robot flag.
#if defined(DXX_BUILD_DESCENT_I) #if defined(DXX_BUILD_DESCENT_I)
const unsigned d = 2; const unsigned d = 2;
#elif defined(DXX_BUILD_DESCENT_II) #elif defined(DXX_BUILD_DESCENT_II)
const unsigned d = 6; const unsigned d = 6;
#endif #endif
for (i=0; i<N_robot_types; i++) for (i=0; i < N_robot_types; i++)
c->robotMatFlag[i] = ui_add_gadget_checkbox( MainWindow, 128 + (i%d)*92, 20+(i/d)*24, 16, 16, 0, Robot_names[i]); c->robotMatFlag[i] = ui_add_gadget_checkbox( w, 128 + (i%d)*92, 20+(i/d)*24, 16, 16, 0, Robot_names[i]);
c->old_seg_num = -2; // Set to some dummy value so everything works ok on the first frame. c->old_seg_num = -2; // Set to some dummy value so everything works ok on the first frame.
return 1; return 1;
} }
@ -136,6 +139,17 @@ void close_centers_window()
int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_dialog *c) int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_dialog *c)
{ {
switch(event.type)
{
case EVENT_WINDOW_CREATED:
return centers_dialog_created(dlg, c);
case EVENT_WINDOW_CLOSE:
std::default_delete<centers_dialog>()(c);
MainWindow = NULL;
return 0;
default:
break;
}
int i; int i;
// int robot_flags; // int robot_flags;
int keypress = 0; int keypress = 0;
@ -223,14 +237,6 @@ int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_dialog *
if (c->old_seg_num != Cursegp-Segments) if (c->old_seg_num != Cursegp-Segments)
Update_flags |= UF_WORLD_CHANGED; Update_flags |= UF_WORLD_CHANGED;
if (event.type == EVENT_WINDOW_CLOSE)
{
d_free(c);
MainWindow = NULL;
return 0; // we're not cancelling the close
}
if ( GADGET_PRESSED(c->quitButton) || (keypress==KEY_ESC) ) if ( GADGET_PRESSED(c->quitButton) || (keypress==KEY_ESC) )
{ {
close_centers_window(); close_centers_window();