File indexing completed on 2024-04-28 16:54:23
0001 /* 0002 SPDX-FileCopyrightText: 2000 Carsten Pfeiffer <pfeiffer@kde.org> 0003 SPDX-FileCopyrightText: 2008 Dmitry Suzdalev <dimsuz@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 #pragma once 0008 0009 #include <KConfigDialog> 0010 0011 #include "urlgrabber.h" 0012 0013 class KConfigSkeleton; 0014 class KConfigSkeletonItem; 0015 class KShortcutsEditor; 0016 class Klipper; 0017 class KEditListWidget; 0018 class KActionCollection; 0019 class KPluralHandlingSpinBox; 0020 class EditActionDialog; 0021 class QCheckBox; 0022 class QRadioButton; 0023 class QTreeWidgetItem; 0024 class QLabel; 0025 class ActionsTreeWidget; 0026 0027 class GeneralWidget : public QWidget 0028 { 0029 Q_OBJECT 0030 0031 public: 0032 explicit GeneralWidget(QWidget *parent); 0033 ~GeneralWidget() override = default; 0034 0035 void updateWidgets(); 0036 void initWidgetStates(); 0037 0038 Q_SIGNALS: 0039 void widgetChanged(); 0040 0041 public Q_SLOTS: 0042 void slotWidgetModified(); 0043 0044 private: 0045 QCheckBox *m_enableHistoryCb; 0046 QCheckBox *m_syncClipboardsCb; 0047 0048 QRadioButton *m_alwaysTextRb; 0049 QRadioButton *m_copiedTextRb; 0050 0051 QRadioButton *m_alwaysImageRb; 0052 QRadioButton *m_copiedImageRb; 0053 QRadioButton *m_neverImageRb; 0054 0055 KPluralHandlingSpinBox *m_historySizeSb; 0056 0057 bool m_havePrevAlwaysImageTextConfig; 0058 bool m_prevAlwaysImage; 0059 bool m_prevAlwaysText; 0060 }; 0061 0062 class PopupWidget : public QWidget 0063 { 0064 Q_OBJECT 0065 0066 public: 0067 explicit PopupWidget(QWidget *parent); 0068 ~PopupWidget() override = default; 0069 0070 void setExcludedWMClasses(const QStringList &); 0071 QStringList excludedWMClasses() const; 0072 0073 private Q_SLOTS: 0074 void onAdvanced(); 0075 0076 private: 0077 QCheckBox *m_enablePopupCb; 0078 QCheckBox *m_historyPopupCb; 0079 QCheckBox *m_stripWhitespaceCb; 0080 QCheckBox *m_mimeActionsCb; 0081 0082 KPluralHandlingSpinBox *m_actionTimeoutSb; 0083 0084 QStringList m_exclWMClasses; 0085 }; 0086 0087 class ActionsWidget : public QWidget 0088 { 0089 Q_OBJECT 0090 public: 0091 explicit ActionsWidget(QWidget *parent); 0092 ~ActionsWidget() override = default; 0093 0094 void setActionList(const ActionList &); 0095 ActionList actionList() const; 0096 0097 void resetModifiedState(); 0098 bool hasChanged() const; 0099 0100 Q_SIGNALS: 0101 void widgetChanged(); 0102 0103 private Q_SLOTS: 0104 void onSelectionChanged(); 0105 void onAddAction(); 0106 void onEditAction(); 0107 void onDeleteAction(); 0108 0109 private: 0110 void updateActionItem(QTreeWidgetItem *item, const ClipAction *action); 0111 void updateActionListView(); 0112 0113 private: 0114 ActionsTreeWidget *m_actionsTree; 0115 QPushButton *m_addActionButton; 0116 QPushButton *m_editActionButton; 0117 QPushButton *m_deleteActionButton; 0118 0119 /** 0120 * List of actions this page works with 0121 */ 0122 ActionList m_actionList; 0123 }; 0124 0125 // only for use inside PopupWidget 0126 class AdvancedWidget : public QWidget 0127 { 0128 Q_OBJECT 0129 0130 public: 0131 explicit AdvancedWidget(QWidget *parent = nullptr); 0132 ~AdvancedWidget() override = default; 0133 0134 void setWMClasses(const QStringList &items); 0135 QStringList wmClasses() const; 0136 0137 private: 0138 KEditListWidget *m_editListBox; 0139 }; 0140 0141 class ConfigDialog : public KConfigDialog 0142 { 0143 Q_OBJECT 0144 0145 public: 0146 ConfigDialog(QWidget *parent, KConfigSkeleton *config, Klipper *klipper, KActionCollection *collection); 0147 ~ConfigDialog() override = default; 0148 0149 static QLabel *createHintLabel(const QString &text, QWidget *parent); 0150 static QLabel *createHintLabel(const KConfigSkeletonItem *item, QWidget *parent); 0151 static QString manualShortcutString(); 0152 0153 protected: 0154 // reimp 0155 bool hasChanged() override; 0156 0157 protected slots: 0158 // reimp 0159 void updateWidgets() override; 0160 // reimp 0161 void updateSettings() override; 0162 // reimp 0163 void updateWidgetsDefault() override; 0164 0165 private: 0166 GeneralWidget *m_generalPage; 0167 PopupWidget *m_popupPage; 0168 ActionsWidget *m_actionsPage; 0169 KShortcutsEditor *m_shortcutsWidget; 0170 0171 Klipper *m_klipper; 0172 };