#ifndef WORKTIMECALCULATOR_H #define WORKTIMECALCULATOR_H #include // Basis-Klasse für das Hauptfenster #include // Widget zur Eingabe von Uhrzeiten #include // Button-Widget #include // Checkbox-Widget #include // Widget zur Anzeige der Pausenzeiten #include // Eingabe für numerische Werte (z. B. Stunden/Minuten) #include // Widget zur Anzeige von Text #include 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