OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

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 "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 (NWidgetHorizontal *hor, int height, int num_half, WidgetType widtype, int widnum, uint16 widdata, int *biggest_index)
| Add a key widget to a row of the keyboard.
static NWidgetBase * | MakeTopKeys (int *biggest_index)
| Construct the top row keys (cancel, ok, backspace).
static NWidgetBase * | MakeNumberKeys (int *biggest_index)
| Construct the row containing the digit keys.
static NWidgetBase * | MakeQwertyKeys (int *biggest_index)
| Construct the qwerty row keys.
static NWidgetBase * | MakeAsdfgKeys (int *biggest_index)
| Construct the asdfg row keys.
static NWidgetBase * | MakeZxcvbKeys (int *biggest_index)
| Construct the zxcvb row keys.
static NWidgetBase * | MakeSpacebarKeys (int *biggest_index)
| Construct the spacebar row keys.
void | GetKeyboardLayout ()
| Retrieve keyboard layout from language string or (if set) config file.
void | ShowOnScreenKeyboard (Window *parent, int button)
| Show the on-screen keyboard (osk) associated with a given textbox.
void | UpdateOSKOriginalText (const Window *parent, int 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, int button)
| Check whether the OSK is opened for a specific editbox.

## Variables
char | _keyboard_opt [2][OSK_KEYBOARD_ENTRIES *4+1]
| The number of characters has to be OSK_KEYBOARD_ENTRIES.
static WChar | _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 NWidgetPart | _nested_osk_widgets []
static WindowDesc | _osk_desc (WDP_CENTER,"query_osk", 0, 0, WC_OSK, WC_NONE, 0, _nested_osk_widgets, lengthof(_nested_osk_widgets))

## Detailed Description

The On Screen Keyboard GUI.

Definition in file osk_gui.cpp.

## Function Documentation

static void AddKey | ( | NWidgetHorizontal * | hor,
|  | int | height,
|  | int | num_half,
|  | WidgetType | widtype,
|  | int | widnum,
|  | uint16 | widdata,
|  | int * | biggest_index
| ) |  |
| static

Add a key widget to a row of the keyboard.

Parameters

  hor | Row container to add key widget to.
  height | Height of the key (all keys in a row should have equal height).
  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.
  biggest_index | Collected biggest widget index so far.

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

Definition at line 230 of file osk_gui.cpp.

References NWidgetContainer::Add(), NWidgetContainer::IsEmpty(), max(), NWID_SPACER, and NWidgetResizeBase::SetMinimalSize().

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

void GetKeyboardLayout | ( |  | ) |

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

Also check for invalid characters.

Definition at line 357 of file osk_gui.cpp.

References _keyboard_opt, lastof, OSK_KEYBOARD_ENTRIES, ShowInfoF(), strecpy(), and StrEmpty().

Referenced by ShowOnScreenKeyboard().

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

Check whether the OSK is opened for a specific editbox.

w Window to check for

Parameters

  button | Editbox of w to check for

Returns
  true if the OSK is oppened for button.

Definition at line 444 of file osk_gui.cpp.

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

static NWidgetBase* MakeAsdfgKeys | ( | int * | biggest_index | ) |
| static

Construct the asdfg row keys.

Definition at line 290 of file osk_gui.cpp.

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

static NWidgetBase* MakeNumberKeys | ( | int * | biggest_index | ) |
| static

Construct the row containing the digit keys.

Definition at line 264 of file osk_gui.cpp.

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

static NWidgetBase* MakeQwertyKeys | ( | int * | biggest_index | ) |
| static

Construct the qwerty row keys.

Definition at line 276 of file osk_gui.cpp.

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

static NWidgetBase* MakeSpacebarKeys | ( | int * | biggest_index | ) |
| static

Construct the spacebar row keys.

Definition at line 317 of file osk_gui.cpp.

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

static NWidgetBase* MakeTopKeys | ( | int * | biggest_index | ) |
| static

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

Definition at line 252 of file osk_gui.cpp.

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

static NWidgetBase* MakeZxcvbKeys | ( | int * | biggest_index | ) |
| static

Construct the zxcvb row keys.

Definition at line 303 of file osk_gui.cpp.

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

void ShowOnScreenKeyboard | ( | Window * | parent,
|  | int | 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 412 of file osk_gui.cpp.

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

void UpdateOSKOriginalText | ( | const Window * | parent,
|  | int | 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 orignal text
  button | widget number of parent's textbox to update

Definition at line 427 of file osk_gui.cpp.

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

## Variable Documentation

char _keyboard_opt[2][OSK_KEYBOARD_ENTRIES *4+1]

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. Furthermore the string needs to be '\0'-terminated.

Definition at line 28 of file osk_gui.cpp.

Referenced by GetKeyboardLayout().

const NWidgetPart _nested_osk_widgets[]
| static

Initial value:
{
NWidget(WWT_CAPTION, COLOUR_GREY, WID_OSK_CAPTION), SetDataTip(STR_WHITE_STRING, STR_NULL),
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 331 of file osk_gui.cpp.