mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-13 02:52:37 +00:00
(svn r24249) -Codechange: Split the extraction of current DParams from the ErrorMessageData constructor into a separate function.
This commit is contained in:
parent
fd6f92a4e8
commit
1ba36d07cf
@ -41,6 +41,8 @@ public:
|
|||||||
ErrorMessageData(const ErrorMessageData &data);
|
ErrorMessageData(const ErrorMessageData &data);
|
||||||
~ErrorMessageData();
|
~ErrorMessageData();
|
||||||
ErrorMessageData(StringID summary_msg, StringID detailed_msg, uint duration = 0, int x = 0, int y = 0, uint textref_stack_size = 0, const uint32 *textref_stack = NULL);
|
ErrorMessageData(StringID summary_msg, StringID detailed_msg, uint duration = 0, int x = 0, int y = 0, uint textref_stack_size = 0, const uint32 *textref_stack = NULL);
|
||||||
|
|
||||||
|
void CopyOutDParams();
|
||||||
};
|
};
|
||||||
|
|
||||||
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0, uint textref_stack_size = 0, const uint32 *textref_stack = NULL);
|
void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0, uint textref_stack_size = 0, const uint32 *textref_stack = NULL);
|
||||||
|
@ -101,23 +101,41 @@ ErrorMessageData::ErrorMessageData(StringID summary_msg, StringID detailed_msg,
|
|||||||
duration(duration),
|
duration(duration),
|
||||||
textref_stack_size(textref_stack_size),
|
textref_stack_size(textref_stack_size),
|
||||||
summary_msg(summary_msg),
|
summary_msg(summary_msg),
|
||||||
detailed_msg(detailed_msg)
|
detailed_msg(detailed_msg),
|
||||||
|
face(INVALID_COMPANY)
|
||||||
{
|
{
|
||||||
this->position.x = x;
|
this->position.x = x;
|
||||||
this->position.y = y;
|
this->position.y = y;
|
||||||
if (textref_stack_size > 0) StartTextRefStackUsage(textref_stack_size, textref_stack);
|
|
||||||
CopyOutDParam(this->decode_params, this->strings, detailed_msg == INVALID_STRING_ID ? summary_msg : detailed_msg, lengthof(this->decode_params));
|
|
||||||
if (textref_stack_size > 0) {
|
|
||||||
StopTextRefStackUsage();
|
|
||||||
MemCpyT(this->textref_stack, textref_stack, textref_stack_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
CompanyID company = (CompanyID)GetDParamX(this->decode_params, 2);
|
memset(this->decode_params, 0, sizeof(this->decode_params));
|
||||||
this->face = (this->detailed_msg == STR_ERROR_OWNED_BY && company < MAX_COMPANIES) ? company : INVALID_COMPANY;
|
memset(this->strings, 0, sizeof(this->strings));
|
||||||
|
|
||||||
|
if (textref_stack_size > 0) MemCpyT(this->textref_stack, textref_stack, textref_stack_size);
|
||||||
|
|
||||||
assert(summary_msg != INVALID_STRING_ID);
|
assert(summary_msg != INVALID_STRING_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy error parameters from current DParams.
|
||||||
|
*/
|
||||||
|
void ErrorMessageData::CopyOutDParams()
|
||||||
|
{
|
||||||
|
/* Reset parameters */
|
||||||
|
for (size_t i = 0; i < lengthof(this->strings); i++) free(this->strings[i]);
|
||||||
|
memset(this->decode_params, 0, sizeof(this->decode_params));
|
||||||
|
memset(this->strings, 0, sizeof(this->strings));
|
||||||
|
|
||||||
|
/* Get parameters using type information */
|
||||||
|
if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_size, this->textref_stack);
|
||||||
|
CopyOutDParam(this->decode_params, this->strings, this->detailed_msg == INVALID_STRING_ID ? this->summary_msg : this->detailed_msg, lengthof(this->decode_params));
|
||||||
|
if (this->textref_stack_size > 0) StopTextRefStackUsage();
|
||||||
|
|
||||||
|
if (this->detailed_msg == STR_ERROR_OWNED_BY) {
|
||||||
|
CompanyID company = (CompanyID)GetDParamX(this->decode_params, 2);
|
||||||
|
if (company < MAX_COMPANIES) face = company;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Define a queue with errors. */
|
/** Define a queue with errors. */
|
||||||
typedef std::list<ErrorMessageData> ErrorList;
|
typedef std::list<ErrorMessageData> ErrorList;
|
||||||
/** The actual queue with errors. */
|
/** The actual queue with errors. */
|
||||||
@ -352,6 +370,7 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel
|
|||||||
if (_settings_client.gui.errmsg_duration == 0 && !no_timeout) return;
|
if (_settings_client.gui.errmsg_duration == 0 && !no_timeout) return;
|
||||||
|
|
||||||
ErrorMessageData data(summary_msg, detailed_msg, no_timeout ? 0 : _settings_client.gui.errmsg_duration, x, y, textref_stack_size, textref_stack);
|
ErrorMessageData data(summary_msg, detailed_msg, no_timeout ? 0 : _settings_client.gui.errmsg_duration, x, y, textref_stack_size, textref_stack);
|
||||||
|
data.CopyOutDParams();
|
||||||
|
|
||||||
ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0);
|
ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0);
|
||||||
if (w != NULL && w->IsCritical()) {
|
if (w != NULL && w->IsCritical()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user