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 name;
Person() = default;
Person(std::string &y, std::string &n);
std::string toString() const;

View file

@ -1,5 +1,6 @@
#include <FL/Enumerations.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Text_Buffer.H>
#include <FL/Fl_Widget.H>
#include <fstream>
#include <iostream>
@ -19,7 +20,9 @@
#include <FL/Fl_Tile.H>
#include <FL/Fl_Window.H>
#include <FL/fl_ask.H>
#include <FL/Fl_Text_Editor.H>
#include <memory>
#include <ranges>
#include <string>
#include <vector>
@ -33,8 +36,24 @@ struct Selected {
Selected(Fl_Multi_Browser &browser_in) : browser(browser_in) {}
};
void show_callback(Fl_Widget *w, void * data);
void add_callback(Fl_Widget *w, void * data);
// void show_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) {
@ -121,19 +140,23 @@ std::vector<BasicEntry> MakeEntires(std::string filename) {
}
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();
// in->first.init_sizes();
in->first.layout();
in->second.redraw();
// in->first.redraw();
}
// 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();
// // in->first.init_sizes();
// in->first.layout();
// in->second.redraw();
// // in->first.redraw();
// }
struct Topbar : Fl_Group {
@ -170,16 +193,23 @@ struct MainGui : Fl_Window {
Fl_Tile *tilebox;
Fl_Multi_Browser *list;
SummaryManager *summaryEditor;
Fl_Text_Editor * notes;
Summary * summary;
State s;
MainGui() : Fl_Window(0, 0, 1000, 750, "MossMan :3") {
topbar = new Topbar(0, 0, 1000, 50);
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);
summaryEditor = new SummaryManager(250, 50, 750, 700);
topbar->inspect->callback(show_callback, this);
topbar->add->callback(add_callback, this);
list->callback(loadState, this);
summary = new Summary(250, 50, 500, 700);
//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();
@ -190,48 +220,105 @@ struct MainGui : Fl_Window {
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) {
std::cout << e << std::endl;
std::cout << e.e << std::endl;
}
for (size_t i = 0; i < s.entries.size(); i++) {
auto e = s.entries[i];
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) + "%)");
list->add(h.c_str(), (void *) i);
}
// for (size_t i = 0; i < s.entries.size(); i++) {
// auto e = s.entries[i];
// 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) + "%)");
// list->add(h.c_str(), (void *) i);
// }
}
};
void show_callback(Fl_Widget *w, void *data) {
MainGui *rdata = (MainGui *)data;
// void show_callback(Fl_Widget *w, void *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++) {
if (rdata->list->selected(i)) {
//fl_alert("%s", rdata->list->text(i));
auto c = ComplexEntry(rdata->s.entries[ (size_t) rdata->list->data(i)]);
rdata->summaryEditor->addComplex(c);
}
}
// for (size_t i = 0; i < s; i++) {
// if (rdata->list->selected(i)) {
// //fl_alert("%s", rdata->list->text(i));
// auto c = ComplexEntry(rdata->s.entries[ (size_t) rdata->list->data(i)]);
// 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) {
MainGui * rdata = (MainGui *) data;
void SaveNote(Fl_Widget * w, void * 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);
rdata->summaryEditor->project_items->add(activetab->title.c_str(), v);
}
// auto v = new ComplexEntry(activetab->entry);
// rdata->summaryEditor->project_items->add(activetab->title.c_str(), v);
// }
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) {
auto sumMan = (SummaryManager * ) data;
if (sumMan->project_items->value() == 0) return;
sumMan->win1->begin();
Summary * ns = new Summary( *(ComplexEntry*) sumMan->project_items->data( sumMan->project_items->value()), 201,0, 400, sumMan->project_items->h());
ns->show();
sumMan->win1->end();
if (sumMan->s != NULL) {
Fl::delete_widget(sumMan->s);
}
// void SelectionCallback(Fl_Widget * w, void * data) {
// auto sumMan = (SummaryManager * ) data;
// if (sumMan->project_items->value() == 0) return;
// sumMan->win1->begin();
// Summary * ns = new Summary( *(ComplexEntry*) sumMan->project_items->data( sumMan->project_items->value()), 201,0, 400, sumMan->project_items->h());
// ns->show();
// sumMan->win1->end();
// if (sumMan->s != NULL) {
// Fl::delete_widget(sumMan->s);
// }
sumMan->s = ns;
sumMan->tabs.redraw();
sumMan->win1->redraw();
sumMan->redraw();
// sumMan->s = ns;
// sumMan->tabs.redraw();
// sumMan->win1->redraw();
// sumMan->redraw();
}
// }
SummaryManager::SummaryManager(int x, int y, int w, int 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");
grp1->when(FL_WHEN_CLOSED);
// SummaryManager::SummaryManager(int x, int y, int w, int 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");
// grp1->when(FL_WHEN_CLOSED);
{
win1 = new Fl_Window(x, y + 30, w, h - 30, "Tab1W");
std::cout << "here" << std::endl;
{
project_items = new Fl_Multi_Browser(0,0,200,h-160);
project_items->callback(SelectionCallback, this);
//auto butt = new Fl_Button(100, 0, 100, 200, "test");
}
win1->end();
//auto butt = new Fl_Button(0, 30, 100, 200, "nyaaa");
}
grp1->end();
// Fl_Group *grp2 = new Fl_Group(20, 30, 280, 170, "Tab2");
// {
// }
// grp2->end();
// Fl_Group *grp3 = new Fl_Group(20, 30, 280, 170, "Tab3");
// {
// }
// grp3->end();
// Fl_Group *grp4 = new Fl_Group(20, 30, 280, 170, "Tab4");
// {
// }
// grp4->end();
// Fl_Group *grp5 = new Fl_Group(20, 30, 280, 170, "Tab5");
// {
// }
// grp5->end();
tabs.end();
tabs.handle_overflow(Fl_Tabs::OVERFLOW_DRAG);
// {
// win1 = new Fl_Window(x, y + 30, w, h - 30, "Tab1W");
// std::cout << "here" << std::endl;
// {
// project_items = new Fl_Multi_Browser(0,0,200,h-160);
// project_items->callback(SelectionCallback, this);
// //auto butt = new Fl_Button(100, 0, 100, 200, "test");
// }
// win1->end();
// //auto butt = new Fl_Button(0, 30, 100, 200, "nyaaa");
// }
// grp1->end();
// // Fl_Group *grp2 = new Fl_Group(20, 30, 280, 170, "Tab2");
// // {
// // }
// // grp2->end();
// // Fl_Group *grp3 = new Fl_Group(20, 30, 280, 170, "Tab3");
// // {
// // }
// // grp3->end();
// // Fl_Group *grp4 = new Fl_Group(20, 30, 280, 170, "Tab4");
// // {
// // }
// // grp4->end();
// // Fl_Group *grp5 = new Fl_Group(20, 30, 280, 170, "Tab5");
// // {
// // }
// // grp5->end();
// tabs.end();
// tabs.handle_overflow(Fl_Tabs::OVERFLOW_DRAG);
tabs.resizable(grp1);
// tabs.resizable(grp1);
end();
box(FL_FLAT_BOX);
}
// end();
// box(FL_FLAT_BOX);
// }
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) {
text->remove(0,text->length());
style->remove(0, style->length());
std::istringstream stream(s);
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->when(FL_WHEN_CLOSED);
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);
// s1style_buff->insert(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
// std::cout << c.A_buf.c_str() << std::endl;
// 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());
@ -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() {
std::cout << "HERE" << std::endl;
@ -263,8 +278,10 @@ Summary::~Summary() {
}
void SummaryManager::addComplex(ComplexEntry& c) {
tabs.add(new Summary(c, this->x(), this->y() +30, this->w(), this->h() - 30));
// void SummaryManager::addComplex(ComplexEntry& c) {
// 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 * 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();
};
struct SummaryManager : Fl_Group {
SummaryManager(int x, int y, int w, int h);
Fl_Tabs tabs;
Fl_Multi_Browser * project_items;
Fl_Window * win1;
Fl_Widget * s;
// struct SummaryManager : Fl_Group {
// SummaryManager(int x, int y, int w, int h);
// Fl_Tabs tabs;
// Fl_Multi_Browser * project_items;
// Fl_Window * win1;
// Fl_Widget * s;
std::vector<Summary*> items;
// std::vector<Summary*> items;
void addComplex(ComplexEntry& c);
// void addComplex(ComplexEntry& c);
void addCurrentTabToComplex();
// void addCurrentTabToComplex();
};
// };
#endif