TBTR: Handle template being deleted during edit.
This commit is contained in:
@@ -131,14 +131,13 @@ private:
|
|||||||
Scrollbar *vscroll;
|
Scrollbar *vscroll;
|
||||||
int line_height;
|
int line_height;
|
||||||
Train* virtual_train;
|
Train* virtual_train;
|
||||||
bool editMode;
|
bool *create_window_open; /// used to notify main window of progress (dummy way of disabling 'delete' while editing a template)
|
||||||
bool *createWindowOpen; /// used to notify main window of progress (dummy way of disabling 'delete' while editing a template)
|
|
||||||
VehicleID sel;
|
VehicleID sel;
|
||||||
VehicleID vehicle_over;
|
VehicleID vehicle_over;
|
||||||
TemplateVehicle *editTemplate;
|
uint32 template_index;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TemplateCreateWindow(WindowDesc* _wdesc, TemplateVehicle *to_edit, bool *windowOpen, int step_h) : Window(_wdesc)
|
TemplateCreateWindow(WindowDesc* _wdesc, TemplateVehicle *to_edit, bool *window_open, int step_h) : Window(_wdesc)
|
||||||
{
|
{
|
||||||
this->line_height = step_h;
|
this->line_height = step_h;
|
||||||
this->CreateNestedTree(_wdesc != NULL);
|
this->CreateNestedTree(_wdesc != NULL);
|
||||||
@@ -150,15 +149,13 @@ public:
|
|||||||
|
|
||||||
this->owner = _local_company;
|
this->owner = _local_company;
|
||||||
|
|
||||||
createWindowOpen = windowOpen;
|
this->create_window_open = window_open;
|
||||||
this->editTemplate = to_edit;
|
this->template_index = (to_edit != NULL) ? to_edit->index : INVALID_VEHICLE;
|
||||||
|
|
||||||
editMode = (to_edit != NULL);
|
|
||||||
|
|
||||||
this->sel = INVALID_VEHICLE;
|
this->sel = INVALID_VEHICLE;
|
||||||
this->vehicle_over = INVALID_VEHICLE;
|
this->vehicle_over = INVALID_VEHICLE;
|
||||||
|
|
||||||
if (to_edit) {
|
if (to_edit != NULL) {
|
||||||
DoCommandP(0, to_edit->index, 0, CMD_VIRTUAL_TRAIN_FROM_TEMPLATE_VEHICLE | CMD_MSG(STR_TMPL_CANT_CREATE), CcSetVirtualTrain);
|
DoCommandP(0, to_edit->index, 0, CMD_VIRTUAL_TRAIN_FROM_TEMPLATE_VEHICLE | CMD_MSG(STR_TMPL_CANT_CREATE), CcSetVirtualTrain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +174,7 @@ public:
|
|||||||
SetWindowClassesDirty(WC_TRAINS_LIST);
|
SetWindowClassesDirty(WC_TRAINS_LIST);
|
||||||
|
|
||||||
/* more cleanup */
|
/* more cleanup */
|
||||||
*createWindowOpen = false;
|
*create_window_open = false;
|
||||||
DeleteWindowById(WC_BUILD_VIRTUAL_TRAIN, this->window_number);
|
DeleteWindowById(WC_BUILD_VIRTUAL_TRAIN, this->window_number);
|
||||||
InvalidateWindowClassesData(WC_TEMPLATEGUI_MAIN);
|
InvalidateWindowClassesData(WC_TEMPLATEGUI_MAIN);
|
||||||
}
|
}
|
||||||
@@ -204,6 +201,14 @@ public:
|
|||||||
|
|
||||||
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
|
virtual void OnInvalidateData(int data = 0, bool gui_scope = true)
|
||||||
{
|
{
|
||||||
|
if(!gui_scope) return;
|
||||||
|
|
||||||
|
if (this->template_index != INVALID_VEHICLE) {
|
||||||
|
if (TemplateVehicle::GetIfValid(this->template_index) == NULL) {
|
||||||
|
delete this;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
UpdateButtonState();
|
UpdateButtonState();
|
||||||
}
|
}
|
||||||
@@ -231,13 +236,11 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TCW_OK: {
|
case TCW_OK: {
|
||||||
uint32 templateIndex = (editTemplate != NULL) ? editTemplate->index : INVALID_VEHICLE;
|
|
||||||
|
|
||||||
if (virtual_train != NULL) {
|
if (virtual_train != NULL) {
|
||||||
DoCommandP(0, templateIndex, virtual_train->index, CMD_REPLACE_TEMPLATE_VEHICLE);
|
DoCommandP(0, this->template_index, virtual_train->index, CMD_REPLACE_TEMPLATE_VEHICLE);
|
||||||
virtual_train = NULL;
|
virtual_train = NULL;
|
||||||
} else if (templateIndex != INVALID_VEHICLE) {
|
} else if (this->template_index != INVALID_VEHICLE) {
|
||||||
DoCommandP(0, templateIndex, 0, CMD_DELETE_TEMPLATE_VEHICLE);
|
DoCommandP(0, this->template_index, 0, CMD_DELETE_TEMPLATE_VEHICLE);
|
||||||
}
|
}
|
||||||
delete this;
|
delete this;
|
||||||
break;
|
break;
|
||||||
@@ -536,10 +539,10 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void ShowTemplateCreateWindow(TemplateVehicle *to_edit, bool *createWindowOpen, int step_h)
|
void ShowTemplateCreateWindow(TemplateVehicle *to_edit, bool *create_window_open, int step_h)
|
||||||
{
|
{
|
||||||
if (BringWindowToFrontById(WC_CREATE_TEMPLATE, VEH_TRAIN) != NULL) return;
|
if (BringWindowToFrontById(WC_CREATE_TEMPLATE, VEH_TRAIN) != NULL) return;
|
||||||
new TemplateCreateWindow(&_template_create_window_desc, to_edit, createWindowOpen, step_h);
|
new TemplateCreateWindow(&_template_create_window_desc, to_edit, create_window_open, step_h);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CcSetVirtualTrain(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
void CcSetVirtualTrain(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2)
|
||||||
|
@@ -1186,6 +1186,7 @@ CommandCost CmdDeleteTemplateVehicle(TileIndex tile, DoCommandFlag flags, uint32
|
|||||||
|
|
||||||
delete del;
|
delete del;
|
||||||
|
|
||||||
|
InvalidateWindowClassesData(WC_CREATE_TEMPLATE, 0);
|
||||||
InvalidateWindowClassesData(WC_TEMPLATEGUI_MAIN, 0);
|
InvalidateWindowClassesData(WC_TEMPLATEGUI_MAIN, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user