erebus

annotate src/console.h @ 42:b9294cd6b9dc

console input history with up/down
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 10 Jun 2014 16:15:08 +0300
parents 2e817711d0f6
children
rev   line source
nuclear@37 1 #ifndef CONSOLE_H_
nuclear@37 2 #define CONSOLE_H_
nuclear@37 3
nuclear@37 4 #include <vector>
nuclear@37 5 #include <list>
nuclear@37 6 #include <string>
nuclear@37 7 #include <functional>
nuclear@37 8 #include <drawtext.h>
nuclear@37 9
nuclear@37 10 #define INPUTQ_SIZE 64
nuclear@37 11
nuclear@37 12 class Console {
nuclear@37 13 private:
nuclear@37 14 bool visible;
nuclear@37 15 int nlines, ncolumns;
nuclear@37 16
nuclear@37 17 int inpq_front, inpq_back;
nuclear@37 18 int keybuf[INPUTQ_SIZE];
nuclear@37 19
nuclear@41 20 std::string prompt;
nuclear@37 21 std::string input; // current input line
nuclear@37 22 int cursor;
nuclear@41 23 int input_win; // first character to show in the input "window"
nuclear@37 24
nuclear@37 25 // input history
nuclear@37 26 int max_hist_lines;
nuclear@37 27 std::list<std::string> hist;
nuclear@42 28 bool hist_iter_valid;
nuclear@42 29 std::list<std::string>::const_reverse_iterator hist_iter;
nuclear@37 30
nuclear@37 31 // console output
nuclear@37 32 int max_output_lines;
nuclear@37 33 std::vector<std::string> output;
nuclear@37 34 bool echo;
nuclear@37 35
nuclear@37 36 std::function<void (const char*)> cmd_handler;
nuclear@37 37
nuclear@37 38 int font_size;
nuclear@37 39 dtx_font *font;
nuclear@37 40
nuclear@41 41 void set_cursor(int x);
nuclear@41 42 int get_cursor() const;
nuclear@41 43
nuclear@37 44 public:
nuclear@37 45 enum {
nuclear@37 46 KEY_LEFT = 256,
nuclear@37 47 KEY_RIGHT,
nuclear@37 48 KEY_UP, KEY_DOWN,
nuclear@37 49 KEY_INS,
nuclear@37 50 KEY_DEL,
nuclear@37 51 KEY_HOME,
nuclear@37 52 KEY_END,
nuclear@37 53 KEY_PGUP,
nuclear@37 54 KEY_PGDOWN
nuclear@37 55 };
nuclear@37 56
nuclear@37 57 Console();
nuclear@37 58
nuclear@37 59 void set_font(dtx_font *font, int sz);
nuclear@37 60 void set_history_size(int hsz);
nuclear@37 61 void set_output_buffer_size(int sz);
nuclear@37 62 void set_command_func(std::function<void (const char*)> func);
nuclear@37 63
nuclear@37 64 void set_echo(bool echo);
nuclear@37 65 bool get_echo() const;
nuclear@37 66
nuclear@37 67 void show() { set_visible(true); }
nuclear@37 68 void hide() { set_visible(false); }
nuclear@37 69 void set_visible(bool v);
nuclear@37 70 bool is_visible() const;
nuclear@37 71
nuclear@37 72 void set_size(int lines, int columns = 80);
nuclear@37 73 int get_size_lines() const;
nuclear@37 74 int get_size_columns() const;
nuclear@37 75
nuclear@37 76 // update returns true if what it did makes a redraw necessary
nuclear@37 77 bool update();
nuclear@37 78 void draw() const;
nuclear@37 79
nuclear@37 80 void input_key(int key); // send a keystroke to the console
nuclear@37 81
nuclear@37 82 void putchar(char c);
nuclear@37 83 void puts(const char *str);
nuclear@37 84 void printf(const char *fmt, ...);
nuclear@37 85
nuclear@37 86 void debug();
nuclear@37 87 };
nuclear@37 88
nuclear@37 89 #endif // CONSOLE_H_