This commit is contained in:
IXtreme 2026-10-12 20:35:35 -04:00
parent 6d6423a416
commit 3e7e4bd213
4 changed files with 222 additions and 117 deletions

View file

@ -10,6 +10,7 @@ struct Person {
std::string year; std::string year;
std::string name; std::string name;
Person() = default;
Person(std::string &y, std::string &n); Person(std::string &y, std::string &n);
std::string toString() const; std::string toString() const;

View file

@ -1,5 +1,6 @@
#include <FL/Enumerations.H> #include <FL/Enumerations.H>
#include <FL/Fl_Group.H> #include <FL/Fl_Group.H>
#include <FL/Fl_Text_Buffer.H>
#include <FL/Fl_Widget.H> #include <FL/Fl_Widget.H>
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
@ -19,7 +20,9 @@
#include <FL/Fl_Tile.H> #include <FL/Fl_Tile.H>
#include <FL/Fl_Window.H> #include <FL/Fl_Window.H>
#include <FL/fl_ask.H> #include <FL/fl_ask.H>
#include <FL/Fl_Text_Editor.H>
#include <memory> #include <memory>
#include <ranges>
#include <string> #include <string>
#include <vector> #include <vector>
@ -33,8 +36,24 @@ struct Selected {
Selected(Fl_Multi_Browser &browser_in) : browser(browser_in) {} Selected(Fl_Multi_Browser &browser_in) : browser(browser_in) {}
}; };
void show_callback(Fl_Widget *w, void * data); // void show_callback(Fl_Widget *w, void * data);
void add_callback(Fl_Widget *w, void * data); // void add_callback(Fl_Widget *w, void * data);
struct ProjectItem {
BasicEntry e;
std::string notes;
ProjectItem(const BasicEntry& in) {
e = in;
}
};
void loadState(Fl_Widget * w, void *data);
void SaveNote(Fl_Widget * w, void * data);
std::vector<BasicEntry> MakeEntires(std::string filename) { std::vector<BasicEntry> MakeEntires(std::string filename) {
@ -121,19 +140,23 @@ std::vector<BasicEntry> MakeEntires(std::string filename) {
} }
struct State { struct State {
std::vector<BasicEntry> entries; std::vector<ProjectItem> entries;
}; };
void changelayout(Fl_Widget *w, void *meow) {
std::pair<Fl_Flex &, SummaryManager &> *in = (std::pair<Fl_Flex &, SummaryManager &> *)meow;
in->second.show();
// in->second.parent()->redraw();
// in->first.window()->redraw(); // void changelayout(Fl_Widget *w, void *meow) {
// in->first.init_sizes(); // std::pair<Fl_Flex &, SummaryManager &> *in = (std::pair<Fl_Flex &, SummaryManager &> *)meow;
in->first.layout(); // in->second.show();
in->second.redraw(); // // in->second.parent()->redraw();
// in->first.redraw(); // // in->first.window()->redraw();
} // // in->first.init_sizes();
// in->first.layout();
// in->second.redraw();
// // in->first.redraw();
// }
struct Topbar : Fl_Group { struct Topbar : Fl_Group {
@ -170,16 +193,23 @@ struct MainGui : Fl_Window {
Fl_Tile *tilebox; Fl_Tile *tilebox;
Fl_Multi_Browser *list; Fl_Multi_Browser *list;
SummaryManager *summaryEditor; Fl_Text_Editor * notes;
Summary * summary;
State s; State s;
MainGui() : Fl_Window(0, 0, 1000, 750, "MossMan :3") { MainGui() : Fl_Window(0, 0, 1000, 750, "MossMan :3") {
topbar = new Topbar(0, 0, 1000, 50); topbar = new Topbar(0, 0, 1000, 50);
tilebox = new Fl_Tile(0, 50, 1000, 700); // parent is maingui, will be freed at decon tilebox = new Fl_Tile(0, 50, 1000, 700); // parent is maingui, will be freed at decon
list = new Fl_Multi_Browser(0, 50, 250, 700); list = new Fl_Multi_Browser(0, 50, 250, 700);
summaryEditor = new SummaryManager(250, 50, 750, 700); list->callback(loadState, this);
topbar->inspect->callback(show_callback, this); summary = new Summary(250, 50, 500, 700);
topbar->add->callback(add_callback, this); //auto notesPane = new Fl_Group(750, 50, 250, 700);
notes = new Fl_Text_Editor(750, 50, 250, 700);
notes->callback(SaveNote, this);
notes->buffer(new Fl_Text_Buffer());
// topbar->inspect->callback(show_callback, this);
// topbar->add->callback(add_callback, this);
tilebox->end(); tilebox->end();
@ -190,48 +220,105 @@ struct MainGui : Fl_Window {
void updateList(std::string filename) { void updateList(std::string filename) {
s.entries = MakeEntires(filename); auto temp = MakeEntires(filename);
s.entries = temp | std::ranges::views::transform([](auto& in) { return ProjectItem(in);}) | std::ranges::to<std::vector<ProjectItem>>();
for (auto e : s.entries) { for (auto e : s.entries) {
std::cout << e << std::endl; std::cout << e.e << std::endl;
} }
for (size_t i = 0; i < s.entries.size(); i++) { // for (size_t i = 0; i < s.entries.size(); i++) {
auto e = s.entries[i]; // auto e = s.entries[i];
auto h = ((e.A.year + "/" + e.A.name) + " and " + (e.B.year + "/" + e.B.name) + " (" + // auto h = ((e.A.year + "/" + e.A.name) + " and " + (e.B.year + "/" + e.B.name) + " (" +
std::to_string(e.Apercent) + "%, " + std::to_string(e.Bpercent) + "%)"); // std::to_string(e.Apercent) + "%, " + std::to_string(e.Bpercent) + "%)");
list->add(h.c_str(), (void *) i); // list->add(h.c_str(), (void *) i);
} // }
} }
}; };
void show_callback(Fl_Widget *w, void *data) { // void show_callback(Fl_Widget *w, void *data) {
MainGui *rdata = (MainGui *)data; // MainGui *rdata = (MainGui *)data;
auto s = rdata->list->size() + 1; // auto s = rdata->list->size() + 1;
for (size_t i = 0; i < s; i++) { // for (size_t i = 0; i < s; i++) {
if (rdata->list->selected(i)) { // if (rdata->list->selected(i)) {
//fl_alert("%s", rdata->list->text(i)); // //fl_alert("%s", rdata->list->text(i));
auto c = ComplexEntry(rdata->s.entries[ (size_t) rdata->list->data(i)]); // auto c = ComplexEntry(rdata->s.entries[ (size_t) rdata->list->data(i)]);
rdata->summaryEditor->addComplex(c); // rdata->summaryEditor->addComplex(c);
} // }
} // }
// }
void loadState(Fl_Widget * w, void *data) {
MainGui * main = (MainGui *) data;
auto selLine = main->list->value();
main->list->clear();
for (size_t i = 0; i < main->s.entries.size(); i++) {
auto e = main->s.entries[i].e;
std::string format = "";
if (main->s.entries[i].notes != "") {
format = "@b@i";
}
auto h = format +
((e.A.year + "/" + e.A.name) + " and " + (e.B.year + "/" + e.B.name) + " (" +
std::to_string(e.Apercent) + "%, " + std::to_string(e.Bpercent) + "%)");
main->list->add(h.c_str(), (void *)i);
}
main->list->value(selLine);
auto i = main->list->value();
if (i != 0) {
size_t index = (size_t) main->list->data(i);
main->summary->populate(main->s.entries[index].e);
main->notes->buffer()->remove(0, main->notes->buffer()->length());
main->notes->buffer()->insert(0, main->s.entries[index].notes.c_str());
}
} }
void add_callback(Fl_Widget *w, void *data) { void SaveNote(Fl_Widget * w, void * data) {
MainGui * rdata = (MainGui *) data; MainGui * main = (MainGui *) data;
auto i = main->list->value();
if (i != 0) {
size_t index = (size_t) main->list->data(i);
auto text = main->notes->buffer()->text();
main->s.entries[index].notes = std::string(text);
std::free(text);
auto activetab = (Summary *) rdata->summaryEditor->tabs.value();
if (rdata->summaryEditor->tabs.child(0) == activetab) {
return;
} }
loadState(w, data);
main->redraw();
}
// void add_callback(Fl_Widget *w, void *data) {
// MainGui * rdata = (MainGui *) data;
// auto activetab = (Summary *) rdata->summaryEditor->tabs.value();
// if (rdata->summaryEditor->tabs.child(0) == activetab) {
// return;
// }
auto v = new ComplexEntry(activetab->entry); // auto v = new ComplexEntry(activetab->entry);
rdata->summaryEditor->project_items->add(activetab->title.c_str(), v); // rdata->summaryEditor->project_items->add(activetab->title.c_str(), v);
} // }
int main(int argc, char **argv) { int main(int argc, char **argv) {

View file

@ -47,67 +47,67 @@ void SummaryCallback(Fl_Widget * w, void * data) {
} }
} }
void SelectionCallback(Fl_Widget * w, void * data) { // void SelectionCallback(Fl_Widget * w, void * data) {
auto sumMan = (SummaryManager * ) data; // auto sumMan = (SummaryManager * ) data;
if (sumMan->project_items->value() == 0) return; // if (sumMan->project_items->value() == 0) return;
sumMan->win1->begin(); // sumMan->win1->begin();
Summary * ns = new Summary( *(ComplexEntry*) sumMan->project_items->data( sumMan->project_items->value()), 201,0, 400, sumMan->project_items->h()); // Summary * ns = new Summary( *(ComplexEntry*) sumMan->project_items->data( sumMan->project_items->value()), 201,0, 400, sumMan->project_items->h());
ns->show(); // ns->show();
sumMan->win1->end(); // sumMan->win1->end();
if (sumMan->s != NULL) { // if (sumMan->s != NULL) {
Fl::delete_widget(sumMan->s); // Fl::delete_widget(sumMan->s);
} // }
sumMan->s = ns; // sumMan->s = ns;
sumMan->tabs.redraw(); // sumMan->tabs.redraw();
sumMan->win1->redraw(); // sumMan->win1->redraw();
sumMan->redraw(); // sumMan->redraw();
} // }
SummaryManager::SummaryManager(int x, int y, int w, int h) // SummaryManager::SummaryManager(int x, int y, int w, int h)
: Fl_Group(x, y, w, h), tabs(x, y, w, h) { // : Fl_Group(x, y, w, h), tabs(x, y, w, h) {
Fl_Group *grp1 = new Fl_Group(x, y + 30, w, h - 30, "Current Project"); // Fl_Group *grp1 = new Fl_Group(x, y + 30, w, h - 30, "Current Project");
grp1->when(FL_WHEN_CLOSED); // grp1->when(FL_WHEN_CLOSED);
{ // {
win1 = new Fl_Window(x, y + 30, w, h - 30, "Tab1W"); // win1 = new Fl_Window(x, y + 30, w, h - 30, "Tab1W");
std::cout << "here" << std::endl; // std::cout << "here" << std::endl;
{ // {
project_items = new Fl_Multi_Browser(0,0,200,h-160); // project_items = new Fl_Multi_Browser(0,0,200,h-160);
project_items->callback(SelectionCallback, this); // project_items->callback(SelectionCallback, this);
//auto butt = new Fl_Button(100, 0, 100, 200, "test"); // //auto butt = new Fl_Button(100, 0, 100, 200, "test");
} // }
win1->end(); // win1->end();
//auto butt = new Fl_Button(0, 30, 100, 200, "nyaaa"); // //auto butt = new Fl_Button(0, 30, 100, 200, "nyaaa");
} // }
grp1->end(); // grp1->end();
// Fl_Group *grp2 = new Fl_Group(20, 30, 280, 170, "Tab2"); // // Fl_Group *grp2 = new Fl_Group(20, 30, 280, 170, "Tab2");
// { // // {
// } // // }
// grp2->end(); // // grp2->end();
// Fl_Group *grp3 = new Fl_Group(20, 30, 280, 170, "Tab3"); // // Fl_Group *grp3 = new Fl_Group(20, 30, 280, 170, "Tab3");
// { // // {
// } // // }
// grp3->end(); // // grp3->end();
// Fl_Group *grp4 = new Fl_Group(20, 30, 280, 170, "Tab4"); // // Fl_Group *grp4 = new Fl_Group(20, 30, 280, 170, "Tab4");
// { // // {
// } // // }
// grp4->end(); // // grp4->end();
// Fl_Group *grp5 = new Fl_Group(20, 30, 280, 170, "Tab5"); // // Fl_Group *grp5 = new Fl_Group(20, 30, 280, 170, "Tab5");
// { // // {
// } // // }
// grp5->end(); // // grp5->end();
tabs.end(); // tabs.end();
tabs.handle_overflow(Fl_Tabs::OVERFLOW_DRAG); // tabs.handle_overflow(Fl_Tabs::OVERFLOW_DRAG);
tabs.resizable(grp1); // tabs.resizable(grp1);
end(); // end();
box(FL_FLAT_BOX); // box(FL_FLAT_BOX);
} // }
void style_unfinn_cb(int, void *a) {} void style_unfinn_cb(int, void *a) {}
@ -149,6 +149,10 @@ std::string htmlCodesToNormal(std::string in) {
void LoadReport(std::string s, Fl_Text_Buffer * text, Fl_Text_Buffer * style) { void LoadReport(std::string s, Fl_Text_Buffer * text, Fl_Text_Buffer * style) {
text->remove(0,text->length());
style->remove(0, style->length());
std::istringstream stream(s); std::istringstream stream(s);
std::string line; std::string line;
@ -203,8 +207,14 @@ void LoadReport(std::string s, Fl_Text_Buffer * text, Fl_Text_Buffer * style) {
Summary::Summary(ComplexEntry c, int x, int y, int w, int h) : Fl_Group(x, y, w, h, "Loading..."), entry(c) {
title = c.basic.A.name + "+" + c.basic.B.name + "(" + std::to_string(c.basic.Apercent) + "%," + std::to_string(c.basic.Bpercent) + "%)";
Summary::Summary(int x, int y, int w, int h) : Fl_Group(x, y, w, h, "Loading...") {
//title = c.basic.A.name + "+" + c.basic.B.name + "(" + std::to_string(c.basic.Apercent) + "%," + std::to_string(c.basic.Bpercent) + "%)";
title = "";
this->label(title.c_str()); this->label(title.c_str());
this->when(FL_WHEN_CLOSED); this->when(FL_WHEN_CLOSED);
Fl_Window * win = new Fl_Window(x, y, w, h); Fl_Window * win = new Fl_Window(x, y, w, h);
@ -227,14 +237,10 @@ Summary::Summary(ComplexEntry c, int x, int y, int w, int h) : Fl_Group(x, y, w,
s2->buffer(s2buff); s2->buffer(s2buff);
// s1style_buff->insert(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); // s1style_buff->insert(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
// std::cout << c.A_buf.c_str() << std::endl; // std::cout << c.A_buf.c_str() << std::endl;
// s1->insert(c.A_buf.c_str()); // s1->insert(c.A_buf.c_str());
LoadReport(c.A_buf, s1buff, s1style_buff);
LoadReport(c.B_buf, s2buff, s2style_buff);
// s2->buffer()->insert(0, c.B_buf.c_str()); // s2->buffer()->insert(0, c.B_buf.c_str());
@ -251,6 +257,15 @@ Summary::Summary(ComplexEntry c, int x, int y, int w, int h) : Fl_Group(x, y, w,
} }
void Summary::populate(const ComplexEntry& c) {
title = c.basic.A.name + "+" + c.basic.B.name + "(" + std::to_string(c.basic.Apercent) + "%," + std::to_string(c.basic.Bpercent) + "%)";
LoadReport(c.A_buf, s1buff, s1style_buff);
LoadReport(c.B_buf, s2buff, s2style_buff);
}
Summary::~Summary() { Summary::~Summary() {
std::cout << "HERE" << std::endl; std::cout << "HERE" << std::endl;
@ -263,8 +278,10 @@ Summary::~Summary() {
} }
void SummaryManager::addComplex(ComplexEntry& c) { // void SummaryManager::addComplex(ComplexEntry& c) {
tabs.add(new Summary(c, this->x(), this->y() +30, this->w(), this->h() - 30)); // tabs.add(new Summary(c, this->x(), this->y() +30, this->w(), this->h() - 30));
} // }

View file

@ -24,27 +24,27 @@ struct Summary : Fl_Group {
Fl_Text_Buffer * s2buff; Fl_Text_Buffer * s2buff;
Fl_Text_Buffer * s2style_buff; Fl_Text_Buffer * s2style_buff;
ComplexEntry entry;
Summary(ComplexEntry c, int x, int y, int w, int h); Summary(int x, int y, int w, int h);
void populate(const ComplexEntry& c);
~Summary(); ~Summary();
}; };
struct SummaryManager : Fl_Group { // struct SummaryManager : Fl_Group {
SummaryManager(int x, int y, int w, int h); // SummaryManager(int x, int y, int w, int h);
Fl_Tabs tabs; // Fl_Tabs tabs;
Fl_Multi_Browser * project_items; // Fl_Multi_Browser * project_items;
Fl_Window * win1; // Fl_Window * win1;
Fl_Widget * s; // Fl_Widget * s;
std::vector<Summary*> items; // std::vector<Summary*> items;
void addComplex(ComplexEntry& c); // void addComplex(ComplexEntry& c);
void addCurrentTabToComplex(); // void addCurrentTabToComplex();
}; // };
#endif #endif