OpenTTD
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. More...
 
static NWidgetBaseMakeTopKeys (int *biggest_index)
 Construct the top row keys (cancel, ok, backspace). More...
 
static NWidgetBaseMakeNumberKeys (int *biggest_index)
 Construct the row containing the digit keys. More...
 
static NWidgetBaseMakeQwertyKeys (int *biggest_index)
 Construct the qwerty row keys. More...
 
static NWidgetBaseMakeAsdfgKeys (int *biggest_index)
 Construct the asdfg row keys. More...
 
static NWidgetBaseMakeZxcvbKeys (int *biggest_index)
 Construct the zxcvb row keys. More...
 
static NWidgetBaseMakeSpacebarKeys (int *biggest_index)
 Construct the spacebar row keys. More...
 
void GetKeyboardLayout ()
 Retrieve keyboard layout from language string or (if set) config file. More...
 
void ShowOnScreenKeyboard (Window *parent, int button)
 Show the on-screen keyboard (osk) associated with a given textbox. More...
 
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. More...
 
bool IsOSKOpenedFor (const Window *w, int button)
 Check whether the OSK is opened for a specific editbox. More...
 

Variables

char _keyboard_opt [2][OSK_KEYBOARD_ENTRIES *4+1]
 The number of characters has to be OSK_KEYBOARD_ENTRIES. More...
 
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

◆ AddKey()

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
horRow container to add key widget to.
heightHeight of the key (all keys in a row should have equal height).
num_halfNumber of 1/2 key widths that this key has.
widtypeWidget type of the key. Must be either NWID_SPACER for an invisible key, or a WWT_* widget.
widnumWidget number of the key.
widdataData value of the key widget.
biggest_indexCollected 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.

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

References _keyboard_opt, OSK_KEYBOARD_ENTRIES, and StrEmpty().

Referenced by ShowOnScreenKeyboard().

◆ IsOSKOpenedFor()

bool IsOSKOpenedFor ( const Window w,
int  button 
)

Check whether the OSK is opened for a specific editbox.

w Window to check for

Parameters
buttonEditbox 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.

Referenced by QueryString::GetMarkedText().

◆ MakeAsdfgKeys()

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_CAPS, and WWT_IMGBTN.

◆ MakeNumberKeys()

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.

◆ MakeQwertyKeys()

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, WID_OSK_SPECIAL, and WWT_PUSHIMGBTN.

◆ MakeSpacebarKeys()

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_SPACE, WWT_PUSHIMGBTN, and WWT_PUSHTXTBTN.

◆ MakeTopKeys()

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.

◆ MakeZxcvbKeys()

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, WID_OSK_SHIFT, and WWT_IMGBTN.

◆ ShowOnScreenKeyboard()

void ShowOnScreenKeyboard ( Window parent,
int  button 
)

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

Parameters
parentpointer to the Window where this keyboard originated from
buttonwidget number of parent's textbox

Definition at line 412 of file osk_gui.cpp.

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

Referenced by QueryString::GetMarkedText().

◆ UpdateOSKOriginalText()

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
parentwindow that just updated its orignal text
buttonwidget 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.

Referenced by QueryString::GetMarkedText().

Variable Documentation

◆ _keyboard_opt

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().

◆ _nested_osk_widgets

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),
NWidget(WWT_PANEL, COLOUR_GREY), SetPIP(5, 2, 3),
}
static NWidgetPart NWidgetFunction(NWidgetFunctionType *func_ptr)
Obtain a nested widget (sub)tree from an external source.
Definition: widget_type.h:1146
Caption of window.
Definition: osk_widget.h:17
static NWidgetBase * MakeNumberKeys(int *biggest_index)
Construct the row containing the digit keys.
Definition: osk_gui.cpp:264
a textbox for typing
Definition: widget_type.h:71
static NWidgetBase * MakeAsdfgKeys(int *biggest_index)
Construct the asdfg row keys.
Definition: osk_gui.cpp:290
static NWidgetPart SetPadding(uint8 top, uint8 right, uint8 bottom, uint8 left)
Widget part function for setting additional space around a widget.
Definition: widget_type.h:1046
static NWidgetPart SetDataTip(uint32 data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1014
static NWidgetPart SetMinimalSize(int16 x, int16 y)
Widget part function for setting the minimal size.
Definition: widget_type.h:947
Simple depressed panel.
Definition: widget_type.h:50
static NWidgetPart NWidget(WidgetType tp, Colours col, int16 idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1114
static NWidgetBase * MakeTopKeys(int *biggest_index)
Construct the top row keys (cancel, ok, backspace).
Definition: osk_gui.cpp:252
static NWidgetBase * MakeQwertyKeys(int *biggest_index)
Construct the qwerty row keys.
Definition: osk_gui.cpp:276
Window caption (window title between closebox and stickybox)
Definition: widget_type.h:61
static NWidgetBase * MakeZxcvbKeys(int *biggest_index)
Construct the zxcvb row keys.
Definition: osk_gui.cpp:303
static NWidgetBase * MakeSpacebarKeys(int *biggest_index)
Construct the spacebar row keys.
Definition: osk_gui.cpp:317
static NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME, WWT_INSET, or WWT_PANEL).
Definition: widget_type.h:999
Edit box.
Definition: osk_widget.h:18
static NWidgetPart SetPIP(uint8 pre, uint8 inter, uint8 post)
Widget part function for setting a pre/inter/post spaces.
Definition: widget_type.h:1076

Definition at line 331 of file osk_gui.cpp.