meow
This commit is contained in:
parent
6d6423a416
commit
3e7e4bd213
4 changed files with 222 additions and 117 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
169
src/main.cpp
169
src/main.cpp
|
|
@ -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,49 +220,106 @@ 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();
|
||||
|
||||
|
||||
auto v = new ComplexEntry(activetab->entry);
|
||||
rdata->summaryEditor->project_items->add(activetab->title.c_str(), v);
|
||||
}
|
||||
|
||||
// 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);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc < 2) {
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
||||
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue