summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2024-03-13 21:23:02 +0100
committerAldrik Ramaekers <aldrikboy@gmail.com>2024-03-13 21:23:02 +0100
commit470eeff5bd98207c463aeec308de6046bf3f6ac9 (patch)
treee3920d1b92c76fa261b423df2cb36846ba7582c6 /src/main.cpp
parente72c327a84d1937c05cc14a5e2ab232584e2cb9d (diff)
drag drop ui
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp247
1 files changed, 128 insertions, 119 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 4365f2a..4d28a3c 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -222,7 +222,7 @@ static int _ts_create_menu(int window_w, int window_h) {
ImGui::EndPopup();
}
- return menu_bar_h;
+ return menu_bar_h + 15;
}
void ts_init() {
@@ -405,100 +405,146 @@ void _ts_create_text_match_rows() {
_ts_create_file_error_rows();
}
-void ts_create_gui(int window_w, int window_h) {
- int window_pad = 50;
- int textbox_area_height = 80;
- int statusbar_area_height = 30;
- int result_area_height = window_h - textbox_area_height - statusbar_area_height - window_pad;
-
- ImGui::SetNextWindowSize({(float)window_w, (float)window_h});
- ImGui::SetNextWindowPos({0, 0});
-
+int _ts_create_textbox_area(int window_w, int window_h, int textbox_area_height, float pos_y)
+{
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(5, 5));
- ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0.f, 0.f));
- ImGui::Begin("text-search", NULL, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoScrollbar|
- ImGuiWindowFlags_MenuBar);
- ImGui::PopStyleVar();
- int menu_bar_h = _ts_create_menu(window_w, window_h);
+ float offset = 15.0f;
+ float separator_w = 10.0f;
+ float frame_w = window_w/2.5f - offset - separator_w/2.0f;
+ ImGui::SetNextWindowPos({offset, pos_y});
+ ImGui::BeginChild("search-boxes", ImVec2((float)frame_w, (float)textbox_area_height), false);
+ {
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
+ ImGui::PushItemWidth(-1);
+
+ bool dir_exists = ts_platform_dir_exists(path_buffer);
+ if (!dir_exists) ImGui::PushStyleColor(ImGuiCol_Border, ImGui::Spectrum::Color(0xCC2222));
+ ImGui::InputTextWithHint("path-ti", "Path", path_buffer, MAX_INPUT_LENGTH);
+ if (!dir_exists) ImGui::PopStyleColor();
+ ImGui::PopItemWidth();
+ ImGui::SetItemTooltip("Absolute path to directory to search");
+
+ ImGui::PushItemWidth(-1);
+ if (ImGui::InputTextWithHint("query", "Query", query_buffer, MAX_INPUT_LENGTH, ImGuiInputTextFlags_CallbackEdit|ImGuiInputTextFlags_EnterReturnsTrue, _tb_query_input_cb)) {
+ ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size, respect_capitalization);
+ }
+ ImGui::PopItemWidth();
+ ImGui::SetItemTooltip("Text to search within files, supports '*' & '?' wildcards");
+ ImGui::PopStyleVar();
+ }
+ ImGui::EndChild();
- float pos_y = 0;
- pos_y += menu_bar_h + 15.0f;
+ ImGui::SetNextWindowPos({offset + frame_w + separator_w, pos_y});
+ ImGui::BeginChild("search-boxes2", ImVec2((float)frame_w, (float)textbox_area_height), false);
+ {
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
+ if (ImGui::ImageButton("Folder", (void*)(intptr_t)img_folder.id, ImVec2(18.0f, 18.0f))) {
+ ifd::FileDialog::Instance().Open("FolderSelectDialog", "Select a directory", "");
+ }
+ if (ifd::FileDialog::Instance().IsDone("FolderSelectDialog", window_w, window_h)) {
+ if (ifd::FileDialog::Instance().HasResult()) {
+ std::string res = ifd::FileDialog::Instance().GetResult().u8string();
+ snprintf(path_buffer, MAX_INPUT_LENGTH, "%s", res.c_str());
+ }
+ ifd::FileDialog::Instance().Close();
+ }
- { // Search boxes
- ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(5, 5));
+ ImGui::SameLine();
+ ImGui::PushItemWidth(-1);
+ if (ImGui::InputTextWithHint("filter-ti", "Filter", filter_buffer, MAX_INPUT_LENGTH, ImGuiInputTextFlags_EnterReturnsTrue)) {
+ ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size, respect_capitalization);
+ }
+ ImGui::PopItemWidth();
+ ImGui::SetItemTooltip("Files to filter, supports '*' & '?' wildcards");
+ ImGui::PopStyleVar();
- float offset = 15.0f;
- float separator_w = 10.0f;
- float frame_w = window_w/2.5f - offset - separator_w/2.0f;
- ImGui::SetNextWindowPos({offset, pos_y});
- ImGui::BeginChild("search-boxes", ImVec2((float)frame_w, (float)textbox_area_height), false);
- {
+ if (current_search_result && !current_search_result->search_completed) {
+ ImGui::Text("%c", "|/-\\"[(int)(ImGui::GetTime() / 0.05f) & 3]);
+ }
+ else {
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
- ImGui::PushItemWidth(-1);
-
- bool dir_exists = ts_platform_dir_exists(path_buffer);
- if (!dir_exists) ImGui::PushStyleColor(ImGuiCol_Border, ImGui::Spectrum::Color(0xCC2222));
- ImGui::InputTextWithHint("path-ti", "Path", path_buffer, MAX_INPUT_LENGTH);
- if (!dir_exists) ImGui::PopStyleColor();
- ImGui::PopItemWidth();
- ImGui::SetItemTooltip("Absolute path to directory to search");
-
- ImGui::PushItemWidth(-1);
- if (ImGui::InputTextWithHint("query", "Query", query_buffer, MAX_INPUT_LENGTH, ImGuiInputTextFlags_CallbackEdit|ImGuiInputTextFlags_EnterReturnsTrue, _tb_query_input_cb)) {
+ if (ImGui::ImageButton("Search", (void*)(intptr_t)img_search.id, ImVec2(18.0f, 18.0f))) {
ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size, respect_capitalization);
}
- ImGui::PopItemWidth();
- ImGui::SetItemTooltip("Text to search within files, supports '*' & '?' wildcards");
ImGui::PopStyleVar();
}
- ImGui::EndChild();
+
+ ImGui::SameLine();
+ ImGui::SetCursorPosX(36);
+ ImGui::ToggleButton("Aa", &respect_capitalization);
+ ImGui::SetItemTooltip("Match Case");
+ }
+ ImGui::EndChild();
- ImGui::SetNextWindowPos({offset + frame_w + separator_w, pos_y});
- ImGui::BeginChild("search-boxes2", ImVec2((float)frame_w, (float)textbox_area_height), false);
- {
- ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
- if (ImGui::ImageButton("Folder", (void*)(intptr_t)img_folder.id, ImVec2(18.0f, 18.0f))) {
- ifd::FileDialog::Instance().Open("FolderSelectDialog", "Select a directory", "");
- }
- if (ifd::FileDialog::Instance().IsDone("FolderSelectDialog", window_w, window_h)) {
- if (ifd::FileDialog::Instance().HasResult()) {
- std::string res = ifd::FileDialog::Instance().GetResult().u8string();
- snprintf(path_buffer, MAX_INPUT_LENGTH, "%s", res.c_str());
- }
- ifd::FileDialog::Instance().Close();
- }
+ ImGui::PopStyleVar();
- ImGui::SameLine();
- ImGui::PushItemWidth(-1);
- if (ImGui::InputTextWithHint("filter-ti", "Filter", filter_buffer, MAX_INPUT_LENGTH, ImGuiInputTextFlags_EnterReturnsTrue)) {
- ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size, respect_capitalization);
- }
- ImGui::PopItemWidth();
- ImGui::SetItemTooltip("Files to filter, supports '*' & '?' wildcards");
- ImGui::PopStyleVar();
+ return textbox_area_height + 7;
+}
- if (current_search_result && !current_search_result->search_completed) {
- ImGui::Text("%c", "|/-\\"[(int)(ImGui::GetTime() / 0.05f) & 3]);
- }
- else {
- ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
- if (ImGui::ImageButton("Search", (void*)(intptr_t)img_search.id, ImVec2(18.0f, 18.0f))) {
- ts_start_search(path_buffer, filter_buffer, query_buffer, ts_thread_count, max_file_size, respect_capitalization);
- }
- ImGui::PopStyleVar();
- }
-
- ImGui::SameLine();
- ImGui::SetCursorPosX(36);
- ImGui::ToggleButton("Aa", &respect_capitalization);
- ImGui::SetItemTooltip("Match Case");
- }
- ImGui::EndChild();
+void _ts_update_dragdrop() {
+ if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceExtern)) // we use an external source (i.e. not ImGui-created)
+ {
+ ImGui::SetDragDropPayload("FILES", nullptr, 0);
+ ImGui::EndDragDropSource();
+ }
- ImGui::PopStyleVar();
+ {
+ float img_size = 256.0f;
+ ImGui::Separator();
+ ImGui::SetCursorPosX((ImGui::GetWindowWidth() - img_size) / 2.0f);
+ ImGui::SetCursorPosY((ImGui::GetWindowHeight() - img_size) / 2.0f);
+ ImGui::Image((void*)(intptr_t)img_drop.id, {img_size, img_size}, ImVec2(0, 0), ImVec2(1, 1), ImVec4(1, 1, 1, 0.2f));
+ }
+}
+
+void _ts_create_statusbar(int window_w, int window_h, int statusbar_area_height, float pos_y) {
+ ImGui::SetNextWindowPos({0, pos_y});
+
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6, 6));
+ ImGui::BeginChild("search-statusbar", ImVec2((float)window_w, (float)statusbar_area_height), ImGuiChildFlags_None, ImGuiWindowFlags_None);
+ ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 7.0f);
+ ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 10.0f);
+ if (current_search_result) {
+ if (current_search_result->search_text) ImGui::Text("Found %d matches in %d files", current_search_result->match_count, current_search_result->file_count);
+ else ImGui::Text("Found %d files", current_search_result->files.length);
+ }
+ else ImGui::Text("No search completed");
+
+ ImGui::SameLine();
+
+ if (current_search_result) {
+ if (current_search_result->is_saving) {
+ ImGui::SetCursorPosX(window_w - 20.0f - ImGui::CalcTextSize("Saving |").x);
+ ImGui::Text("Saving %c", "|/-\\"[(int)(ImGui::GetTime() / 0.05f) & 3]);
+ }
+ else if (current_search_result->search_completed) {
+ ImGui::SetCursorPosX(window_w - 10.0f - ImGui::CalcTextSize("999.999s elapsed").x);
+ ImGui::Text("%.3fs elapsed", current_search_result->timestamp/1000.0f);
+ }
}
- pos_y += textbox_area_height + 7;
+ ImGui::EndChild();
+ ImGui::PopStyleVar();
+}
+
+void ts_create_gui(int window_w, int window_h) {
+ int window_pad = 50;
+ int textbox_area_height = 80;
+ int statusbar_area_height = 30;
+ float pos_y = 0;
+ int result_area_height = window_h - textbox_area_height - statusbar_area_height - window_pad;
+
+ ImGui::SetNextWindowSize({(float)window_w, (float)window_h});
+ ImGui::SetNextWindowPos({0, 0});
+
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(5, 5));
+ ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0.f, 0.f));
+ ImGui::Begin("text-search", NULL, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoScrollbar|
+ ImGuiWindowFlags_MenuBar);
+ ImGui::PopStyleVar();
+
+ pos_y += _ts_create_menu(window_w, window_h);
+ pos_y += _ts_create_textbox_area(window_w, window_h, textbox_area_height, pos_y);
if (dragdrop_data.did_drop) {
printf("Do loading..\n");
@@ -507,16 +553,7 @@ void ts_create_gui(int window_w, int window_h) {
if (dragdrop_data.is_dragging_file)
{
- if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceExtern)) // we use an external source (i.e. not ImGui-created)
- {
- ImGui::SetDragDropPayload("FILES", nullptr, 0);
- ImGui::BeginTooltip();
- ImGui::Text("Drop to load file");
- ImGui::EndTooltip();
- ImGui::EndDragDropSource();
- }
-
- ImGui::Text("Drag test");
+ _ts_update_dragdrop();
}
else if (current_search_result)
{ // Results
@@ -559,36 +596,8 @@ void ts_create_gui(int window_w, int window_h) {
}
pos_y += result_area_height;
- { // Statusbar
- ImGui::SetNextWindowPos({0, pos_y});
-
- ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6, 6));
- ImGui::BeginChild("search-statusbar", ImVec2((float)window_w, (float)statusbar_area_height), ImGuiChildFlags_None, ImGuiWindowFlags_None);
- ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 7.0f);
- ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 10.0f);
- if (current_search_result) {
- if (current_search_result->search_text) ImGui::Text("Found %d matches in %d files", current_search_result->match_count, current_search_result->file_count);
- else ImGui::Text("Found %d files", current_search_result->files.length);
- }
- else ImGui::Text("No search completed");
-
- ImGui::SameLine();
-
- if (current_search_result) {
- if (current_search_result->is_saving) {
- ImGui::SetCursorPosX(window_w - 20.0f - ImGui::CalcTextSize("Saving |").x);
- ImGui::Text("Saving %c", "|/-\\"[(int)(ImGui::GetTime() / 0.05f) & 3]);
- }
- else if (current_search_result->search_completed) {
- ImGui::SetCursorPosX(window_w - 10.0f - ImGui::CalcTextSize("999.999s elapsed").x);
- ImGui::Text("%.3fs elapsed", current_search_result->timestamp/1000.0f);
- }
- }
- ImGui::EndChild();
- ImGui::PopStyleVar();
- }
+ _ts_create_statusbar(window_w, window_h, statusbar_area_height, pos_y);
ImGui::PopStyleVar();
-
ImGui::End();
} \ No newline at end of file