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