1 #ifndef user_interface_hh_INCLUDED 2 #define user_interface_hh_INCLUDED 3 4 #include "array_view.hh" 5 #include "hash_map.hh" 6 7 #include <functional> 8 9 namespace Kakoune 10 { 11 12 class String; 13 class DisplayBuffer; 14 class DisplayLine; 15 using DisplayLineList = Vector<DisplayLine, MemoryDomain::Display>; 16 struct DisplayCoord; 17 struct Face; 18 struct Key; 19 20 enum class MenuStyle 21 { 22 Prompt, 23 Search, 24 Inline 25 }; 26 27 enum class InfoStyle 28 { 29 Prompt, 30 Inline, 31 InlineAbove, 32 InlineBelow, 33 MenuDoc, 34 Modal 35 }; 36 37 enum class EventMode; 38 39 enum class CursorMode 40 { 41 Prompt, 42 Buffer, 43 }; 44 45 using OnKeyCallback = std::function<void(Key key)>; 46 47 class UserInterface 48 { 49 public: 50 virtual ~UserInterface() = default; 51 52 virtual bool is_ok() const = 0; 53 54 virtual void menu_show(ConstArrayView<DisplayLine> choices, 55 DisplayCoord anchor, Face fg, Face bg, 56 MenuStyle style) = 0; 57 virtual void menu_select(int selected) = 0; 58 virtual void menu_hide() = 0; 59 60 virtual void info_show(const DisplayLine& title, 61 const DisplayLineList& content, 62 DisplayCoord anchor, Face face, 63 InfoStyle style) = 0; 64 virtual void info_hide() = 0; 65 66 virtual void draw(const DisplayBuffer& display_buffer, 67 const Face& default_face, 68 const Face& padding_face) = 0; 69 70 virtual void draw_status(const DisplayLine& status_line, 71 const DisplayLine& mode_line, 72 const Face& default_face) = 0; 73 74 virtual DisplayCoord dimensions() = 0; 75 76 virtual void set_cursor(CursorMode mode, DisplayCoord coord) = 0; 77 78 virtual void refresh(bool force) = 0; 79 80 virtual void set_on_key(OnKeyCallback callback) = 0; 81 82 using Options = HashMap<String, String, MemoryDomain::Options>; 83 virtual void set_ui_options(const Options& options) = 0; 84 }; 85 86 } 87 88 #endif // user_interface_hh_INCLUDED 89