- en
- pl
OpenTTD GitHub
Contributing to OpenTTD - guidelines
OpenTTD Doxygen
Coding style
Compiling OpenTTD
Debugging
Add a setting
Add a squirrel function
Understanding the SaveGame handler
Bumping the savegame version
Doing an OpenTTD release
Manual of style
Format of langfiles
Using OpenTTD strings
List of special strings
Using the window system
Colour codes that exist in OpenTTD
Adding a text box
Understanding the widget focus system
GUI style guide
The OpenTTD TCP protocol
The OpenTTD UDP protocol
Debugging desyncs
Server Admin Port development
The console window
Console commands
Console variables
Using console scripting
Adding functions/commands to the console
Adding variables to the console
Console development history
Graphics and similar (NewGRF)
AI framework (NoAI)
GameScript framework (NoGO)
Social Integration
Map array (landscape grid)
Vehicles
Pathfinding
Train acceleration
Sound IDs
The way users interact with edit boxes is influenced by the widget focus system. This page describes what modifications that are necessary to add a text box to a window that do not have it yet.
Checklist for adding a text box to a window
- Add a constant for the widget index eg. OP_WIDGET_NUM_PIZZAS_EDIT (OP = Order Pizza window). Follow the naming pattern of the other widgets in the same window.
- Add an edit box to the nested widget array:
NWidget(WWT_EDITBOX, COLOUR_WHITE, OP_WIDGET_NUM_PIZZAS_EDIT), SetDataTip(STR_ORDER_PIZZA_NUM_PIZZAS_OSKTITLE, STR_ORDER_PIZZA_NUM_PIZZAS_TOOLTIP),
(should be on one line, but has been broken up on two lines here on the wiki to avoid horizontal scrolling)
- Add a QueryString member variable to the window class, and initialise it in the constructor with the maximum desired text length.
QueryString filter_editbox; ///< Filter editbox;
- In your constructor (after FinishInitNested resp. InitNested) link the editbox with the QueryString:
/* Initialize the text edit widget */ this->querystrings[WID_SIL_FILTER_TEXT] = &this->filter_editbox;
- If needed, assign special behaviour to ENTER/ESC keys, resp OK/CANCEL buttons in the OSK window. For filter editboxes it is expected that ESC clears the editbox:
this->filter_editbox.ok_button = WID_SIL_FILTER_ENTER_BTN; this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR;
- Via the QueryString you can set some other properties, like restricting the accepted character set to digits etc.
- If you want to focus the edit box by default when the window opens, call the SetFocusedWidget function:
this->SetFocusedWidget(OP_WIDGET_NUM_PIZZAS_EDIT);
- If you want editing the editbox trigger some functionality, override the window member function:
virtual void OnEditboxChanged(int widget)