OpenTTDDevBlackBook/Window/TextEdit

From OpenTTD
Jump to: navigation, search
External Links

OpenTTD GitHub
Contributing to OpenTTD - guidelines
OpenTTD Doxygen

General Reference

Coding style
Compiling OpenTTD
Debugging
Add a setting
Add a squirrel function
Understanding the SaveGame handler
Bumping the savegame version
Doing an OpenTTD release

Language and Strings

Format of langfiles
Using OpenTTD strings
List of special strings

Window System

Using the window system
Colour codes that exist in OpenTTD
Adding a text box
Understanding the widget focus system
GUI style guide

Multiplayer

The OpenTTD TCP protocol
The OpenTTD UDP protocol
Debugging desyncs
Server Admin Port development

Ingame Console

The console window
Console commands
Console variables
Using console scripting
Adding functions/commands to the console
Adding variables to the console
Console development history

Content APIs (modding frameworks)

Graphics and similar (NewGRF)
AI framework (NoAI)
GameScript framework (NoGO)

Other Reference

Map array (landscape grid)
Vehicles
Pathfinding
Train acceleration



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)

Related articles

Understanding the widget focus system

Personal tools