mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-10-01 01:26:06 -04:00
Send ASCII chars from USB serial to selected widget (#1708)
* Initial commit for keyboard emulation * Added on_keyboard to some widgets * TextEdit partly * Multi key send at once * Frequency control support * Fix encoder emulation * Add keyboard to geomap * More widgets
This commit is contained in:
parent
1b5125b0a8
commit
8761b9d7e0
@ -242,6 +242,18 @@ void EventDispatcher::emulateTouch(ui::TouchEvent event) {
|
|||||||
on_touch_event(event);
|
on_touch_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventDispatcher::emulateKeyboard(ui::KeyboardEvent event) {
|
||||||
|
on_keyboard_event(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EventDispatcher::on_keyboard_event(ui::KeyboardEvent event) {
|
||||||
|
// send the key to focused widget, or parent if not accepts it
|
||||||
|
auto target = context.focus_manager().focus_widget();
|
||||||
|
while ((target != nullptr) && !target->on_keyboard(event)) {
|
||||||
|
target = target->parent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EventDispatcher::on_touch_event(ui::TouchEvent event) {
|
void EventDispatcher::on_touch_event(ui::TouchEvent event) {
|
||||||
/* TODO: Capture widget receiving the Start event, send Move and
|
/* TODO: Capture widget receiving the Start event, send Move and
|
||||||
* End events to the same widget.
|
* End events to the same widget.
|
||||||
|
@ -87,6 +87,7 @@ class EventDispatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void emulateTouch(ui::TouchEvent event);
|
void emulateTouch(ui::TouchEvent event);
|
||||||
|
void emulateKeyboard(ui::KeyboardEvent event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Thread* thread_event_loop;
|
static Thread* thread_event_loop;
|
||||||
@ -113,6 +114,7 @@ class EventDispatcher {
|
|||||||
ui::Widget* captured_widget{nullptr};
|
ui::Widget* captured_widget{nullptr};
|
||||||
|
|
||||||
void on_touch_event(ui::TouchEvent event);
|
void on_touch_event(ui::TouchEvent event);
|
||||||
|
void on_keyboard_event(ui::KeyboardEvent event);
|
||||||
|
|
||||||
// void blink_timer();
|
// void blink_timer();
|
||||||
void handle_lcd_frame_sync();
|
void handle_lcd_frame_sync();
|
||||||
|
@ -171,12 +171,13 @@ static bool encoder_update(const uint8_t raw) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool encoder_read() {
|
static bool encoder_read() {
|
||||||
const auto delta = encoder.update(
|
auto delta = encoder.update(encoder_debounce[0].state(), encoder_debounce[1].state());
|
||||||
encoder_debounce[0].state() | (injected_encoder == 1),
|
|
||||||
encoder_debounce[1].state() | (injected_encoder == 2));
|
|
||||||
|
|
||||||
if (injected_encoder > 0)
|
if (injected_encoder > 0) {
|
||||||
|
if (injected_encoder == 1) delta = -1;
|
||||||
|
if (injected_encoder == 2) delta = 1;
|
||||||
injected_encoder = 0;
|
injected_encoder = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (delta != 0) {
|
if (delta != 0) {
|
||||||
encoder_position += delta;
|
encoder_position += delta;
|
||||||
|
@ -92,6 +92,28 @@ void FreqManUIList::on_blur() {
|
|||||||
set_dirty();
|
set_dirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FreqManUIList::on_keyboard(const KeyboardEvent key) {
|
||||||
|
if (!db_ || db_->empty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
auto delta = 0;
|
||||||
|
if (key == '-' && get_index() > 0) delta = -1;
|
||||||
|
if (key == '+' && get_index() < db_->entry_count() - 1) delta = 1;
|
||||||
|
if (delta != 0) {
|
||||||
|
adjust_selected_index(delta);
|
||||||
|
set_dirty();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (key == 10) {
|
||||||
|
if (on_select) {
|
||||||
|
on_select(get_index());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool FreqManUIList::on_key(const KeyEvent key) {
|
bool FreqManUIList::on_key(const KeyEvent key) {
|
||||||
if (!db_ || db_->empty())
|
if (!db_ || db_->empty())
|
||||||
return false;
|
return false;
|
||||||
|
@ -50,6 +50,8 @@ class FreqManUIList : public Widget {
|
|||||||
void on_blur() override;
|
void on_blur() override;
|
||||||
bool on_key(const KeyEvent key) override;
|
bool on_key(const KeyEvent key) override;
|
||||||
bool on_encoder(EncoderEvent delta) override;
|
bool on_encoder(EncoderEvent delta) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
void set_parent_rect(Rect new_parent_rect) override;
|
void set_parent_rect(Rect new_parent_rect) override;
|
||||||
|
|
||||||
void set_index(size_t index);
|
void set_index(size_t index);
|
||||||
|
@ -293,6 +293,13 @@ void GeoMap::paint(Painter& painter) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GeoMap::on_keyboard(KeyboardEvent key) {
|
||||||
|
if (key == '+' || key == ' ') return on_encoder(1);
|
||||||
|
if (key == '-') return on_encoder(-1);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool GeoMap::on_touch(const TouchEvent event) {
|
bool GeoMap::on_touch(const TouchEvent event) {
|
||||||
if ((event.type == TouchEvent::Type::Start) && (mode_ == PROMPT)) {
|
if ((event.type == TouchEvent::Type::Start) && (mode_ == PROMPT)) {
|
||||||
set_highlighted(true);
|
set_highlighted(true);
|
||||||
|
@ -162,6 +162,7 @@ class GeoMap : public Widget {
|
|||||||
|
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
bool on_encoder(const EncoderEvent delta) override;
|
bool on_encoder(const EncoderEvent delta) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
bool init();
|
bool init();
|
||||||
void set_mode(GeoMapMode mode);
|
void set_mode(GeoMapMode mode);
|
||||||
|
@ -269,6 +269,19 @@ bool MenuView::on_key(const KeyEvent key) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MenuView::on_keyboard(const KeyboardEvent key) {
|
||||||
|
if (key == '-') return set_highlighted(highlighted_item - 1);
|
||||||
|
if (key == '+') return set_highlighted(highlighted_item + 1);
|
||||||
|
if (key == 10) {
|
||||||
|
if (menu_items[highlighted_item].on_select) {
|
||||||
|
menu_items[highlighted_item].on_select(KeyEvent::Right);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool MenuView::on_encoder(const EncoderEvent event) {
|
bool MenuView::on_encoder(const EncoderEvent event) {
|
||||||
set_highlighted(highlighted_item + event);
|
set_highlighted(highlighted_item + event);
|
||||||
return true;
|
return true;
|
||||||
|
@ -97,6 +97,7 @@ class MenuView : public View {
|
|||||||
void on_blur() override;
|
void on_blur() override;
|
||||||
bool on_key(const KeyEvent event) override;
|
bool on_key(const KeyEvent event) override;
|
||||||
bool on_encoder(const EncoderEvent event) override;
|
bool on_encoder(const EncoderEvent event) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void update_items();
|
void update_items();
|
||||||
|
@ -165,12 +165,18 @@ bool FrequencyField::on_key(KeyEvent event) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FrequencyField::on_keyboard(KeyboardEvent key) {
|
||||||
|
if (key == '+' || key == ' ') return on_encoder(1);
|
||||||
|
if (key == '-') return on_encoder(-1);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool FrequencyField::on_encoder(const EncoderEvent delta) {
|
bool FrequencyField::on_encoder(const EncoderEvent delta) {
|
||||||
if (digit_mode_)
|
if (digit_mode_)
|
||||||
set_value(value_ + (delta * digit_step()));
|
set_value(value_ + (delta * digit_step()));
|
||||||
else
|
else
|
||||||
set_value(value_ + (delta * step_));
|
set_value(value_ + (delta * step_));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,6 +327,25 @@ void FrequencyKeypadView::on_button(Button& button) {
|
|||||||
update_text();
|
update_text();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FrequencyKeypadView::on_keyboard(const KeyboardEvent key) {
|
||||||
|
if (key == 8) {
|
||||||
|
digit_delete();
|
||||||
|
update_text();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (key >= '0' && key <= '9') {
|
||||||
|
digit_add(key);
|
||||||
|
update_text();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (key == '.') {
|
||||||
|
field_toggle();
|
||||||
|
update_text();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void FrequencyKeypadView::digit_add(const char c) {
|
void FrequencyKeypadView::digit_add(const char c) {
|
||||||
if (state == State::DigitMHz) {
|
if (state == State::DigitMHz) {
|
||||||
if (clear_field_if_digits_entered) {
|
if (clear_field_if_digits_entered) {
|
||||||
|
@ -61,6 +61,7 @@ class FrequencyField : public Widget {
|
|||||||
|
|
||||||
bool on_key(KeyEvent event) override;
|
bool on_key(KeyEvent event) override;
|
||||||
bool on_encoder(EncoderEvent delta) override;
|
bool on_encoder(EncoderEvent delta) override;
|
||||||
|
bool on_keyboard(KeyboardEvent key) override;
|
||||||
bool on_touch(TouchEvent event) override;
|
bool on_touch(TouchEvent event) override;
|
||||||
void on_focus() override;
|
void on_focus() override;
|
||||||
void on_blur() override;
|
void on_blur() override;
|
||||||
@ -202,6 +203,7 @@ class FrequencyKeypadView : public View {
|
|||||||
rf::Frequency value() const;
|
rf::Frequency value() const;
|
||||||
void set_value(const rf::Frequency new_value);
|
void set_value(const rf::Frequency new_value);
|
||||||
bool on_encoder(const EncoderEvent delta) override;
|
bool on_encoder(const EncoderEvent delta) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent key) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int16_t focused_button = 0;
|
int16_t focused_button = 0;
|
||||||
|
@ -365,6 +365,44 @@ static void cmd_touch(BaseSequentialStream* chp, int argc, char* argv[]) {
|
|||||||
chprintf(chp, "ok\r\n");
|
chprintf(chp, "ok\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// send ascii keys in 2 char hex representation. Can send multiple keys at once like: keyboard 414243 (this will be ABC)
|
||||||
|
static void cmd_keyboard(BaseSequentialStream* chp, int argc, char* argv[]) {
|
||||||
|
if (argc != 1) {
|
||||||
|
chprintf(chp, "usage: keyboard XX\r\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto evtd = getEventDispatcherInstance();
|
||||||
|
if (evtd == NULL) {
|
||||||
|
chprintf(chp, "error\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t data_string_len = strlen(argv[0]);
|
||||||
|
if (data_string_len % 2 != 0) {
|
||||||
|
chprintf(chp, "usage: keyboard XXXX\r\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < data_string_len; i++) {
|
||||||
|
char c = argv[0][i];
|
||||||
|
if ((c < '0' || c > '9') && (c < 'A' || c > 'F')) {
|
||||||
|
chprintf(chp, "usage: keyboard XX\r\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char buffer[3] = {0, 0, 0};
|
||||||
|
|
||||||
|
for (size_t i = 0; i < data_string_len / 2; i++) {
|
||||||
|
buffer[0] = argv[0][i * 2];
|
||||||
|
buffer[1] = argv[0][i * 2 + 1];
|
||||||
|
uint8_t chr = (uint8_t)strtol(buffer, NULL, 16);
|
||||||
|
evtd->emulateKeyboard(chr);
|
||||||
|
}
|
||||||
|
|
||||||
|
chprintf(chp, "ok\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
static void cmd_sd_list_dir(BaseSequentialStream* chp, int argc, char* argv[]) {
|
static void cmd_sd_list_dir(BaseSequentialStream* chp, int argc, char* argv[]) {
|
||||||
if (argc != 1) {
|
if (argc != 1) {
|
||||||
chprintf(chp, "usage: ls /\r\n");
|
chprintf(chp, "usage: ls /\r\n");
|
||||||
@ -866,6 +904,7 @@ static const ShellCommand commands[] = {
|
|||||||
{"read_memory", cmd_read_memory},
|
{"read_memory", cmd_read_memory},
|
||||||
{"button", cmd_button},
|
{"button", cmd_button},
|
||||||
{"touch", cmd_touch},
|
{"touch", cmd_touch},
|
||||||
|
{"keyboard", cmd_keyboard},
|
||||||
{"ls", cmd_sd_list_dir},
|
{"ls", cmd_sd_list_dir},
|
||||||
{"rm", cmd_sd_delete},
|
{"rm", cmd_sd_delete},
|
||||||
{"open", cmd_sd_open},
|
{"open", cmd_sd_open},
|
||||||
|
@ -371,6 +371,7 @@ enum class KeyEvent : uint8_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
using EncoderEvent = int32_t;
|
using EncoderEvent = int32_t;
|
||||||
|
using KeyboardEvent = uint8_t;
|
||||||
|
|
||||||
struct TouchEvent {
|
struct TouchEvent {
|
||||||
enum class Type : uint32_t {
|
enum class Type : uint32_t {
|
||||||
|
@ -172,6 +172,10 @@ bool Widget::on_touch(const TouchEvent event) {
|
|||||||
(void)event;
|
(void)event;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
bool Widget::on_keyboard(const KeyboardEvent event) {
|
||||||
|
(void)event;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const std::vector<Widget*>& Widget::children() const {
|
const std::vector<Widget*>& Widget::children() const {
|
||||||
return no_children;
|
return no_children;
|
||||||
@ -853,6 +857,11 @@ bool Checkbox::on_key(const KeyEvent key) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Checkbox::on_keyboard(const KeyboardEvent event) {
|
||||||
|
if (event == 10 || event == 32) return set_value(not value_);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool Checkbox::on_touch(const TouchEvent event) {
|
bool Checkbox::on_touch(const TouchEvent event) {
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case TouchEvent::Type::Start:
|
case TouchEvent::Type::Start:
|
||||||
@ -944,6 +953,16 @@ bool Button::on_key(const KeyEvent key) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Button::on_keyboard(const KeyboardEvent event) {
|
||||||
|
if (event == 10 || event == 32) {
|
||||||
|
if (on_select) {
|
||||||
|
on_select(*this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool Button::on_touch(const TouchEvent event) {
|
bool Button::on_touch(const TouchEvent event) {
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case TouchEvent::Type::Start:
|
case TouchEvent::Type::Start:
|
||||||
@ -1080,6 +1099,16 @@ bool ButtonWithEncoder::on_key(const KeyEvent key) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ButtonWithEncoder::on_keyboard(const KeyboardEvent key) {
|
||||||
|
if (key == 32 || key == 10) {
|
||||||
|
if (on_select) {
|
||||||
|
on_select(*this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool ButtonWithEncoder::on_touch(const TouchEvent event) {
|
bool ButtonWithEncoder::on_touch(const TouchEvent event) {
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case TouchEvent::Type::Start:
|
case TouchEvent::Type::Start:
|
||||||
@ -1274,6 +1303,16 @@ bool NewButton::on_key(const KeyEvent key) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NewButton::on_keyboard(const KeyboardEvent key) {
|
||||||
|
if (key == 32 || key == 10) {
|
||||||
|
if (on_select) {
|
||||||
|
on_select();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool NewButton::on_touch(const TouchEvent event) {
|
bool NewButton::on_touch(const TouchEvent event) {
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case TouchEvent::Type::Start:
|
case TouchEvent::Type::Start:
|
||||||
@ -1371,6 +1410,16 @@ bool ImageButton::on_key(const KeyEvent key) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ImageButton::on_keyboard(const KeyboardEvent key) {
|
||||||
|
if (key == 32 || key == 10) {
|
||||||
|
if (on_select) {
|
||||||
|
on_select(*this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool ImageButton::on_touch(const TouchEvent event) {
|
bool ImageButton::on_touch(const TouchEvent event) {
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case TouchEvent::Type::Start:
|
case TouchEvent::Type::Start:
|
||||||
@ -1537,6 +1586,12 @@ bool ImageOptionsField::on_encoder(const EncoderEvent delta) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ImageOptionsField::on_keyboard(const KeyboardEvent key) {
|
||||||
|
if (key == '+' || key == ' ' || key == 10) return on_encoder(1);
|
||||||
|
if (key == '-' || key == 8) return on_encoder(-1);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool ImageOptionsField::on_touch(const TouchEvent event) {
|
bool ImageOptionsField::on_touch(const TouchEvent event) {
|
||||||
if (event.type == TouchEvent::Type::Start) {
|
if (event.type == TouchEvent::Type::Start) {
|
||||||
focus();
|
focus();
|
||||||
@ -1653,6 +1708,11 @@ bool OptionsField::on_encoder(const EncoderEvent delta) {
|
|||||||
set_selected_index(new_value);
|
set_selected_index(new_value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
bool OptionsField::on_keyboard(const KeyboardEvent key) {
|
||||||
|
if (key == '+' || key == ' ' || key == 10) return on_encoder(1);
|
||||||
|
if (key == '-' || key == 8) return on_encoder(-1);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool OptionsField::on_touch(const TouchEvent event) {
|
bool OptionsField::on_touch(const TouchEvent event) {
|
||||||
if (event.type == TouchEvent::Type::Start) {
|
if (event.type == TouchEvent::Type::Start) {
|
||||||
@ -1772,6 +1832,19 @@ bool TextEdit::on_key(const KeyEvent key) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TextEdit::on_keyboard(const KeyboardEvent key) {
|
||||||
|
// if ascii printable
|
||||||
|
if (key >= 0x20 && key <= 0x7e) {
|
||||||
|
char_add(key);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (key == 8) {
|
||||||
|
char_delete();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool TextEdit::on_encoder(const EncoderEvent delta) {
|
bool TextEdit::on_encoder(const EncoderEvent delta) {
|
||||||
int32_t new_pos = cursor_pos_ + delta;
|
int32_t new_pos = cursor_pos_ + delta;
|
||||||
|
|
||||||
@ -1928,6 +2001,22 @@ bool NumberField::on_encoder(const EncoderEvent delta) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NumberField::on_keyboard(const KeyboardEvent key) {
|
||||||
|
if (key == 10) {
|
||||||
|
if (on_select) {
|
||||||
|
on_select(*this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (key == '+' || key == ' ') {
|
||||||
|
return on_encoder(1);
|
||||||
|
}
|
||||||
|
if (key == '-' || key == 8) {
|
||||||
|
return on_encoder(-1);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool NumberField::on_touch(const TouchEvent event) {
|
bool NumberField::on_touch(const TouchEvent event) {
|
||||||
if (event.type == TouchEvent::Type::Start) {
|
if (event.type == TouchEvent::Type::Start) {
|
||||||
focus();
|
focus();
|
||||||
|
@ -101,6 +101,7 @@ class Widget {
|
|||||||
virtual bool on_key(const KeyEvent event);
|
virtual bool on_key(const KeyEvent event);
|
||||||
virtual bool on_encoder(const EncoderEvent event);
|
virtual bool on_encoder(const EncoderEvent event);
|
||||||
virtual bool on_touch(const TouchEvent event);
|
virtual bool on_touch(const TouchEvent event);
|
||||||
|
virtual bool on_keyboard(const KeyboardEvent event);
|
||||||
virtual const std::vector<Widget*>& children() const;
|
virtual const std::vector<Widget*>& children() const;
|
||||||
|
|
||||||
virtual Context& context() const;
|
virtual Context& context() const;
|
||||||
@ -382,6 +383,7 @@ class Checkbox : public Widget {
|
|||||||
void paint(Painter& painter) override;
|
void paint(Painter& painter) override;
|
||||||
|
|
||||||
bool on_key(const KeyEvent key) override;
|
bool on_key(const KeyEvent key) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent key) override;
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -418,6 +420,7 @@ class Button : public Widget {
|
|||||||
void on_focus() override;
|
void on_focus() override;
|
||||||
bool on_key(const KeyEvent key) override;
|
bool on_key(const KeyEvent key) override;
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string text_;
|
std::string text_;
|
||||||
@ -456,6 +459,7 @@ class ButtonWithEncoder : public Widget {
|
|||||||
bool on_key(const KeyEvent key) override;
|
bool on_key(const KeyEvent key) override;
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
bool on_encoder(const EncoderEvent delta) override;
|
bool on_encoder(const EncoderEvent delta) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string text_;
|
std::string text_;
|
||||||
@ -490,6 +494,7 @@ class NewButton : public Widget {
|
|||||||
void on_focus() override;
|
void on_focus() override;
|
||||||
bool on_key(const KeyEvent key) override;
|
bool on_key(const KeyEvent key) override;
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
void paint(Painter& painter) override;
|
void paint(Painter& painter) override;
|
||||||
|
|
||||||
@ -544,6 +549,7 @@ class ImageButton : public Image {
|
|||||||
|
|
||||||
bool on_key(const KeyEvent key) override;
|
bool on_key(const KeyEvent key) override;
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* A button that toggles between two images when set. */
|
/* A button that toggles between two images when set. */
|
||||||
@ -621,6 +627,7 @@ class ImageOptionsField : public Widget {
|
|||||||
void on_focus() override;
|
void on_focus() override;
|
||||||
bool on_encoder(const EncoderEvent delta) override;
|
bool on_encoder(const EncoderEvent delta) override;
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
options_t options;
|
options_t options;
|
||||||
@ -658,6 +665,7 @@ class OptionsField : public Widget {
|
|||||||
void on_focus() override;
|
void on_focus() override;
|
||||||
bool on_encoder(const EncoderEvent delta) override;
|
bool on_encoder(const EncoderEvent delta) override;
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t length_;
|
const size_t length_;
|
||||||
@ -702,6 +710,7 @@ class TextEdit : public Widget {
|
|||||||
bool on_key(const KeyEvent key) override;
|
bool on_key(const KeyEvent key) override;
|
||||||
bool on_encoder(const EncoderEvent delta) override;
|
bool on_encoder(const EncoderEvent delta) override;
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
void on_focus() override;
|
void on_focus() override;
|
||||||
void on_blur() override;
|
void on_blur() override;
|
||||||
@ -763,6 +772,7 @@ class NumberField : public Widget {
|
|||||||
bool on_key(const KeyEvent key) override;
|
bool on_key(const KeyEvent key) override;
|
||||||
bool on_encoder(const EncoderEvent delta) override;
|
bool on_encoder(const EncoderEvent delta) override;
|
||||||
bool on_touch(const TouchEvent event) override;
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
range_t range;
|
range_t range;
|
||||||
|
Loading…
Reference in New Issue
Block a user