#pragma once #include #include #include // TODO read from keymap file ... namespace gui { inline const std::vector special_chars = {'.', ',', '_', ':', ';', ')', '(', '?', '!', '/', '*', '+'}; } /// this element has one goal - nicely change input parsing which is done in application in it's widgets class InputMode { public: /// ! when adding modes please update next method and input_mode (in cpp file) enum Mode { digit, abc, ABC, phone, }; private: InputMode() = delete; // list of enabled input modes std::list input_mode_list = {}; uint32_t input_mode_list_pos = 0; std::function show_type_cb = nullptr; std::function show_special_char_selector = nullptr; Mode modeNow(); // text to restore when show_input_type was called (and overwritten some other text) UTF8 restore_text = ""; void show_input_type(); void show_restore(); public: InputMode(std::list mode_list, std::function show_type_cb = nullptr, std::function show_special_char_selector = nullptr, const UTF8 &prev_text = ""); void on_focus(bool focus) { if (focus) show_input_type(); else show_restore(); } void next(); const std::string &get(); void select_special_char(); };