qbreak/app/mainwindow.h

97 lines
1.8 KiB
C++

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
#include <QSystemTrayIcon>
#include <chrono>
#include <optional>
#include "settings.h"
#include "settingsdialog.h"
// Possible app states
enum class AppState
{
None,
Counting,
Idle,
Break
};
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
// Start screen immediately with 15 seconds interval
void test_1();
// Run 60/60 seconds interval & duration
void test_2();
private:
Ui::MainWindow *ui;
QTimer* mMainTimer;
QTimer* mNotifyTimer;
QTimer* mUpdateUITimer;
QTimer* mProgressTimer;
QSystemTrayIcon* mTrayIcon;
SettingsDialog* mSettingsDialog;
std::chrono::steady_clock::time_point mBreakStartTime;
// How much seconds remains for main break
int mWorkInterval = -1;
app_settings::config mAppConfig;
int mPostponeCount;
// Time when idle was started
std::optional<std::chrono::steady_clock::time_point> mIdleStart;
int mLastIdleMilliseconds;
AppState mState = AppState::None;
void init();
void loadConfig();
void applyConfig();
void schedule();
void createTrayIcon();
void showMe();
void hideMe();
void startNotification();
QIcon getAppIcon();
QIcon getTrayIcon();
// Function to switch state
void shiftTo(AppState state);
public slots:
void onUpdateUI();
void onLongBreakNotify();
void onLongBreakStart();
void onLongBreakPostpone();
void onLongBreakEnd();
void onProgress();
void onNextBreak();
void onSettings();
void onAbout();
void onExit();
void onTrayIconActivated(QSystemTrayIcon::ActivationReason reason);
};
#endif // MAINWINDOW_H