Refactor the folder structure which only had 2 'real' modules, now it's more real, no need for splitting into folders beside the external one
This commit is contained in:
99
src/plugin_status_window.cpp
Normal file
99
src/plugin_status_window.cpp
Normal file
@@ -0,0 +1,99 @@
|
||||
WindowID StatusWindowID;
|
||||
|
||||
void InitStatusWindow() {
|
||||
Window *window = CreateWind();
|
||||
StatusWindowID = window->id;
|
||||
Buffer *buffer = CreateBuffer(SysAllocator, GetUniqueBufferName(ProjectFolder, "status_bar"));
|
||||
buffer->special = true;
|
||||
View *view = CreateView(buffer->id);
|
||||
view->special = true;
|
||||
window->active_view = view->id;
|
||||
window->draw_line_numbers = false;
|
||||
window->draw_scrollbar = false;
|
||||
window->draw_line_highlight = true;
|
||||
window->secondary_window_style = true;
|
||||
window->primary = false;
|
||||
window->jump_history = false;
|
||||
window->lose_focus_on_escape = true;
|
||||
}
|
||||
|
||||
void LayoutStatusWindow(Rect2I *rect, int16_t wx, int16_t wy) {
|
||||
Unused(wx); Unused(wy);
|
||||
Window *window = GetWindow(StatusWindowID);
|
||||
Rect2I copy_rect = *rect;
|
||||
if (!window->visible) {
|
||||
rect = ©_rect;
|
||||
}
|
||||
Int barsize = GetExpandingBarSize(window);
|
||||
window->document_rect = window->total_rect = CutBottom(rect, barsize);
|
||||
}
|
||||
|
||||
void UpdateStatusWindow() {
|
||||
ProfileFunction();
|
||||
Scratch scratch;
|
||||
BSet main = GetBSet(PrimaryWindowID);
|
||||
BSet title = GetBSet(StatusWindowID);
|
||||
title.view->scroll.y = 0;
|
||||
if (title.window->id == ActiveWindowID) {
|
||||
return;
|
||||
}
|
||||
|
||||
#if 0
|
||||
Vec2I doc_rect = GetSize(title.window->document_rect);
|
||||
Int width_in_chars = doc_rect.x / title.window->font->char_spacing;
|
||||
|
||||
char buff[1024];
|
||||
for (int i = 0; i < 1024; i += 1) buff[i] = ' ';
|
||||
|
||||
RawReplaceText(title.buffer, GetRange(title.buffer), u"");
|
||||
RawAppendf(title.buffer, "%.*s", width_in_chars - 1, buff);
|
||||
RawAppendf(title.buffer, "@");
|
||||
return;
|
||||
#endif
|
||||
|
||||
String16 buffer_string = GetString(title.buffer);
|
||||
Range replace_range = {0, title.buffer->len};
|
||||
Seek(buffer_string, u"\n", &replace_range.max);
|
||||
|
||||
Caret caret = main.view->carets[0];
|
||||
XY xy = PosToXY(main.buffer, GetFront(caret));
|
||||
|
||||
String indicators = "";
|
||||
if (main.buffer->dirty) {
|
||||
indicators = Format(scratch, "%S!", indicators);
|
||||
}
|
||||
if (SearchCaseSensitive) {
|
||||
indicators = Format(scratch, "%SC", indicators);
|
||||
}
|
||||
if (SearchWordBoundary) {
|
||||
indicators = Format(scratch, "%SW", indicators);
|
||||
}
|
||||
|
||||
String commands = Format(scratch, ":Errors[%d]", ErrorCount);
|
||||
if (main.buffer->changed_on_disk) {
|
||||
commands = Format(scratch, "%S :Reopen", commands);
|
||||
}
|
||||
For (ActiveProcesses) {
|
||||
if (it.args.output_view == main.view->id) {
|
||||
commands = Format(scratch, "%S :KillProcess", commands);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
String s = Format(scratch, "%S:%lld:%lld %S | :Prev :Next :Close %S", main.buffer->name, (long long)xy.line + 1ll, (long long)xy.col + 1ll, indicators, commands);
|
||||
For (ActiveProcesses) {
|
||||
if (it.args.output_view == main.view->id) {
|
||||
s = Format(scratch, "%S %lld :KillProcess", s, (long long)it.id);
|
||||
}
|
||||
}
|
||||
|
||||
String16 string = ToString16(scratch, s);
|
||||
String16 string_to_replace = GetString(title.buffer, replace_range);
|
||||
if (string_to_replace != string) {
|
||||
SelectRange(title.view, replace_range);
|
||||
ReplaceEx(scratch, title.view, string);
|
||||
}
|
||||
|
||||
SelectRange(title.view, MakeRange(0));
|
||||
ResetHistory(title.buffer);
|
||||
}
|
||||
Reference in New Issue
Block a user