diff options
| -rw-r--r-- | src/main.cpp | 107 | ||||
| -rw-r--r-- | src/main_windows.cpp | 2 | ||||
| -rw-r--r-- | src/search.cpp | 5 |
3 files changed, 77 insertions, 37 deletions
diff --git a/src/main.cpp b/src/main.cpp index 18c17c1..f50cd8e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -131,6 +131,66 @@ int _tb_query_input_cb(ImGuiInputTextCallbackData* data) { return 0; } +void _ts_ceate_file_match_rows() { + int itemcount = current_search_result == 0 ? 0 : current_search_result->files.length; + for (int item = 0; item < itemcount; item++) + { + ts_found_file *file = *(ts_found_file **)ts_array_at(¤t_search_result->files, item); + + char match_info_txt[20]; + snprintf(match_info_txt, 20, "#%d", item+1); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::TableHeader(match_info_txt); + + ImGui::TableNextColumn(); + ImGui::TableHeader(file->path); + + ImGui::TableNextColumn(); + ImGui::TableHeader(""); + } +} + +void _ts_create_text_match_rows() { + int itemcount = current_search_result == 0 ? 0 : current_search_result->matches.length; + ts_found_file* prev_file = nullptr; + for (int item = 0; item < itemcount; item++) + { + ts_file_match *file = (ts_file_match *)ts_array_at(¤t_search_result->matches, item); + + if (prev_file != file->file) { + prev_file = file->file; + char match_info_txt[20]; + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::TableHeader(""); + + ImGui::TableNextColumn(); + ImGui::TableHeader(file->file->path); + + ImGui::TableNextColumn(); + snprintf(match_info_txt, 20, "%d match(es)", file->file->match_count); + ImGui::TableHeader(match_info_txt); + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("#%d", item+1); + + ImGui::TableNextColumn(); + ImGui::Text("%.*s", file->word_match_offset, file->line_info); + ImGui::SameLine(0.0f, 0.0f); + ImGui::TextColored({255,0,0,255}, "%.*s", file->word_match_length, file->line_info + file->word_match_offset); + ImGui::SameLine(0.0f, 0.0f); + ImGui::TextUnformatted(file->line_info + file->word_match_offset + file->word_match_length); + + ImGui::TableNextColumn(); + ImGui::Text("line %d", file->line_nr); + } +} + void ts_create_gui(int window_w, int window_h) { static float f = 0.0f; static int counter = 0; @@ -219,42 +279,14 @@ void ts_create_gui(int window_w, int window_h) { ImGui::TableSetupColumn("Match", 0, line_w); ImGui::TableHeadersRow(); - int itemcount = current_search_result == 0 ? 0 : current_search_result->matches.length; - ts_found_file* prev_file = nullptr; - for (int item = 0; item < itemcount; item++) - { - ts_file_match *file = (ts_file_match *)ts_array_at(¤t_search_result->matches, item); - - if (prev_file != file->file) { - prev_file = file->file; - char match_info_txt[20]; - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::TableHeader(""); - - ImGui::TableNextColumn(); - ImGui::TableHeader(file->file->path); - - ImGui::TableNextColumn(); - snprintf(match_info_txt, 20, "%d match(es)", file->file->match_count); - ImGui::TableHeader(match_info_txt); - } - - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Text("#%d", item+1); - - ImGui::TableNextColumn(); - ImGui::Text("%.*s", file->word_match_offset, file->line_info); - ImGui::SameLine(0.0f, 0.0f); - ImGui::TextColored({255,0,0,255}, "%.*s", file->word_match_length, file->line_info + file->word_match_offset); - ImGui::SameLine(0.0f, 0.0f); - ImGui::TextUnformatted(file->line_info + file->word_match_offset + file->word_match_length); - - ImGui::TableNextColumn(); - ImGui::Text("line %d", file->line_nr); + if (current_search_result) { + if (current_search_result->search_text == nullptr) _ts_ceate_file_match_rows(); + else _ts_create_text_match_rows(); } + else { + // show info text. + } + ImGui::EndTable(); } } @@ -267,7 +299,10 @@ void ts_create_gui(int window_w, int window_h) { ImGui::BeginChild("search-statusbar", ImVec2(window_w, statusbar_area_height), ImGuiChildFlags_None, ImGuiWindowFlags_None); ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 7.0f); ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 10.0f); - if (current_search_result) ImGui::Text("Found %d matches in %d files", current_search_result->match_count, current_search_result->file_count); + 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(); diff --git a/src/main_windows.cpp b/src/main_windows.cpp index 229a055..5f6e1e9 100644 --- a/src/main_windows.cpp +++ b/src/main_windows.cpp @@ -224,7 +224,7 @@ ts_file_content ts_platform_read_file(char *path, const char *mode) else { result.file_error = FILE_ERROR_GENERIC; - printf("ERROR: %d\n", errno); + printf("ERROR: %d %s\n", errno, path); } goto done_failure; diff --git a/src/search.cpp b/src/search.cpp index 5be2b33..dc0534a 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -297,6 +297,7 @@ static void _ts_search_file(ts_found_file *ref, ts_file_content content, ts_sear static void *_ts_search_thread(void *args) { ts_search_result *new_result = (ts_search_result *)args; + if (new_result->search_text == nullptr) goto finish_early; keep_going:; while (new_result->file_list_read_cursor < new_result->files.length) @@ -376,6 +377,10 @@ void ts_start_search(utf8_int8_t *path, utf8_int8_t *filter, utf8_int8_t *query) snprintf(new_result->search_text, MAX_INPUT_LENGTH, "%s", query); new_result->filters = ts_get_filters(filter); + if (utf8len(query) == 0) { + new_result->search_text = nullptr; + } + _ts_list_files(new_result); for (int i = 0; i < new_result->max_ts_thread_count; i++) { |
