1 /*
2  *  prefdlg_p.h  -  private classes for program preferences dialog
3  *  Program:  kalarm
4  *  SPDX-FileCopyrightText: 2001-2021 David Jarvie <djarvie@kde.org>
5  *
6  *  SPDX-License-Identifier: GPL-2.0-or-later
7  */
8 
9 #pragma once
10 
11 #include "preferences.h"
12 #include "prefdlg.h"
13 #include "lib/stackedwidgets.h"
14 
15 class QCheckBox;
16 class QGroupBox;
17 class QAbstractButton;
18 class QRadioButton;
19 class QPushButton;
20 class QLabel;
21 class QSpinBox;
22 class QTimeZone;
23 class QLineEdit;
24 class QComboBox;
25 class QVBoxLayout;
26 class QTabWidget;
27 class FontColourChooser;
28 class CheckBox;
29 class ColourButton;
30 class ButtonGroup;
31 class RadioButton;
32 class TimeEdit;
33 class TimePeriod;
34 class Slider;
35 class SpinBox;
36 class TimeSpinBox;
37 class SpecialActionsButton;
38 class TimeZoneCombo;
39 
40 
41 // Base class for each tab in the Preferences dialog
42 class PrefsTabBase : public StackedScrollWidget
43 {
44     Q_OBJECT
45 public:
46     explicit PrefsTabBase(StackedScrollGroup*);
47 
48     void         setPreferences();
49     virtual void restore(bool defaults, bool allTabs) = 0;
50     virtual void apply(bool syncToDisc) = 0;
51     void         addAlignedLabel(QLabel*);
topLayout()52     QVBoxLayout* topLayout() const  { return mTopLayout; }
indentWidth()53     static int   indentWidth()      { return mIndentWidth; }
gridIndentWidth()54     static int   gridIndentWidth()  { return mGridIndentWidth; }
55 
56 protected:
57     void showEvent(QShowEvent*) override;
58 
59 private:
60     static int       mIndentWidth;           // indent width for checkboxes etc.
61     static int       mGridIndentWidth;       // minimum grid column indent width for checkboxes etc.
62     QVBoxLayout*     mTopLayout;
63     QVector<QLabel*> mLabels;                // labels to right-align
64     bool             mLabelsAligned {false}; // labels have been aligned
65 };
66 
67 
68 // Miscellaneous tab of the Preferences dialog
69 class MiscPrefTab : public PrefsTabBase
70 {
71     Q_OBJECT
72 public:
73     explicit MiscPrefTab(StackedScrollGroup*);
74 
75     void restore(bool defaults, bool allTabs) override;
76     void apply(bool syncToDisc) override;
77 
78 private Q_SLOTS:
79     void         slotAutostartClicked();
80     void         slotOtherTerminalToggled(bool);
81 
82 private:
83     void         setTimeZone(const QTimeZone&);
84 
85     QCheckBox*    mAutoStart;
86     QCheckBox*    mQuitWarn;
87     QCheckBox*    mUseAlarmNames;
88     QCheckBox*    mConfirmAlarmDeletion;
89     TimeSpinBox*  mDefaultDeferTime;
90     ButtonGroup*  mXtermType;
91     QLineEdit*    mXtermCommand;
92     int           mXtermFirst;              // id of first terminal window radio button
93     int           mXtermCount;              // number of terminal window types
94 };
95 
96 
97 // Date/time tab of the Preferences dialog
98 class TimePrefTab : public PrefsTabBase
99 {
100     Q_OBJECT
101 public:
102     explicit TimePrefTab(StackedScrollGroup*);
103 
104     void restore(bool defaults, bool allTabs) override;
105     void apply(bool syncToDisc) override;
106 
107 private:
108     void         setWorkDays(const QBitArray& days);
109 
110     TimeZoneCombo* mTimeZone;
111     QComboBox*    mHolidays;
112     QMap<QString, QString> mHolidayNames;
113     TimeEdit*     mStartOfDay;
114     QCheckBox*    mWorkDays[7];
115     TimeEdit*     mWorkStart;
116     TimeEdit*     mWorkEnd;
117     TimeSpinBox*  mKOrgEventDuration;
118 };
119 
120 
121 // Storage tab of the Preferences dialog
122 class StorePrefTab : public PrefsTabBase
123 {
124     Q_OBJECT
125 public:
126     explicit StorePrefTab(StackedScrollGroup*);
127 
128     void restore(bool defaults, bool allTabs) override;
129     void apply(bool syncToDisc) override;
130 
131 private Q_SLOTS:
132     void         slotArchivedToggled(bool);
133     void         slotClearArchived();
134 
135 private:
136     void         setArchivedControls(int purgeDays);
137 
138     QRadioButton* mDefaultResource;
139     QRadioButton* mAskResource;
140     QCheckBox*    mKeepArchived;
141     QCheckBox*    mPurgeArchived;
142     SpinBox*      mPurgeAfter;
143     QLabel*       mPurgeAfterLabel;
144     QPushButton*  mClearArchived;
145     bool          mOldKeepArchived;    // previous setting of keep-archived
146     bool          mCheckKeepChanges {false};
147 };
148 
149 
150 // Email tab of the Preferences dialog
151 class EmailPrefTab : public PrefsTabBase
152 {
153     Q_OBJECT
154 public:
155     explicit EmailPrefTab(StackedScrollGroup*);
156 
157     QString      validate();
158     void restore(bool defaults, bool allTabs) override;
159     void apply(bool syncToDisc) override;
160 
161 private Q_SLOTS:
162     void         slotEmailClientChanged(QAbstractButton*);
163     void         slotFromAddrChanged(QAbstractButton*);
164     void         slotBccAddrChanged(QAbstractButton*);
slotAddressChanged()165     void         slotAddressChanged()    { mAddressChanged = true; }
166 
167 private:
168     void         setEmailAddress(Preferences::MailFrom, const QString& address);
169     void         setEmailBccAddress(bool useSystemSettings, const QString& address);
170     QString      validateAddr(ButtonGroup*, QLineEdit* addr, const QString& msg);
171 
172     ButtonGroup* mEmailClient;
173     RadioButton* mKMailButton;
174     RadioButton* mSendmailButton;
175     ButtonGroup* mFromAddressGroup;
176     RadioButton* mFromAddrButton;
177     RadioButton* mFromCCentreButton;
178     RadioButton* mFromKMailButton;
179     QLineEdit*   mEmailAddress;
180     ButtonGroup* mBccAddressGroup;
181     RadioButton* mBccAddrButton;
182     RadioButton* mBccCCentreButton;
183     QLineEdit*   mEmailBccAddress;
184     QCheckBox*   mEmailQueuedNotify;
185     QCheckBox*   mEmailCopyToKMail;
186     bool         mAddressChanged {false};
187     bool         mBccAddressChanged {false};
188 };
189 
190 
191 // Edit defaults tab of the Preferences dialog
192 class EditPrefTab : public PrefsTabBase
193 {
194     Q_OBJECT
195 public:
196     explicit EditPrefTab(StackedScrollGroup*);
197 
198     QString      validate();
199     void restore(bool defaults, bool allTabs) override;
200     void apply(bool syncToDisc) override;
201 
202 private Q_SLOTS:
203     void         slotBrowseSoundFile();
204 
205 private:
206     QTabWidget*     mTabs;
207     QComboBox*      mDisplayMethod;
208     QCheckBox*      mAutoClose;
209     QCheckBox*      mConfirmAck;
210     QComboBox*      mReminderUnits;
211     SpecialActionsButton* mSpecialActionsButton;
212     QCheckBox*      mCmdScript;
213     QCheckBox*      mCmdXterm;
214     QCheckBox*      mEmailBcc;
215     QComboBox*      mSound;
216     QLabel*         mSoundFileLabel;
217     QLineEdit*      mSoundFile;
218     QPushButton*    mSoundFileBrowse;
219     CheckBox*       mSoundVolumeCheckbox;
220     Slider*         mSoundVolumeSlider;
221     QCheckBox*      mSoundRepeat;
222     QCheckBox*      mCopyToKOrganizer;
223     QCheckBox*      mLateCancel;
224     ComboBox*       mRecurPeriod;
225     ButtonGroup*    mFeb29;
226     FontColourChooser* mFontChooser;
227     int             mTabGeneral;     // index of General tab
228     int             mTabTypes;       // index of Alarm Types tab
229     int             mTabFontColour;  // index of Font & Color tab
230 
231     static int soundIndex(Preferences::SoundType);
232 };
233 
234 
235 // View tab of the Preferences dialog
236 class ViewPrefTab : public PrefsTabBase
237 {
238     Q_OBJECT
239 public:
240     explicit ViewPrefTab(StackedScrollGroup*);
241 
242     void restore(bool defaults, bool allTabs) override;
243     void apply(bool syncToDisc) override;
244 
245 private Q_SLOTS:
246     void         slotTooltipAlarmsToggled(bool);
247     void         slotTooltipMaxToggled(bool);
248     void         slotTooltipTimeToggled(bool);
249     void         slotTooltipTimeToToggled(bool);
250     void         slotAutoHideSysTrayChanged(QAbstractButton*);
251     void         slotWindowPosChanged(QAbstractButton*);
252 
253 private:
254     void         setTooltip(int maxAlarms, bool time, bool timeTo, const QString& prefix);
255 
256     QTabWidget*   mTabs;
257     ColourButton* mDisabledColour;
258     ColourButton* mArchivedColour;
259     QCheckBox*    mShowInSystemTrayCheck {nullptr};
260     QGroupBox*    mShowInSystemTrayGroup {nullptr};
261     ButtonGroup*  mAutoHideSystemTray {nullptr};
262     TimePeriod*   mAutoHideSystemTrayPeriod {nullptr};
263     QCheckBox*    mTooltipShowAlarms;
264     QCheckBox*    mTooltipMaxAlarms;
265     SpinBox*      mTooltipMaxAlarmCount;
266     QCheckBox*    mTooltipShowTime;
267     QCheckBox*    mTooltipShowTimeTo;
268     QLineEdit*    mTooltipTimeToPrefix;
269     QLabel*       mTooltipTimeToPrefixLabel;
270     ButtonGroup*  mWindowPosition;
271     QSpinBox*     mWindowButtonDelay;
272     QLabel*       mWindowButtonDelayLabel;
273     QCheckBox*    mModalMessages {nullptr};
274     int           mTabGeneral;    // index of General tab
275     int           mTabWindows;    // index of Alarm Windows tab
276 };
277 
278 
279 // vim: et sw=4:
280