Pointer + time delta

This commit is contained in:
Aurélie Delhaie
2022-03-01 21:08:34 +01:00
parent ffebb3c7d7
commit 9bb56fe174
24 changed files with 652 additions and 282 deletions

View File

@@ -11,6 +11,11 @@ MainWindow::MainWindow(QWidget *parent)
MainWindow::~MainWindow()
{
delete week_template;
foreach (Year *y, years) {
delete y;
}
years.clear();
delete ui;
}
@@ -35,6 +40,8 @@ void MainWindow::init() {
objectId.insert(ui->fri_button->objectName(), Identifier::fri);
connect(ui->aboutButton, &QPushButton::clicked, this, &MainWindow::open_about);
connect(ui->template_settings_button, &QPushButton::clicked, this, &MainWindow::edit_template);
connect(ui->today_button, &QPushButton::clicked, this, &MainWindow::set_date_to_now);
connect(ui->week_options_button, &QPushButton::clicked, this, &MainWindow::set_week_options);
connect(ui->dateEdit, &QDateEdit::dateTimeChanged, this, &MainWindow::compute_week_number);
connect(ui->mon_button, &QPushButton::clicked, this, &MainWindow::edit);
connect(ui->tue_button, &QPushButton::clicked, this, &MainWindow::edit);
@@ -48,9 +55,9 @@ void MainWindow::init() {
if (QFile::exists(get_save_file_path())) {
open_save();
} else {
week_template = new Week();
Welcome w(week_template);
w.exec();
week_template = w.get_result();
saveLoaded = true;
}
if (saveLoaded) {
@@ -65,7 +72,8 @@ void MainWindow::highlightDayOfWeek() {
ui->wedLabel->setText("Mercredi");
ui->thuLabel->setText("Jeudi");
ui->friLabel->setText("Vendredi");
if (todayWeekNumber == current_week.getWeekNumber()) {
if (todayWeekNumber == current_week->getWeekNumber()) {
ui->today_button->setDisabled(true);
switch (dayOfWeek) {
case 1: {
ui->monLabel->setText(QString("> %1 <").arg(ui->monLabel->text()));
@@ -89,6 +97,8 @@ void MainWindow::highlightDayOfWeek() {
}
default: break;
}
} else {
ui->today_button->setDisabled(false);
}
}
@@ -112,8 +122,8 @@ void MainWindow::open_save() {
week_template = Week::from_json(obj[KEY_TEMPLATE].toObject());
QJsonArray arr = obj[KEY_YEARS].toArray();
foreach (QJsonValue val, arr) {
Year y = Year::from_json(val.toObject());
years[y.getNumber()] = y;
Year *y = Year::from_json(val.toObject());
years[y->getNumber()] = y;
}
saveLoaded = true;
}
@@ -126,11 +136,11 @@ void MainWindow::panic_dialog(QString text) {
void MainWindow::save_to_file() {
QJsonArray arr;
foreach (Year y, years) {
arr.append(y.to_json());
foreach (Year *y, years) {
arr.append(y->to_json());
}
QJsonObject obj {
{KEY_TEMPLATE, week_template.to_json()},
{KEY_TEMPLATE, week_template->to_json()},
{KEY_YEARS, arr},
{KEY_SAVE_FILE_VERSION, SAVE_FILE_VERSION}
};
@@ -150,19 +160,18 @@ void MainWindow::compute_week_number(const QDateTime &dt) {
if (years.contains(y)) {
current_year = years[y];
} else {
Year nYear(y);
Year *nYear = new Year(y);
years[y] = nYear;
current_year = nYear;
save_to_file();
}
if (current_year.getWeeks().contains(n)) {
auto weeks = current_year.getWeeks();
current_week = weeks[n];
if (current_year->hasWeek(n)) {
current_week = current_year->getWeek(n);
} else {
current_week = Week(week_template);
current_week.setWeekNumber(n);
current_year.addWeek(current_week);
current_week = new Week(week_template);
current_week->setWeekNumber(n);
current_year->addWeek(current_week);
save_to_file();
}
compute_time();
@@ -170,12 +179,12 @@ void MainWindow::compute_week_number(const QDateTime &dt) {
}
void MainWindow::compute_time() {
ui->mon_time_label->setText(Tools::double_to_string_time(current_week.getMon().get_total()));
ui->tue_time_label->setText(Tools::double_to_string_time(current_week.getTue().get_total()));
ui->wed_time_label->setText(Tools::double_to_string_time(current_week.getWed().get_total()));
ui->thu_time_label->setText(Tools::double_to_string_time(current_week.getThu().get_total()));
ui->fri_time_label->setText(Tools::double_to_string_time(current_week.getFri().get_total()));
ui->total_time_label->setText(Tools::double_to_string_time(current_week.total()));
ui->mon_time_label->setText(Tools::double_to_string_time(current_week->getMon()->get_total()));
ui->tue_time_label->setText(Tools::double_to_string_time(current_week->getTue()->get_total()));
ui->wed_time_label->setText(Tools::double_to_string_time(current_week->getWed()->get_total()));
ui->thu_time_label->setText(Tools::double_to_string_time(current_week->getThu()->get_total()));
ui->fri_time_label->setText(Tools::double_to_string_time(current_week->getFri()->get_total()));
ui->total_time_label->setText(Tools::double_to_string_time(current_week->total()));
updateStartLabel();
updateBreakLabel();
updateEndLabel();
@@ -184,10 +193,12 @@ void MainWindow::compute_time() {
double late = 0.0;
double overtime = 0.0;
int todayWeekNumber = QDate::currentDate().weekNumber();
foreach (Week w, current_year.getWeeks()) {
if (w.getWeekNumber() <= todayWeekNumber) {
late += (week_template.total() - w.total());
overtime += (w.total() - week_template.total());
QMapIterator i = current_year->iterator();
while (i.hasNext()) {
Week *w = i.next().value();
if (w->getWeekNumber() <= todayWeekNumber) {
late += (week_template->total() - w->total()) - w->getTimeDeltaInHours();
overtime += (w->total() - week_template->total()) + w->getTimeDeltaInHours();
}
}
ui->late_time_label->setText(Tools::double_to_string_time((late > 0.0) ? late : 0.0));
@@ -195,72 +206,64 @@ void MainWindow::compute_time() {
}
void MainWindow::updateValidIcon() {
ui->mondayValidate->setVisible(current_week.getMon().get_validate());
ui->tuesdayValidate->setVisible(current_week.getTue().get_validate());
ui->wednesdayValidate->setVisible(current_week.getWed().get_validate());
ui->thurdayValidate->setVisible(current_week.getThu().get_validate());
ui->fridayValidate->setVisible(current_week.getFri().get_validate());
ui->mondayValidate->setVisible(current_week->getMon()->get_validate());
ui->tuesdayValidate->setVisible(current_week->getTue()->get_validate());
ui->wednesdayValidate->setVisible(current_week->getWed()->get_validate());
ui->thurdayValidate->setVisible(current_week->getThu()->get_validate());
ui->fridayValidate->setVisible(current_week->getFri()->get_validate());
}
void MainWindow::updateStartLabel() {
ui->monStartLabel->setText(current_week.getMon().get_start().toString("HH:mm"));
ui->tueStartLabel->setText(current_week.getTue().get_start().toString("HH:mm"));
ui->wedStartLabel->setText(current_week.getWed().get_start().toString("HH:mm"));
ui->thuStartLabel->setText(current_week.getThu().get_start().toString("HH:mm"));
ui->friStartLabel->setText(current_week.getFri().get_start().toString("HH:mm"));
ui->monStartLabel->setText(current_week->getMon()->get_start().toString("HH:mm"));
ui->tueStartLabel->setText(current_week->getTue()->get_start().toString("HH:mm"));
ui->wedStartLabel->setText(current_week->getWed()->get_start().toString("HH:mm"));
ui->thuStartLabel->setText(current_week->getThu()->get_start().toString("HH:mm"));
ui->friStartLabel->setText(current_week->getFri()->get_start().toString("HH:mm"));
}
void MainWindow::updateBreakLabel() {
ui->monBreakLabel->setText(QString("%1 min.").arg(current_week.getMon().get_time_break()));
ui->tueBreakLabel->setText(QString("%1 min.").arg(current_week.getTue().get_time_break()));
ui->wedBreakLabel->setText(QString("%1 min.").arg(current_week.getWed().get_time_break()));
ui->thuBreakLabel->setText(QString("%1 min.").arg(current_week.getThu().get_time_break()));
ui->friBreakLabel->setText(QString("%1 min.").arg(current_week.getFri().get_time_break()));
ui->monBreakLabel->setText(QString("%1 min.").arg(current_week->getMon()->get_time_break()));
ui->tueBreakLabel->setText(QString("%1 min.").arg(current_week->getTue()->get_time_break()));
ui->wedBreakLabel->setText(QString("%1 min.").arg(current_week->getWed()->get_time_break()));
ui->thuBreakLabel->setText(QString("%1 min.").arg(current_week->getThu()->get_time_break()));
ui->friBreakLabel->setText(QString("%1 min.").arg(current_week->getFri()->get_time_break()));
}
void MainWindow::updateEndLabel() {
ui->monEndLabel->setText(current_week.getMon().get_end().toString("HH:mm"));
ui->tueEndLabel->setText(current_week.getTue().get_end().toString("HH:mm"));
ui->wedEndLabel->setText(current_week.getWed().get_end().toString("HH:mm"));
ui->thuEndLabel->setText(current_week.getThu().get_end().toString("HH:mm"));
ui->friEndLabel->setText(current_week.getFri().get_end().toString("HH:mm"));
ui->monEndLabel->setText(current_week->getMon()->get_end().toString("HH:mm"));
ui->tueEndLabel->setText(current_week->getTue()->get_end().toString("HH:mm"));
ui->wedEndLabel->setText(current_week->getWed()->get_end().toString("HH:mm"));
ui->thuEndLabel->setText(current_week->getThu()->get_end().toString("HH:mm"));
ui->friEndLabel->setText(current_week->getFri()->get_end().toString("HH:mm"));
}
void MainWindow::edit() {
QString name = QObject::sender()->objectName();
switch (get_identifier(name)) {
case mon:
current_week.setMon(modify_value(current_week.getMon()));
modify_value(current_week->getMon());
break;
case tue:
current_week.setTue(modify_value(current_week.getTue()));
modify_value(current_week->getTue());
break;
case wed:
current_week.setWed(modify_value(current_week.getWed()));
modify_value(current_week->getWed());
break;
case thu:
current_week.setThu(modify_value(current_week.getThu()));
modify_value(current_week->getThu());
break;
case fri:
current_week.setFri(modify_value(current_week.getFri()));
modify_value(current_week->getFri());
break;
}
auto weeks = current_year.getWeeks();
weeks[current_week.getWeekNumber()] = current_week;
current_year.setWeeks(weeks);
years[current_year.getNumber()] = current_year;
save_to_file();
compute_time();
}
Day MainWindow::modify_value(Day d) {
bool isNotValidable = (current_week.getWeekNumber() > todayWeekNumber);
void MainWindow::modify_value(Day *d) {
bool isNotValidable = (current_week->getWeekNumber() > todayWeekNumber);
SetDayDialog sdd(d, isNotValidable, this);
int result = sdd.exec();
if (result == QDialog::Accepted) {
return sdd.get_result();
}
return d;
sdd.exec();
}
Identifier MainWindow::get_identifier(QString objectName) {
@@ -271,7 +274,6 @@ void MainWindow::edit_template() {
Welcome w(week_template);
int res = w.exec();
if (res == QDialog::Accepted) {
week_template = w.get_result();
save_to_file();
compute_time();
}
@@ -281,3 +283,14 @@ void MainWindow::open_about() {
AboutBox a(this);
a.exec();
}
void MainWindow::set_week_options()
{
WeekOption ow(current_week, this);
int result = ow.exec();
if (result == QDialog::Accepted) {
current_week->setTimeDelta(ow.get_time_delta());
save_to_file();
compute_time();
}
}