From 68f44834deeba5e063cb4eb4245653bf9a824f41 Mon Sep 17 00:00:00 2001 From: Alexis Delhaie Date: Sun, 2 Aug 2020 22:17:09 +0200 Subject: [PATCH] beta 2 --- Chronos.pro | 62 ++++ Chronos.pro.user | 340 +++++++++++++++++++ README.md | Bin 0 -> 24 bytes icon.ico | Bin 0 -> 133982 bytes pictures.qrc | 9 + pictures/about.png | Bin 0 -> 13131 bytes pictures/banner.png | Bin 0 -> 15837 bytes pictures/calendar.png | Bin 0 -> 8771 bytes pictures/clock-8-128.png | Bin 0 -> 3310 bytes pictures/sport.png | Bin 0 -> 8684 bytes sources/aboutbox.cpp | 14 + sources/aboutbox.h | 23 ++ sources/day.cpp | 66 ++++ sources/day.h | 37 ++ sources/main.cpp | 17 + sources/mainwindow.cpp | 199 +++++++++++ sources/mainwindow.h | 63 ++++ sources/setdaydialog.cpp | 37 ++ sources/setdaydialog.h | 34 ++ sources/tools.cpp | 14 + sources/tools.h | 13 + sources/week.cpp | 86 +++++ sources/week.h | 46 +++ sources/welcome.cpp | 79 +++++ sources/welcome.h | 50 +++ stylesheets.qrc | 5 + stylesheets/style.qss | 395 ++++++++++++++++++++++ ui/aboutbox.ui | 182 ++++++++++ ui/mainwindow.ui | 705 +++++++++++++++++++++++++++++++++++++++ ui/setdaydialog.ui | 242 ++++++++++++++ ui/welcome.ui | 370 ++++++++++++++++++++ 31 files changed, 3088 insertions(+) create mode 100644 Chronos.pro create mode 100644 Chronos.pro.user create mode 100644 README.md create mode 100644 icon.ico create mode 100644 pictures.qrc create mode 100644 pictures/about.png create mode 100644 pictures/banner.png create mode 100644 pictures/calendar.png create mode 100644 pictures/clock-8-128.png create mode 100644 pictures/sport.png create mode 100644 sources/aboutbox.cpp create mode 100644 sources/aboutbox.h create mode 100644 sources/day.cpp create mode 100644 sources/day.h create mode 100644 sources/main.cpp create mode 100644 sources/mainwindow.cpp create mode 100644 sources/mainwindow.h create mode 100644 sources/setdaydialog.cpp create mode 100644 sources/setdaydialog.h create mode 100644 sources/tools.cpp create mode 100644 sources/tools.h create mode 100644 sources/week.cpp create mode 100644 sources/week.h create mode 100644 sources/welcome.cpp create mode 100644 sources/welcome.h create mode 100644 stylesheets.qrc create mode 100644 stylesheets/style.qss create mode 100644 ui/aboutbox.ui create mode 100644 ui/mainwindow.ui create mode 100644 ui/setdaydialog.ui create mode 100644 ui/welcome.ui diff --git a/Chronos.pro b/Chronos.pro new file mode 100644 index 0000000..3f2a2de --- /dev/null +++ b/Chronos.pro @@ -0,0 +1,62 @@ +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++17 + +# remove possible other optimization flags +QMAKE_CXXFLAGS_RELEASE -= -O +QMAKE_CXXFLAGS_RELEASE -= -O1 +QMAKE_CXXFLAGS_RELEASE -= -O2 + +# add the desired -O3 if not present +QMAKE_CXXFLAGS_RELEASE *= -O3 + +RC_ICONS = icon.ico + +# The following define makes your compiler emit warnings if you use +# any Qt feature that has been marked deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + sources/aboutbox.cpp \ + sources/day.cpp \ + sources/main.cpp \ + sources/mainwindow.cpp \ + sources/setdaydialog.cpp \ + sources/tools.cpp \ + sources/week.cpp \ + sources/welcome.cpp + +HEADERS += \ + sources/aboutbox.h \ + sources/day.h \ + sources/mainwindow.h \ + sources/setdaydialog.h \ + sources/tools.h \ + sources/week.h \ + sources/welcome.h + +FORMS += \ + ui/aboutbox.ui \ + ui/mainwindow.ui \ + ui/setdaydialog.ui \ + ui/welcome.ui + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +DISTFILES += + +RESOURCES += \ + pictures.qrc \ + stylesheets.qrc diff --git a/Chronos.pro.user b/Chronos.pro.user new file mode 100644 index 0000000..278c4e0 --- /dev/null +++ b/Chronos.pro.user @@ -0,0 +1,340 @@ + + + + + + EnvironmentId + {39b4df9e-fc10-428a-bc34-924198bd0973} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + -fno-delayed-template-parsing + + true + Builtin.Questionable + + true + Builtin.DefaultTidyAndClazy + 4 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.15.0 MinGW 64-bit + Desktop Qt 5.15.0 MinGW 64-bit + qt.qt5.5150.win64_mingw81_kit + 1 + 0 + 0 + + true + 0 + C:\Users\robof\OneDrive\Documents\build-Chronos-Desktop_Qt_5_15_0_MinGW_64_bit-Debug + C:/Users/robof/OneDrive/Documents/build-Chronos-Desktop_Qt_5_15_0_MinGW_64_bit-Debug + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 2 + 2 + + + true + 2 + C:\Users\robof\OneDrive\Documents\build-Chronos-Desktop_Qt_5_15_0_MinGW_64_bit-Release + C:/Users/robof/OneDrive/Documents/build-Chronos-Desktop_Qt_5_15_0_MinGW_64_bit-Release + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 2 + + + true + 0 + C:\Users\robof\OneDrive\Documents\build-Chronos-Desktop_Qt_5_15_0_MinGW_64_bit-Profile + C:/Users/robof/OneDrive/Documents/build-Chronos-Desktop_Qt_5_15_0_MinGW_64_bit-Profile + + + true + QtProjectManager.QMakeBuildStep + + false + + + + true + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/robof/OneDrive/Documents/Chronos/Chronos.pro + C:/Users/robof/OneDrive/Documents/Chronos/Chronos.pro + + false + + false + true + true + false + false + true + + C:/Users/robof/OneDrive/Documents/build-Chronos-Desktop_Qt_5_15_0_MinGW_64_bit-Release + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e36186cc6e4163ef5c4ab1fe04b41cdaf8e69d11 GIT binary patch literal 24 dcmezWPnki1!I>e0p@<=$ArFX)8F(4E7ywnc1vCHv literal 0 HcmV?d00001 diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d0018ecb7df0fa1adf7231a2d17602419dfbca92 GIT binary patch literal 133982 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 V<9yncoqcmV;k62<^1ngf{|6U~l%@ax literal 0 HcmV?d00001 diff --git a/pictures.qrc b/pictures.qrc new file mode 100644 index 0000000..cf84f37 --- /dev/null +++ b/pictures.qrc @@ -0,0 +1,9 @@ + + + pictures/clock-8-128.png + pictures/sport.png + pictures/calendar.png + pictures/about.png + pictures/banner.png + + diff --git a/pictures/about.png b/pictures/about.png new file mode 100644 index 0000000000000000000000000000000000000000..512ce807823b954c028c51dcba60508492b846b9 GIT binary patch literal 13131 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 literal 0 HcmV?d00001 diff --git a/pictures/banner.png b/pictures/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..44377b8d2d3e93c64f1e9f2184525a540ec38231 GIT binary patch literal 15837 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 I(lq@40h9pf>Hq)$ literal 0 HcmV?d00001 diff --git a/pictures/calendar.png b/pictures/calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..f139a228e47617c08487c2862e718f37e7754c06 GIT binary patch literal 8771 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 Q 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 literal 0 HcmV?d00001 diff --git a/pictures/sport.png b/pictures/sport.png new file mode 100644 index 0000000000000000000000000000000000000000..b44e06679bf4c0db4543f3394a71ab3d35ffcd57 GIT binary patch literal 8684 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 +} + +AboutBox::~AboutBox() +{ + delete ui; +} diff --git a/sources/aboutbox.h b/sources/aboutbox.h new file mode 100644 index 0000000..58c51bc --- /dev/null +++ b/sources/aboutbox.h @@ -0,0 +1,23 @@ +#ifndef ABOUTBOX_H +#define ABOUTBOX_H + +#include +#include + +namespace Ui { +class AboutBox; +} + +class AboutBox : public QDialog +{ + Q_OBJECT + +public: + explicit AboutBox(QWidget *parent = nullptr); + ~AboutBox(); + +private: + Ui::AboutBox *ui; +}; + +#endif // ABOUTBOX_H diff --git a/sources/day.cpp b/sources/day.cpp new file mode 100644 index 0000000..7d85d38 --- /dev/null +++ b/sources/day.cpp @@ -0,0 +1,66 @@ +#include "day.h" + +Day::Day() +{ + start = QTime(9, 0, 0, 0); + end = QTime(17, 15, 0, 0); + time_break = 45.0; +} + +double Day::get_total() { + int sec = start.secsTo(end); + int minutes = sec / 60; + return (minutes - time_break) / 60; +} + +void Day::set_start(QTime value) +{ + start = value; +} + +void Day::set_end(QTime value) +{ + end = value; +} + +void Day::set_time_break(double value) +{ + time_break = value; +} + +QTime Day::get_start() +{ + return start; +} + +QTime Day::get_end() +{ + return end; +} + +double Day::get_time_break() +{ + return time_break; +} + +QJsonObject Day::to_json() +{ + QJsonObject obj{ + {KEY_START, start.toString(Qt::DateFormat::ISODate)}, + {KEY_END, end.toString(Qt::DateFormat::ISODate)}, + {KEY_BREAK, time_break} + }; + + return obj; +} + +Day Day::from_json(QJsonObject obj) +{ + Day result; + + result.start = QTime::fromString(obj[KEY_START].toString(), Qt::DateFormat::ISODate); + result.end = QTime::fromString(obj[KEY_END].toString(), Qt::DateFormat::ISODate); + result.time_break = obj[KEY_BREAK].toDouble(); + + return result; +} diff --git a/sources/day.h b/sources/day.h new file mode 100644 index 0000000..8b7622c --- /dev/null +++ b/sources/day.h @@ -0,0 +1,37 @@ +#ifndef DAY_H +#define DAY_H + +#define KEY_START "start" +#define KEY_END "end" +#define KEY_BREAK "break" + +#include +#include +#include + +class Day +{ + +private: + QTime start; + QTime end; + double time_break; + +public: + Day(); + + void set_start(QTime value); + void set_end(QTime value); + void set_time_break(double value); + + QTime get_start(); + QTime get_end(); + double get_time_break(); + QJsonObject to_json(); + + double get_total(); + + static Day from_json(QJsonObject); +}; + +#endif // DAY_H diff --git a/sources/main.cpp b/sources/main.cpp new file mode 100644 index 0000000..efe9508 --- /dev/null +++ b/sources/main.cpp @@ -0,0 +1,17 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + QFile styleFile(":/stylesheets/stylesheets/style.qss"); + styleFile.open(QFile::ReadOnly); + QString style(styleFile.readAll()); + a.setStyleSheet(style); + + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/sources/mainwindow.cpp b/sources/mainwindow.cpp new file mode 100644 index 0000000..cf25164 --- /dev/null +++ b/sources/mainwindow.cpp @@ -0,0 +1,199 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + init(); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +QString MainWindow::get_save_file_path() { + QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + if (!QDir(path).exists()) { + QDir().mkpath(path); + } + path += "/data/"; + if (!QDir(path).exists()) { + QDir().mkpath(path); + } + path += SAVE_FILENAME; + return path; +} + +void MainWindow::init() { + objectId.insert(ui->mon_button->objectName(), Identifier::mon); + objectId.insert(ui->tue_button->objectName(), Identifier::tue); + objectId.insert(ui->wed_button->objectName(), Identifier::wed); + objectId.insert(ui->thu_button->objectName(), Identifier::thu); + 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->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); + connect(ui->wed_button, &QPushButton::clicked, this, &MainWindow::edit); + connect(ui->thu_button, &QPushButton::clicked, this, &MainWindow::edit); + connect(ui->fri_button, &QPushButton::clicked, this, &MainWindow::edit); + if (QFile::exists(get_save_file_path())) { + open_save(); + } else { + Welcome w(week_template); + w.exec(); + week_template = w.get_result(); + } + set_date_to_now(); + compute_time(); +} + +void MainWindow::set_date_to_now() { + auto date = QDate::currentDate(); + ui->dateEdit->setDate(date); +} + +void MainWindow::open_save() { + QFile* file = new QFile(get_save_file_path()); + file->open(QIODevice::ReadOnly); + auto json = QString(file->readAll()); + file->close(); + delete file; + + QJsonObject obj = QJsonDocument::fromJson(json.toUtf8()).object(); + if (obj[KEY_SAVE_FILE_VERSION].toInt() == SAVE_FILE_VERSION) { + week_template = Week::from_json(obj[KEY_TEMPLATE].toObject()); + QJsonArray arr = obj[KEY_WEEKS].toArray(); + for (QJsonValue val : arr) { + weeks[val.toObject()["weekNumber"].toInt()] = Week::from_json(val.toObject()); + } + } else { + QMessageBox msgBox; + msgBox.setText("Le fichier de sauvegarde n'est pas à jour, " + "des changements ont été apporté a la structure du fichier lors de la dernière mise à jour"); + msgBox.setInformativeText("Mettez à jour votre fichier de sauvegarde puis relancez l'application"); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setDefaultButton(QMessageBox::Ok); + msgBox.exec(); + QTimer::singleShot(0, this, &MainWindow::close); + } +} + +void MainWindow::save_to_file() { + QJsonArray arr; + for (Week w : weeks) { + arr.append(w.to_json()); + } + QJsonObject obj { + {KEY_TEMPLATE, week_template.to_json()}, + {KEY_WEEKS, arr}, + {KEY_SAVE_FILE_VERSION, SAVE_FILE_VERSION} + }; + QJsonDocument doc(obj); + QFile *f = new QFile(get_save_file_path()); + if (f->open(QIODevice::WriteOnly)) { + f->write(doc.toJson()); + f->close(); + } +} + +void MainWindow::compute_week_number(const QDateTime &dt) { + int n = dt.date().weekNumber(); + ui->label_semaine->setText(QString("Semaine : %1").arg(QString::number(n))); + QMapIterator it(weeks); + bool working = true; + bool found = false; + while (it.hasNext() && working) { + Week w = it.next().value(); + if (w.getWeekNumber() == n) { + current_week = w; + working = false; + found = true; + } + } + if (!found) { + current_week = Week(week_template); + current_week.setWeekNumber(n); + weeks.insert(n, current_week); + save_to_file(); + } + compute_time(); +} + +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())); + + double late = 0.0; + double overtime = 0.0; + int todayWeekNumber = QDate::currentDate().weekNumber(); + for (Week w : weeks) { + if (w.getWeekNumber() <= todayWeekNumber) { + late += (week_template.total() - w.total()); + overtime += (w.total() - week_template.total()); + } + } + + ui->late_time_label->setText(Tools::double_to_string_time((late > 0.0) ? late : 0.0)); + ui->overtime_time_label->setText(Tools::double_to_string_time((overtime > 0.0) ? overtime : 0.0)); +} + +void MainWindow::edit() { + QString name = QObject::sender()->objectName(); + switch (get_identifier(name)) { + case mon: + current_week.setMon(modify_value(current_week.getMon())); + break; + case tue: + current_week.setTue(modify_value(current_week.getTue())); + break; + case wed: + current_week.setWed(modify_value(current_week.getWed())); + break; + case thu: + current_week.setThu(modify_value(current_week.getThu())); + break; + case fri: + current_week.setFri(modify_value(current_week.getFri())); + break; + } + weeks[current_week.getWeekNumber()] = current_week; + save_to_file(); + compute_time(); +} + +Day MainWindow::modify_value(Day d) { + SetDayDialog sdd(d, this); + int result = sdd.exec(); + if (result == QDialog::Accepted) { + return sdd.get_result(); + } + return d; +} + +Identifier MainWindow::get_identifier(QString objectName) { + return objectId[objectName]; +} + +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(); + } +} + +void MainWindow::open_about() { + AboutBox a(this); + a.exec(); +} diff --git a/sources/mainwindow.h b/sources/mainwindow.h new file mode 100644 index 0000000..1a0efe9 --- /dev/null +++ b/sources/mainwindow.h @@ -0,0 +1,63 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#define KEY_TEMPLATE "template" +#define KEY_WEEKS "weeks" +#define SAVE_FILENAME "data.json" +#define SAVE_FILE_VERSION 1 +#define KEY_SAVE_FILE_VERSION "version" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "week.h" +#include "welcome.h" +#include "tools.h" +#include "aboutbox.h" + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +signals: + void correctly_started(); + +private: + Ui::MainWindow *ui; + void init(); + void open_save(); + void save_to_file(); + QString get_save_file_path(); + Identifier get_identifier(QString objectName); + Day modify_value(Day); + + Week week_template; + Week current_week; + QMap weeks; + QMap objectId; + +public slots: + void compute_week_number(const QDateTime &dt); + void compute_time(); + void set_date_to_now(); + void edit(); + void edit_template(); + void open_about(); +}; +#endif // MAINWINDOW_H diff --git a/sources/setdaydialog.cpp b/sources/setdaydialog.cpp new file mode 100644 index 0000000..7e486bb --- /dev/null +++ b/sources/setdaydialog.cpp @@ -0,0 +1,37 @@ +#include "setdaydialog.h" +#include "ui_setdaydialog.h" + +SetDayDialog::SetDayDialog(Day d, QWidget *parent) : + QDialog(parent), + ui(new Ui::SetDayDialog) +{ + ui->setupUi(this); + this->d = d; + init(); +} + +SetDayDialog::~SetDayDialog() +{ + delete ui; +} + +void SetDayDialog::init() { + ui->start_edit->setTime(d.get_start()); + ui->end_edit->setTime(d.get_end()); + ui->break_edit->setValue(d.get_time_break()); + connect(ui->start_edit, &QTimeEdit::timeChanged, this, &SetDayDialog::compute_time); + connect(ui->end_edit, &QTimeEdit::timeChanged, this, &SetDayDialog::compute_time); + connect(ui->break_edit, static_cast(&QDoubleSpinBox::valueChanged), this, &SetDayDialog::compute_time); + ui->total_label->setText(Tools::double_to_string_time(d.get_total())); +} + +void SetDayDialog::compute_time() { + d.set_start(ui->start_edit->time()); + d.set_end(ui->end_edit->time()); + d.set_time_break(ui->break_edit->value()); + ui->total_label->setText(Tools::double_to_string_time(d.get_total())); +} + +Day SetDayDialog::get_result() { + return d; +} diff --git a/sources/setdaydialog.h b/sources/setdaydialog.h new file mode 100644 index 0000000..53fb0a3 --- /dev/null +++ b/sources/setdaydialog.h @@ -0,0 +1,34 @@ +#ifndef SETDAYDIALOG_H +#define SETDAYDIALOG_H + +#include + +#include "day.h" +#include "tools.h" + +namespace Ui { +class SetDayDialog; +} + +class SetDayDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SetDayDialog(Day d, QWidget *parent = nullptr); + ~SetDayDialog(); + + Day get_result(); + +public slots: + void compute_time(); + +private: + Ui::SetDayDialog *ui; + + Day d; + + void init(); +}; + +#endif // SETDAYDIALOG_H diff --git a/sources/tools.cpp b/sources/tools.cpp new file mode 100644 index 0000000..9b73339 --- /dev/null +++ b/sources/tools.cpp @@ -0,0 +1,14 @@ +#include "tools.h" + +QString Tools::double_to_string_time(double value) { + const int h = floor(value); + value -= h; + value = value * 60; + if (value == 0.0) { + return QString("%1h").arg(QString::number(h)); + } else if (value < 10.0) { + return QString("%1h0%2").arg(QString::number(h), QString::number(round(value))); + } + + return QString("%1h%2").arg(QString::number(h), QString::number(round(value))); +} diff --git a/sources/tools.h b/sources/tools.h new file mode 100644 index 0000000..f317151 --- /dev/null +++ b/sources/tools.h @@ -0,0 +1,13 @@ +#ifndef TOOLS_H +#define TOOLS_H + +#include +#include + +class Tools +{ +public: + static QString double_to_string_time(double value); +}; + +#endif // TOOLS_H diff --git a/sources/week.cpp b/sources/week.cpp new file mode 100644 index 0000000..88e8de8 --- /dev/null +++ b/sources/week.cpp @@ -0,0 +1,86 @@ +#include "week.h" + +Week::Week() +{ + mon = Day(); + tue = Day(); + wed = Day(); + thu = Day(); + fri = Day(); + week_number = 0; +} + +Week Week::from_json(QJsonObject obj) { + Week w; + w.mon = Day::from_json(obj[MONDAY].toObject()); + w.tue = Day::from_json(obj[TUESDAY].toObject()); + w.wed = Day::from_json(obj[WEDNESDAY].toObject()); + w.thu = Day::from_json(obj[THURDAY].toObject()); + w.fri = Day::from_json(obj[FRIDAY].toObject()); + w.week_number = obj[WEEK_NUMBER].toInt(); + return w; +} + +QJsonObject Week::to_json() { + QJsonObject obj { + {MONDAY, mon.to_json()}, + {TUESDAY, tue.to_json()}, + {WEDNESDAY, wed.to_json()}, + {THURDAY, thu.to_json()}, + {FRIDAY, fri.to_json()}, + {WEEK_NUMBER, week_number} + }; + return obj; +} + +double Week::total() { + return mon.get_total() + tue.get_total() + wed.get_total() + thu.get_total() + fri.get_total(); +} + +Day Week::getMon() { + return mon; +} + +Day Week::getTue() { + return tue; +} + +Day Week::getWed() { + return wed; +} + +Day Week::getThu() { + return thu; +} + +Day Week::getFri() { + return fri; +} + +int Week::getWeekNumber() { + return week_number; +} + +void Week::setMon(Day value) { + mon = value; +} + +void Week::setTue(Day value) { + tue = value; +} + +void Week::setWed(Day value) { + wed = value; +} + +void Week::setThu(Day value) { + thu = value; +} + +void Week::setFri(Day value) { + fri = value; +} + +void Week::setWeekNumber(int value) { + week_number = value; +} diff --git a/sources/week.h b/sources/week.h new file mode 100644 index 0000000..ae8d817 --- /dev/null +++ b/sources/week.h @@ -0,0 +1,46 @@ +#ifndef WEEK_H +#define WEEK_H + +#define MONDAY "monday" +#define TUESDAY "tuesday" +#define WEDNESDAY "wednesday" +#define THURDAY "thurday" +#define FRIDAY "friday" +#define WEEK_NUMBER "weekNumber" + +#include +#include "day.h" + +class Week +{ +public: + Week(); + double total(); + + void setMon(Day); + void setTue(Day); + void setWed(Day); + void setThu(Day); + void setFri(Day); + void setWeekNumber(int); + + Day getMon(); + Day getTue(); + Day getWed(); + Day getThu(); + Day getFri(); + int getWeekNumber(); + + static Week from_json(QJsonObject); + QJsonObject to_json(); + +private: + Day mon; + Day tue; + Day wed; + Day thu; + Day fri; + int week_number; +}; + +#endif // WEEK_H diff --git a/sources/welcome.cpp b/sources/welcome.cpp new file mode 100644 index 0000000..1e4488d --- /dev/null +++ b/sources/welcome.cpp @@ -0,0 +1,79 @@ +#include "welcome.h" +#include "ui_welcome.h" + +Welcome::Welcome(Week wtemplate, QWidget *parent) : + QDialog(parent), + ui(new Ui::Welcome) +{ + ui->setupUi(this); + w = wtemplate; + init(); +} + +Welcome::~Welcome() +{ + delete ui; +} + +void Welcome::init() { + set_value_to_widget(); + objectId.insert(ui->mon_button->objectName(), Identifier::mon); + objectId.insert(ui->tue_button->objectName(), Identifier::tue); + objectId.insert(ui->wed_button->objectName(), Identifier::wed); + objectId.insert(ui->thu_button->objectName(), Identifier::thu); + objectId.insert(ui->fri_button->objectName(), Identifier::fri); + connect(ui->mon_button, &QPushButton::clicked, this, &Welcome::edit); + connect(ui->tue_button, &QPushButton::clicked, this, &Welcome::edit); + connect(ui->wed_button, &QPushButton::clicked, this, &Welcome::edit); + connect(ui->thu_button, &QPushButton::clicked, this, &Welcome::edit); + connect(ui->fri_button, &QPushButton::clicked, this, &Welcome::edit); +} + +Week Welcome::get_result() { + return w; +} + +void Welcome::set_value_to_widget() { + ui->mon_time_label->setText(Tools::double_to_string_time(w.getMon().get_total())); + ui->tue_time_label->setText(Tools::double_to_string_time(w.getTue().get_total())); + ui->wed_time_label->setText(Tools::double_to_string_time(w.getWed().get_total())); + ui->thu_time_label->setText(Tools::double_to_string_time(w.getThu().get_total())); + ui->fri_time_label->setText(Tools::double_to_string_time(w.getFri().get_total())); + ui->total->setText(Tools::double_to_string_time(w.total())); +} + +void Welcome::edit() { + QString name = QObject::sender()->objectName(); + switch (get_identifier(name)) { + case mon: + w.setMon(modify_value(w.getMon())); + break; + case tue: + w.setTue(modify_value(w.getTue())); + break; + case wed: + w.setWed(modify_value(w.getWed())); + break; + case thu: + w.setThu(modify_value(w.getThu())); + break; + case fri: + w.setFri(modify_value(w.getFri())); + break; + } + set_value_to_widget(); +} + +Day Welcome::modify_value(Day d) { + SetDayDialog sdd(d, this); + int result = sdd.exec(); + if (result == QDialog::Accepted) { + return sdd.get_result(); + } + return d; +} + +Identifier Welcome::get_identifier(QString objectName) { + return objectId[objectName]; +} + diff --git a/sources/welcome.h b/sources/welcome.h new file mode 100644 index 0000000..c310d01 --- /dev/null +++ b/sources/welcome.h @@ -0,0 +1,50 @@ +#ifndef WELCOME_H +#define WELCOME_H + +#include +#include +#include + +#include "week.h" +#include "day.h" +#include "tools.h" +#include "setdaydialog.h" + +enum Identifier { + mon = 1, + tue = 2, + wed = 3, + thu = 4, + fri = 5 +}; + +namespace Ui { +class Welcome; +} + +class Welcome : public QDialog +{ + Q_OBJECT + +public: + explicit Welcome(Week tpl, QWidget *parent = nullptr); + ~Welcome(); + + Week get_result(); + +private: + Ui::Welcome *ui; + + Week w; + QMap objectId; + + void init(); + void set_value_to_widget(); + Identifier get_identifier(QString objectName); + Day modify_value(Day); + +public slots: + void edit(); +}; + +#endif // WELCOME_H diff --git a/stylesheets.qrc b/stylesheets.qrc new file mode 100644 index 0000000..feeffec --- /dev/null +++ b/stylesheets.qrc @@ -0,0 +1,5 @@ + + + stylesheets/style.qss + + diff --git a/stylesheets/style.qss b/stylesheets/style.qss new file mode 100644 index 0000000..a33f0ee --- /dev/null +++ b/stylesheets/style.qss @@ -0,0 +1,395 @@ +/* +Material Dark Style Sheet for QT Applications +Author: Jaime A. Quiroga P. +Inspired on https://github.com/jxfwinter/qt-material-stylesheet +Company: GTRONICK +Last updated: 04/12/2018, 15:00. +Available at: https://github.com/GTRONICK/QSS/blob/master/MaterialDark.qss +*/ + +* { + font-size: 16px; +} + +QMainWindow { + background-color:#1e1d23; +} +QDialog { + background-color:#1e1d23; +} +QColorDialog { + background-color:#1e1d23; +} +QTextEdit { + background-color:#1e1d23; + color: #a9b7c6; +} +QPlainTextEdit { + selection-background-color:#007b50; + background-color:#1e1d23; + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: transparent; + border-width: 1px; + color: #a9b7c6; +} +QPushButton{ + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: transparent; + border-width: 1px; + border-style: solid; + color: #a9b7c6; + padding: 2px; + background-color: #1e1d23; +} +QPushButton::default{ + border-style: inset; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: #04b97f; + border-width: 1px; + color: #a9b7c6; + padding: 2px; + background-color: #1e1d23; +} +QToolButton { + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: #04b97f; + border-bottom-width: 1px; + border-style: solid; + color: #a9b7c6; + padding: 2px; + background-color: #1e1d23; +} +QToolButton:hover{ + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: #37efba; + border-bottom-width: 2px; + border-style: solid; + color: #FFFFFF; + padding-bottom: 1px; + background-color: #1e1d23; +} +QPushButton:hover{ + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: #37efba; + border-bottom-width: 1px; + border-style: solid; + color: #FFFFFF; + padding-bottom: 2px; + background-color: #1e1d23; +} +QPushButton:pressed{ + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: #37efba; + border-bottom-width: 2px; + border-style: solid; + color: #37efba; + padding-bottom: 1px; + background-color: #1e1d23; +} +QPushButton:disabled{ + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: #808086; + border-bottom-width: 2px; + border-style: solid; + color: #808086; + padding-bottom: 1px; + background-color: #1e1d23; +} +QLineEdit { + border-width: 1px; border-radius: 4px; + border-color: rgb(58, 58, 58); + border-style: inset; + padding: 0 8px; + color: #a9b7c6; + background:#1e1d23; + selection-background-color:#007b50; + selection-color: #FFFFFF; +} +QLabel { + color: #a9b7c6; +} +QLCDNumber { + color: #37e6b4; +} +QProgressBar { + text-align: center; + color: rgb(240, 240, 240); + border-width: 1px; + border-radius: 10px; + border-color: rgb(58, 58, 58); + border-style: inset; + background-color:#1e1d23; +} +QProgressBar::chunk { + background-color: #04b97f; + border-radius: 5px; +} +QMenuBar { + background-color: #1e1d23; +} +QMenuBar::item { + color: #a9b7c6; + spacing: 3px; + padding: 1px 4px; + background: #1e1d23; +} + +QMenuBar::item:selected { + background:#1e1d23; + color: #FFFFFF; +} +QMenu::item:selected { + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: #04b97f; + border-bottom-color: transparent; + border-left-width: 2px; + color: #FFFFFF; + padding-left:15px; + padding-top:4px; + padding-bottom:4px; + padding-right:7px; + background-color: #1e1d23; +} +QMenu::item { + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: transparent; + border-bottom-width: 1px; + border-style: solid; + color: #a9b7c6; + padding-left:17px; + padding-top:4px; + padding-bottom:4px; + padding-right:7px; + background-color: #1e1d23; +} +QMenu{ + background-color:#1e1d23; +} +QTabWidget { + color:rgb(0,0,0); + background-color:#1e1d23; +} +QTabWidget::pane { + border-color: rgb(77,77,77); + background-color:#1e1d23; + border-style: solid; + border-width: 1px; + border-radius: 6px; +} +QTabBar::tab { + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: transparent; + border-bottom-width: 1px; + border-style: solid; + color: #808086; + padding: 3px; + margin-left:3px; + background-color: #1e1d23; +} +QTabBar::tab:selected, QTabBar::tab:last:selected, QTabBar::tab:hover { + border-style: solid; + border-top-color: transparent; + border-right-color: transparent; + border-left-color: transparent; + border-bottom-color: #04b97f; + border-bottom-width: 2px; + border-style: solid; + color: #FFFFFF; + padding-left: 3px; + padding-bottom: 2px; + margin-left:3px; + background-color: #1e1d23; +} + +QCheckBox { + color: #a9b7c6; + padding: 2px; +} +QCheckBox:disabled { + color: #808086; + padding: 2px; +} + +QCheckBox:hover { + border-radius:4px; + border-style:solid; + padding-left: 1px; + padding-right: 1px; + padding-bottom: 1px; + padding-top: 1px; + border-width:1px; + border-color: rgb(87, 97, 106); + background-color:#1e1d23; +} +QCheckBox::indicator:checked { + + height: 10px; + width: 10px; + border-style:solid; + border-width: 1px; + border-color: #04b97f; + color: #a9b7c6; + background-color: #04b97f; +} +QCheckBox::indicator:unchecked { + + height: 10px; + width: 10px; + border-style:solid; + border-width: 1px; + border-color: #04b97f; + color: #a9b7c6; + background-color: transparent; +} +QRadioButton { + color: #a9b7c6; + background-color: #1e1d23; + padding: 1px; +} +QRadioButton::indicator:checked { + height: 10px; + width: 10px; + border-style:solid; + border-radius:5px; + border-width: 1px; + border-color: #04b97f; + color: #a9b7c6; + background-color: #04b97f; +} +QRadioButton::indicator:!checked { + height: 10px; + width: 10px; + border-style:solid; + border-radius:5px; + border-width: 1px; + border-color: #04b97f; + color: #a9b7c6; + background-color: transparent; +} +QStatusBar { + color:#027f7f; +} +QSpinBox { + color: #a9b7c6; + background-color: #1e1d23; +} +QDoubleSpinBox { + color: #a9b7c6; + background-color: #1e1d23; +} +QTimeEdit { + color: #a9b7c6; + background-color: #1e1d23; +} +QDateTimeEdit { + color: #a9b7c6; + background-color: #1e1d23; +} +QDateEdit { + color: #a9b7c6; + background-color: #1e1d23; +} +QComboBox { + color: #a9b7c6; + background: #1e1d23; +} +QComboBox:editable { + background: #1e1d23; + color: #a9b7c6; + selection-background-color: #1e1d23; +} +QComboBox QAbstractItemView { + color: #a9b7c6; + background: #1e1d23; + selection-color: #FFFFFF; + selection-background-color: #1e1d23; +} +QComboBox:!editable:on, QComboBox::drop-down:editable:on { + color: #a9b7c6; + background: #1e1d23; +} +QFontComboBox { + color: #a9b7c6; + background-color: #1e1d23; +} +QToolBox { + color: #a9b7c6; + background-color: #1e1d23; +} +QToolBox::tab { + color: #a9b7c6; + background-color: #1e1d23; +} +QToolBox::tab:selected { + color: #FFFFFF; + background-color: #1e1d23; +} +QScrollArea { + color: #FFFFFF; + background-color: #1e1d23; +} +QSlider::groove:horizontal { + height: 5px; + background: #04b97f; +} +QSlider::groove:vertical { + width: 5px; + background: #04b97f; +} +QSlider::handle:horizontal { + background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f); + border: 1px solid #5c5c5c; + width: 14px; + margin: -5px 0; + border-radius: 7px; +} +QSlider::handle:vertical { + background: qlineargradient(x1:1, y1:1, x2:0, y2:0, stop:0 #b4b4b4, stop:1 #8f8f8f); + border: 1px solid #5c5c5c; + height: 14px; + margin: 0 -5px; + border-radius: 7px; +} +QSlider::add-page:horizontal { + background: white; +} +QSlider::add-page:vertical { + background: white; +} +QSlider::sub-page:horizontal { + background: #04b97f; +} +QSlider::sub-page:vertical { + background: #04b97f; +} \ No newline at end of file diff --git a/ui/aboutbox.ui b/ui/aboutbox.ui new file mode 100644 index 0000000..15073ad --- /dev/null +++ b/ui/aboutbox.ui @@ -0,0 +1,182 @@ + + + AboutBox + + + Qt::ApplicationModal + + + + 0 + 0 + 707 + 363 + + + + + 707 + 363 + + + + + 707 + 363 + + + + À propos de Chronos + + + true + + + + + 0 + 0 + 707 + 111 + + + + + 707 + 111 + + + + + 707 + 111 + + + + border-image: url(:/clock/pictures/banner.png); + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 30 + 150 + 551 + 21 + + + + font-size: 12px; + + + Author: Alexis Delhaie + + + + + + 30 + 190 + 551 + 21 + + + + font-size: 12px; + + + Version: 1.0.0 (Beta 2) + + + + + + 30 + 230 + 541 + 21 + + + + font-size: 12px; + + + Made with Qt 5.15.0 MinGW 64bit (C++17) + + + + + + 390 + 160 + 301 + 181 + + + + + + + false + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.5pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Application icon: Alexis Delhaie (me)</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">About box banner: Alexis Delhaie (me)</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Clock image: iconsdb, Iconic (MIT License)</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Running image: Icons made by </span><a href="https://www.flaticon.com/authors/freepik"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Freepik</span></a><span style=" font-size:10pt;"> from </span><a href="https://www.flaticon.com/"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">www.flaticon.com</span></a></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; text-decoration: underline; color:#0000ff;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Calendar image: Icons made by </span><a href="https://www.flaticon.com/authors/freepik"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Freepik</span></a><span style=" font-size:10pt;"> from </span><a href="https://www.flaticon.com/"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">www.flaticon.com</span></a></p></body></html> + + + + + + 393 + 130 + 211 + 21 + + + + font-size: 12px; + + + Third party: + + + + + + 30 + 270 + 541 + 21 + + + + font-size: 12px; + + + Installer/Updater made with Delphi 10.3 Community + + + + + + diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui new file mode 100644 index 0000000..14833d5 --- /dev/null +++ b/ui/mainwindow.ui @@ -0,0 +1,705 @@ + + + MainWindow + + + + 0 + 0 + 1206 + 649 + + + + + 1206 + 649 + + + + + 1206 + 649 + + + + + + + Chronos + + + + + + + + + 192 + 19 + 20 + 81 + + + + Qt::Vertical + + + + + + 240 + 29 + 141 + 61 + + + + + + + + 59 + 59 + + + + + 59 + 59 + + + + border-image: url(:/clock/pictures/sport.png) 0 0 0 0 stretch stretch; + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + font-size: 14px; + + + Retard + + + + + + + font-size: 28px; +color: white; + + + 0h + + + + + + + + + + + 40 + 29 + 141 + 61 + + + + + + + + 59 + 59 + + + + + 59 + 59 + + + + border-image: url(:/clock/pictures/clock-8-128.png) 0 0 0 0 stretch stretch; + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + font-size: 14px; + + + Temps total + + + + + + + font-size: 28px; +color: white; + + + 0h + + + + + + + + + + + 1022 + 23 + 153 + 61 + + + + + + + + + + + + Date : + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 100 + 32 + + + + + 100 + 32 + + + + + + + border: 1px solid white + + + false + + + false + + + QAbstractSpinBox::NoButtons + + + QAbstractSpinBox::CorrectToNearestValue + + + true + + + + + + + + + + + + Semaine : 0 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + 427 + 30 + 141 + 61 + + + + + + + + 59 + 59 + + + + + 59 + 59 + + + + border-image: url(:/clock/pictures/calendar.png) 0 0 0 0 stretch stretch; + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + font-size: 14px; + + + Avance + + + + + + + font-size: 28px; +color: white; + + + 0h + + + + + + + + + + + 378 + 20 + 20 + 81 + + + + Qt::Vertical + + + + + + 930 + 600 + 261 + 31 + + + + Modifier la semaine de référence + + + + + + 129 + 247 + 911 + 191 + + + + + 45 + + + + + + + + 0 + 42 + + + + color: white; +font-size: 22px; + + + Lundi + + + Qt::AlignCenter + + + + + + + + 0 + 42 + + + + font-size: 28px; +color: white; + + + 0h + + + Qt::AlignCenter + + + + + + + + 0 + 31 + + + + Modifier + + + + + + + + + Qt::Vertical + + + + + + + + + + 0 + 42 + + + + color: white; +font-size: 22px; + + + Mardi + + + Qt::AlignCenter + + + + + + + + 0 + 42 + + + + font-size: 28px; +color: white; + + + 0h + + + Qt::AlignCenter + + + + + + + + 0 + 31 + + + + Modifier + + + + + + + + + Qt::Vertical + + + + + + + + + + 0 + 42 + + + + color: white; +font-size: 22px; + + + Mercredi + + + Qt::AlignCenter + + + + + + + + 0 + 42 + + + + font-size: 28px; +color: white; + + + 0h + + + Qt::AlignCenter + + + + + + + + 0 + 31 + + + + Modifier + + + + + + + + + Qt::Vertical + + + + + + + + + + 0 + 42 + + + + color: white; +font-size: 22px; + + + Jeudi + + + Qt::AlignCenter + + + + + + + + 0 + 42 + + + + font-size: 28px; +color: white; + + + 0h + + + Qt::AlignCenter + + + + + + + + 0 + 31 + + + + Modifier + + + + + + + + + Qt::Vertical + + + + + + + + + + 0 + 42 + + + + color: white; +font-size: 22px; + + + Vendredi + + + Qt::AlignCenter + + + + + + + + 0 + 42 + + + + font-size: 28px; +color: white; + + + 0h + + + Qt::AlignCenter + + + + + + + + 0 + 31 + + + + Modifier + + + + + + + + + + + 20 + 588 + 44 + 44 + + + + + 44 + 44 + + + + + 44 + 44 + + + + false + + + border-image: url(:/clock/pictures/about.png) 0 0 0 0 stretch stretch; + + + + + + true + + + + + + + diff --git a/ui/setdaydialog.ui b/ui/setdaydialog.ui new file mode 100644 index 0000000..faaf658 --- /dev/null +++ b/ui/setdaydialog.ui @@ -0,0 +1,242 @@ + + + SetDayDialog + + + Qt::WindowModal + + + + 0 + 0 + 419 + 177 + + + + + 419 + 177 + + + + + 419 + 177 + + + + Modifier un jour + + + true + + + + + 320 + 140 + 75 + 23 + + + + Valider + + + + + + 40 + 49 + 91 + 31 + + + + Qt::AlignCenter + + + QAbstractSpinBox::NoButtons + + + + + + + + + 300 + 49 + 91 + 31 + + + + Qt::AlignCenter + + + QAbstractSpinBox::NoButtons + + + + + + + + + 170 + 49 + 91 + 31 + + + + Qt::AlignCenter + + + QAbstractSpinBox::NoButtons + + + 0.450000000000000 + + + + + + 40 + 9 + 91 + 31 + + + + Arrivé + + + Qt::AlignCenter + + + + + + 170 + 9 + 91 + 31 + + + + Pause + + + Qt::AlignCenter + + + + + + 300 + 9 + 91 + 31 + + + + Départ + + + Qt::AlignCenter + + + + + + 40 + 103 + 141 + 61 + + + + + + + + 59 + 59 + + + + + 59 + 59 + + + + border-image: url(:/clock/pictures/clock-8-128.png) 0 0 0 0 stretch stretch; + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + font-size: 14px; + + + Temps total + + + + + + + font-size: 28px; +color: white; + + + 0h + + + + + + + + + + + + pushButton + clicked() + SetDayDialog + accept() + + + 357 + 151 + + + 209 + 88 + + + + + diff --git a/ui/welcome.ui b/ui/welcome.ui new file mode 100644 index 0000000..8fc5c2e --- /dev/null +++ b/ui/welcome.ui @@ -0,0 +1,370 @@ + + + Welcome + + + Qt::ApplicationModal + + + + 0 + 0 + 516 + 276 + + + + + 516 + 276 + + + + + 516 + 276 + + + + + 11 + + + + Définir le temps de travail + + + + + + true + + + + + 30 + 20 + 261 + 201 + + + + + 11 + + + + + + + + + + 11 + + + + Lundi + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + + + + 0h + + + + + + + Modifier + + + false + + + + + + + + + + + + 11 + + + + Mardi + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + + + + 0h + + + + + + + Modifier + + + false + + + + + + + + + + + + 11 + + + + Mercredi + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + + + + 0h + + + + + + + Modifier + + + false + + + + + + + + + + + + 11 + + + + Jeudi + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + + + + 0h + + + + + + + Modifier + + + false + + + + + + + + + + + + 11 + + + + Vendredi + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + + + + 0h + + + + + + + Modifier + + + false + + + + + + + + + + + 400 + 230 + 93 + 28 + + + + + 11 + + + + + + + &Valider + + + false + + + true + + + false + + + + + + 300 + 60 + 201 + 103 + + + + + + + + 11 + + + + Temps total + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + -1 + + + + font-size: 28px; +color: white; + + + 0h + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + pushButton + clicked() + Welcome + accept() + + + 446 + 243 + + + 257 + 137 + + + + +