rubidium@9179: /* $Id$ */ rubidium@9179: rubidium@9179: /** @file querystring_gui.h Base for the GUIs that have an edit box in them. */ rubidium@9179: rubidium@9179: #ifndef QUERYSTRING_GUI_H rubidium@9179: #define QUERYSTRING_GUI_H rubidium@9179: rubidium@9179: #include "textbuf_gui.h" rubidium@9179: #include "window_gui.h" rubidium@9179: rubidium@9897: /** glx@10295: * Return values for HandleEditBoxKey glx@10295: */ glx@10295: enum HandleEditBoxResult glx@10295: { glx@10295: HEBR_EDITING = 0, // Other key pressed. glx@10295: HEBR_CONFIRM, // Return or enter key pressed. glx@10295: HEBR_CANCEL, // Escape key pressed. glx@10295: }; glx@10295: glx@10295: /** rubidium@9897: * Data stored about a string that can be modified in the GUI rubidium@9897: */ rubidium@9179: struct QueryString { rubidium@9179: StringID caption; rubidium@9179: Textbuf text; rubidium@9179: const char *orig; rubidium@9179: CharSetFilter afilter; rubidium@9179: bool handled; rubidium@9179: rubidium@9897: /** rubidium@9897: * Make sure everything gets initialized properly. rubidium@9897: */ rubidium@9897: QueryString() : orig(NULL) rubidium@9897: { rubidium@9897: } rubidium@9897: rubidium@9897: /** rubidium@9897: * Make sure everything gets freed. rubidium@9897: */ rubidium@9897: ~QueryString() rubidium@9897: { rubidium@9897: free((void*)this->orig); rubidium@9897: } rubidium@9897: rubidium@9179: void DrawEditBox(Window *w, int wid); rubidium@9179: void HandleEditBox(Window *w, int wid); glx@10295: HandleEditBoxResult HandleEditBoxKey(Window *w, int wid, uint16 key, uint16 keycode, Window::EventState &state); rubidium@9179: }; rubidium@9179: rubidium@9179: struct QueryStringBaseWindow : public Window, public QueryString { rubidium@9897: char *edit_str_buf; rubidium@9897: char *orig_str_buf; smatz@10276: const uint16 edit_str_size; ///< maximum length of string (in bytes), including terminating '\0' rubidium@9179: rubidium@9916: QueryStringBaseWindow(uint16 size, const WindowDesc *desc, WindowNumber window_number = 0) : Window(desc, window_number), edit_str_size(size) rubidium@9179: { smatz@10276: assert(size != 0); rubidium@9897: this->edit_str_buf = CallocT(size); rubidium@9897: } rubidium@9897: rubidium@9897: ~QueryStringBaseWindow() rubidium@9897: { rubidium@9897: free(this->edit_str_buf); rubidium@9179: } rubidium@9179: rubidium@9179: void DrawEditBox(int wid); rubidium@9179: void HandleEditBox(int wid); rubidium@9285: int HandleEditBoxKey(int wid, uint16 key, uint16 keycode, EventState &state); rubidium@9179: }; rubidium@9179: rubidium@9179: void ShowOnScreenKeyboard(QueryStringBaseWindow *parent, int button, int cancel, int ok); rubidium@9179: rubidium@9179: #endif /* QUERYSTRING_GUI_H */