Buggy but tolerable
[kitchenalert] / src / kitchenalertmainwindow.h
1 /**************************************************************************
2         KitchenAlert
3
4         Copyright (C) 2010  Heli Hyvättinen
5
6         This file is part of KitchenAlert.
7
8         Kitchen Alert is free software: you can redistribute it and/or modify
9         it under the terms of the GNU General Public License as published by
10         the Free Software Foundation, either version 3 of the License, or
11         (at your option) any later version.
12
13         This program is distributed in the hope that it will be useful,
14         but WITHOUT ANY WARRANTY; without even the implied warranty of
15         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16         GNU General Public License for more details.
17
18         You should have received a copy of the GNU General Public License
19         along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
21 **************************************************************************/
22
23
24
25 #ifndef KITCHENALERTMAINWINDOW_H
26 #define KITCHENALERTMAINWINDOW_H
27
28 #include <QMainWindow>
29 #include "timer.h"
30 #include "currentalertstablemodel.h"
31 #include <QItemSelection>
32 #include "alertsound.h"
33
34
35 namespace Ui {
36     class KitchenAlertMainWindow;
37 }
38
39
40 /*! The main window class of KitchenAlert'
41
42   @author Heli Hyvättinen
43   @date 2010-11-24
44   @version 0.2.0
45
46 Operates the UI.
47
48 */
49
50 class KitchenAlertMainWindow : public QMainWindow
51 {
52     Q_OBJECT 
53
54
55
56
57 public:
58     explicit KitchenAlertMainWindow(QWidget *parent = 0);
59     ~KitchenAlertMainWindow();
60
61
62 public slots:
63    /*!
64    Opens a dialog for creating a new timer
65    Connects the new timer's alert and adds it to the model, starting the timer
66     */
67         void newTimerSequence();
68
69    /*!
70    Opens a dialog for choosing the alert sound
71    Gives the sound filename to AlertSound
72     */
73    void openSelectSoundDialog();
74
75     /*!
76    Shows the application's about box
77    */
78     void openAbout();
79
80 /*! Sounds the alert sound and selects the alarming timer
81   Also bring the application to top and activates it
82   Used by connecting it to the timer's alert signal
83   @param indexOfAlerted The index of the alerting timer in the model.
84
85   */
86     void alert(QModelIndex indexOfAlerted);
87
88 /*!
89     Reacts to selecting of timer in the view.
90     Needs to be connected to the corresponding signal.
91     Sets enabling of buttons as necessary.
92     Does not receive information of clearing the selection (because no signal is sent).
93     Disabling selection dependent buttons must be done manually by everything that clears the selection.
94     It cannot be cleared by the user with the selection policy used.
95
96     @param selected Selection that contains all selected cells (all cells of the row selected).
97 */
98     void timerSelected(QItemSelection selected,QItemSelection);
99
100     /*! Snoozes the timer that is currently selected.
101       Needs to be connected to the associated button.
102     */
103     void snooze();
104
105     /*! Restarts the timer selected.
106       Needs to be connected to the associated button.
107     */
108     void restart();
109
110     /*! Stops the timer selected.
111       Needs to be connected to the associated button.
112     */
113     void stop();
114
115     /*! Removes the timer selected.
116       Needs to be connected to the associated button.
117        */
118     void remove();
119
120 signals:
121
122     void defaultSoundEnabled();
123
124     void soundChanged(QString filename);
125
126 protected:
127     void changeEvent(QEvent *e);
128
129     /*!
130     Reimplemented to catch WindowActivate and WindowDeactivate events.
131     Stops refreshing the view when the window is deactivated and resumes it when reactivated.
132     */
133     bool event(QEvent *event);
134
135     /*!
136     Disables all buttons that should only be enabled when a timer is selected.
137     */
138     void disableSelectionDependentButtons();
139
140 private:
141
142     Ui::KitchenAlertMainWindow *ui;
143
144     CurrentAlertsTableModel model_; /*! The model that stores the alerts */
145
146     /*!
147     Returns a QMoldelIndex pointing to the cell in the column 0 of the row that is currently selected.
148     */
149     QModelIndex selectedRow();
150
151     AlertSound alertSound_; /*! Takes care of alert sound */ //This has been moved to the timers themselves
152
153     /*!
154     Not used. Would allow getting rid of the default sound if used.
155     */
156     void initializeAlertSound();
157
158
159 };
160
161 #endif // KITCHENALERTMAINWINDOW_H