OpenTTD Source: src/osk_gui.cpp File Reference

OpenTTD Source 15.0-RC2

Data Structures | Enumerations | Functions | Variables
osk_gui.cpp File Reference

The On Screen Keyboard GUI. More...

`#include "stdafx.h"`
`#include "string_func.h"`
`#include "strings_func.h"`
`#include "debug.h"`
`#include "window_func.h"`
`#include "gfx_func.h"`
`#include "querystring_gui.h"`
`#include "video/video_driver.hpp"`
`#include "zoom_func.h"`
`#include "core/string_consumer.hpp"`
`#include "widgets/osk_widget.h"`
`#include "table/sprites.h"`
`#include "table/strings.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Data Structures
struct | OskWindow

## Enumerations
enum | KeyStateBits : uint8_t { KEYS_NONE , KEYS_SHIFT , KEYS_CAPS }

## Functions
static void | AddKey (std::unique_ptr< NWidgetHorizontal > &hor, int pad_y, int num_half, WidgetType widtype, WidgetID widnum, const WidgetData &widdata)
| Add a key widget to a row of the keyboard.
static std::unique_ptr< NWidgetBase > | MakeTopKeys ()
| Construct the top row keys (cancel, ok, backspace).
static std::unique_ptr< NWidgetBase > | MakeNumberKeys ()
| Construct the row containing the digit keys.
static std::unique_ptr< NWidgetBase > | MakeQwertyKeys ()
| Construct the qwerty row keys.
static std::unique_ptr< NWidgetBase > | MakeAsdfgKeys ()
| Construct the asdfg row keys.
static std::unique_ptr< NWidgetBase > | MakeZxcvbKeys ()
| Construct the zxcvb row keys.
static std::unique_ptr< NWidgetBase > | MakeSpacebarKeys ()
| Construct the spacebar row keys.
void | GetKeyboardLayout ()
| Retrieve keyboard layout from language string or (if set) config file.
void | ShowOnScreenKeyboard (Window *parent, WidgetID button)
| Show the on-screen keyboard (osk) associated with a given textbox.
void | UpdateOSKOriginalText (const Window *parent, WidgetID button)
| Updates the original text of the OSK so when the 'parent' changes the original and you press on cancel you won't get the 'old' original text but the updated one.
bool | IsOSKOpenedFor (const Window *w, WidgetID button)
| Check whether the OSK is opened for a specific editbox.

## Variables
std::string | _keyboard_opt [2]
| The number of characters has to be OSK_KEYBOARD_ENTRIES.
static char32_t | _keyboard [2][OSK_KEYBOARD_ENTRIES]
static uint8_t | _keystate = KEYS_NONE
static const int | HALF_KEY_WIDTH = 7
static const int | INTER_KEY_SPACE = 2
static const int | TOP_KEY_PADDING = 2
static const int | KEY_PADDING = 6
static constexpr std::initializer_list< NWidgetPart > | _nested_osk_widgets
static WindowDesc | _osk_desc (WDP_CENTER, {}, 0, 0, WC_OSK, WC_NONE, {}, _nested_osk_widgets)

## Detailed Description

The On Screen Keyboard GUI.

Definition in file osk_gui.cpp.

## Enumeration Type Documentation

## ◆ KeyStateBits

enum KeyStateBits : uint8_t

Definition at line 31 of file osk_gui.cpp.

## Function Documentation

## ◆ AddKey()

static void AddKey | ( | std::unique_ptr< NWidgetHorizontal > & | hor,
|  | int | pad_y,
|  | int | num_half,
|  | WidgetType | widtype,
|  | WidgetID | widnum,
|  | const WidgetData & | widdata
| ) |  |
| static

Add a key widget to a row of the keyboard.

Parameters

  hor | Row container to add key widget to.
  pad_y | Vertical padding of the key (all keys in a row should have equal padding).
  num_half | Number of 1/2 key widths that this key has.
  widtype | Widget type of the key. Must be either `NWID_SPACER` for an invisible key, or a `WWT_*` widget.
  widnum | Widget number of the key.
  widdata | Data value of the key widget.

Note
  Key width is measured in 1/2 keys to allow for 1/2 key shifting between rows.

Definition at line 228 of file osk_gui.cpp.

References FS_NORMAL, and NWID_SPACER.

Referenced by MakeAsdfgKeys(), MakeNumberKeys(), MakeQwertyKeys(), MakeSpacebarKeys(), MakeTopKeys(), and MakeZxcvbKeys().

## ◆ GetKeyboardLayout()

void GetKeyboardLayout | ( |  | ) |

Retrieve keyboard layout from language string or (if set) config file.

Also check for invalid characters.

Definition at line 352 of file osk_gui.cpp.

References _keyboard_opt, StringConsumer::AnyBytesLeft(), GetString(), OSK_KEYBOARD_ENTRIES, and StringConsumer::ReadUtf8().

Referenced by ShowOnScreenKeyboard().

## ◆ IsOSKOpenedFor()

bool IsOSKOpenedFor | ( | const Window * | w,
|  | WidgetID | button
| ) |  |

Check whether the OSK is opened for a specific editbox.

Parameters

  w | Window to check for
  button | Editbox of w to check for

Returns
  true if the OSK is opened for button.

Definition at line 422 of file osk_gui.cpp.

References FindWindowById(), Window::parent, OskWindow::text_btn, and WC_OSK.

## ◆ MakeAsdfgKeys()

static std::unique_ptr< NWidgetBase > MakeAsdfgKeys | ( |  | ) |
| static

Construct the asdfg row keys.

Definition at line 283 of file osk_gui.cpp.

References AddKey(), WID_OSK_ASDFG_FIRST, WID_OSK_ASDFG_LAST, WID_OSK_CAPS, WWT_IMGBTN, and WWT_PUSHBTN.

## ◆ MakeNumberKeys()

static std::unique_ptr< NWidgetBase > MakeNumberKeys | ( |  | ) |
| static

Construct the row containing the digit keys.

Definition at line 257 of file osk_gui.cpp.

References AddKey(), WID_OSK_NUMBERS_FIRST, WID_OSK_NUMBERS_LAST, and WWT_PUSHBTN.

## ◆ MakeQwertyKeys()

static std::unique_ptr< NWidgetBase > MakeQwertyKeys | ( |  | ) |
| static

Construct the qwerty row keys.

Definition at line 269 of file osk_gui.cpp.

References AddKey(), NWID_SPACER, WID_OSK_QWERTY_FIRST, WID_OSK_QWERTY_LAST, WID_OSK_SPECIAL, WWT_PUSHBTN, and WWT_PUSHIMGBTN.

## ◆ MakeSpacebarKeys()

static std::unique_ptr< NWidgetBase > MakeSpacebarKeys | ( |  | ) |
| static

Construct the spacebar row keys.

Definition at line 310 of file osk_gui.cpp.

References AddKey(), NWID_SPACER, WID_OSK_LEFT, WID_OSK_RIGHT, WID_OSK_SPACE, WWT_PUSHIMGBTN, and WWT_PUSHTXTBTN.

## ◆ MakeTopKeys()

static std::unique_ptr< NWidgetBase > MakeTopKeys | ( |  | ) |
| static

Construct the top row keys (cancel, ok, backspace).

Definition at line 245 of file osk_gui.cpp.

References AddKey(), WID_OSK_BACKSPACE, WID_OSK_CANCEL, WID_OSK_OK, WWT_PUSHIMGBTN, and WWT_TEXTBTN.

## ◆ MakeZxcvbKeys()

static std::unique_ptr< NWidgetBase > MakeZxcvbKeys | ( |  | ) |
| static

Construct the zxcvb row keys.

Definition at line 296 of file osk_gui.cpp.

References AddKey(), NWID_SPACER, WID_OSK_SHIFT, WID_OSK_ZXCVB_FIRST, WID_OSK_ZXCVB_LAST, WWT_IMGBTN, and WWT_PUSHBTN.

## ◆ ShowOnScreenKeyboard()

void ShowOnScreenKeyboard | ( | Window * | parent,
|  | WidgetID | button
| ) |  |

Show the on-screen keyboard (osk) associated with a given textbox.

Parameters

  parent | pointer to the Window where this keyboard originated from
  button | widget number of parent's textbox

Definition at line 391 of file osk_gui.cpp.

References CloseWindowById(), GetKeyboardLayout(), and WC_OSK.

## ◆ UpdateOSKOriginalText()

void UpdateOSKOriginalText | ( | const Window * | parent,
|  | WidgetID | button
| ) |  |

Updates the original text of the OSK so when the 'parent' changes the original and you press on cancel you won't get the 'old' original text but the updated one.

Parameters

  parent | window that just updated its original text
  button | widget number of parent's textbox to update

Definition at line 406 of file osk_gui.cpp.

References FindWindowById(), Textbuf::GetText(), OskWindow::orig_str, Window::parent, OskWindow::qs, Window::SetDirty(), OskWindow::text_btn, and WC_OSK.

## Variable Documentation

## ◆ _keyboard

char32_t _keyboard[2][OSK_KEYBOARD_ENTRIES]
| static

Definition at line 29 of file osk_gui.cpp.

## ◆ _keyboard_opt

std::string _keyboard_opt[2]

The number of characters has to be OSK_KEYBOARD_ENTRIES.

However, these have to be UTF-8 encoded, which means up to 4 bytes per character.

Definition at line 28 of file osk_gui.cpp.

Referenced by GetKeyboardLayout().

## ◆ _keystate

uint8_t _keystate = KEYS_NONE
| static

Definition at line 36 of file osk_gui.cpp.

## ◆ _nested_osk_widgets

constexpr std::initializer_list<NWidgetPart> _nested_osk_widgets
| staticconstexpr

Initial value:
= {
NWidget(WWT_CAPTION, COLOUR_GREY, WID_OSK_CAPTION), SetTextStyle(TC_WHITE),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_EDITBOX, COLOUR_GREY, WID_OSK_TEXT), SetMinimalSize(252, 0), SetPadding(2, 2, 2, 2),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(NWID_VERTICAL), SetPadding(3), SetPIP(0, INTER_KEY_SPACE, 0),
NWidgetFunction(MakeTopKeys),
NWidgetFunction(MakeNumberKeys),
NWidgetFunction(MakeQwertyKeys),
NWidgetFunction(MakeAsdfgKeys),
NWidgetFunction(MakeZxcvbKeys),
NWidgetFunction(MakeSpacebarKeys),
EndContainer(),
EndContainer(),
}
NWidgetFunction
constexpr NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr)
Obtain a nested widget (sub)tree from an external source.
Definition widget_type.h:1445
SetPIP
constexpr NWidgetPart SetPIP(uint8_t pre, uint8_t inter, uint8_t post)
Widget part function for setting a pre/inter/post spaces.
Definition widget_type.h:1375
SetPadding
constexpr NWidgetPart SetPadding(uint8_t top, uint8_t right, uint8_t bottom, uint8_t left)
Widget part function for setting additional space around a widget.
Definition widget_type.h:1332
SetTextStyle
constexpr NWidgetPart SetTextStyle(TextColour colour, FontSize size=FS_NORMAL)
Widget part function for setting the text style.
Definition widget_type.h:1198
SetMinimalSize
constexpr NWidgetPart SetMinimalSize(int16_t x, int16_t y)
Widget part function for setting the minimal size.
Definition widget_type.h:1156
EndContainer
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition widget_type.h:1229
NWidget
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=INVALID_WIDGET)
Widget part function for starting a new 'real' widget.
Definition widget_type.h:1424
MakeZxcvbKeys
static std::unique_ptr< NWidgetBase > MakeZxcvbKeys()
Construct the zxcvb row keys.
Definition osk_gui.cpp:296
MakeNumberKeys
static std::unique_ptr< NWidgetBase > MakeNumberKeys()
Construct the row containing the digit keys.
Definition osk_gui.cpp:257
MakeAsdfgKeys
static std::unique_ptr< NWidgetBase > MakeAsdfgKeys()
Construct the asdfg row keys.
Definition osk_gui.cpp:283
MakeTopKeys
static std::unique_ptr< NWidgetBase > MakeTopKeys()
Construct the top row keys (cancel, ok, backspace).
Definition osk_gui.cpp:245
MakeSpacebarKeys
static std::unique_ptr< NWidgetBase > MakeSpacebarKeys()
Construct the spacebar row keys.
Definition osk_gui.cpp:310
MakeQwertyKeys
static std::unique_ptr< NWidgetBase > MakeQwertyKeys()
Construct the qwerty row keys.
Definition osk_gui.cpp:269
WID_OSK_CAPTION
@ WID_OSK_CAPTION
Caption of window.
Definition osk_widget.h:15
WID_OSK_TEXT
@ WID_OSK_TEXT
Edit box.
Definition osk_widget.h:16
WWT_EDITBOX
@ WWT_EDITBOX
a textbox for typing
Definition widget_type.h:62
WWT_PANEL
@ WWT_PANEL
Simple depressed panel.
Definition widget_type.h:39
WWT_CAPTION
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition widget_type.h:52
NWID_VERTICAL
@ NWID_VERTICAL
Vertical container.
Definition widget_type.h:68

Definition at line 324 of file osk_gui.cpp.

## ◆ HALF_KEY_WIDTH

const int HALF_KEY_WIDTH = 7
| static

Definition at line 212 of file osk_gui.cpp.

## ◆ INTER_KEY_SPACE

const int INTER_KEY_SPACE = 2
| static

Definition at line 213 of file osk_gui.cpp.

## ◆ KEY_PADDING

const int KEY_PADDING = 6
| static

Definition at line 216 of file osk_gui.cpp.

## ◆ TOP_KEY_PADDING

const int TOP_KEY_PADDING = 2
| static

Definition at line 215 of file osk_gui.cpp.