97 lines
2.8 KiB
C++
97 lines
2.8 KiB
C++
#include "ui/bar.h"
|
|
#include "io/sysio.h"
|
|
#include "main.h"
|
|
|
|
void Bar::render() {
|
|
Editor *editor = editors[current_editor];
|
|
uint32_t row = screen.row - 2;
|
|
uint32_t col = 0;
|
|
uint32_t width = screen.col;
|
|
uint32_t color = 0;
|
|
uint32_t black = 0x0b0e14;
|
|
uint32_t grey = 0x33363c;
|
|
uint32_t dark_grey = 0x24272d;
|
|
uint32_t name_color = 0xced4df;
|
|
uint32_t lang_color = editor->lang.color;
|
|
const char *symbol = " ";
|
|
const char *name = "EDITOR";
|
|
switch (mode) {
|
|
case NORMAL:
|
|
color = 0x82AAFF;
|
|
symbol = " ";
|
|
name = "NORMAL";
|
|
break;
|
|
case INSERT:
|
|
color = 0xFF8F40;
|
|
symbol = " ";
|
|
name = "INSERT";
|
|
break;
|
|
case SELECT:
|
|
color = 0x9ADE7A;
|
|
symbol = " ";
|
|
name = "SELECT";
|
|
break;
|
|
case RUNNER:
|
|
color = 0xFFD700;
|
|
symbol = " ";
|
|
name = "RUNNER";
|
|
break;
|
|
case JUMPER:
|
|
color = 0xF29CC3;
|
|
symbol = " ";
|
|
name = "JUMPER";
|
|
break;
|
|
}
|
|
update(row, col, " ", black, color, CF_BOLD);
|
|
update(row, ++col, symbol, black, color, CF_BOLD);
|
|
update(row, ++col, "\x1b", black, color, CF_BOLD);
|
|
update(row, ++col, " ", black, color, CF_BOLD);
|
|
for (uint32_t i = 0; i < 6; i++)
|
|
update(row, ++col, {name[i], 0}, black, color, CF_BOLD);
|
|
update(row, ++col, " ", black, color, CF_BOLD);
|
|
update(row, ++col, "◗", color, grey, CF_BOLD);
|
|
update(row, ++col, "◗", grey, dark_grey, CF_BOLD);
|
|
update(row, ++col, " ", name_color, dark_grey, CF_BOLD);
|
|
update(row, ++col, editor->lang.symbol, lang_color, dark_grey, 0);
|
|
update(row, ++col, "\x1b", lang_color, dark_grey, 0);
|
|
update(row, ++col, " ", name_color, dark_grey, CF_BOLD);
|
|
std::string filename = filename_from_path(editor->filename);
|
|
for (uint32_t i = 0; i < filename.length(); i++)
|
|
update(row, ++col, {filename[i], 0}, name_color, dark_grey, CF_BOLD);
|
|
update(row, ++col, " ", name_color, dark_grey, CF_BOLD);
|
|
update(row, ++col, "◗", dark_grey, 1, CF_BOLD);
|
|
}
|
|
|
|
void Bar::handle(KeyEvent event) {
|
|
if (event.key_type == KEY_CHAR && event.len == 1) {
|
|
if (event.c[0] == 0x1B) {
|
|
mode = NORMAL;
|
|
} else if (event.c[0] == '\n' || event.c[0] == '\r') {
|
|
// execute command while stripping starting `[:;]`
|
|
mode = NORMAL;
|
|
command = "";
|
|
} else if (isprint((unsigned char)(event.c[0]))) {
|
|
} else if (event.c[0] == 0x7F || event.c[0] == 0x08) { // backspace
|
|
}
|
|
} else if (event.key_type == KEY_SPECIAL) {
|
|
switch (event.special_key) {
|
|
case KEY_LEFT:
|
|
if (command.length() > 0)
|
|
cursor--;
|
|
break;
|
|
case KEY_RIGHT:
|
|
if (cursor < command.length())
|
|
cursor++;
|
|
break;
|
|
case KEY_UP:
|
|
// TODO: history
|
|
break;
|
|
case KEY_DOWN:
|
|
// TODO: history
|
|
break;
|
|
}
|
|
} else if (event.key_type == KEY_PASTE) {
|
|
} else if (event.key_type == KEY_MOUSE) {
|
|
}
|
|
}
|