mirror of https://github.com/OpenTTD/OpenTTD
(svn r24554) -Add: Hotkeys for widgets in AI Debug window
parent
13666b1520
commit
eff4bbeb53
|
@ -27,6 +27,7 @@
|
||||||
#include "../textfile_gui.h"
|
#include "../textfile_gui.h"
|
||||||
#include "../widgets/dropdown_type.h"
|
#include "../widgets/dropdown_type.h"
|
||||||
#include "../widgets/dropdown_func.h"
|
#include "../widgets/dropdown_func.h"
|
||||||
|
#include "../hotkeys.h"
|
||||||
|
|
||||||
#include "ai.hpp"
|
#include "ai.hpp"
|
||||||
#include "../script/api/script_log.hpp"
|
#include "../script/api/script_log.hpp"
|
||||||
|
@ -1353,10 +1354,35 @@ struct AIDebugWindow : public QueryStringBaseWindow {
|
||||||
virtual EventState OnKeyPress(uint16 key, uint16 keycode)
|
virtual EventState OnKeyPress(uint16 key, uint16 keycode)
|
||||||
{
|
{
|
||||||
EventState state = ES_NOT_HANDLED;
|
EventState state = ES_NOT_HANDLED;
|
||||||
if (this->HandleEditBoxKey(WID_AID_BREAK_STR_EDIT_BOX, key, keycode, state) != HEBR_NOT_FOCUSED) {
|
switch (this->HandleEditBoxKey(WID_AID_BREAK_STR_EDIT_BOX, key, keycode, state)) {
|
||||||
/* Save the current string to static member so it can be restored next time the window is opened */
|
case HEBR_EDITING:
|
||||||
|
/* Save the current string to static member so it can be restored next time the window is opened. */
|
||||||
strecpy(this->break_string, this->edit_str_buf, lastof(this->break_string));
|
strecpy(this->break_string, this->edit_str_buf, lastof(this->break_string));
|
||||||
break_string_filter.SetFilterTerm(this->break_string);
|
break_string_filter.SetFilterTerm(this->break_string);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HEBR_CANCEL:
|
||||||
|
/* Unfocus the text box. */
|
||||||
|
this->UnfocusFocusedWidget();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case HEBR_NOT_FOCUSED: {
|
||||||
|
/* Edit boxs is not globally foused => handle hotkeys of AI Debug window. */
|
||||||
|
int num = CheckHotkeyMatch(aidebug_hotkeys, keycode, this);
|
||||||
|
if (num == -1) return ES_NOT_HANDLED;
|
||||||
|
if (this->show_break_box && num == WID_AID_BREAK_STR_EDIT_BOX) {
|
||||||
|
this->SetFocusedWidget(WID_AID_BREAK_STR_EDIT_BOX);
|
||||||
|
SetFocusedWindow(this);
|
||||||
|
state = ES_HANDLED;
|
||||||
|
} else if (this->show_break_box || num < WID_AID_BREAK_STRING_WIDGETS) {
|
||||||
|
this->OnClick(Point(), num, 1);
|
||||||
|
state = ES_HANDLED;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
@ -1407,6 +1433,8 @@ struct AIDebugWindow : public QueryStringBaseWindow {
|
||||||
{
|
{
|
||||||
this->vscroll->SetCapacityFromWidget(this, WID_AID_LOG_PANEL);
|
this->vscroll->SetCapacityFromWidget(this, WID_AID_LOG_PANEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Hotkey<AIDebugWindow> aidebug_hotkeys[];
|
||||||
};
|
};
|
||||||
|
|
||||||
const int AIDebugWindow::top_offset = WD_FRAMERECT_TOP + 2;
|
const int AIDebugWindow::top_offset = WD_FRAMERECT_TOP + 2;
|
||||||
|
@ -1423,6 +1451,33 @@ NWidgetBase *MakeCompanyButtonRowsAIDebug(int *biggest_index)
|
||||||
return MakeCompanyButtonRows(biggest_index, WID_AID_COMPANY_BUTTON_START, WID_AID_COMPANY_BUTTON_END, 8, STR_AI_DEBUG_SELECT_AI_TOOLTIP);
|
return MakeCompanyButtonRows(biggest_index, WID_AID_COMPANY_BUTTON_START, WID_AID_COMPANY_BUTTON_END, 8, STR_AI_DEBUG_SELECT_AI_TOOLTIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Hotkey<AIDebugWindow> AIDebugWindow::aidebug_hotkeys[] = {
|
||||||
|
Hotkey<AIDebugWindow>('1', "company_1", WID_AID_COMPANY_BUTTON_START),
|
||||||
|
Hotkey<AIDebugWindow>('2', "company_2", WID_AID_COMPANY_BUTTON_START + 1),
|
||||||
|
Hotkey<AIDebugWindow>('3', "company_3", WID_AID_COMPANY_BUTTON_START + 2),
|
||||||
|
Hotkey<AIDebugWindow>('4', "company_4", WID_AID_COMPANY_BUTTON_START + 3),
|
||||||
|
Hotkey<AIDebugWindow>('5', "company_5", WID_AID_COMPANY_BUTTON_START + 4),
|
||||||
|
Hotkey<AIDebugWindow>('6', "company_6", WID_AID_COMPANY_BUTTON_START + 5),
|
||||||
|
Hotkey<AIDebugWindow>('7', "company_7", WID_AID_COMPANY_BUTTON_START + 6),
|
||||||
|
Hotkey<AIDebugWindow>('8', "company_8", WID_AID_COMPANY_BUTTON_START + 7),
|
||||||
|
Hotkey<AIDebugWindow>('9', "company_9", WID_AID_COMPANY_BUTTON_START + 8),
|
||||||
|
Hotkey<AIDebugWindow>((uint16)0, "company_10", WID_AID_COMPANY_BUTTON_START + 9),
|
||||||
|
Hotkey<AIDebugWindow>((uint16)0, "company_11", WID_AID_COMPANY_BUTTON_START + 10),
|
||||||
|
Hotkey<AIDebugWindow>((uint16)0, "company_12", WID_AID_COMPANY_BUTTON_START + 11),
|
||||||
|
Hotkey<AIDebugWindow>((uint16)0, "company_13", WID_AID_COMPANY_BUTTON_START + 12),
|
||||||
|
Hotkey<AIDebugWindow>((uint16)0, "company_14", WID_AID_COMPANY_BUTTON_START + 13),
|
||||||
|
Hotkey<AIDebugWindow>((uint16)0, "company_15", WID_AID_COMPANY_BUTTON_START + 14),
|
||||||
|
Hotkey<AIDebugWindow>('S', "settings", WID_AID_SETTINGS),
|
||||||
|
Hotkey<AIDebugWindow>('0', "game_script", WID_AID_SCRIPT_GAME),
|
||||||
|
Hotkey<AIDebugWindow>((uint16)0, "reload", WID_AID_RELOAD_TOGGLE),
|
||||||
|
Hotkey<AIDebugWindow>('B', "break_toggle", WID_AID_BREAK_STR_ON_OFF_BTN),
|
||||||
|
Hotkey<AIDebugWindow>('F', "break_string", WID_AID_BREAK_STR_EDIT_BOX),
|
||||||
|
Hotkey<AIDebugWindow>('C', "match_case", WID_AID_MATCH_CASE_BTN),
|
||||||
|
Hotkey<AIDebugWindow>(WKC_RETURN, "continue", WID_AID_CONTINUE_BTN),
|
||||||
|
HOTKEY_LIST_END(AIDebugWindow)
|
||||||
|
};
|
||||||
|
Hotkey<AIDebugWindow> *_aidebug_hotkeys = AIDebugWindow::aidebug_hotkeys;
|
||||||
|
|
||||||
/** Widgets for the AI debug window. */
|
/** Widgets for the AI debug window. */
|
||||||
static const NWidgetPart _nested_ai_debug_widgets[] = {
|
static const NWidgetPart _nested_ai_debug_widgets[] = {
|
||||||
NWidget(NWID_HORIZONTAL),
|
NWidget(NWID_HORIZONTAL),
|
||||||
|
@ -1479,15 +1534,30 @@ static const WindowDesc _ai_debug_desc(
|
||||||
* Open the AI debug window and select the given company.
|
* Open the AI debug window and select the given company.
|
||||||
* @param show_company Display debug information about this AI company.
|
* @param show_company Display debug information about this AI company.
|
||||||
*/
|
*/
|
||||||
void ShowAIDebugWindow(CompanyID show_company)
|
Window *ShowAIDebugWindow(CompanyID show_company)
|
||||||
{
|
{
|
||||||
if (!_networking || _network_server) {
|
if (!_networking || _network_server) {
|
||||||
AIDebugWindow *w = (AIDebugWindow *)BringWindowToFrontById(WC_AI_DEBUG, 0);
|
AIDebugWindow *w = (AIDebugWindow *)BringWindowToFrontById(WC_AI_DEBUG, 0);
|
||||||
if (w == NULL) w = new AIDebugWindow(&_ai_debug_desc, 0);
|
if (w == NULL) w = new AIDebugWindow(&_ai_debug_desc, 0);
|
||||||
if (show_company != INVALID_COMPANY) w->ChangeToAI(show_company);
|
if (show_company != INVALID_COMPANY) w->ChangeToAI(show_company);
|
||||||
|
return w;
|
||||||
} else {
|
} else {
|
||||||
ShowErrorMessage(STR_ERROR_AI_DEBUG_SERVER_ONLY, INVALID_STRING_ID, WL_INFO);
|
ShowErrorMessage(STR_ERROR_AI_DEBUG_SERVER_ONLY, INVALID_STRING_ID, WL_INFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for global AI debug window hotkeys.
|
||||||
|
*/
|
||||||
|
EventState AIDebugGlobalHotkeys(uint16 key, uint16 keycode)
|
||||||
|
{
|
||||||
|
int num = CheckHotkeyMatch<AIDebugWindow>(_aidebug_hotkeys, keycode, NULL, true);
|
||||||
|
if (num == -1) return ES_NOT_HANDLED;
|
||||||
|
Window *w = ShowAIDebugWindow(INVALID_COMPANY);
|
||||||
|
if (w == NULL) return ES_NOT_HANDLED;
|
||||||
|
return w->OnKeyPress(key, keycode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#include "../company_type.h"
|
#include "../company_type.h"
|
||||||
|
|
||||||
void ShowAIDebugWindow(CompanyID show_company = INVALID_COMPANY);
|
Window* ShowAIDebugWindow(CompanyID show_company = INVALID_COMPANY);
|
||||||
void ShowAIConfigWindow();
|
void ShowAIConfigWindow();
|
||||||
void ShowAIDebugWindowIfAIError();
|
void ShowAIDebugWindowIfAIError();
|
||||||
void InitializeAIGui();
|
void InitializeAIGui();
|
||||||
|
|
|
@ -249,6 +249,7 @@ struct BuildDocksToolbarWindow;
|
||||||
struct BuildRailToolbarWindow;
|
struct BuildRailToolbarWindow;
|
||||||
struct BuildRoadToolbarWindow;
|
struct BuildRoadToolbarWindow;
|
||||||
struct SignListWindow;
|
struct SignListWindow;
|
||||||
|
struct AIDebugWindow;
|
||||||
|
|
||||||
static void SaveLoadHotkeys(bool save)
|
static void SaveLoadHotkeys(bool save)
|
||||||
{
|
{
|
||||||
|
@ -273,6 +274,7 @@ static void SaveLoadHotkeys(bool save)
|
||||||
SL_HOTKEYS(railtoolbar, BuildRailToolbarWindow);
|
SL_HOTKEYS(railtoolbar, BuildRailToolbarWindow);
|
||||||
SL_HOTKEYS(roadtoolbar, BuildRoadToolbarWindow);
|
SL_HOTKEYS(roadtoolbar, BuildRoadToolbarWindow);
|
||||||
SL_HOTKEYS(signlist, SignListWindow);
|
SL_HOTKEYS(signlist, SignListWindow);
|
||||||
|
SL_HOTKEYS(aidebug, AIDebugWindow);
|
||||||
|
|
||||||
|
|
||||||
#undef SL_HOTKEYS
|
#undef SL_HOTKEYS
|
||||||
|
@ -303,6 +305,7 @@ GlobalHotkeyHandler TerraformToolbarEditorGlobalHotkeys;
|
||||||
GlobalHotkeyHandler RoadToolbarGlobalHotkeys;
|
GlobalHotkeyHandler RoadToolbarGlobalHotkeys;
|
||||||
GlobalHotkeyHandler RoadToolbarEditorGlobalHotkeys;
|
GlobalHotkeyHandler RoadToolbarEditorGlobalHotkeys;
|
||||||
GlobalHotkeyHandler SignListGlobalHotkeys;
|
GlobalHotkeyHandler SignListGlobalHotkeys;
|
||||||
|
GlobalHotkeyHandler AIDebugGlobalHotkeys;
|
||||||
|
|
||||||
|
|
||||||
GlobalHotkeyHandler *_global_hotkey_handlers[] = {
|
GlobalHotkeyHandler *_global_hotkey_handlers[] = {
|
||||||
|
@ -312,6 +315,7 @@ GlobalHotkeyHandler *_global_hotkey_handlers[] = {
|
||||||
TerraformToolbarGlobalHotkeys,
|
TerraformToolbarGlobalHotkeys,
|
||||||
RoadToolbarGlobalHotkeys,
|
RoadToolbarGlobalHotkeys,
|
||||||
SignListGlobalHotkeys,
|
SignListGlobalHotkeys,
|
||||||
|
AIDebugGlobalHotkeys,
|
||||||
};
|
};
|
||||||
|
|
||||||
GlobalHotkeyHandler *_global_hotkey_handlers_editor[] = {
|
GlobalHotkeyHandler *_global_hotkey_handlers_editor[] = {
|
||||||
|
|
Loading…
Reference in New Issue