28 #include "table/strings.h"
32 static const uint ICON_HISTORY_SIZE = 20;
33 static const uint ICON_LINE_SPACING = 2;
34 static const uint ICON_RIGHT_BORDERWIDTH = 10;
35 static const uint ICON_BOTTOM_BORDERWIDTH = 12;
81 while (index != 0 && item != NULL) {
99 if (cur == NULL)
return false;
133 static char *_iconsole_history[ICON_HISTORY_SIZE];
134 static int _iconsole_historypos;
141 static void IConsoleClearCommand()
144 _iconsole_cmdline.
chars = _iconsole_cmdline.
bytes = 1;
145 _iconsole_cmdline.
pixels = 0;
151 static inline void IConsoleResetHistoryPos()
153 _iconsole_historypos = -1;
160 static const struct NWidgetPart _nested_console_window_widgets[] = {
168 _nested_console_window_widgets,
lengthof(_nested_console_window_widgets)
200 IConsoleWindow::scroll = Clamp<int>(IConsoleWindow::scroll + amount, 0, max_scroll);
206 const int right = this->
width - 5;
216 int delta = this->
width - this->line_offset - _iconsole_cmdline.
pixels - ICON_RIGHT_BORDERWIDTH;
227 if (_focused_window ==
this && _iconsole_cmdline.
caret) {
262 case WKC_SHIFT | WKC_PAGEDOWN:
263 this->
Scroll(-scroll_height);
266 case WKC_SHIFT | WKC_PAGEUP:
267 this->
Scroll(scroll_height);
270 case WKC_SHIFT | WKC_DOWN:
274 case WKC_SHIFT | WKC_UP:
282 case WKC_RETURN:
case WKC_NUM_ENTER: {
288 IConsoleClearCommand();
294 case WKC_CTRL | WKC_RETURN:
300 case (WKC_CTRL |
'L'):
306 IConsoleWindow::scroll = 0;
307 IConsoleResetHistoryPos();
317 virtual void InsertTextString(
int wid,
const char *str,
bool marked,
const char *caret,
const char *insert_location,
const char *replacement_end)
319 if (_iconsole_cmdline.
InsertString(str, marked, caret, insert_location, replacement_end)) {
320 IConsoleWindow::scroll = 0;
321 IConsoleResetHistoryPos();
328 return _iconsole_cmdline.
buf;
333 return _iconsole_cmdline.
buf + _iconsole_cmdline.
caretpos;
338 if (_iconsole_cmdline.
markend == 0)
return NULL;
341 return _iconsole_cmdline.
buf + _iconsole_cmdline.
markpos;
346 int delta =
min(this->
width - this->line_offset - _iconsole_cmdline.
pixels - ICON_RIGHT_BORDERWIDTH, 0);
354 int delta =
min(this->
width - this->line_offset - _iconsole_cmdline.
pixels - ICON_RIGHT_BORDERWIDTH, 0);
365 int delta =
min(this->
width - this->line_offset - _iconsole_cmdline.
pixels - ICON_RIGHT_BORDERWIDTH, 0);
367 if (!
IsInsideMM(pt.y, this->height - this->line_height, this->height))
return NULL;
383 int IConsoleWindow::scroll = 0;
385 void IConsoleGUIInit()
387 IConsoleResetHistoryPos();
391 memset(_iconsole_history, 0,
sizeof(_iconsole_history));
397 IConsoleClearCommand();
400 void IConsoleClearBuffer()
405 void IConsoleGUIFree()
407 IConsoleClearBuffer();
413 switch (_iconsole_mode) {
415 w->
height = _screen.height / 3;
416 w->
width = _screen.width;
419 w->
height = _screen.height - ICON_BOTTOM_BORDERWIDTH;
420 w->
width = _screen.width;
431 switch (_iconsole_mode) {
465 if (_iconsole_history[0] == NULL || strcmp(_iconsole_history[0], cmd) != 0) {
466 free(_iconsole_history[ICON_HISTORY_SIZE - 1]);
467 memmove(&_iconsole_history[1], &_iconsole_history[0],
sizeof(_iconsole_history[0]) * (ICON_HISTORY_SIZE - 1));
468 _iconsole_history[0] =
stredup(cmd);
472 IConsoleResetHistoryPos();
473 return _iconsole_history[0];
482 if (_iconsole_history[0] == NULL)
return;
483 _iconsole_historypos =
Clamp(_iconsole_historypos + direction, -1, ICON_HISTORY_SIZE - 1);
485 if (direction > 0 && _iconsole_history[_iconsole_historypos] == NULL) _iconsole_historypos--;
487 if (_iconsole_historypos == -1) {
490 _iconsole_cmdline.
Assign(_iconsole_history[_iconsole_historypos]);
522 c &= ~TC_IS_PALETTE_COLOUR;
523 for (uint i = COLOUR_BEGIN; i < COLOUR_END; i++) {