1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
/*
* messagewin.h - displays an alarm message
* Program: kalarm
* Copyright © 2001-2009 by David Jarvie <djarvie@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef MESSAGEWIN_H
#define MESSAGEWIN_H
/** @file messagewin.h - displays an alarm message */
#include <QList>
#include <QMap>
#include <QPointer>
#include "mainwindowbase.h"
#include "alarmevent.h"
class QShowEvent;
class QMoveEvent;
class QResizeEvent;
class QCloseEvent;
class QPushButton;
class KPushButton;
class MessageText;
class QCheckBox;
class QLabel;
class DeferAlarmDlg;
class ShellProcess;
class AudioThread;
/**
* MessageWin: A window to display an alarm message
*/
class MessageWin : public MainWindowBase
{
Q_OBJECT
public:
enum { // flags for constructor
NO_RESCHEDULE = 0x01, // don't reschedule the event once it has displayed
NO_DEFER = 0x02, // don't display the Defer button
NO_INIT_VIEW = 0x04 // for internal MessageWin use only
};
MessageWin(); // for session management restoration only
MessageWin(const KAEvent*, const KAAlarm&, int flags);
~MessageWin();
void repeat(const KAAlarm&);
void setRecreating() { mRecreating = true; }
const DateTime& dateTime() { return mDateTime; }
KAAlarm::Type alarmType() const { return mAlarmType; }
bool hasDefer() const { return mDeferButton; }
bool isValid() const { return !mInvalid; }
virtual void show();
virtual QSize sizeHint() const;
static int instanceCount() { return mWindowList.count(); }
static MessageWin* findEvent(const QString& eventID);
static void redisplayAlarms();
static void showError(const KAEvent&, const DateTime& alarmDateTime, const QStringList& errmsgs,
const QString& dontShowAgain = QString());
static bool spread(bool scatter);
protected:
virtual void showEvent(QShowEvent*);
virtual void moveEvent(QMoveEvent*);
virtual void resizeEvent(QResizeEvent*);
virtual void closeEvent(QCloseEvent*);
virtual void saveProperties(KConfigGroup&);
virtual void readProperties(const KConfigGroup&);
private slots:
void slotOk();
void slotEdit();
void slotDefer();
void checkDeferralLimit();
void displayMainWindow();
#ifdef KMAIL_SUPPORTED
void slotShowKMailMessage();
#endif
void slotSpeak();
void audioTerminating();
void startAudio();
void playReady();
void playFinished();
void enableButtons();
void setRemainingTextDay();
void setRemainingTextMinute();
void frameDrawn();
void readProcessOutput(ShellProcess*);
private:
MessageWin(const KAEvent*, const DateTime& alarmDateTime, const QStringList& errmsgs,
const QString& dontShowAgain);
void initView();
void displayComplete();
void playAudio();
void setDeferralLimit(const KAEvent&);
void alarmShowing(KAEvent&, const KCal::Event* = 0);
bool retrieveEvent(KAEvent&, AlarmResource*&, bool& showEdit, bool& showDefer);
bool haveErrorMessage(unsigned msg) const;
void clearErrorMessage(unsigned msg) const;
static bool reinstateFromDisplaying(const KCal::Event*, KAEvent&, AlarmResource*&, bool& showEdit, bool& showDefer);
static bool isSpread(const QPoint& topLeft);
static QList<MessageWin*> mWindowList; // list of existing message windows
static QMap<QString, unsigned> mErrorMessages; // error messages currently displayed, by event ID
// Sound file playing
static QPointer<AudioThread> mAudioThread; // thread to play audio file
static MessageWin* mAudioOwner; // window which owns mAudioThread
// Properties needed by readProperties()
QString mMessage;
QFont mFont;
QColor mBgColour, mFgColour;
DateTime mDateTime; // date/time displayed in the message window
QDateTime mCloseTime; // local time at which window should be auto-closed
QString mEventID;
QString mAudioFile;
float mVolume;
float mFadeVolume;
int mFadeSeconds;
int mDefaultDeferMinutes;
KAAlarm::Type mAlarmType;
KAEvent::Action mAction;
unsigned long mKMailSerialNumber; // if email text, message's KMail serial number, else 0
KAEvent::CmdErrType mCommandError;
QStringList mErrorMsgs;
QString mDontShowAgain; // non-null for don't-show-again option with error message
int mRestoreHeight;
bool mAudioRepeat;
bool mConfirmAck;
bool mShowEdit; // display the Edit button
bool mNoDefer; // don't display a Defer option
bool mInvalid; // restored window is invalid
// Miscellaneous
KAEvent mEvent; // the whole event, for updating the calendar file
AlarmResource* mResource; // resource which the event comes/came from
QLabel* mRemainingText; // the remaining time (for a reminder window)
KPushButton* mOkButton;
QPushButton* mEditButton;
QPushButton* mDeferButton;
QPushButton* mSilenceButton;
QPushButton* mKAlarmButton;
QPushButton* mKMailButton;
MessageText* mCommandText; // shows output from command
QCheckBox* mDontShowAgainCheck;
DeferAlarmDlg* mDeferDlg;
QDateTime mDeferLimit; // last time to which the message can currently be deferred
int mFlags;
int mLateCancel;
int mButtonDelay; // delay (ms) after window is shown before buttons are enabled
bool mErrorWindow; // the window is simply an error message
bool mNoPostAction; // don't execute any post-alarm action
bool mRecreating; // window is about to be deleted and immediately recreated
bool mBeep;
bool mSpeak; // the message should be spoken via kttsd
bool mRescheduleEvent; // true to delete event after message has been displayed
bool mShown; // true once the window has been displayed
bool mPositioning; // true when the window is being positioned initially
bool mNoCloseConfirm; // the Defer or Edit button is closing the dialog
bool mDisableDeferral; // true if past deferral limit, so don't enable Defer button
};
#endif // MESSAGEWIN_H
|