Compare commits
23 Commits
v1.0.0-bet
...
v2.3.0RC2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73955a1b8b | ||
|
|
0c65ab2cb5 | ||
|
|
5515112404 | ||
|
|
8e11f3e210 | ||
|
|
9721350fb0 | ||
|
|
689689f243 | ||
|
|
fd4b766c4d | ||
|
|
6a44c4afd9 | ||
|
|
63d1ca329f | ||
|
|
1753a34957 | ||
|
|
a6593a0151 | ||
|
|
877fde22e0 | ||
|
|
92d0c14df7 | ||
|
|
deb49909d1 | ||
|
|
9bb56fe174 | ||
|
|
ffebb3c7d7 | ||
|
|
c49966b47c | ||
|
|
e628ef9e94 | ||
|
|
2b95b41257 | ||
|
|
b07b7b69eb | ||
|
|
102f720d29 | ||
|
|
08dcecbee9 | ||
|
|
4308d9e93a |
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.pro.*
|
||||
93
Chronos.pro
@@ -1,18 +1,66 @@
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += widgets
|
||||
|
||||
CONFIG += c++17
|
||||
|
||||
win32:VERSION = 2.3.0.0 # major.minor.patch.build
|
||||
else:VERSION = 2.3.0 # major.minor.patch
|
||||
|
||||
DEFINES += APP_VERSION=\"\\\"$${VERSION}\\\"\"
|
||||
|
||||
# remove possible other optimization flags
|
||||
QMAKE_CXXFLAGS_RELEASE -= -O
|
||||
QMAKE_CXXFLAGS_RELEASE -= -O1
|
||||
QMAKE_CXXFLAGS_RELEASE *= -O2
|
||||
win32 {
|
||||
message("Build for Windows")
|
||||
QMAKE_CXXFLAGS_RELEASE -= -O
|
||||
QMAKE_CXXFLAGS_RELEASE -= -O1
|
||||
QMAKE_CXXFLAGS_RELEASE *= -O2
|
||||
DEFINES += APP_OS=\"\\\"Windows\\\"\"
|
||||
DEFINES += APP_OS_VERSION=\"\\\"$$system(ver)\\\"\"
|
||||
equals(QMAKE_TARGET.arch, arm64) {
|
||||
message("CPU Architecture : aarch64")
|
||||
DEFINES += APP_ARCH=\"\\\"arm64\\\"\"
|
||||
}
|
||||
equals(QMAKE_TARGET.arch, x86_64) {
|
||||
message("CPU Architecture : x64")
|
||||
QMAKE_CXXFLAGS_RELEASE += -favor:INTEL64
|
||||
DEFINES += APP_ARCH=\"\\\"x64\\\"\"
|
||||
}
|
||||
RC_ICONS = icon.ico
|
||||
QMAKE_TARGET_COMPANY = "Aurelie Delhaie"
|
||||
QMAKE_TARGET_PRODUCT = "Chronos"
|
||||
QMAKE_TARGET_DESCRIPTION = "Chronos"
|
||||
}
|
||||
|
||||
# add the desired -O3 if not present, MinGW only
|
||||
# QMAKE_CXXFLAGS_RELEASE *= -O3
|
||||
macx {
|
||||
message("Build for macOS")
|
||||
ICON = icon.icns
|
||||
QMAKE_INFO_PLIST = Info.plist
|
||||
QMAKE_CXXFLAGS_RELEASE -= -O
|
||||
QMAKE_CXXFLAGS_RELEASE -= -O1
|
||||
QMAKE_CXXFLAGS_RELEASE -= -O2
|
||||
QMAKE_CXXFLAGS_RELEASE *= -O3
|
||||
QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64
|
||||
DEFINES += APP_OS=\"\\\"macOS\\\"\"
|
||||
DEFINES += APP_OS_VERSION=\"\\\"$$system(uname -r)\\\"\"
|
||||
DEFINES += APP_ARCH=\"\\\"universal\\\"\"
|
||||
}
|
||||
|
||||
RC_ICONS = icon.ico
|
||||
linux-* {
|
||||
message("Build for Linux")
|
||||
DEFINES += APP_OS=\"\\\"$$system(cat /etc/issue | cut -d\' \' -f1)\\\"\"
|
||||
DEFINES += APP_OS_VERSION=\"\\\"$$system(uname -r)\\\"\"
|
||||
DEFINES += APP_ARCH=\"\\\"$$system(uname -m)\\\"\"
|
||||
ARCH = $$system(uname -m)
|
||||
equals(ARCH, aarch64) {
|
||||
message("CPU Architecture : aarch64")
|
||||
QMAKE_CXXFLAGS_RELEASE += -mtune=cortex-a72
|
||||
}
|
||||
equals(ARCH, amd64) {
|
||||
message("CPU Architecture : amd64")
|
||||
QMAKE_CXXFLAGS_RELEASE += -march=skylake
|
||||
}
|
||||
QMAKE_CXXFLAGS_RELEASE *= -O3
|
||||
}
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any Qt feature that has been marked deprecated (the exact warnings
|
||||
@@ -26,25 +74,42 @@ DEFINES += QT_DEPRECATED_WARNINGS
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
sources/configurationmanager.cpp \
|
||||
sources/configurationdialog.cpp \
|
||||
sources/aboutbox.cpp \
|
||||
sources/day.cpp \
|
||||
sources/breakdialog.cpp \
|
||||
sources/models/breakpoint.cpp \
|
||||
sources/models/day.cpp \
|
||||
sources/main.cpp \
|
||||
sources/mainwindow.cpp \
|
||||
sources/models/settings.cpp \
|
||||
sources/setdaydialog.cpp \
|
||||
sources/tools.cpp \
|
||||
sources/week.cpp \
|
||||
sources/welcome.cpp
|
||||
sources/models/week.cpp \
|
||||
sources/weekoption.cpp \
|
||||
sources/welcome.cpp \
|
||||
sources/models/year.cpp
|
||||
|
||||
HEADERS += \
|
||||
sources/configurationmanager.h \
|
||||
sources/configurationdialog.h \
|
||||
sources/aboutbox.h \
|
||||
sources/day.h \
|
||||
sources/breakdialog.h \
|
||||
sources/models/breakpoint.h \
|
||||
sources/models/day.h \
|
||||
sources/mainwindow.h \
|
||||
sources/models/settings.h \
|
||||
sources/setdaydialog.h \
|
||||
sources/tools.h \
|
||||
sources/week.h \
|
||||
sources/welcome.h
|
||||
sources/models/week.h \
|
||||
sources/weekoption.h \
|
||||
sources/welcome.h \
|
||||
sources/models/year.h
|
||||
|
||||
FORMS += \
|
||||
ui/weekoption.ui \
|
||||
ui/configurationdialog.ui \
|
||||
ui/breakdialog.ui \
|
||||
ui/aboutbox.ui \
|
||||
ui/mainwindow.ui \
|
||||
ui/setdaydialog.ui \
|
||||
|
||||
340
Chronos.pro.user
@@ -1,340 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 4.12.4, 2020-08-28T14:45:30. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
<value type="QByteArray">{39b4df9e-fc10-428a-bc34-924198bd0973}</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||
<value type="int">0</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||
<value type="QString" key="language">Cpp</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||
<value type="QString" key="language">QmlJS</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
|
||||
<value type="QString">-fno-delayed-template-parsing</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
|
||||
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.Questionable</value>
|
||||
<valuemap type="QVariantMap" key="ClangTools">
|
||||
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
|
||||
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
|
||||
<value type="int" key="ClangTools.ParallelJobs">4</value>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
|
||||
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
|
||||
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.15.0 MSVC2019 64bit</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.0 MSVC2019 64bit</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5150.win64_msvc2019_64_kit</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||
<value type="bool">true</value>
|
||||
<value type="int" key="EnableQmlDebugging">0</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\robof\OneDrive\Documents\build-Chronos-Desktop_Qt_5_15_0_MSVC2019_64bit-Debug</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/robof/OneDrive/Documents/build-Chronos-Desktop_Qt_5_15_0_MSVC2019_64bit-Debug</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||
<value type="int" key="QtQuickCompiler">2</value>
|
||||
<value type="int" key="SeparateDebugInfo">2</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||
<value type="bool">true</value>
|
||||
<value type="int" key="EnableQmlDebugging">2</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\robof\OneDrive\Documents\build-Chronos-Desktop_Qt_5_15_0_MSVC2019_64bit-Release</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/robof/OneDrive/Documents/build-Chronos-Desktop_Qt_5_15_0_MSVC2019_64bit-Release</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||
<value type="int" key="QtQuickCompiler">0</value>
|
||||
<value type="int" key="SeparateDebugInfo">2</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||
<value type="bool">true</value>
|
||||
<value type="int" key="EnableQmlDebugging">0</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\robof\OneDrive\Documents\build-Chronos-Desktop_Qt_5_15_0_MSVC2019_64bit-Profile</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/robof/OneDrive/Documents/build-Chronos-Desktop_Qt_5_15_0_MSVC2019_64bit-Profile</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||
<value type="int" key="QtQuickCompiler">0</value>
|
||||
<value type="int" key="SeparateDebugInfo">0</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
|
||||
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
|
||||
<value type="QString">cpu-cycles</value>
|
||||
</valuelist>
|
||||
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
|
||||
<value type="int" key="Analyzer.Perf.Frequency">250</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
|
||||
<value type="QString">-e</value>
|
||||
<value type="QString">cpu-cycles</value>
|
||||
<value type="QString">--call-graph</value>
|
||||
<value type="QString">dwarf,4096</value>
|
||||
<value type="QString">-F</value>
|
||||
<value type="QString">250</value>
|
||||
</valuelist>
|
||||
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
|
||||
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
||||
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
||||
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
|
||||
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||
<value type="int">0</value>
|
||||
<value type="int">1</value>
|
||||
<value type="int">2</value>
|
||||
<value type="int">3</value>
|
||||
<value type="int">4</value>
|
||||
<value type="int">5</value>
|
||||
<value type="int">6</value>
|
||||
<value type="int">7</value>
|
||||
<value type="int">8</value>
|
||||
<value type="int">9</value>
|
||||
<value type="int">10</value>
|
||||
<value type="int">11</value>
|
||||
<value type="int">12</value>
|
||||
<value type="int">13</value>
|
||||
<value type="int">14</value>
|
||||
</valuelist>
|
||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/robof/OneDrive/Documents/Chronos/Chronos.pro</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/Users/robof/OneDrive/Documents/Chronos/Chronos.pro</value>
|
||||
<value type="QString" key="RunConfiguration.Arguments"></value>
|
||||
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
|
||||
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
|
||||
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/Users/robof/OneDrive/Documents/build-Chronos-Desktop_Qt_5_15_0_MSVC2019_64bit-Release</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||
<value type="int">1</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||
<value type="int">22</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>Version</variable>
|
||||
<value type="int">22</value>
|
||||
</data>
|
||||
</qtcreator>
|
||||
24
Info.plist
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>Chronos</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.aureliedelhaie.Chronos</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.14</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||
<true/>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>icon.icns</string>
|
||||
</dict>
|
||||
</plist>
|
||||
7
LICENSE
Normal file
@@ -0,0 +1,7 @@
|
||||
Copyright 2022 Aurélie Delhaie
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -1 +1,10 @@
|
||||
# Chronos
|
||||
|
||||
## Install on Ubuntu
|
||||
You need to install Qt 6 dependencies
|
||||
|
||||
```sh
|
||||
sudo apt install libqt6widgets6 libqt6gui6 libqt6core5compat6 libqt6core5compat6 libqt6core6 libqt6dbus6
|
||||
```
|
||||
|
||||
then download binary from the release section
|
||||
|
||||
1
find_dependencies_linux.sh
Normal file
@@ -0,0 +1 @@
|
||||
ldd $1 | awk '{print $1}' | sed 's/\..*//' | while read n; do apt-cache search ^$n | grep libqt6 | cut -f 1 -d '-' >> deps.txt; done
|
||||
BIN
icon-1.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
icon.ico
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 125 KiB |
@@ -1,9 +1,9 @@
|
||||
<RCC>
|
||||
<qresource prefix="/clock">
|
||||
<file>pictures/clock-8-128.png</file>
|
||||
<file>pictures/sport.png</file>
|
||||
<file>pictures/calendar.png</file>
|
||||
<file>pictures/about.png</file>
|
||||
<file>pictures/banner.png</file>
|
||||
<file>pictures/validate.png</file>
|
||||
<file>pictures/warning.png</file>
|
||||
<file>pictures/leave.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 3.2 KiB |
BIN
pictures/leave.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 8.5 KiB |
BIN
pictures/validate.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
pictures/warning.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
sources/.DS_Store
vendored
Normal file
@@ -6,9 +6,36 @@ AboutBox::AboutBox(QWidget *parent) :
|
||||
ui(new Ui::AboutBox)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
|
||||
xmax = ui->frame->x() + ui->frame->width();
|
||||
xmin = ui->frame->x();
|
||||
ymax = ui->frame->x() + ui->frame->height();
|
||||
ymin = ui->frame->y();
|
||||
ui->systemLabel->setText(QString("Built on %1 %2 (%3)").arg(APP_OS, APP_OS_VERSION, APP_ARCH));
|
||||
ui->versionLabel->setText(QString("Version: %1").arg(APP_VERSION));
|
||||
}
|
||||
|
||||
AboutBox::~AboutBox()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void AboutBox::mousePressEvent(QMouseEvent *event) {
|
||||
m_nMouseClick_X_Coordinate = event->position().rx();
|
||||
m_nMouseClick_Y_Coordinate = event->position().ry();
|
||||
}
|
||||
|
||||
void AboutBox::mouseMoveEvent(QMouseEvent *event) {
|
||||
if (isWidgetIsTitleBar()) {
|
||||
move(event->globalPosition().rx() - m_nMouseClick_X_Coordinate ,
|
||||
event->globalPosition().ry() - m_nMouseClick_Y_Coordinate);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool AboutBox::isWidgetIsTitleBar() {
|
||||
return (m_nMouseClick_X_Coordinate >= xmin &&
|
||||
m_nMouseClick_X_Coordinate < xmax &&
|
||||
m_nMouseClick_Y_Coordinate >= ymin &&
|
||||
m_nMouseClick_Y_Coordinate < ymax);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
#define ABOUTBOX_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QMouseEvent>
|
||||
#include <iostream>
|
||||
#include <QSysInfo>
|
||||
|
||||
namespace Ui {
|
||||
class AboutBox;
|
||||
@@ -18,6 +20,16 @@ public:
|
||||
|
||||
private:
|
||||
Ui::AboutBox *ui;
|
||||
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
void mouseMoveEvent(QMouseEvent *event);
|
||||
int m_nMouseClick_X_Coordinate;
|
||||
int m_nMouseClick_Y_Coordinate;
|
||||
int xmax;
|
||||
int xmin;
|
||||
int ymax;
|
||||
int ymin;
|
||||
inline bool isWidgetIsTitleBar();
|
||||
};
|
||||
|
||||
#endif // ABOUTBOX_H
|
||||
|
||||
32
sources/breakdialog.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include "breakdialog.h"
|
||||
#include "ui_breakdialog.h"
|
||||
|
||||
BreakDialog::BreakDialog(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::BreakDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
connect(ui->startTime, &QTimeEdit::timeChanged, this, &BreakDialog::compute);
|
||||
connect(ui->endTime, &QTimeEdit::timeChanged, this, &BreakDialog::compute);
|
||||
}
|
||||
|
||||
BreakDialog::~BreakDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
BreakPoint BreakDialog::get_result()
|
||||
{
|
||||
return bp;
|
||||
}
|
||||
|
||||
void BreakDialog::compute()
|
||||
{
|
||||
if (ui->endTime->time() < ui->startTime->time()) {
|
||||
ui->endTime->setTime(ui->startTime->time());
|
||||
}
|
||||
bp.setStart(ui->startTime->time());
|
||||
bp.setEnd(ui->endTime->time());
|
||||
float minutes = bp.getDuration();
|
||||
ui->totalTime->setText(Tools::double_to_string_counter(minutes));
|
||||
}
|
||||
30
sources/breakdialog.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#ifndef BREAKDIALOG_H
|
||||
#define BREAKDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
#include "models/breakpoint.h"
|
||||
#include "tools.h"
|
||||
|
||||
namespace Ui {
|
||||
class BreakDialog;
|
||||
}
|
||||
|
||||
class BreakDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit BreakDialog(QWidget *parent = nullptr);
|
||||
~BreakDialog();
|
||||
BreakPoint get_result();
|
||||
|
||||
private slots:
|
||||
void compute();
|
||||
|
||||
private:
|
||||
Ui::BreakDialog *ui;
|
||||
BreakPoint bp;
|
||||
};
|
||||
|
||||
#endif // BREAKDIALOG_H
|
||||
32
sources/configurationdialog.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include "configurationdialog.h"
|
||||
#include "ui_configurationdialog.h"
|
||||
|
||||
ConfigurationDialog::ConfigurationDialog(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::ConfigurationDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
RefreshField();
|
||||
}
|
||||
|
||||
ConfigurationDialog::~ConfigurationDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void ConfigurationDialog::RefreshField()
|
||||
{
|
||||
Settings* s = mng.GetConfiguration();
|
||||
ui->cloud_url->setText(s->GetCloudUrl());
|
||||
ui->cloud_Email->setText(s->GetCloudEmail());
|
||||
ui->cloud_password->setText(s->GetCloudPassword());
|
||||
ui->cloud_agent->setText(s->GetCloudAgent());
|
||||
ui->cloud_enable->setCheckState(s->GetCloudEnabled() ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
|
||||
|
||||
bool cloudDisabled = !s->GetCloudEnabled();
|
||||
ui->cloud_url->setDisabled(cloudDisabled);
|
||||
ui->cloud_Email->setDisabled(cloudDisabled);
|
||||
ui->cloud_password->setDisabled(cloudDisabled);
|
||||
ui->cloud_agent->setDisabled(cloudDisabled);
|
||||
}
|
||||
|
||||
28
sources/configurationdialog.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#ifndef CONFIGURATIONDIALOG_H
|
||||
#define CONFIGURATIONDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
#include "configurationmanager.h"
|
||||
|
||||
namespace Ui {
|
||||
class ConfigurationDialog;
|
||||
}
|
||||
|
||||
class ConfigurationDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ConfigurationDialog(QWidget *parent = nullptr);
|
||||
~ConfigurationDialog();
|
||||
|
||||
private:
|
||||
Ui::ConfigurationDialog *ui;
|
||||
ConfigurationManager mng;
|
||||
|
||||
void RefreshField();
|
||||
|
||||
};
|
||||
|
||||
#endif // CONFIGURATIONDIALOG_H
|
||||
51
sources/configurationmanager.cpp
Normal file
@@ -0,0 +1,51 @@
|
||||
#include "configurationmanager.h"
|
||||
|
||||
ConfigurationManager::ConfigurationManager()
|
||||
{
|
||||
if (QFile::exists(GetPath())) {
|
||||
QFile* file = new QFile(GetPath());
|
||||
file->open(QIODevice::ReadOnly);
|
||||
auto json = QString(file->readAll());
|
||||
file->close();
|
||||
delete file;
|
||||
|
||||
QJsonObject obj = QJsonDocument::fromJson(json.toUtf8()).object();
|
||||
this->s = Settings::FromJSON(obj);
|
||||
} else {
|
||||
this->s = new Settings();
|
||||
Save();
|
||||
}
|
||||
}
|
||||
|
||||
ConfigurationManager::~ConfigurationManager()
|
||||
{
|
||||
delete s;
|
||||
}
|
||||
|
||||
Settings *ConfigurationManager::GetConfiguration()
|
||||
{
|
||||
return s;
|
||||
}
|
||||
|
||||
QString ConfigurationManager::GetPath() {
|
||||
QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
|
||||
if (!QDir(path).exists()) {
|
||||
QDir().mkpath(path);
|
||||
}
|
||||
path += "/";
|
||||
if (!QDir(path).exists()) {
|
||||
QDir().mkpath(path);
|
||||
}
|
||||
path += FILENAME;
|
||||
return path;
|
||||
}
|
||||
|
||||
void ConfigurationManager::Save() {
|
||||
QJsonDocument doc(s->ToJSON());
|
||||
QFile *f = new QFile(GetPath());
|
||||
if (f->open(QIODevice::WriteOnly)) {
|
||||
f->write(doc.toJson());
|
||||
f->close();
|
||||
}
|
||||
delete f;
|
||||
}
|
||||
27
sources/configurationmanager.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#ifndef CONFIGURATIONMANAGER_H
|
||||
#define CONFIGURATIONMANAGER_H
|
||||
|
||||
#define FILENAME "settings.json"
|
||||
|
||||
#include <QString>
|
||||
#include <QDir>
|
||||
#include <QStandardPaths>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonDocument>
|
||||
|
||||
#include "models/settings.h"
|
||||
|
||||
class ConfigurationManager
|
||||
{
|
||||
private:
|
||||
Settings *s;
|
||||
QString GetPath();
|
||||
void Save();
|
||||
public:
|
||||
ConfigurationManager();
|
||||
~ConfigurationManager();
|
||||
|
||||
Settings* GetConfiguration();
|
||||
};
|
||||
|
||||
#endif // CONFIGURATIONMANAGER_H
|
||||
@@ -1,66 +0,0 @@
|
||||
#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;
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
#ifndef DAY_H
|
||||
#define DAY_H
|
||||
|
||||
#define KEY_START "start"
|
||||
#define KEY_END "end"
|
||||
#define KEY_BREAK "break"
|
||||
|
||||
#include <QTime>
|
||||
#include <QJsonObject>
|
||||
#include <math.h>
|
||||
|
||||
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
|
||||
@@ -6,33 +6,16 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
, ui(new Ui::MainWindow)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->window_title->setText(this->windowTitle());
|
||||
this->setWindowFlags(Qt::FramelessWindowHint);
|
||||
init();
|
||||
}
|
||||
|
||||
void MainWindow::mousePressEvent(QMouseEvent *event) {
|
||||
m_nMouseClick_X_Coordinate = event->x();
|
||||
m_nMouseClick_Y_Coordinate = event->y();
|
||||
}
|
||||
|
||||
void MainWindow::mouseMoveEvent(QMouseEvent *event) {
|
||||
if (isWidgetIsTitleBar()) {
|
||||
move(event->globalX() - m_nMouseClick_X_Coordinate ,
|
||||
event->globalY() - m_nMouseClick_Y_Coordinate);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool MainWindow::isWidgetIsTitleBar() {
|
||||
return (m_nMouseClick_X_Coordinate >= xmin &&
|
||||
m_nMouseClick_X_Coordinate < xmax &&
|
||||
m_nMouseClick_Y_Coordinate >= ymin &&
|
||||
m_nMouseClick_Y_Coordinate < ymax);
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
delete week_template;
|
||||
foreach (Year *y, years) {
|
||||
delete y;
|
||||
}
|
||||
years.clear();
|
||||
delete ui;
|
||||
}
|
||||
|
||||
@@ -55,56 +38,67 @@ void MainWindow::init() {
|
||||
objectId.insert(ui->wed_button->objectName(), Identifier::wed);
|
||||
objectId.insert(ui->thu_button->objectName(), Identifier::thu);
|
||||
objectId.insert(ui->fri_button->objectName(), Identifier::fri);
|
||||
xmax = ui->window_title->x() + ui->window_title->width();
|
||||
xmin = ui->window_title->x();
|
||||
ymax = ui->window_title->x() + ui->window_title->height();
|
||||
ymin = ui->window_title->y();
|
||||
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);
|
||||
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);
|
||||
|
||||
highlightDayOfWeek();
|
||||
todayWeekNumber = QDate::currentDate().weekNumber();
|
||||
dayOfWeek = QDate::currentDate().dayOfWeek();
|
||||
saveLoaded = false;
|
||||
|
||||
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) {
|
||||
set_date_to_now();
|
||||
compute_time();
|
||||
}
|
||||
set_date_to_now();
|
||||
compute_time();
|
||||
}
|
||||
|
||||
void MainWindow::highlightDayOfWeek() {
|
||||
int dayOfWeek = QDate::currentDate().dayOfWeek();
|
||||
switch (dayOfWeek) {
|
||||
case 1: {
|
||||
ui->monLabel->setText(QString("> %1 <").arg(ui->monLabel->text()));
|
||||
break;
|
||||
ui->monLabel->setText("Lundi");
|
||||
ui->tueLabel->setText("Mardi");
|
||||
ui->wedLabel->setText("Mercredi");
|
||||
ui->thuLabel->setText("Jeudi");
|
||||
ui->friLabel->setText("Vendredi");
|
||||
if (todayWeekNumber == current_week->getWeekNumber()) {
|
||||
ui->today_button->setDisabled(true);
|
||||
switch (dayOfWeek) {
|
||||
case 1: {
|
||||
ui->monLabel->setText(QString("%1 📆").arg(ui->monLabel->text()));
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
ui->tueLabel->setText(QString("%1 📆").arg(ui->tueLabel->text()));
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
ui->wedLabel->setText(QString("%1 📆").arg(ui->wedLabel->text()));
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
ui->thuLabel->setText(QString("%1 📆").arg(ui->thuLabel->text()));
|
||||
break;
|
||||
}
|
||||
case 5: {
|
||||
ui->friLabel->setText(QString("%1 📆").arg(ui->friLabel->text()));
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
case 2: {
|
||||
ui->tueLabel->setText(QString("> %1 <").arg(ui->tueLabel->text()));
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
ui->wedLabel->setText(QString("> %1 <").arg(ui->wedLabel->text()));
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
ui->thuLabel->setText(QString("> %1 <").arg(ui->thuLabel->text()));
|
||||
break;
|
||||
}
|
||||
case 5: {
|
||||
ui->friLabel->setText(QString("> %1 <").arg(ui->friLabel->text()));
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
} else {
|
||||
ui->today_button->setDisabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,32 +115,33 @@ void MainWindow::open_save() {
|
||||
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);
|
||||
if (obj[KEY_SAVE_FILE_VERSION] != SAVE_FILE_VERSION) {
|
||||
panic_dialog("Your save file version does not match the supported version."
|
||||
" Please update this file and restart the application");
|
||||
}
|
||||
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;
|
||||
}
|
||||
saveLoaded = true;
|
||||
}
|
||||
|
||||
void MainWindow::panic_dialog(QString text) {
|
||||
QMessageBox::critical(this, tr("Chronos"), text,
|
||||
QMessageBox::Ok, QMessageBox::Ok);
|
||||
QTimer::singleShot(0, this, &MainWindow::close);
|
||||
}
|
||||
|
||||
void MainWindow::save_to_file() {
|
||||
QJsonArray arr;
|
||||
for (Week w : weeks) {
|
||||
arr.append(w.to_json());
|
||||
foreach (Year *y, years) {
|
||||
arr.append(y->to_json());
|
||||
}
|
||||
QJsonObject obj {
|
||||
{KEY_TEMPLATE, week_template.to_json()},
|
||||
{KEY_WEEKS, arr},
|
||||
{KEY_TEMPLATE, week_template->to_json()},
|
||||
{KEY_YEARS, arr},
|
||||
{KEY_SAVE_FILE_VERSION, SAVE_FILE_VERSION}
|
||||
};
|
||||
QJsonDocument doc(obj);
|
||||
@@ -155,111 +150,129 @@ void MainWindow::save_to_file() {
|
||||
f->write(doc.toJson());
|
||||
f->close();
|
||||
}
|
||||
delete f;
|
||||
}
|
||||
|
||||
void MainWindow::compute_week_number(const QDateTime &dt) {
|
||||
int n = dt.date().weekNumber();
|
||||
int y = dt.date().year();
|
||||
ui->label_semaine->setText(QString("Semaine : %1").arg(QString::number(n)));
|
||||
QMapIterator<int, Week> 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 (years.contains(y)) {
|
||||
current_year = years[y];
|
||||
} else {
|
||||
Year *nYear = new Year(y);
|
||||
years[y] = nYear;
|
||||
current_year = nYear;
|
||||
save_to_file();
|
||||
}
|
||||
if (!found) {
|
||||
current_week = Week(week_template);
|
||||
current_week.setWeekNumber(n);
|
||||
weeks.insert(n, current_week);
|
||||
|
||||
if (current_year->hasWeek(n)) {
|
||||
current_week = current_year->getWeek(n);
|
||||
} else {
|
||||
current_week = new Week(week_template);
|
||||
current_week->setWeekNumber(n);
|
||||
current_year->addWeek(current_week);
|
||||
save_to_file();
|
||||
}
|
||||
compute_time();
|
||||
highlightDayOfWeek();
|
||||
}
|
||||
|
||||
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()));
|
||||
updateStartLabel();
|
||||
updateBreakLabel();
|
||||
updateEndLabel();
|
||||
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()));
|
||||
updateLabels();
|
||||
updateWeekTime();
|
||||
|
||||
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());
|
||||
QMapIterator i = current_year->iterator();
|
||||
while (i.hasNext()) {
|
||||
Week *w = i.next().value();
|
||||
if (w->getWeekNumber() <= todayWeekNumber) {
|
||||
late += (week_template->total() - w->total(week_template)) - w->getTimeDeltaInHours();
|
||||
overtime += (w->total() - week_template->total(week_template)) + w->getTimeDeltaInHours();
|
||||
}
|
||||
}
|
||||
|
||||
late -= current_week->getTimeDeltaInHours();
|
||||
overtime += - current_week->getTimeDeltaInHours();
|
||||
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::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"));
|
||||
void MainWindow::updateWeekTime()
|
||||
{
|
||||
double t = (current_week->total(week_template) + current_week->getTimeDeltaInHours()) - week_template->total();
|
||||
if (t > 0) {
|
||||
ui->overtime_time_label_week->setText(Tools::double_to_string_time(t));
|
||||
ui->late_time_label_week->setText("0h");
|
||||
} else if(t < 0) {
|
||||
ui->late_time_label_week->setText(Tools::double_to_string_time(-t));
|
||||
ui->overtime_time_label_week->setText("0h");
|
||||
} else {
|
||||
ui->overtime_time_label_week->setText("0h");
|
||||
ui->late_time_label_week->setText("0h");
|
||||
}
|
||||
}
|
||||
|
||||
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()));
|
||||
void MainWindow::updateLabels() {
|
||||
updateDayLabels(ui->monStartLabel, ui->monEndLabel, ui->monBreakLabel, ui->mondayValidate, ui->mondayWarning, ui->mondayNotWorking, current_week->getMon());
|
||||
updateDayLabels(ui->tueStartLabel, ui->tueEndLabel, ui->tueBreakLabel, ui->tuesdayValidate, ui->tuesdayWarning, ui->tuesdayNotWorking, current_week->getTue());
|
||||
updateDayLabels(ui->wedStartLabel, ui->wedEndLabel, ui->wedBreakLabel, ui->wednesdayValidate, ui->wednesdayWarning, ui->wednesdayNotWorking, current_week->getWed());
|
||||
updateDayLabels(ui->thuStartLabel, ui->thuEndLabel, ui->thuBreakLabel, ui->thurdayValidate, ui->thurdayWarning, ui->thurdayNotWorking, current_week->getThu());
|
||||
updateDayLabels(ui->friStartLabel, ui->friEndLabel, ui->friBreakLabel, ui->fridayValidate, ui->fridayWarning, ui->fridayNotWorking, current_week->getFri());
|
||||
}
|
||||
|
||||
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"));
|
||||
void MainWindow::updateDayLabels(QLabel *start, QLabel *end, QLabel *breaks, QFrame *validate, QFrame *warning, QFrame *not_working, Day *d)
|
||||
{
|
||||
not_working->setVisible(d->not_working());
|
||||
if (!d->not_working()) {
|
||||
start->setText(d->get_start().toString("HH:mm"));
|
||||
end->setText(d->get_end().toString("HH:mm"));
|
||||
breaks->setText(Tools::double_to_string_counter(d->get_time_break()));
|
||||
validate->setVisible(d->get_validate());
|
||||
warning->setVisible(d->has_warning());
|
||||
} else {
|
||||
start->setText("--:--");
|
||||
end->setText("--:--");
|
||||
breaks->setText("0 min.");
|
||||
validate->setVisible(false);
|
||||
warning->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
void MainWindow::modify_value(Day *d) {
|
||||
bool isNotValidable = (current_week->getWeekNumber() > todayWeekNumber);
|
||||
SetDayDialog sdd(d, isNotValidable, this);
|
||||
sdd.exec();
|
||||
}
|
||||
|
||||
Identifier MainWindow::get_identifier(QString objectName) {
|
||||
@@ -270,7 +283,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();
|
||||
}
|
||||
@@ -280,3 +292,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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#define KEY_TEMPLATE "template"
|
||||
#define KEY_WEEKS "weeks"
|
||||
#define KEY_YEARS "years"
|
||||
#define SAVE_FILENAME "data.json"
|
||||
#define SAVE_FILE_VERSION 1
|
||||
#define SAVE_FILE_VERSION 4
|
||||
#define KEY_SAVE_FILE_VERSION "version"
|
||||
|
||||
#include <QMouseEvent>
|
||||
@@ -19,11 +19,14 @@
|
||||
#include <QMapIterator>
|
||||
#include <QMessageBox>
|
||||
#include <QTimer>
|
||||
#include <QProcess>
|
||||
#include <QDir>
|
||||
|
||||
#include "week.h"
|
||||
#include "models/week.h"
|
||||
#include "models/year.h"
|
||||
#include "welcome.h"
|
||||
#include "tools.h"
|
||||
#include "aboutbox.h"
|
||||
#include "weekoption.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
namespace Ui { class MainWindow; }
|
||||
@@ -45,38 +48,34 @@ private:
|
||||
void init();
|
||||
void open_save();
|
||||
void save_to_file();
|
||||
void panic_dialog(QString text);
|
||||
|
||||
// UI Update
|
||||
void updateStartLabel();
|
||||
void updateBreakLabel();
|
||||
void updateEndLabel();
|
||||
void updateLabels();
|
||||
void highlightDayOfWeek();
|
||||
void updateWeekTime();
|
||||
void updateDayLabels(QLabel *start, QLabel *end, QLabel *breaks, QFrame *validate, QFrame *warning, QFrame *not_working, Day *d);
|
||||
|
||||
QString get_save_file_path();
|
||||
Identifier get_identifier(QString objectName);
|
||||
Day modify_value(Day);
|
||||
void modify_value(Day*);
|
||||
|
||||
Week week_template;
|
||||
Week current_week;
|
||||
QMap<int, Week> weeks;
|
||||
Week* week_template;
|
||||
Week* current_week;
|
||||
Year* current_year;
|
||||
QMap<int, Year*> years;
|
||||
QMap<QString, Identifier> objectId;
|
||||
int todayWeekNumber;
|
||||
int dayOfWeek;
|
||||
bool saveLoaded;
|
||||
|
||||
void mousePressEvent(QMouseEvent *event);
|
||||
void mouseMoveEvent(QMouseEvent *event);
|
||||
int m_nMouseClick_X_Coordinate;
|
||||
int m_nMouseClick_Y_Coordinate;
|
||||
int xmax;
|
||||
int xmin;
|
||||
int ymax;
|
||||
int ymin;
|
||||
inline bool isWidgetIsTitleBar();
|
||||
|
||||
public slots:
|
||||
private slots:
|
||||
void compute_week_number(const QDateTime &dt);
|
||||
void compute_time();
|
||||
void set_date_to_now();
|
||||
void edit();
|
||||
void edit_template();
|
||||
void open_about();
|
||||
void set_week_options();
|
||||
};
|
||||
#endif // MAINWINDOW_H
|
||||
|
||||
62
sources/models/breakpoint.cpp
Normal file
@@ -0,0 +1,62 @@
|
||||
#include "breakpoint.h"
|
||||
|
||||
BreakPoint::BreakPoint()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
BreakPoint::BreakPoint(BreakPoint *old)
|
||||
{
|
||||
this->start = old->start;
|
||||
this->end = old->end;
|
||||
}
|
||||
|
||||
BreakPoint::BreakPoint(QTime start, QTime end)
|
||||
{
|
||||
this->start = start;
|
||||
this->end = end;
|
||||
}
|
||||
|
||||
QTime BreakPoint::getStart()
|
||||
{
|
||||
return start;
|
||||
}
|
||||
|
||||
QTime BreakPoint::getEnd()
|
||||
{
|
||||
return end;
|
||||
}
|
||||
|
||||
float BreakPoint::getDuration()
|
||||
{
|
||||
return start.secsTo(end) / 60;
|
||||
}
|
||||
|
||||
void BreakPoint::setStart(QTime start)
|
||||
{
|
||||
this->start = start;
|
||||
}
|
||||
|
||||
void BreakPoint::setEnd(QTime end)
|
||||
{
|
||||
this->end = end;
|
||||
}
|
||||
|
||||
QJsonObject BreakPoint::to_json()
|
||||
{
|
||||
QJsonObject obj{
|
||||
{"start", start.toString(Qt::DateFormat::ISODate)},
|
||||
{"end", end.toString(Qt::DateFormat::ISODate)}
|
||||
};
|
||||
return obj;
|
||||
}
|
||||
|
||||
BreakPoint* BreakPoint::from_json(QJsonObject obj)
|
||||
{
|
||||
BreakPoint *result = new BreakPoint();
|
||||
|
||||
result->start = QTime::fromString(obj["start"].toString(), Qt::DateFormat::ISODate);
|
||||
result->end = QTime::fromString(obj["end"].toString(), Qt::DateFormat::ISODate);
|
||||
|
||||
return result;
|
||||
}
|
||||
30
sources/models/breakpoint.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#ifndef BREAKPOINT_H
|
||||
#define BREAKPOINT_H
|
||||
|
||||
#include <QTime>
|
||||
#include <QJsonObject>
|
||||
#include <cmath>
|
||||
|
||||
class BreakPoint
|
||||
{
|
||||
private:
|
||||
QTime start;
|
||||
QTime end;
|
||||
|
||||
public:
|
||||
BreakPoint();
|
||||
BreakPoint(BreakPoint*);
|
||||
BreakPoint(QTime, QTime);
|
||||
|
||||
QTime getStart();
|
||||
QTime getEnd();
|
||||
float getDuration();
|
||||
|
||||
void setStart(QTime);
|
||||
void setEnd(QTime);
|
||||
|
||||
QJsonObject to_json();
|
||||
static BreakPoint* from_json(QJsonObject);
|
||||
};
|
||||
|
||||
#endif // BREAKPOINT_H
|
||||
163
sources/models/day.cpp
Normal file
@@ -0,0 +1,163 @@
|
||||
#include "day.h"
|
||||
|
||||
Day::Day()
|
||||
{
|
||||
start = QTime(9, 0, 0, 0);
|
||||
end = QTime(17, 15, 0, 0);
|
||||
BreakPoint *lunch = new BreakPoint(QTime(12, 0, 0, 0), QTime(12, 45, 0, 0));
|
||||
breaks.append(lunch);
|
||||
validate = false;
|
||||
notWorking = false;
|
||||
}
|
||||
|
||||
Day::Day(Day *old)
|
||||
{
|
||||
start = QTime(9, 0, 0, 0);
|
||||
end = QTime(17, 15, 0, 0);
|
||||
BreakPoint *lunch = new BreakPoint(QTime(12, 0, 0, 0), QTime(12, 45, 0, 0));
|
||||
breaks.append(lunch);
|
||||
validate = false;
|
||||
notWorking = false;
|
||||
update(old);
|
||||
}
|
||||
|
||||
Day::~Day()
|
||||
{
|
||||
foreach (BreakPoint *bp, breaks) {
|
||||
delete bp;
|
||||
}
|
||||
breaks.clear();
|
||||
}
|
||||
|
||||
float Day::get_total() {
|
||||
if (notWorking) {
|
||||
return 0.0;
|
||||
}
|
||||
int sec = start.secsTo(end);
|
||||
int minutes = sec / 60;
|
||||
float breakTime = get_time_break();
|
||||
return (minutes - breakTime) / 60;
|
||||
}
|
||||
|
||||
void Day::set_start(QTime value)
|
||||
{
|
||||
start = value;
|
||||
}
|
||||
|
||||
void Day::set_end(QTime value)
|
||||
{
|
||||
end = value;
|
||||
}
|
||||
|
||||
void Day::set_validate(bool value) {
|
||||
validate = value;
|
||||
}
|
||||
|
||||
void Day::set_not_working(bool value)
|
||||
{
|
||||
this->notWorking = value;
|
||||
}
|
||||
|
||||
void Day::setBreaks(QVector<BreakPoint*> breaks)
|
||||
{
|
||||
this->breaks = breaks;
|
||||
}
|
||||
|
||||
QTime Day::get_start()
|
||||
{
|
||||
return start;
|
||||
}
|
||||
|
||||
QTime Day::get_end()
|
||||
{
|
||||
return end;
|
||||
}
|
||||
|
||||
QVector<BreakPoint*> Day::getBreaks()
|
||||
{
|
||||
return breaks;
|
||||
}
|
||||
|
||||
QJsonObject Day::to_json()
|
||||
{
|
||||
QJsonArray arr;
|
||||
foreach (BreakPoint *bp, breaks) {
|
||||
arr.append(bp->to_json());
|
||||
}
|
||||
QJsonObject obj{
|
||||
{KEY_START, start.toString(Qt::DateFormat::ISODate)},
|
||||
{KEY_END, end.toString(Qt::DateFormat::ISODate)},
|
||||
{KEY_BREAKS, arr},
|
||||
{KEY_VALIDATE, validate},
|
||||
{KEY_NOT_WORKING, notWorking}
|
||||
};
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
bool Day::has_warning()
|
||||
{
|
||||
bool warning = false;
|
||||
foreach (BreakPoint val, breaks) {
|
||||
if (val.getStart() < start) {
|
||||
warning = true;
|
||||
}
|
||||
if (val.getEnd() > end) {
|
||||
warning = true;
|
||||
}
|
||||
}
|
||||
return warning;
|
||||
}
|
||||
|
||||
Day* Day::from_json(QJsonObject obj)
|
||||
{
|
||||
Day *result = new Day();
|
||||
|
||||
result->start = QTime::fromString(obj[KEY_START].toString(), Qt::DateFormat::ISODate);
|
||||
result->end = QTime::fromString(obj[KEY_END].toString(), Qt::DateFormat::ISODate);
|
||||
result->validate = obj[KEY_VALIDATE].toBool(false);
|
||||
result->notWorking = obj[KEY_NOT_WORKING].toBool(false);
|
||||
|
||||
result->breaks.clear();
|
||||
QJsonArray arr = obj[KEY_BREAKS].toArray();
|
||||
foreach (QJsonValue val, arr) {
|
||||
result->breaks.append(BreakPoint::from_json(val.toObject()));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool Day::get_validate() {
|
||||
return validate;
|
||||
}
|
||||
|
||||
bool Day::not_working()
|
||||
{
|
||||
return notWorking;
|
||||
}
|
||||
|
||||
float Day::get_time_break()
|
||||
{
|
||||
float result = 0;
|
||||
foreach (BreakPoint* bp, breaks) {
|
||||
result += bp->getDuration();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void Day::update(Day *old)
|
||||
{
|
||||
this->start = old->start;
|
||||
this->end = old->end;
|
||||
this->validate = old->validate;
|
||||
this->notWorking = old->notWorking;
|
||||
|
||||
foreach (BreakPoint *bp, breaks) {
|
||||
delete bp;
|
||||
}
|
||||
breaks.clear();
|
||||
|
||||
foreach (BreakPoint *bp, old->breaks) {
|
||||
this->breaks.append(new BreakPoint(bp));
|
||||
}
|
||||
}
|
||||
53
sources/models/day.h
Normal file
@@ -0,0 +1,53 @@
|
||||
#ifndef DAY_H
|
||||
#define DAY_H
|
||||
|
||||
#define KEY_START "start"
|
||||
#define KEY_END "end"
|
||||
#define KEY_BREAKS "breaks"
|
||||
#define KEY_VALIDATE "validate"
|
||||
#define KEY_NOT_WORKING "not_working"
|
||||
|
||||
#include <QTime>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
#include <math.h>
|
||||
|
||||
#include "breakpoint.h"
|
||||
|
||||
class Day
|
||||
{
|
||||
|
||||
private:
|
||||
QTime start;
|
||||
QTime end;
|
||||
QVector<BreakPoint*> breaks;
|
||||
bool validate;
|
||||
bool notWorking;
|
||||
|
||||
public:
|
||||
Day();
|
||||
Day(Day*);
|
||||
~Day();
|
||||
|
||||
void set_start(QTime value);
|
||||
void set_end(QTime value);
|
||||
void set_validate(bool);
|
||||
void set_not_working(bool);
|
||||
void setBreaks(QVector<BreakPoint*>);
|
||||
|
||||
QTime get_start();
|
||||
QTime get_end();
|
||||
QVector<BreakPoint*> getBreaks();
|
||||
bool get_validate();
|
||||
bool not_working();
|
||||
float get_time_break();
|
||||
void update(Day *);
|
||||
QJsonObject to_json();
|
||||
bool has_warning();
|
||||
|
||||
float get_total();
|
||||
|
||||
static Day* from_json(QJsonObject);
|
||||
};
|
||||
|
||||
#endif // DAY_H
|
||||
96
sources/models/settings.cpp
Normal file
@@ -0,0 +1,96 @@
|
||||
#include "settings.h"
|
||||
|
||||
Settings::Settings()
|
||||
{
|
||||
this->cloudEnabled = false;
|
||||
this->cloudEmail = "";
|
||||
this->cloudPassword = "";
|
||||
this->cloudUrl = "";
|
||||
this->cloudAgent = DEFAULT_AGENT_KEY;
|
||||
}
|
||||
|
||||
Settings* Settings::FromJSON(QJsonObject obj)
|
||||
{
|
||||
Settings *s = new Settings();
|
||||
if (obj["cloud"].isObject())
|
||||
{
|
||||
QJsonObject cloud = obj["cloud"].toObject();
|
||||
s->cloudEnabled = cloud["enabled"].toBool(false);
|
||||
s->cloudUrl = cloud["url"].toString("");
|
||||
s->cloudEmail = cloud["email"].toString("");
|
||||
s->cloudPassword = cloud["password"].toString("");
|
||||
s->cloudAgent = cloud["agent"].toString(DEFAULT_AGENT_KEY);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
QJsonObject Settings::ToJSON()
|
||||
{
|
||||
QJsonObject s;
|
||||
|
||||
QJsonObject cloud;
|
||||
cloud["enabled"] = this->cloudEnabled;
|
||||
cloud["url"] = this->cloudUrl;
|
||||
cloud["email"] = this->cloudEmail;
|
||||
cloud["password"] = this->cloudPassword;
|
||||
cloud["agent"] = this->cloudAgent;
|
||||
|
||||
s["cloud"] = cloud;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
bool Settings::GetCloudEnabled()
|
||||
{
|
||||
return this->cloudEnabled;
|
||||
}
|
||||
|
||||
QString Settings::GetCloudUrl()
|
||||
{
|
||||
return this->cloudUrl;
|
||||
}
|
||||
|
||||
QString Settings::GetCloudEmail()
|
||||
{
|
||||
return this->cloudEmail;
|
||||
}
|
||||
|
||||
QString Settings::GetCloudPassword()
|
||||
{
|
||||
return this->cloudPassword;
|
||||
}
|
||||
|
||||
QString Settings::GetCloudAgent()
|
||||
{
|
||||
return this->cloudAgent;
|
||||
}
|
||||
|
||||
QString Settings::GetCloudAgentDefault()
|
||||
{
|
||||
return DEFAULT_AGENT;
|
||||
}
|
||||
|
||||
void Settings::SetCloudEnabled(bool enabled)
|
||||
{
|
||||
this->cloudEnabled = enabled;
|
||||
}
|
||||
|
||||
void Settings::SetCloudUrl(QString url)
|
||||
{
|
||||
this->cloudUrl = url;
|
||||
}
|
||||
|
||||
void Settings::SetCloudEmail(QString email)
|
||||
{
|
||||
this->cloudEmail = email;
|
||||
}
|
||||
|
||||
void Settings::SetCloudPassword(QString password)
|
||||
{
|
||||
this->cloudPassword = password;
|
||||
}
|
||||
|
||||
void Settings::SetCloudAgent(QString agent)
|
||||
{
|
||||
this->cloudAgent = agent;
|
||||
}
|
||||
43
sources/models/settings.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#ifndef SETTINGS_H
|
||||
#define SETTINGS_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#define DEFAULT_AGENT "cagent.exe"
|
||||
#else
|
||||
#define DEFAULT_AGENT "cagent"
|
||||
#endif
|
||||
|
||||
#define DEFAULT_AGENT_KEY "<default>"
|
||||
|
||||
#include <QString>
|
||||
#include <QJsonObject>
|
||||
|
||||
class Settings
|
||||
{
|
||||
private:
|
||||
bool cloudEnabled;
|
||||
QString cloudUrl;
|
||||
QString cloudEmail;
|
||||
QString cloudPassword;
|
||||
QString cloudAgent;
|
||||
public:
|
||||
Settings();
|
||||
|
||||
static Settings* FromJSON(QJsonObject obj);
|
||||
QJsonObject ToJSON();
|
||||
|
||||
bool GetCloudEnabled();
|
||||
QString GetCloudUrl();
|
||||
QString GetCloudEmail();
|
||||
QString GetCloudPassword();
|
||||
QString GetCloudAgent();
|
||||
QString GetCloudAgentDefault();
|
||||
|
||||
void SetCloudEnabled(bool enabled);
|
||||
void SetCloudUrl(QString url);
|
||||
void SetCloudEmail(QString email);
|
||||
void SetCloudPassword(QString password);
|
||||
void SetCloudAgent(QString agent);
|
||||
};
|
||||
|
||||
#endif // SETTINGS_H
|
||||
167
sources/models/week.cpp
Normal file
@@ -0,0 +1,167 @@
|
||||
#include "week.h"
|
||||
|
||||
Week::Week()
|
||||
{
|
||||
mon = new Day();
|
||||
tue = new Day();
|
||||
wed = new Day();
|
||||
thu = new Day();
|
||||
fri = new Day();
|
||||
time_delta = 0;
|
||||
week_number = 0;
|
||||
}
|
||||
|
||||
Week::Week(Week *old)
|
||||
{
|
||||
mon = new Day();
|
||||
tue = new Day();
|
||||
wed = new Day();
|
||||
thu = new Day();
|
||||
fri = new Day();
|
||||
time_delta = 0;
|
||||
week_number = 0;
|
||||
update(old);
|
||||
}
|
||||
|
||||
Week::~Week()
|
||||
{
|
||||
delete mon;
|
||||
delete tue;
|
||||
delete wed;
|
||||
delete thu;
|
||||
delete fri;
|
||||
}
|
||||
|
||||
Week* Week::from_json(QJsonObject obj) {
|
||||
Week *w = new Week();
|
||||
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->time_delta = obj[TIME_DELTA].toInt(0);
|
||||
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()},
|
||||
{TIME_DELTA, time_delta},
|
||||
{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();
|
||||
}
|
||||
|
||||
double Week::total(Week *wtemplate)
|
||||
{
|
||||
double t = 0.0;
|
||||
if (mon->not_working()) {
|
||||
t += wtemplate->mon->get_total();
|
||||
} else {
|
||||
t += mon->get_total();
|
||||
}
|
||||
if (tue->not_working()) {
|
||||
t += wtemplate->tue->get_total();
|
||||
} else {
|
||||
t += tue->get_total();
|
||||
}
|
||||
if (wed->not_working()) {
|
||||
t += wtemplate->wed->get_total();
|
||||
} else {
|
||||
t += wed->get_total();
|
||||
}
|
||||
if (thu->not_working()) {
|
||||
t += wtemplate->thu->get_total();
|
||||
} else {
|
||||
t += thu->get_total();
|
||||
}
|
||||
if (fri->not_working()) {
|
||||
t += wtemplate->fri->get_total();
|
||||
} else {
|
||||
t += fri->get_total();
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
void Week::update(Week *old)
|
||||
{
|
||||
mon = new Day(old->mon);
|
||||
tue = new Day(old->tue);
|
||||
wed = new Day(old->wed);
|
||||
thu = new Day(old->thu);
|
||||
fri = new Day(old->fri);
|
||||
time_delta = old->time_delta;
|
||||
week_number = old->week_number;
|
||||
}
|
||||
|
||||
int Week::getWeekNumber() {
|
||||
return week_number;
|
||||
}
|
||||
|
||||
int Week::getTimeDelta()
|
||||
{
|
||||
return time_delta;
|
||||
}
|
||||
|
||||
float Week::getTimeDeltaInHours()
|
||||
{
|
||||
return time_delta/60.0;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
void Week::setTimeDelta(int value)
|
||||
{
|
||||
time_delta = value;
|
||||
}
|
||||
55
sources/models/week.h
Normal file
@@ -0,0 +1,55 @@
|
||||
#ifndef WEEK_H
|
||||
#define WEEK_H
|
||||
|
||||
#define MONDAY "monday"
|
||||
#define TUESDAY "tuesday"
|
||||
#define WEDNESDAY "wednesday"
|
||||
#define THURDAY "thurday"
|
||||
#define FRIDAY "friday"
|
||||
#define TIME_DELTA "timeDelta"
|
||||
#define WEEK_NUMBER "weekNumber"
|
||||
|
||||
#include <QJsonObject>
|
||||
#include "day.h"
|
||||
|
||||
class Week
|
||||
{
|
||||
public:
|
||||
Week();
|
||||
Week(Week*);
|
||||
~Week();
|
||||
double total();
|
||||
double total(Week *wtemplate);
|
||||
|
||||
void setMon(Day*);
|
||||
void setTue(Day*);
|
||||
void setWed(Day*);
|
||||
void setThu(Day*);
|
||||
void setFri(Day*);
|
||||
void setWeekNumber(int);
|
||||
void setTimeDelta(int);
|
||||
|
||||
Day* getMon();
|
||||
Day* getTue();
|
||||
Day* getWed();
|
||||
Day* getThu();
|
||||
Day* getFri();
|
||||
void update(Week *);
|
||||
int getWeekNumber();
|
||||
int getTimeDelta();
|
||||
float getTimeDeltaInHours();
|
||||
|
||||
static Week* from_json(QJsonObject);
|
||||
QJsonObject to_json();
|
||||
|
||||
private:
|
||||
Day* mon;
|
||||
Day* tue;
|
||||
Day* wed;
|
||||
Day* thu;
|
||||
Day* fri;
|
||||
int time_delta;
|
||||
int week_number;
|
||||
};
|
||||
|
||||
#endif // WEEK_H
|
||||
77
sources/models/year.cpp
Normal file
@@ -0,0 +1,77 @@
|
||||
#include "year.h"
|
||||
|
||||
Year::Year()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Year::Year(Year *old)
|
||||
{
|
||||
this->number = old->number;
|
||||
foreach (int weekNumber, old->weeks.keys()) {
|
||||
weeks[weekNumber] = new Week(old->weeks[weekNumber]);
|
||||
}
|
||||
}
|
||||
|
||||
Year::~Year()
|
||||
{
|
||||
foreach (Week *w, weeks) {
|
||||
delete w;
|
||||
}
|
||||
weeks.clear();
|
||||
}
|
||||
|
||||
Year::Year(int number)
|
||||
{
|
||||
this->number = number;
|
||||
}
|
||||
|
||||
Year* Year::from_json(QJsonObject obj)
|
||||
{
|
||||
Year *result = new Year();
|
||||
result->number = obj[KEY_NUMBER].toInt();
|
||||
QJsonArray arr = obj[KEY_WEEKS].toArray();
|
||||
foreach (QJsonValue val, arr) {
|
||||
Week* w = Week::from_json(val.toObject());
|
||||
result->weeks[w->getWeekNumber()] = w;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
QJsonObject Year::to_json()
|
||||
{
|
||||
QJsonObject obj;
|
||||
QJsonArray arr;
|
||||
foreach (Week *w, weeks) {
|
||||
arr.append(w->to_json());
|
||||
}
|
||||
obj[KEY_NUMBER] = number;
|
||||
obj[KEY_WEEKS] = arr;
|
||||
return obj;
|
||||
}
|
||||
|
||||
Week *Year::getWeek(int weekNumber)
|
||||
{
|
||||
return weeks[weekNumber];
|
||||
}
|
||||
|
||||
bool Year::hasWeek(int weekNumber)
|
||||
{
|
||||
return weeks.contains(weekNumber);
|
||||
}
|
||||
|
||||
QMapIterator<int, Week *> Year::iterator()
|
||||
{
|
||||
QMapIterator i(weeks);
|
||||
return i;
|
||||
}
|
||||
|
||||
int Year::getNumber()
|
||||
{
|
||||
return number;
|
||||
}
|
||||
|
||||
void Year::addWeek(Week* w)
|
||||
{
|
||||
weeks[w->getWeekNumber()] = w;
|
||||
}
|
||||
37
sources/models/year.h
Normal file
@@ -0,0 +1,37 @@
|
||||
#ifndef YEAR_H
|
||||
#define YEAR_H
|
||||
|
||||
#define KEY_NUMBER "number"
|
||||
#define KEY_WEEKS "weeks"
|
||||
|
||||
#include <QJsonObject>
|
||||
#include <QJsonArray>
|
||||
#include <QMouseEvent>
|
||||
#include <QMapIterator>
|
||||
|
||||
#include "week.h"
|
||||
|
||||
class Year
|
||||
{
|
||||
private:
|
||||
int number;
|
||||
QMap<int, Week*> weeks;
|
||||
|
||||
public:
|
||||
Year();
|
||||
Year(Year*);
|
||||
~Year();
|
||||
Year(int number);
|
||||
|
||||
static Year* from_json(QJsonObject);
|
||||
QJsonObject to_json();
|
||||
|
||||
Week *getWeek(int);
|
||||
bool hasWeek(int);
|
||||
QMapIterator<int, Week*> iterator();
|
||||
int getNumber();
|
||||
|
||||
void addWeek(Week* w);
|
||||
};
|
||||
|
||||
#endif // YEAR_H
|
||||
@@ -1,37 +1,114 @@
|
||||
#include "setdaydialog.h"
|
||||
#include "ui_setdaydialog.h"
|
||||
|
||||
SetDayDialog::SetDayDialog(Day d, QWidget *parent) :
|
||||
SetDayDialog::SetDayDialog(Day *d, bool isNotValidable, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::SetDayDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
copy = new Day(d);
|
||||
ui->validateButton->setEnabled(!isNotValidable);
|
||||
ui->validateButton->setVisible(!isNotValidable);
|
||||
this->d = d;
|
||||
init();
|
||||
}
|
||||
|
||||
SetDayDialog::~SetDayDialog()
|
||||
{
|
||||
delete copy;
|
||||
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());
|
||||
ui->start_edit->setTime(copy->get_start());
|
||||
ui->end_edit->setTime(copy->get_end());
|
||||
ui->notWorkingCheckbox->setCheckState((copy->not_working()) ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
|
||||
lockControls(copy->not_working());
|
||||
updateBreakList();
|
||||
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<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), this, &SetDayDialog::compute_time);
|
||||
ui->total_label->setText(Tools::double_to_string_time(d.get_total()));
|
||||
connect(ui->validateButton, &QPushButton::clicked, this, &SetDayDialog::validate_and_accept);
|
||||
connect(ui->pushButton, &QPushButton::clicked, this, &SetDayDialog::accept);
|
||||
connect(ui->addBreakButton, &QPushButton::clicked, this, &SetDayDialog::add_break_point);
|
||||
connect(ui->removeBreakButton, &QPushButton::clicked, this, &SetDayDialog::remove_break_point);
|
||||
connect(ui->breakList, &QListWidget::currentRowChanged, this, &SetDayDialog::break_selected);
|
||||
connect(ui->notWorkingCheckbox, &QCheckBox::stateChanged, this, &SetDayDialog::change_not_working);
|
||||
ui->total_label->setText(Tools::double_to_string_time(d->get_total()));
|
||||
}
|
||||
|
||||
void SetDayDialog::updateBreakList()
|
||||
{
|
||||
ui->breakList->clear();
|
||||
foreach (BreakPoint *bp, copy->getBreaks()) {
|
||||
ui->breakList->addItem(QString("%1 -> %2").arg(bp->getStart().toString("hh:mm"), bp->getEnd().toString("hh:mm")));
|
||||
}
|
||||
}
|
||||
|
||||
void SetDayDialog::lockControls(bool lock)
|
||||
{
|
||||
ui->addBreakButton->setDisabled(lock);
|
||||
ui->start_edit->setDisabled(lock);
|
||||
ui->end_edit->setDisabled(lock);
|
||||
ui->breakList->setDisabled(lock);
|
||||
if (ui->breakList->currentRow() != -1) {
|
||||
ui->removeBreakButton->setDisabled(lock);
|
||||
}
|
||||
}
|
||||
|
||||
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()));
|
||||
copy->set_validate(false);
|
||||
copy->set_start(ui->start_edit->time());
|
||||
copy->set_end(ui->end_edit->time());
|
||||
ui->total_label->setText(Tools::double_to_string_time(copy->get_total()));
|
||||
}
|
||||
|
||||
Day SetDayDialog::get_result() {
|
||||
return d;
|
||||
void SetDayDialog::accept()
|
||||
{
|
||||
d->update(copy);
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
void SetDayDialog::validate_and_accept() {
|
||||
copy->set_validate(!copy->not_working());
|
||||
this->accept();
|
||||
}
|
||||
|
||||
void SetDayDialog::add_break_point()
|
||||
{
|
||||
BreakDialog bd(this);
|
||||
int result = bd.exec();
|
||||
if (result == QDialog::Accepted) {
|
||||
BreakPoint bp = bd.get_result();
|
||||
auto breaks = copy->getBreaks();
|
||||
breaks.append(new BreakPoint(bp));
|
||||
copy->setBreaks(breaks);
|
||||
updateBreakList();
|
||||
compute_time();
|
||||
}
|
||||
}
|
||||
|
||||
void SetDayDialog::remove_break_point()
|
||||
{
|
||||
int i = ui->breakList->currentRow();
|
||||
if (i > -1) {
|
||||
auto breaks = copy->getBreaks();
|
||||
BreakPoint *bp = breaks.at(i);
|
||||
breaks.removeAt(i);
|
||||
delete bp;
|
||||
copy->setBreaks(breaks);
|
||||
updateBreakList();
|
||||
compute_time();
|
||||
}
|
||||
}
|
||||
|
||||
void SetDayDialog::break_selected(int i)
|
||||
{
|
||||
ui->removeBreakButton->setEnabled(i > -1);
|
||||
}
|
||||
|
||||
void SetDayDialog::change_not_working(int state)
|
||||
{
|
||||
copy->set_not_working(state != 0);
|
||||
lockControls(copy->not_working());
|
||||
compute_time();
|
||||
}
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
#define SETDAYDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QMouseEvent>
|
||||
|
||||
#include "day.h"
|
||||
#include "models/day.h"
|
||||
#include "tools.h"
|
||||
#include "breakdialog.h"
|
||||
#include "models/breakpoint.h"
|
||||
|
||||
namespace Ui {
|
||||
class SetDayDialog;
|
||||
@@ -15,20 +18,27 @@ class SetDayDialog : public QDialog
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SetDayDialog(Day d, QWidget *parent = nullptr);
|
||||
explicit SetDayDialog(Day *d, bool isNotValidable, QWidget *parent = nullptr);
|
||||
~SetDayDialog();
|
||||
|
||||
Day get_result();
|
||||
|
||||
public slots:
|
||||
private slots:
|
||||
void compute_time();
|
||||
void validate_and_accept();
|
||||
void accept();
|
||||
void add_break_point();
|
||||
void remove_break_point();
|
||||
void break_selected(int);
|
||||
void change_not_working(int);
|
||||
|
||||
private:
|
||||
Ui::SetDayDialog *ui;
|
||||
|
||||
Day d;
|
||||
Day *copy;
|
||||
Day *d;
|
||||
|
||||
void init();
|
||||
void updateBreakList();
|
||||
void lockControls(bool);
|
||||
};
|
||||
|
||||
#endif // SETDAYDIALOG_H
|
||||
|
||||
@@ -1,14 +1,42 @@
|
||||
#include "tools.h"
|
||||
|
||||
QString Tools::double_to_string_time(double value) {
|
||||
value = abs(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)));
|
||||
int m = round((value - h) * 60);
|
||||
if (m == 0) {
|
||||
return QString("%1h").arg(QString::number(h, 10));
|
||||
} else if (m < 10) {
|
||||
return QString("%1h0%2").arg(QString::number(h, 10), QString::number(m, 10));
|
||||
}
|
||||
|
||||
return QString("%1h%2").arg(QString::number(h), QString::number(round(value)));
|
||||
return QString("%1h%2").arg(QString::number(h, 10), QString::number(m, 10));
|
||||
}
|
||||
|
||||
QString Tools::double_to_string_counter(double value) {
|
||||
value = abs(value);
|
||||
const int h = floor(value / 60);
|
||||
int m = round(value - (60 * h));
|
||||
if (h == 0) {
|
||||
return QString("%1 minutes").arg(QString::number(m, 10));
|
||||
}
|
||||
if (m == 0) {
|
||||
return QString("%1 heures").arg(QString::number(h, 10));
|
||||
} else if (m < 10) {
|
||||
return QString("%1h0%2").arg(QString::number(h, 10), QString::number(m, 10));
|
||||
}
|
||||
return QString("%1h%2").arg(QString::number(h, 10), QString::number(m, 10));
|
||||
}
|
||||
|
||||
QString Tools::int_to_string_time(int value)
|
||||
{
|
||||
value = abs(value);
|
||||
const int h = floor(value / 60);
|
||||
int m = round(value - (60 * h));
|
||||
QString minutes = "";
|
||||
if (m >= 10) {
|
||||
minutes = QString::number(m, 10);
|
||||
} else {
|
||||
minutes = QString("0%1").arg(QString::number(m, 10));
|
||||
}
|
||||
return QString("%1h%2").arg(QString::number(h, 10), minutes);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ class Tools
|
||||
{
|
||||
public:
|
||||
static QString double_to_string_time(double value);
|
||||
static QString double_to_string_counter(double value);
|
||||
static QString int_to_string_time(int value);
|
||||
};
|
||||
|
||||
#endif // TOOLS_H
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
#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;
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
#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 <QJsonObject>
|
||||
#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
|
||||
34
sources/weekoption.cpp
Normal file
@@ -0,0 +1,34 @@
|
||||
#include "weekoption.h"
|
||||
#include "ui_weekoption.h"
|
||||
|
||||
WeekOption::WeekOption(Week *w, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::WeekOption)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->time_delta = w->getTimeDelta();
|
||||
ui->time_delta_spinbox->setValue(time_delta);
|
||||
compute();
|
||||
connect(ui->time_delta_spinbox, &QSpinBox::valueChanged, this, &WeekOption::set_time_delta);
|
||||
}
|
||||
|
||||
WeekOption::~WeekOption()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
int WeekOption::get_time_delta()
|
||||
{
|
||||
return this->time_delta;
|
||||
}
|
||||
|
||||
void WeekOption::set_time_delta(int value)
|
||||
{
|
||||
this->time_delta = value;
|
||||
compute();
|
||||
}
|
||||
|
||||
void WeekOption::compute()
|
||||
{
|
||||
ui->total_label->setText(Tools::int_to_string_time(this->time_delta));
|
||||
}
|
||||
33
sources/weekoption.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#ifndef WEEKOPTION_H
|
||||
#define WEEKOPTION_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
#include "models/week.h"
|
||||
#include "tools.h"
|
||||
|
||||
namespace Ui {
|
||||
class WeekOption;
|
||||
}
|
||||
|
||||
class WeekOption : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit WeekOption(Week *w, QWidget *parent = nullptr);
|
||||
~WeekOption();
|
||||
int get_time_delta();
|
||||
|
||||
private slots:
|
||||
void set_time_delta(int);
|
||||
|
||||
private:
|
||||
Ui::WeekOption *ui;
|
||||
|
||||
void compute();
|
||||
|
||||
int time_delta;
|
||||
};
|
||||
|
||||
#endif // WEEKOPTION_H
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "welcome.h"
|
||||
#include "ui_welcome.h"
|
||||
|
||||
Welcome::Welcome(Week wtemplate, QWidget *parent) :
|
||||
Welcome::Welcome(Week *wtemplate, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::Welcome)
|
||||
{
|
||||
@@ -34,43 +34,39 @@ Week Welcome::get_result() {
|
||||
}
|
||||
|
||||
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()));
|
||||
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()));
|
||||
modify_value(w->getMon());
|
||||
break;
|
||||
case tue:
|
||||
w.setTue(modify_value(w.getTue()));
|
||||
modify_value(w->getTue());
|
||||
break;
|
||||
case wed:
|
||||
w.setWed(modify_value(w.getWed()));
|
||||
modify_value(w->getWed());
|
||||
break;
|
||||
case thu:
|
||||
w.setThu(modify_value(w.getThu()));
|
||||
modify_value(w->getThu());
|
||||
break;
|
||||
case fri:
|
||||
w.setFri(modify_value(w.getFri()));
|
||||
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;
|
||||
void Welcome::modify_value(Day *d) {
|
||||
SetDayDialog sdd(d, true, this);
|
||||
sdd.exec();
|
||||
}
|
||||
|
||||
Identifier Welcome::get_identifier(QString objectName) {
|
||||
|
||||
@@ -3,10 +3,11 @@
|
||||
|
||||
#include <QDialog>
|
||||
#include <QDoubleSpinBox>
|
||||
#include <QMouseEvent>
|
||||
#include <math.h>
|
||||
|
||||
#include "week.h"
|
||||
#include "day.h"
|
||||
#include "models/week.h"
|
||||
#include "models/day.h"
|
||||
#include "tools.h"
|
||||
#include "setdaydialog.h"
|
||||
|
||||
@@ -27,7 +28,7 @@ class Welcome : public QDialog
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Welcome(Week tpl, QWidget *parent = nullptr);
|
||||
explicit Welcome(Week *tpl, QWidget *parent = nullptr);
|
||||
~Welcome();
|
||||
|
||||
Week get_result();
|
||||
@@ -35,13 +36,13 @@ public:
|
||||
private:
|
||||
Ui::Welcome *ui;
|
||||
|
||||
Week w;
|
||||
Week *w;
|
||||
QMap<QString, Identifier> objectId;
|
||||
|
||||
void init();
|
||||
void set_value_to_widget();
|
||||
Identifier get_identifier(QString objectName);
|
||||
Day modify_value(Day);
|
||||
void modify_value(Day*);
|
||||
|
||||
public slots:
|
||||
void edit();
|
||||
|
||||
@@ -52,18 +52,45 @@ QPushButton::default{
|
||||
border-top-color: transparent;
|
||||
border-right-color: transparent;
|
||||
border-left-color: transparent;
|
||||
border-bottom-color: #04b97f;
|
||||
border-bottom-color: rgba(204, 22, 0, 255);
|
||||
border-width: 1px;
|
||||
color: #a9b7c6;
|
||||
padding: 2px;
|
||||
background-color: #1e1d23;
|
||||
}
|
||||
|
||||
|
||||
QPushButton#closeButton, QPushButton#minimizeButton{
|
||||
color: white;
|
||||
padding: 2px;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
font-size: 11px;
|
||||
}
|
||||
QPushButton#closeButton::default, QFrame#titleBar QPushButton#minimizeButton::default{
|
||||
color: white;
|
||||
padding: 2px;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
font-size: 11px;
|
||||
}
|
||||
QPushButton#closeButton:hover{
|
||||
color: white;
|
||||
padding-bottom: 2px;
|
||||
background-color: #eb4034;
|
||||
}
|
||||
QPushButton#closeButton:pressed{
|
||||
color: white;
|
||||
padding-bottom: 1px;
|
||||
background-color: #b83228;
|
||||
}
|
||||
|
||||
QToolButton {
|
||||
border-style: solid;
|
||||
border-top-color: transparent;
|
||||
border-right-color: transparent;
|
||||
border-left-color: transparent;
|
||||
border-bottom-color: #04b97f;
|
||||
border-bottom-color: rgba(204, 22, 0, 255);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid;
|
||||
color: #a9b7c6;
|
||||
@@ -75,7 +102,7 @@ QToolButton:hover{
|
||||
border-top-color: transparent;
|
||||
border-right-color: transparent;
|
||||
border-left-color: transparent;
|
||||
border-bottom-color: #37efba;
|
||||
border-bottom-color: rgba(204, 22, 0, 255);
|
||||
border-bottom-width: 2px;
|
||||
border-style: solid;
|
||||
color: #FFFFFF;
|
||||
@@ -87,7 +114,7 @@ QPushButton:hover{
|
||||
border-top-color: transparent;
|
||||
border-right-color: transparent;
|
||||
border-left-color: transparent;
|
||||
border-bottom-color: #37efba;
|
||||
border-bottom-color: rgba(204, 22, 0, 255);
|
||||
border-bottom-width: 1px;
|
||||
border-style: solid;
|
||||
color: #FFFFFF;
|
||||
@@ -99,10 +126,10 @@ QPushButton:pressed{
|
||||
border-top-color: transparent;
|
||||
border-right-color: transparent;
|
||||
border-left-color: transparent;
|
||||
border-bottom-color: #37efba;
|
||||
border-bottom-color: rgba(204, 22, 0, 255);
|
||||
border-bottom-width: 2px;
|
||||
border-style: solid;
|
||||
color: #37efba;
|
||||
color: rgba(204, 22, 0, 255);
|
||||
padding-bottom: 1px;
|
||||
background-color: #1e1d23;
|
||||
}
|
||||
@@ -144,7 +171,7 @@ QProgressBar {
|
||||
background-color:#1e1d23;
|
||||
}
|
||||
QProgressBar::chunk {
|
||||
background-color: #04b97f;
|
||||
background-color: rgba(204, 22, 0, 255);
|
||||
border-radius: 5px;
|
||||
}
|
||||
QMenuBar {
|
||||
@@ -165,7 +192,7 @@ QMenu::item:selected {
|
||||
border-style: solid;
|
||||
border-top-color: transparent;
|
||||
border-right-color: transparent;
|
||||
border-left-color: #04b97f;
|
||||
border-left-color: rgba(204, 22, 0, 255);
|
||||
border-bottom-color: transparent;
|
||||
border-left-width: 2px;
|
||||
color: #FFFFFF;
|
||||
@@ -222,7 +249,7 @@ QTabBar::tab:selected, QTabBar::tab:last:selected, QTabBar::tab:hover {
|
||||
border-top-color: transparent;
|
||||
border-right-color: transparent;
|
||||
border-left-color: transparent;
|
||||
border-bottom-color: #04b97f;
|
||||
border-bottom-color: rgba(204, 22, 0, 255);
|
||||
border-bottom-width: 2px;
|
||||
border-style: solid;
|
||||
color: #FFFFFF;
|
||||
@@ -258,9 +285,9 @@ QCheckBox::indicator:checked {
|
||||
width: 10px;
|
||||
border-style:solid;
|
||||
border-width: 1px;
|
||||
border-color: #04b97f;
|
||||
border-color: rgba(204, 22, 0, 255);
|
||||
color: #a9b7c6;
|
||||
background-color: #04b97f;
|
||||
background-color: rgba(204, 22, 0, 255);
|
||||
}
|
||||
QCheckBox::indicator:unchecked {
|
||||
|
||||
@@ -268,7 +295,7 @@ QCheckBox::indicator:unchecked {
|
||||
width: 10px;
|
||||
border-style:solid;
|
||||
border-width: 1px;
|
||||
border-color: #04b97f;
|
||||
border-color: rgba(204, 22, 0, 255);
|
||||
color: #a9b7c6;
|
||||
background-color: transparent;
|
||||
}
|
||||
@@ -283,9 +310,9 @@ QRadioButton::indicator:checked {
|
||||
border-style:solid;
|
||||
border-radius:5px;
|
||||
border-width: 1px;
|
||||
border-color: #04b97f;
|
||||
border-color: rgba(204, 22, 0, 255);
|
||||
color: #a9b7c6;
|
||||
background-color: #04b97f;
|
||||
background-color: rgba(204, 22, 0, 255);
|
||||
}
|
||||
QRadioButton::indicator:!checked {
|
||||
height: 10px;
|
||||
@@ -293,7 +320,7 @@ QRadioButton::indicator:!checked {
|
||||
border-style:solid;
|
||||
border-radius:5px;
|
||||
border-width: 1px;
|
||||
border-color: #04b97f;
|
||||
border-color: rgba(204, 22, 0, 255);
|
||||
color: #a9b7c6;
|
||||
background-color: transparent;
|
||||
}
|
||||
@@ -361,11 +388,11 @@ QScrollArea {
|
||||
}
|
||||
QSlider::groove:horizontal {
|
||||
height: 5px;
|
||||
background: #04b97f;
|
||||
background: rgba(204, 22, 0, 255);
|
||||
}
|
||||
QSlider::groove:vertical {
|
||||
width: 5px;
|
||||
background: #04b97f;
|
||||
background: rgba(204, 22, 0, 255);
|
||||
}
|
||||
QSlider::handle:horizontal {
|
||||
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);
|
||||
@@ -388,8 +415,8 @@ QSlider::add-page:vertical {
|
||||
background: white;
|
||||
}
|
||||
QSlider::sub-page:horizontal {
|
||||
background: #04b97f;
|
||||
background: rgba(204, 22, 0, 255);
|
||||
}
|
||||
QSlider::sub-page:vertical {
|
||||
background: #04b97f;
|
||||
}
|
||||
background: rgba(204, 22, 0, 255);
|
||||
}
|
||||
|
||||
BIN
ui/.DS_Store
vendored
Normal file
301
ui/aboutbox.ui
@@ -62,140 +62,197 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QPushButton" name="closeButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>150</y>
|
||||
<width>551</width>
|
||||
<x>665</x>
|
||||
<y>0</y>
|
||||
<width>41</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Author: Alexis Delhaie</string>
|
||||
<string>X</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>190</y>
|
||||
<width>551</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Version: 1.0.0 (Beta 4)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>230</y>
|
||||
<width>541</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>Made with Qt 5.15.0 MSVC2019 64bit (C++17) (<a href="https://github.com/alexlegarnd/Chronos"><span style=" text-decoration: underline; color:#0000ff;">Source Github</span></a>)</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTextEdit" name="textEdit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>390</x>
|
||||
<y>160</y>
|
||||
<width>301</width>
|
||||
<height>181</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="accessibleDescription">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="undoRedoEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="html">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
</widget>
|
||||
<widget class="Line" name="window_border_left">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>2</width>
|
||||
<height>381</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: none;
|
||||
background-color: rgba(204, 22, 0, 255);</string>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="window_border_right">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>705</x>
|
||||
<y>0</y>
|
||||
<width>2</width>
|
||||
<height>381</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: none;
|
||||
background-color: rgba(217, 0, 112, 255);</string>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="window_border_bottom">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>379</y>
|
||||
<width>707</width>
|
||||
<height>2</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: none;
|
||||
background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:1, y2:1, stop:0 rgba(204, 22, 0, 255), stop:1 rgba(217, 0, 112, 255));</string>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>120</y>
|
||||
<width>671</width>
|
||||
<height>241</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>Information</string>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>0</y>
|
||||
<width>714</width>
|
||||
<height>211</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Author: Aurélie Delhaie</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="versionLabel">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Version: ...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="systemLabel">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>...</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>Third party</string>
|
||||
</attribute>
|
||||
<widget class="QTextEdit" name="textEdit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>8</x>
|
||||
<y>10</y>
|
||||
<width>651</width>
|
||||
<height>191</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="accessibleDescription">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="undoRedoEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="html">
|
||||
<string><!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:12px; 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></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>393</x>
|
||||
<y>130</y>
|
||||
<width>211</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Third party:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>270</y>
|
||||
<width>541</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>Installer made with Delphi 10.3 Community (<a href="https://github.com/alexlegarnd/chronos-installer"><span style=" text-decoration: underline; color:#0000ff;">Source Github</span></a>)</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>310</y>
|
||||
<width>541</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>Installer Bootstrap made with Python 3 (<a href="https://github.com/alexlegarnd/chronos-installer-bootstrap"><span style=" text-decoration: underline; color:#0000ff;">Source Github</span></a>)</p></body></html></string>
|
||||
</property>
|
||||
</style></head><body style=" font-family:'.AppleSystemUIFont'; font-size:12px; 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-family:'MS Shell Dlg 2'; font-size:12px;">Qt 6.2.0 : https://www.qt.io/download-open-source</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-family:'MS Shell Dlg 2'; 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-family:'MS Shell Dlg 2'; 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-family:'MS Shell Dlg 2'; 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-family:'MS Shell Dlg 2'; font-size:10pt;">Running image: Icons made by </span><a href="https://www.flaticon.com/authors/freepik"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt; text-decoration: underline; color:#0000ff;">Freepik</span></a><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;"> from </span><a href="https://www.flaticon.com/"><span style=" font-family:'MS Shell Dlg 2'; 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-family:'MS Shell Dlg 2'; 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-family:'MS Shell Dlg 2'; font-size:10pt;">Calendar image: Icons made by </span><a href="https://www.flaticon.com/authors/freepik"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt; text-decoration: underline; color:#0000ff;">Freepik</span></a><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt;"> from </span><a href="https://www.flaticon.com/"><span style=" font-family:'MS Shell Dlg 2'; font-size:10pt; text-decoration: underline; color:#0000ff;">www.flaticon.com</span></a></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<zorder>tabWidget</zorder>
|
||||
<zorder>window_border_left</zorder>
|
||||
<zorder>window_border_right</zorder>
|
||||
<zorder>window_border_bottom</zorder>
|
||||
<zorder>frame</zorder>
|
||||
<zorder>closeButton</zorder>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>closeButton</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>AboutBox</receiver>
|
||||
<slot>close()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>685</x>
|
||||
<y>10</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>353</x>
|
||||
<y>190</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
|
||||
208
ui/breakdialog.ui
Normal file
@@ -0,0 +1,208 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>BreakDialog</class>
|
||||
<widget class="QDialog" name="BreakDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>319</width>
|
||||
<height>187</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>319</width>
|
||||
<height>187</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>319</width>
|
||||
<height>187</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<widget class="QPushButton" name="validateButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>190</x>
|
||||
<y>128</y>
|
||||
<width>113</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Ajouter</string>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTimeEdit" name="startTime">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>180</x>
|
||||
<y>16</y>
|
||||
<width>118</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="frame">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||
</property>
|
||||
<property name="correctionMode">
|
||||
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTimeEdit" name="endTime">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>180</x>
|
||||
<y>66</y>
|
||||
<width>118</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||
</property>
|
||||
<property name="correctionMode">
|
||||
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>31</x>
|
||||
<y>21</y>
|
||||
<width>141</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Début de la pause</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>31</x>
|
||||
<y>70</y>
|
||||
<width>141</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Fin de la pause</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>127</y>
|
||||
<width>60</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>10</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Temps</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="totalTime">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>22</x>
|
||||
<y>143</y>
|
||||
<width>151</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>24</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0 minutes</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="cancelButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>190</x>
|
||||
<y>156</y>
|
||||
<width>113</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Annuler</string>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>validateButton</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>BreakDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>246</x>
|
||||
<y>160</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>159</x>
|
||||
<y>93</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>cancelButton</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>BreakDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>246</x>
|
||||
<y>166</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>159</x>
|
||||
<y>93</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
221
ui/configurationdialog.ui
Normal file
@@ -0,0 +1,221 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ConfigurationDialog</class>
|
||||
<widget class="QDialog" name="ConfigurationDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>269</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>400</width>
|
||||
<height>269</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>400</width>
|
||||
<height>269</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>141</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Sauvegarde Cloud</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="line">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>140</x>
|
||||
<y>24</y>
|
||||
<width>251</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="cloud_url">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>164</x>
|
||||
<y>86</y>
|
||||
<width>221</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>13</x>
|
||||
<y>87</y>
|
||||
<width>101</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Serveur</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="cloud_enable">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>50</y>
|
||||
<width>371</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Utiliser la sauvegarde en ligne</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="cloud_Email">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>164</x>
|
||||
<y>118</y>
|
||||
<width>221</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>13</x>
|
||||
<y>119</y>
|
||||
<width>101</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Email</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="cloud_password">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>164</x>
|
||||
<y>150</y>
|
||||
<width>221</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>13</x>
|
||||
<y>151</y>
|
||||
<width>101</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Mot de passe</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="cloud_agent">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>164</x>
|
||||
<y>183</y>
|
||||
<width>171</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="inputMask">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><default></string>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Normal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>13</x>
|
||||
<y>184</y>
|
||||
<width>151</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Agent de sauvegarde</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="cloud_agent_btn">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>339</x>
|
||||
<y>178</y>
|
||||
<width>51</width>
|
||||
<height>32</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="close">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>280</x>
|
||||
<y>230</y>
|
||||
<width>113</width>
|
||||
<height>32</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Fermer</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
2746
ui/mainwindow.ui
@@ -10,19 +10,19 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>419</width>
|
||||
<height>177</height>
|
||||
<height>447</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>419</width>
|
||||
<height>177</height>
|
||||
<height>447</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>419</width>
|
||||
<height>177</height>
|
||||
<height>447</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -34,22 +34,31 @@
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>320</x>
|
||||
<y>140</y>
|
||||
<width>75</width>
|
||||
<x>10</x>
|
||||
<y>410</y>
|
||||
<width>191</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Valider</string>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QTimeEdit" name="start_edit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>40</x>
|
||||
<y>49</y>
|
||||
<width>91</width>
|
||||
<x>210</x>
|
||||
<y>16</y>
|
||||
<width>191</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -59,6 +68,9 @@
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||
</property>
|
||||
<property name="correctionMode">
|
||||
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
|
||||
</property>
|
||||
<property name="time">
|
||||
<time>
|
||||
<hour>9</hour>
|
||||
@@ -70,9 +82,9 @@
|
||||
<widget class="QTimeEdit" name="end_edit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>49</y>
|
||||
<width>91</width>
|
||||
<x>210</x>
|
||||
<y>310</y>
|
||||
<width>191</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -82,6 +94,9 @@
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||
</property>
|
||||
<property name="correctionMode">
|
||||
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
|
||||
</property>
|
||||
<property name="time">
|
||||
<time>
|
||||
<hour>17</hour>
|
||||
@@ -90,47 +105,63 @@
|
||||
</time>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QDoubleSpinBox" name="break_edit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>170</x>
|
||||
<y>49</y>
|
||||
<width>91</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>0.450000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>40</x>
|
||||
<y>9</y>
|
||||
<width>91</width>
|
||||
<x>10</x>
|
||||
<y>16</y>
|
||||
<width>181</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Arrivé</string>
|
||||
<string>Arrivée au bureau</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>310</y>
|
||||
<width>181</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Fin de journée</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="validateButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>220</x>
|
||||
<y>410</y>
|
||||
<width>191</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 12px</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Approuver</string>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>170</x>
|
||||
<y>9</y>
|
||||
<width>91</width>
|
||||
<x>10</x>
|
||||
<y>150</y>
|
||||
<width>181</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -138,105 +169,136 @@
|
||||
<string>Pause</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<widget class="QPushButton" name="addBreakButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>9</y>
|
||||
<width>91</width>
|
||||
<height>31</height>
|
||||
<x>360</x>
|
||||
<y>270</y>
|
||||
<width>41</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Départ</string>
|
||||
<string>+</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<widget class="QPushButton" name="removeBreakButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>40</x>
|
||||
<y>103</y>
|
||||
<width>141</width>
|
||||
<height>61</height>
|
||||
<x>320</x>
|
||||
<y>270</y>
|
||||
<width>41</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QFrame" name="frame">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>59</width>
|
||||
<height>59</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>59</width>
|
||||
<height>59</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/clock/pictures/clock-8-128.png) 0 0 0 0 stretch stretch;</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 14px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Temps total</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="total_label">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 28px;
|
||||
<property name="text">
|
||||
<string>-</string>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="line">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>380</y>
|
||||
<width>421</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QListWidget" name="breakList">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>210</x>
|
||||
<y>60</y>
|
||||
<width>191</width>
|
||||
<height>201</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgba(0, 0, 0, 0);
|
||||
color: rgb(255, 255, 255);</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="autoScroll">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="defaultDropAction">
|
||||
<enum>Qt::IgnoreAction</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>370</y>
|
||||
<width>91</width>
|
||||
<height>19</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 14px;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Temps total</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="total_label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>100</x>
|
||||
<y>360</y>
|
||||
<width>101</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 28px;
|
||||
color: white;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0h</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0h</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="notWorkingCheckbox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>210</x>
|
||||
<y>350</y>
|
||||
<width>191</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Jour non travaillé</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>pushButton</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>SetDayDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>357</x>
|
||||
<y>151</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>209</x>
|
||||
<y>88</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
161
ui/weekoption.ui
Normal file
@@ -0,0 +1,161 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>WeekOption</class>
|
||||
<widget class="QDialog" name="WeekOption">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>372</width>
|
||||
<height>159</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>372</width>
|
||||
<height>159</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>372</width>
|
||||
<height>159</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Options</string>
|
||||
</property>
|
||||
<widget class="QSpinBox" name="time_delta_spinbox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>260</x>
|
||||
<y>40</y>
|
||||
<width>101</width>
|
||||
<height>27</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string> min</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>-1000000</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1000000</number>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>111</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Réalignement</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>44</y>
|
||||
<width>161</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Delta (en minutes)</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="validate_button">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>270</x>
|
||||
<y>120</y>
|
||||
<width>88</width>
|
||||
<height>26</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Valider</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="line">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>172</x>
|
||||
<y>52</y>
|
||||
<width>81</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="lineWidth">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="midLineWidth">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="Line" name="line_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>130</x>
|
||||
<y>16</y>
|
||||
<width>231</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="total_label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>107</y>
|
||||
<width>152</width>
|
||||
<height>41</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font-size: 28px;
|
||||
color: white;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>0h</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>validate_button</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>WeekOption</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>313</x>
|
||||
<y>132</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>185</x>
|
||||
<y>79</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -42,10 +42,10 @@
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>20</y>
|
||||
<x>25</x>
|
||||
<y>37</y>
|
||||
<width>261</width>
|
||||
<height>201</height>
|
||||
<height>202</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
@@ -304,8 +304,8 @@
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>60</y>
|
||||
<x>295</x>
|
||||
<y>77</y>
|
||||
<width>201</width>
|
||||
<height>103</height>
|
||||
</rect>
|
||||
|
||||