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 };