Return unique_ptr from ui_add_gadget_checkbox

This commit is contained in:
Kp 2014-12-20 04:36:09 +00:00
parent 413a316154
commit b16e8ecbec
6 changed files with 40 additions and 46 deletions

View file

@ -320,7 +320,7 @@ window_event_result ui_radio_do( UI_DIALOG *dlg, UI_GADGET_RADIO * radio, const
extern void ui_radio_set_value(UI_GADGET_RADIO *radio, int value);
extern void ui_draw_checkbox( UI_DIALOG *dlg, UI_GADGET_CHECKBOX * checkbox );
extern UI_GADGET_CHECKBOX * ui_add_gadget_checkbox( UI_DIALOG * dlg, short x, short y, short w, short h, short group, const char * text );
std::unique_ptr<UI_GADGET_CHECKBOX> ui_add_gadget_checkbox(UI_DIALOG * dlg, short x, short y, short w, short h, short group, const char * text);
window_event_result ui_checkbox_do( UI_DIALOG *dlg, UI_GADGET_CHECKBOX * checkbox, const d_event &event );
extern void ui_checkbox_check(UI_GADGET_CHECKBOX * checkbox, int check);

View file

@ -68,10 +68,9 @@ void ui_draw_checkbox( UI_DIALOG *dlg, UI_GADGET_CHECKBOX * checkbox )
}
UI_GADGET_CHECKBOX * ui_add_gadget_checkbox( UI_DIALOG * dlg, short x, short y, short w, short h, short group, const char * text )
std::unique_ptr<UI_GADGET_CHECKBOX> ui_add_gadget_checkbox(UI_DIALOG * dlg, short x, short y, short w, short h, short group, const char * text)
{
auto checkbox = ui_gadget_add<UI_GADGET_CHECKBOX>( dlg, x, y, x+w-1, y+h-1 );
std::unique_ptr<UI_GADGET_CHECKBOX> checkbox{ui_gadget_add<UI_GADGET_CHECKBOX>(dlg, x, y, x+w-1, y+h-1)};
MALLOC(checkbox->text, char, strlen(text) + 5);
strcpy(checkbox->text,text);
checkbox->width = w;
@ -81,12 +80,9 @@ UI_GADGET_CHECKBOX * ui_add_gadget_checkbox( UI_DIALOG * dlg, short x, short y,
checkbox->pressed = 0;
checkbox->flag = 0;
checkbox->group = group;
return checkbox;
}
window_event_result ui_checkbox_do( UI_DIALOG *dlg, UI_GADGET_CHECKBOX * checkbox,const d_event &event )
{
checkbox->oldposition = checkbox->position;

View file

@ -105,8 +105,6 @@ void ui_gadget_delete_all( UI_DIALOG * dlg )
delete static_cast<UI_GADGET_RADIO *>(tmp);
break;
case UI_GADGET_CHECKBOX::s_kind:
delete static_cast<UI_GADGET_CHECKBOX *>(tmp);
break;
case UI_GADGET_INPUTBOX::s_kind:
case UI_GADGET_USERBOX::s_kind:
case UI_GADGET_ICON::s_kind:

View file

@ -66,7 +66,7 @@ struct centers_dialog
{
UI_GADGET_BUTTON *quitButton;
UI_GADGET_RADIO *centerFlag[MAX_CENTER_TYPES];
UI_GADGET_CHECKBOX *robotMatFlag[MAX_ROBOT_TYPES];
array<std::unique_ptr<UI_GADGET_CHECKBOX>, MAX_ROBOT_TYPES> robotMatFlag;
int old_seg_num;
};
@ -179,7 +179,7 @@ int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_dialog *
// Read materialization center robot bit flags
for (i = 0; i < N_robot_types; i++)
ui_checkbox_check(c->robotMatFlag[i], RobotCenters[Cursegp->matcen_num].robot_flags[i / 32] & (1 << (i % 32)));
ui_checkbox_check(c->robotMatFlag[i].get(), RobotCenters[Cursegp->matcen_num].robot_flags[i / 32] & (1 << (i % 32)));
}
//------------------------------------------------------------
@ -205,7 +205,7 @@ int centers_dialog_handler(UI_DIALOG *dlg,const d_event &event, centers_dialog *
for (i = 0; i < N_robot_types; i++)
{
if ( GADGET_PRESSED(c->robotMatFlag[i]) )
if (GADGET_PRESSED(c->robotMatFlag[i].get()))
{
if (c->robotMatFlag[i]->flag)
RobotCenters[Cursegp->matcen_num].robot_flags[i / 32] |= (1 << (i % 32));

View file

@ -64,7 +64,7 @@ struct trigger_dialog
{
std::unique_ptr<UI_GADGET_USERBOX> wallViewBox;
UI_GADGET_BUTTON *quitButton;
UI_GADGET_CHECKBOX *triggerFlag[NUM_TRIGGER_FLAGS];
array<std::unique_ptr<UI_GADGET_CHECKBOX>, NUM_TRIGGER_FLAGS> triggerFlag;
int old_trigger_num;
};
@ -389,16 +389,16 @@ int trigger_dialog_handler(UI_DIALOG *dlg,const d_event &event, trigger_dialog *
{
trigger *trig = &Triggers[trigger_num];
ui_checkbox_check(t->triggerFlag[0], trig->flags & TRIGGER_CONTROL_DOORS);
ui_checkbox_check(t->triggerFlag[1], trig->flags & TRIGGER_SHIELD_DAMAGE);
ui_checkbox_check(t->triggerFlag[2], trig->flags & TRIGGER_ENERGY_DRAIN);
ui_checkbox_check(t->triggerFlag[3], trig->flags & TRIGGER_EXIT);
ui_checkbox_check(t->triggerFlag[4], trig->flags & TRIGGER_ONE_SHOT);
ui_checkbox_check(t->triggerFlag[5], trig->flags & TRIGGER_ILLUSION_ON);
ui_checkbox_check(t->triggerFlag[6], trig->flags & TRIGGER_ILLUSION_OFF);
ui_checkbox_check(t->triggerFlag[7], trig->flags & TRIGGER_ON);
ui_checkbox_check(t->triggerFlag[8], trig->flags & TRIGGER_MATCEN);
ui_checkbox_check(t->triggerFlag[9], trig->flags & TRIGGER_SECRET_EXIT);
ui_checkbox_check(t->triggerFlag[0].get(), trig->flags & TRIGGER_CONTROL_DOORS);
ui_checkbox_check(t->triggerFlag[1].get(), trig->flags & TRIGGER_SHIELD_DAMAGE);
ui_checkbox_check(t->triggerFlag[2].get(), trig->flags & TRIGGER_ENERGY_DRAIN);
ui_checkbox_check(t->triggerFlag[3].get(), trig->flags & TRIGGER_EXIT);
ui_checkbox_check(t->triggerFlag[4].get(), trig->flags & TRIGGER_ONE_SHOT);
ui_checkbox_check(t->triggerFlag[5].get(), trig->flags & TRIGGER_ILLUSION_ON);
ui_checkbox_check(t->triggerFlag[6].get(), trig->flags & TRIGGER_ILLUSION_OFF);
ui_checkbox_check(t->triggerFlag[7].get(), trig->flags & TRIGGER_ON);
ui_checkbox_check(t->triggerFlag[8].get(), trig->flags & TRIGGER_MATCEN);
ui_checkbox_check(t->triggerFlag[9].get(), trig->flags & TRIGGER_SECRET_EXIT);
}
}
@ -410,32 +410,32 @@ int trigger_dialog_handler(UI_DIALOG *dlg,const d_event &event, trigger_dialog *
{
rval = 1;
if (GADGET_PRESSED(t->triggerFlag[0]))
if (GADGET_PRESSED(t->triggerFlag[0].get()))
trigger_flag_Markedside(TRIGGER_CONTROL_DOORS, t->triggerFlag[0]->flag);
else if (GADGET_PRESSED(t->triggerFlag[1]))
else if (GADGET_PRESSED(t->triggerFlag[1].get()))
trigger_flag_Markedside(TRIGGER_SHIELD_DAMAGE, t->triggerFlag[1]->flag);
else if (GADGET_PRESSED(t->triggerFlag[2]))
else if (GADGET_PRESSED(t->triggerFlag[2].get()))
trigger_flag_Markedside(TRIGGER_ENERGY_DRAIN, t->triggerFlag[2]->flag);
else if (GADGET_PRESSED(t->triggerFlag[3]))
else if (GADGET_PRESSED(t->triggerFlag[3].get()))
trigger_flag_Markedside(TRIGGER_EXIT, t->triggerFlag[3]->flag);
else if (GADGET_PRESSED(t->triggerFlag[4]))
else if (GADGET_PRESSED(t->triggerFlag[4].get()))
trigger_flag_Markedside(TRIGGER_ONE_SHOT, t->triggerFlag[4]->flag);
else if (GADGET_PRESSED(t->triggerFlag[5]))
else if (GADGET_PRESSED(t->triggerFlag[5].get()))
trigger_flag_Markedside(TRIGGER_ILLUSION_ON, t->triggerFlag[5]->flag);
else if (GADGET_PRESSED(t->triggerFlag[6]))
else if (GADGET_PRESSED(t->triggerFlag[6].get()))
trigger_flag_Markedside(TRIGGER_ILLUSION_OFF, t->triggerFlag[6]->flag);
else if (GADGET_PRESSED(t->triggerFlag[7]))
else if (GADGET_PRESSED(t->triggerFlag[7].get()))
trigger_flag_Markedside(TRIGGER_ON, t->triggerFlag[7]->flag);
else if (GADGET_PRESSED(t->triggerFlag[8]))
else if (GADGET_PRESSED(t->triggerFlag[8].get()))
trigger_flag_Markedside(TRIGGER_MATCEN, t->triggerFlag[8]->flag);
else if (GADGET_PRESSED(t->triggerFlag[9]))
else if (GADGET_PRESSED(t->triggerFlag[9].get()))
trigger_flag_Markedside(TRIGGER_SECRET_EXIT, t->triggerFlag[9]->flag);
else
rval = 0;
} else
for (int i = 0; i < NUM_TRIGGER_FLAGS; i++ )
ui_checkbox_check(t->triggerFlag[i], 0);
range_for (auto &i, t->triggerFlag)
ui_checkbox_check(i.get(), 0);
//------------------------------------------------------------
// Draw the wall in the little 64x64 box

View file

@ -67,7 +67,7 @@ struct wall_dialog
{
std::unique_ptr<UI_GADGET_USERBOX> wallViewBox;
UI_GADGET_BUTTON *quitButton;
UI_GADGET_CHECKBOX *doorFlag[4];
array<std::unique_ptr<UI_GADGET_CHECKBOX>, 3> doorFlag;
UI_GADGET_RADIO *keyFlag[4];
int old_wall_num;
fix64 time;
@ -450,9 +450,9 @@ int wall_dialog_handler(UI_DIALOG *dlg,const d_event &event, wall_dialog *wd)
{
wall *w = &Walls[Cursegp->sides[Curside].wall_num];
ui_checkbox_check(wd->doorFlag[0], w->flags & WALL_DOOR_LOCKED);
ui_checkbox_check(wd->doorFlag[1], w->flags & WALL_DOOR_AUTO);
ui_checkbox_check(wd->doorFlag[2], w->flags & WALL_ILLUSION_OFF);
ui_checkbox_check(wd->doorFlag[0].get(), w->flags & WALL_DOOR_LOCKED);
ui_checkbox_check(wd->doorFlag[1].get(), w->flags & WALL_DOOR_AUTO);
ui_checkbox_check(wd->doorFlag[2].get(), w->flags & WALL_ILLUSION_OFF);
ui_radio_set_value(wd->keyFlag[0], w->keys & KEY_NONE);
ui_radio_set_value(wd->keyFlag[1], w->keys & KEY_BLUE);
@ -467,7 +467,7 @@ int wall_dialog_handler(UI_DIALOG *dlg,const d_event &event, wall_dialog *wd)
//------------------------------------------------------------
if (Walls[Cursegp->sides[Curside].wall_num].type == WALL_DOOR) {
if (GADGET_PRESSED(wd->doorFlag[0]))
if (GADGET_PRESSED(wd->doorFlag[0].get()))
{
if ( wd->doorFlag[0]->flag == 1 )
Walls[Cursegp->sides[Curside].wall_num].flags |= WALL_DOOR_LOCKED;
@ -475,7 +475,7 @@ int wall_dialog_handler(UI_DIALOG *dlg,const d_event &event, wall_dialog *wd)
Walls[Cursegp->sides[Curside].wall_num].flags &= ~WALL_DOOR_LOCKED;
rval = 1;
}
else if (GADGET_PRESSED(wd->doorFlag[1]))
else if (GADGET_PRESSED(wd->doorFlag[1].get()))
{
if ( wd->doorFlag[1]->flag == 1 )
Walls[Cursegp->sides[Curside].wall_num].flags |= WALL_DOOR_AUTO;
@ -496,14 +496,14 @@ int wall_dialog_handler(UI_DIALOG *dlg,const d_event &event, wall_dialog *wd)
}
}
} else {
for (int i = 0; i < 2; i++)
ui_checkbox_check(wd->doorFlag[i], 0);
for ( int i=0; i < 4; i++ )
ui_radio_set_value(wd->keyFlag[i], 0);
range_for (auto &i, partial_range(wd->doorFlag, 2u))
ui_checkbox_check(i.get(), 0);
range_for (auto &i, wd->keyFlag)
ui_radio_set_value(i, 0);
}
if (Walls[Cursegp->sides[Curside].wall_num].type == WALL_ILLUSION) {
if (GADGET_PRESSED(wd->doorFlag[2]))
if (GADGET_PRESSED(wd->doorFlag[2].get()))
{
if ( wd->doorFlag[2]->flag == 1 )
Walls[Cursegp->sides[Curside].wall_num].flags |= WALL_ILLUSION_OFF;