55 lines
2.8 KiB
C++
55 lines
2.8 KiB
C++
#ifndef WORKTIMECALCULATOR_H
|
|
#define WORKTIMECALCULATOR_H
|
|
|
|
#include <QMainWindow> // Basis-Klasse für das Hauptfenster
|
|
#include <QTimeEdit> // Widget zur Eingabe von Uhrzeiten
|
|
#include <QPushButton> // Button-Widget
|
|
#include <QCheckBox> // Checkbox-Widget
|
|
#include <QListWidget> // Widget zur Anzeige der Pausenzeiten
|
|
#include <QSpinBox> // Eingabe für numerische Werte (z. B. Stunden/Minuten)
|
|
#include <QLabel> // Widget zur Anzeige von Text
|
|
#include <QTime>
|
|
|
|
class WorkTimeCalculator : public QMainWindow {
|
|
Q_OBJECT // Erforderlich für Qt-Signal- und Slot-Mechanismus
|
|
|
|
public:
|
|
// Konstruktor und Destruktor
|
|
explicit WorkTimeCalculator(QWidget *parent = nullptr); // Initialisiert GUI und Logik
|
|
~WorkTimeCalculator() override; // Speichert Einstellungen beim Schließen
|
|
|
|
private slots:
|
|
// Slots für Benutzeraktionen
|
|
void addBreak(); // Hinzufügen einer neuen Pause
|
|
void removeSelectedBreak(); // Entfernt die markierte Pause
|
|
void calculateWorkTime(); // Berechnet die Netto-Arbeitszeit
|
|
|
|
private:
|
|
// Hilfsfunktionen
|
|
void loadSettings(); // Lädt gespeicherte Einstellungen
|
|
void saveSettings(); // Speichert aktuelle Einstellungen
|
|
int totalBreakMinutes() const; // Summe aller Pausen (aus den Item-Daten)
|
|
void addBreakItem(int minutes); // Fügt eine Pause als Item mit Datenrolle ein
|
|
|
|
// Liefert vergangene Minuten zwischen zwei Zeiten und behandelt
|
|
// den Überlauf über Mitternacht korrekt (Ende < Start -> +24h).
|
|
static int minutesBetween(const QTime &start, const QTime &end, bool *crossesMidnight = nullptr);
|
|
static QString formatDuration(int minutes); // "8:05" (Betrag, ohne Vorzeichen)
|
|
static QString formatSignedDuration(int minutes); // "+1:15" / "-0:45"
|
|
|
|
// GUI-Komponenten
|
|
QTimeEdit *startTimeEdit; // Widget für die Einstempelzeit
|
|
QTimeEdit *endTimeEdit; // Widget für die Ausstempelzeit (optional)
|
|
QPushButton *addBreakButton; // Button, um eine Pause hinzuzufügen
|
|
QPushButton *removeBreakButton; // Button, um eine Pause zu entfernen
|
|
QPushButton *calculateButton; // Button, um die Arbeitszeit zu berechnen
|
|
QCheckBox *includeEndTimeCheckbox; // Checkbox zur Aktivierung der Ausstempelzeit
|
|
QListWidget *breakList; // Liste der eingegebenen Pausenzeiten
|
|
QSpinBox *dailyHoursSpin; // Eingabe für tägliche Sollarbeitszeit (Stunden)
|
|
QSpinBox *dailyMinutesSpin; // Eingabe für tägliche Sollarbeitszeit (Minuten)
|
|
QLabel *resultLabel; // Anzeige für das Ergebnis der Berechnung
|
|
|
|
static constexpr int BreakRole = Qt::UserRole; // Datenrolle für die Pausenminuten
|
|
};
|
|
|
|
#endif // WORKTIMECALCULATOR_H
|