1 /* 2 * messagewindow.h - displays an alarm message in a window 3 * Program: kalarm 4 * SPDX-FileCopyrightText: 2001-2020 David Jarvie <djarvie@kde.org> 5 * 6 * SPDX-License-Identifier: GPL-2.0-or-later 7 */ 8 9 #pragma once 10 11 #include "mainwindowbase.h" 12 #include "messagedisplay.h" 13 14 15 class QShowEvent; 16 class QMoveEvent; 17 class QResizeEvent; 18 class QCloseEvent; 19 class PushButton; 20 class MessageText; 21 class QCheckBox; 22 class QLabel; 23 class EditAlarmDlg; 24 25 using namespace KAlarmCal; 26 27 /** 28 * MessageWindow: A window to display an alarm or error message 29 */ 30 class MessageWindow : public MainWindowBase, public MessageDisplay 31 { 32 Q_OBJECT 33 public: 34 MessageWindow(); // for session management restoration only 35 MessageWindow(const KAEvent&, const KAAlarm&, int flags); 36 MessageWindow(const KAEvent&, const DateTime& alarmDateTime, const QStringList& errmsgs, 37 const QString& dontShowAgain); 38 ~MessageWindow() override; 39 40 QWidget* displayParent() override; 41 void closeDisplay() override; 42 void showDisplay() override; 43 void raiseDisplay() override; 44 45 void repeat(const KAAlarm&) override; 46 bool hasDefer() const override; 47 void showDefer() override; 48 void showDateTime(const KAEvent&, const KAAlarm&) override; 49 void cancelReminder(const KAEvent&, const KAAlarm&) override; 50 51 /** Use display() instead of show() to display a message window. 52 * This prevents windows which should be auto-closed from being shown. 53 */ 54 void display(); 55 56 QSize sizeHint() const override; 57 static void redisplayAlarms(); 58 static int windowCount(bool excludeAlwaysHidden = false); 59 static bool spread(bool scatter); 60 61 protected Q_SLOTS: 62 void textsChanged(MessageDisplayHelper::DisplayTexts::TextIds ids, const QString& change); 63 64 protected: 65 /** Called by MessageDisplayHelper to confirm that the alarm message should 66 * be acknowledged (closed). 67 * @return true to close the alarm message, false to keep it open. 68 */ 69 bool confirmAcknowledgement() override; 70 71 void setUpDisplay() override; 72 73 bool isDeferButtonEnabled() const override; 74 void enableDeferButton(bool enable) override; 75 void enableEditButton(bool enable) override; 76 77 /** Called when the edit alarm dialog has been cancelled. */ 78 void editDlgCancelled() override; 79 80 void showEvent(QShowEvent*) override; 81 void moveEvent(QMoveEvent*) override; 82 void resizeEvent(QResizeEvent*) override; 83 void closeEvent(QCloseEvent*) override; 84 void saveProperties(KConfigGroup&) override; 85 void readProperties(const KConfigGroup&) override; 86 87 private Q_SLOTS: 88 void slotOk(); 89 void slotEdit(); 90 void slotDefer(); 91 void activeWindowChanged(WId); 92 void displayMainWindow(); 93 void slotShowKMailMessage(); 94 void enableButtons(); 95 void commandCompleted(bool success); 96 void frameDrawn(); 97 98 private: 99 void displayComplete(); 100 void setButtonsReadOnly(bool); 101 bool getWorkAreaAndModal(); 102 static bool isSpread(const QPoint& topLeft); 103 void show(); // ensure that display() is called instead of show() on a MessageWindow object 104 105 static QVector<MessageWindow*> mWindowList; // list of message window instances 106 // Properties needed by readProperties() 107 int mRestoreHeight; 108 // Miscellaneous 109 QLabel* mTimeLabel {nullptr}; // trigger time label 110 QLabel* mRemainingText {nullptr}; // the remaining time (for a reminder window) 111 PushButton* mOkButton; 112 PushButton* mEditButton {nullptr}; 113 PushButton* mDeferButton {nullptr}; 114 PushButton* mSilenceButton {nullptr}; 115 PushButton* mKAlarmButton; 116 PushButton* mKMailButton {nullptr}; 117 MessageText* mCommandText {nullptr}; // shows output from command 118 QCheckBox* mDontShowAgainCheck {nullptr}; 119 DeferDlgData* mDeferData {nullptr}; // defer dialog data 120 int mButtonDelay; // delay (ms) after window is shown before buttons are enabled 121 int mScreenNumber; // screen to display on, or -1 for default 122 bool mInitialised {false}; // setUpDisplay() has been called to create the window's widgets 123 bool mShown {false}; // true once the window has been displayed 124 bool mPositioning {false}; // true when the window is being positioned initially 125 }; 126 127 128 // vim: et sw=4: 129