vrheights

annotate src/console.h @ 16:7f6d68d95c22

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