OpenTTD Source: src/osk_gui.cpp File Reference

OpenTTD Source 14.0-beta1

Data Structures | Enumerations | Functions | Variables
osk_gui.cpp File Reference
`#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 "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 { 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, uint16_t widdata)
| Add a key widget to a row of the keyboard. More...
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. More...
void | ShowOnScreenKeyboard (Window *parent, WidgetID button)
| Show the on-screen keyboard (osk) associated with a given textbox. More...
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. More...
bool | IsOSKOpenedFor (const Window *w, WidgetID button)
| Check whether the OSK is opened for a specific editbox. More...

## Variables
std::string | _keyboard_opt [2]
| The number of characters has to be OSK_KEYBOARD_ENTRIES. More...
static char32_t | _keyboard [2][OSK_KEYBOARD_ENTRIES]
static byte | _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 NWidgetPart | _nested_osk_widgets []
static WindowDesc | _osk_desc (__FILE__, __LINE__, WDP_CENTER, nullptr, 0, 0, WC_OSK, WC_NONE, 0, std::begin(_nested_osk_widgets), std::end(_nested_osk_widgets))

## Detailed Description

The On Screen Keyboard GUI

Definition in 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,
|  | uint16_t | 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 225 of file osk_gui.cpp.

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 347 of file osk_gui.cpp.

References _keyboard_opt, GetString(), and OSK_KEYBOARD_ENTRIES.

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 424 of file osk_gui.cpp.

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

## ◆ 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 393 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 408 of file osk_gui.cpp.

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

## Variable Documentation

## ◆ _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 27 of file osk_gui.cpp.

Referenced by GetKeyboardLayout().

## ◆ _nested_osk_widgets

constexpr NWidgetPart _nested_osk_widgets[]
| staticconstexpr

Initial value:
= {
NWidget(WWT_CAPTION, COLOUR_GREY, WID_OSK_CAPTION), SetDataTip(STR_JUST_STRING, STR_NULL), SetTextStyle(TC_WHITE),
NWidget(WWT_PANEL, COLOUR_GREY),
NWidget(WWT_EDITBOX, COLOUR_GREY, WID_OSK_TEXT), SetMinimalSize(252, 12), SetPadding(2, 2, 2, 2),
EndContainer(),
NWidget(WWT_PANEL, COLOUR_GREY), SetPIP(5, 2, 3),
NWidgetFunction(MakeTopKeys), SetPadding(0, 3, 0, 3),
NWidgetFunction(MakeNumberKeys), SetPadding(0, 3, 0, 3),
NWidgetFunction(MakeQwertyKeys), SetPadding(0, 3, 0, 3),
NWidgetFunction(MakeAsdfgKeys), SetPadding(0, 3, 0, 3),
NWidgetFunction(MakeZxcvbKeys), SetPadding(0, 3, 0, 3),
NWidgetFunction(MakeSpacebarKeys), SetPadding(0, 3, 0, 3),
EndContainer(),
}

Definition at line 321 of file osk_gui.cpp.

MakeAsdfgKeys
static std::unique_ptr< NWidgetBase > MakeAsdfgKeys()
Construct the asdfg row keys.
Definition: osk_gui.cpp:283
MakeQwertyKeys
static std::unique_ptr< NWidgetBase > MakeQwertyKeys()
Construct the qwerty row keys.
Definition: osk_gui.cpp:270
MakeZxcvbKeys
static std::unique_ptr< NWidgetBase > MakeZxcvbKeys()
Construct the zxcvb row keys.
Definition: osk_gui.cpp:295
WWT_CAPTION
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition: widget_type.h:63
EndContainer
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:1151
MakeNumberKeys
static std::unique_ptr< NWidgetBase > MakeNumberKeys()
Construct the row containing the digit keys.
Definition: osk_gui.cpp:259
NWidgetFunction
constexpr NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr)
Obtain a nested widget (sub)tree from an external source.
Definition: widget_type.h:1279
MakeSpacebarKeys
static std::unique_ptr< NWidgetBase > MakeSpacebarKeys()
Construct the spacebar row keys.
Definition: osk_gui.cpp:308
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:1188
WWT_EDITBOX
@ WWT_EDITBOX
a textbox for typing
Definition: widget_type.h:73
NWidget
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1258
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:1220
WID_OSK_TEXT
@ WID_OSK_TEXT
Edit box.
Definition: osk_widget.h:16
WWT_PANEL
@ WWT_PANEL
Simple depressed panel.
Definition: widget_type.h:52
WID_OSK_CAPTION
@ WID_OSK_CAPTION
Caption of window.
Definition: osk_widget.h:15
SetMinimalSize
constexpr NWidgetPart SetMinimalSize(int16_t x, int16_t y)
Widget part function for setting the minimal size.
Definition: widget_type.h:1097
SetDataTip
constexpr NWidgetPart SetDataTip(uint32_t data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1162
MakeTopKeys
static std::unique_ptr< NWidgetBase > MakeTopKeys()
Construct the top row keys (cancel, ok, backspace).
Definition: osk_gui.cpp:248
SetTextStyle
constexpr NWidgetPart SetTextStyle(TextColour colour, FontSize size=FS_NORMAL)
Widget part function for setting the text style.
Definition: widget_type.h:1120