Simulant  21.12-1292
A portable game engine for Windows, OSX, Linux, Dreamcast, and PSP
keyboard.h
1 #pragma once
2 
3 #include "../../keycodes.h"
4 #include "simulant/nodes/stage_node.h"
5 #include "ui_config.h"
6 #include "widget.h"
7 
8 namespace smlt {
9 
10 class EventListener;
11 
12 namespace ui {
13 
17 class Frame;
18 class TextEntry;
19 
21  KeyboardCode code;
22  char16_t chr;
23 
24  bool cancelled = false;
25 
26  void cancel() {
27  cancelled = true;
28  }
29 };
30 
32 typedef sig::signal<void(const unicode&)> KeyboardDoneSignal;
33 typedef sig::signal<void()> KeyboardCancelledSignal;
34 
35 enum KeyboardMode {
36  KEYBOARD_MODE_UPPERCASE,
37  KEYBOARD_MODE_LOWERCASE,
38  KEYBOARD_MODE_NUMERICAL,
39  KEYBOARD_MODE_ACCENT_LOWERCASE,
40  KEYBOARD_MODE_ACCENT_UPPERCASE
41 };
42 
43 class KeyboardPanel;
44 
45 /* A keyboard is combined of a TextInput and a KeyboardPanel */
46 class Keyboard: public Widget {
47 
48  DEFINE_SIGNAL(KeyboardKeyPressedSignal, signal_key_pressed);
49  DEFINE_SIGNAL(KeyboardDoneSignal, signal_done);
50  DEFINE_SIGNAL(KeyboardCancelledSignal, signal_cancelled);
51 
52 public:
53  S_DEFINE_STAGE_NODE_META(STAGE_NODE_TYPE_WIDGET_KEYBOARD, "keyboard");
54 
55  S_DEFINE_STAGE_NODE_PARAM(Keyboard, "mode", int,
56  int(KEYBOARD_MODE_UPPERCASE),
57  "The mode of the keyboard");
58  S_DEFINE_CORE_WIDGET_PROPERTIES(Keyboard);
59 
60  using Widget::clean_up;
61  using Widget::init; // Pull in init to satisfy TwoPhaseConstructed<Keyboard>
62 
63  Keyboard(Scene* owner);
64  ~Keyboard();
65 
66  void cursor_up();
67  void cursor_down();
68  void cursor_right();
69  void cursor_left();
70  bool cursor_to_char(uint16_t displayed_char);
71  void cursor_to_return();
72  void cursor_to_case_toggle();
73  void cursor_to_backspace();
74  void cursor_to_ok();
75  void cursor_to_space();
76 
78  void activate();
79  void cancel();
80 
81  void set_mode(KeyboardMode mode);
82  KeyboardMode mode() const;
83 
84  bool is_keyboard_integration_enabled() const {
85  return bool(keyboard_listener_);
86  }
87 
88  void set_keyboard_integration_enabled(bool value);
89 
90  using Widget::set_font;
91 
92  void set_font(FontPtr font) override;
93 
94  TextEntry* entry() {
95  return entry_;
96  }
97 
98 private:
99  bool on_create(Params params) override;
100  void on_transformation_change_attempted() override;
101 
102  UIDim calculate_content_dimensions(Px text_width, Px text_height) override;
103 
104  KeyboardPanel* panel_ = nullptr;
105  TextEntry* entry_ = nullptr;
106  Frame* info_row_ = nullptr;
107 
108  Frame* main_frame_ = nullptr;
109 
110  std::shared_ptr<EventListener> keyboard_listener_;
111 
112  bool pre_set_text(const unicode& text) override;
113 
114  const unicode& calc_text() const override;
115 };
116 
117 } // namespace ui
118 
119 } // namespace smlt
smlt::ui::Keyboard
Definition: keyboard.h:46
smlt::ui::SoftKeyPressedEvent
Definition: keyboard.h:20
smlt::Params
Definition: params.h:44
smlt::ui::KeyboardPanel
Definition: keyboard.cpp:1021
smlt
Definition: animation.cpp:25
smlt::ui::Widget
Definition: widget.h:130
smlt::Scene
Definition: scene.h:94
smlt::ui::Keyboard::activate
void activate()
Definition: keyboard.cpp:1699
smlt::ui::Px
Definition: ui_config.h:42
smlt::ui::Frame
Definition: frame.h:29
unicode
Definition: unicode.h:36
smlt::ui::TextEntry
Definition: text_entry.h:11
smlt::ui::UIDim
Definition: ui_config.h:192
smlt::sig::signal
Definition: signal.h:330