1 #pragma once
2 
3 #include <QMainWindow>
4 #include <QTimer>
5 #include <QIcon>
6 #include <QString>
7 #include <QObject>
8 #include <QEvent>
9 #include <QSettings>
10 #include <QAudioOutput>
11 #include <QIODevice>
12 #include <QKeyEvent>
13 
14 #include "emuwrapper.h"
15 #include "settingsmanager.h"
16 #include "statemanager.h"
17 #include "debugviewer.h"
18 
19 namespace Ui{
20 class MainWindow;
21 }
22 
23 class MainWindow : public QMainWindow{
24    Q_OBJECT
25 
26 public:
27    EmuWrapper emu;
28    QSettings* settings;
29 
30    explicit MainWindow(QWidget* parent = nullptr);
31    ~MainWindow();
32 
33 protected:
34     void keyPressEvent(QKeyEvent* event);
35     void keyReleaseEvent(QKeyEvent* event);
36 
37 public:
38    void createHomeDirectoryTree(const QString& path);
39 
40 private:
41    void popupErrorDialog(const QString& error);
42    void popupInformationDialog(const QString& info);
43    void redraw();
44 
45 private slots:
46    bool eventFilter(QObject* object, QEvent* event);
47 
48    //display
49    void updateDisplay();
50 
51    //palm buttons
52    void on_power_pressed();
53    void on_power_released();
54    void on_calendar_pressed();
55    void on_calendar_released();
56    void on_addressBook_pressed();
57    void on_addressBook_released();
58    void on_todo_pressed();
59    void on_todo_released();
60    void on_notes_pressed();
61    void on_notes_released();
62    void on_voiceMemo_pressed();
63    void on_voiceMemo_released();
64    void on_up_pressed();
65    void on_up_released();
66    void on_down_pressed();
67    void on_down_released();
68    void on_left_pressed();
69    void on_left_released();
70    void on_right_pressed();
71    void on_right_released();
72    void on_center_pressed();
73    void on_center_released();
74 
75    //frontend buttons
76    void on_ctrlBtn_clicked();
77    void on_install_clicked();
78    void on_debugger_clicked();
79    void on_screenshot_clicked();
80    void on_stateManager_clicked();
81    void on_reset_clicked();
82    void on_settings_clicked();
83    void on_bootApp_clicked();
84 
85 private:
86    SettingsManager* settingsManager;
87    StateManager*    stateManager;
88    DebugViewer*     emuDebugger;
89    QTimer*          refreshDisplay;
90    QAudioOutput*    audioDevice;
91    QIODevice*       audioOut;
92    Ui::MainWindow*  ui;
93    int              keyForButton[EmuWrapper::BUTTON_TOTAL_COUNT];
94 };
95