From 4b8d314f575d9e893d8dda7431194f8b470fc888 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sun, 18 Sep 2022 11:08:01 -0400 Subject: First step to adopt mingui as part of the project -- break it! --- mingui/main.cpp | 161 -------------------------------------------------------- 1 file changed, 161 deletions(-) delete mode 100644 mingui/main.cpp (limited to 'mingui/main.cpp') diff --git a/mingui/main.cpp b/mingui/main.cpp deleted file mode 100644 index 8199cb9..0000000 --- a/mingui/main.cpp +++ /dev/null @@ -1,161 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include "mingui.hpp" - -using std::size_t; -namespace fs = std::filesystem; - -std::unordered_map fnmap; -std::vector fns; -std::map, double> dist; -std::vector par; -std::vector> lists; - -MinGuiWidget *w = nullptr; -size_t curlist; - -size_t get_root(size_t x) -{ - if (x != par[x]) - return par[x] = get_root(par[x]); - return x; -} - -void combine(size_t x, size_t y) -{ - x = get_root(x); - y = get_root(y); - par[x] = y; -} - -void load_result(const char* rp) -{ - FILE *f = fopen(rp, "rb"); - while (1) - { - int l; - double d; - fs::path::string_type s1, s2; - if (feof(f)) break; - fread(&l, sizeof(int), 1, f); - s1.resize(l); - fread(s1.data(), sizeof(fs::path::value_type), l, f); - fnmap.try_emplace(s1, fnmap.size() + 1); - fread(&l, sizeof(int), 1, f); - s2.resize(l); - fread(s2.data(), sizeof(fs::path::value_type), l, f); - fnmap.try_emplace(s2, fnmap.size() + 1); - fread(&d, sizeof(double), 1, f); - dist[std::make_pair(fnmap[s1], fnmap[s2])] = d; - } - fclose(f); -} - -std::vector build_list(const std::vector &l) -{ - std::vector ret; - for (auto &x : l) - ret.push_back(fns[x]); - return ret; -} - -std::map, double> build_dists(const std::vector &l) -{ - std::map, double> ret; - for (size_t i = 0; i < l.size(); ++i) - { - for (size_t j = i + 1; j < l.size(); ++j) - { - size_t x = l[i], y = l[j]; - if (dist.find(std::make_pair(x, y)) != dist.end()) - ret[std::make_pair(i, j)] = dist[std::make_pair(x, y)]; - else if (dist.find(std::make_pair(y, x)) != dist.end()) - ret[std::make_pair(i, j)] = dist[std::make_pair(y, x)]; - } - } - return ret; -} - -int main(int argc, char **argv) -{ - if (argc < 2) return 1; - - load_result(argv[1]); - printf("%lu known files\n", fnmap.size()); - - par.resize(fnmap.size() + 1); - fns.resize(fnmap.size() + 1); - lists.resize(fnmap.size() + 1); - for (auto &kp : fnmap) - fns[kp.second] = kp.first; - - for (size_t i = 1; i < par.size(); ++i) - par[i] = i; - for (auto &kp : dist) - { - auto p = kp.first; - combine(p.first, p.second); - } - for (size_t i = 1; i < par.size(); ++i) - lists[get_root(i)].push_back(i); - - auto listend = std::remove_if(lists.begin(), lists.end(), [](auto &a){return a.size() < 2;}); - lists.erase(listend, lists.end()); - if (lists.empty()) return 0; - for (auto &l : lists) - { - if (l.size()) - { - for (auto &x : l) - printf("%s,", fns[x].c_str()); - puts(""); - } - } - fflush(stdout); - - QApplication a(argc, argv); - - curlist = 0; - w = new MinGuiWidget(); - w->show_images(build_list(lists[curlist])); - w->update_distances(build_dists(lists[curlist])); - w->update_viewstatus(curlist, lists.size()); - w->show(); - QObject::connect(w, &MinGuiWidget::next, - []{ - if (curlist < lists.size() - 1) ++curlist; - w->show_images(build_list(lists[curlist])); - w->update_distances(build_dists(lists[curlist])); - w->update_viewstatus(curlist, lists.size()); - }); - QObject::connect(w, &MinGuiWidget::prev, - []{ - if (curlist > 0) --curlist; - w->show_images(build_list(lists[curlist])); - w->update_distances(build_dists(lists[curlist])); - w->update_viewstatus(curlist, lists.size()); - }); - QObject::connect(w, &MinGuiWidget::switch_group, - [](size_t g){ - if (g < lists.size()) - { - curlist = g; - w->show_images(build_list(lists[curlist])); - w->update_distances(build_dists(lists[curlist])); - w->update_viewstatus(curlist, lists.size()); - } - }); - - a.exec(); - - return 0; -} -- cgit v1.2.3