File indexing completed on 2024-06-02 04:32:30
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Anna Medonosová <anna.medonosova@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "KisSPenSettings.h" 0008 0009 #include <QAction> 0010 #include <QStandardItem> 0011 #include <QStandardItemModel> 0012 #include <QList> 0013 #include <QMap> 0014 #include <QModelIndex> 0015 0016 #include <KisMainWindow.h> 0017 #include <kactioncollection.h> 0018 #include <KisPart.h> 0019 #include <kactioncategory.h> 0020 #include <kconfiggroup.h> 0021 #include <ksharedconfig.h> 0022 #include <klocalizedstring.h> 0023 #include <KisActionsSnapshot.h> 0024 #include <kis_icon_utils.h> 0025 0026 KisSPenSettings::KisSPenSettings(QWidget *parent) 0027 : KisPreferenceSet(parent) 0028 , m_model(new QStandardItemModel()) 0029 { 0030 mUi = new WdgSPenSettings(this); 0031 0032 m_model->setColumnCount(2); 0033 0034 // TODO - popup palette is different action mechanism, thus is missing in this list; maybe we could create a fake KisAction for it 0035 // Thanks to the KisActionSnapshot, we can list all actions even when no document is open 0036 QScopedPointer<KisActionsSnapshot> actionsSnapshot(new KisActionsSnapshot()); 0037 0038 KisKActionCollection *actionCollection = KisPart::instance()->currentMainwindow()->actionCollection(); 0039 for (QAction *action: actionCollection->actions()) { 0040 actionsSnapshot->addAction(action->objectName(), action); 0041 } 0042 0043 QMap<QString, KisKActionCollection*> sortedCollections = actionsSnapshot->actionCollections(); 0044 for (KisKActionCollection* collection: sortedCollections) { 0045 for (QAction* action: collection->actions()) { 0046 QString actionName = KLocalizedString::removeAcceleratorMarker(action->text()); 0047 QStandardItem* item = new QStandardItem(action->icon(), actionName); 0048 QStandardItem* actionNameItem = new QStandardItem(action->objectName()); 0049 m_model->appendRow(QList<QStandardItem*>() << item << actionNameItem); 0050 } 0051 } 0052 0053 m_model->sort(m_ACTION_TEXT_COLUMN); 0054 m_model->insertRow(0, new QStandardItem(i18n("Do nothing"))); 0055 0056 mUi->cmbClickAction->setModel(m_model); 0057 mUi->cmbDoubleClickAction->setModel(m_model); 0058 mUi->cmbGestureSwipeUp->setModel(m_model); 0059 mUi->cmbGestureSwipeDown->setModel(m_model); 0060 mUi->cmbGestureSwipeLeft->setModel(m_model); 0061 mUi->cmbGestureSwipeRight->setModel(m_model); 0062 mUi->cmbGestureCircleCW->setModel(m_model); 0063 mUi->cmbGestureCircleCCW->setModel(m_model); 0064 0065 loadPreferences(); 0066 } 0067 0068 KisSPenSettings::~KisSPenSettings() 0069 { 0070 delete mUi; 0071 delete m_model; 0072 } 0073 0074 QString KisSPenSettings::id() 0075 { 0076 return QString("SPenSettings"); 0077 } 0078 0079 QString KisSPenSettings::name() 0080 { 0081 return header(); 0082 } 0083 0084 QString KisSPenSettings::header() 0085 { 0086 return QString(i18n("S-Pen Actions")); 0087 } 0088 0089 QIcon KisSPenSettings::icon() 0090 { 0091 return KisIconUtils::loadIcon("spen-remote"); 0092 } 0093 0094 void KisSPenSettings::savePreferences() const 0095 { 0096 KConfigGroup cfg = KSharedConfig::openConfig()->group("SPenSettings"); 0097 0098 cfg.writeEntry("actionButtonClick", actionNameForIndex(mUi->cmbClickAction->currentIndex())); 0099 cfg.writeEntry("actionButtonDoubleClick", actionNameForIndex(mUi->cmbDoubleClickAction->currentIndex())); 0100 cfg.writeEntry("actionGestureSwipeUp", actionNameForIndex(mUi->cmbGestureSwipeUp->currentIndex())); 0101 cfg.writeEntry("actionGestureSwipeDown", actionNameForIndex(mUi->cmbGestureSwipeDown->currentIndex())); 0102 cfg.writeEntry("actionGestureSwipeLeft", actionNameForIndex(mUi->cmbGestureSwipeLeft->currentIndex())); 0103 cfg.writeEntry("actionGestureSwipeRight", actionNameForIndex(mUi->cmbGestureSwipeRight->currentIndex())); 0104 cfg.writeEntry("actionGestureCircleCW", actionNameForIndex(mUi->cmbGestureCircleCW->currentIndex())); 0105 cfg.writeEntry("actionGestureCircleCCW", actionNameForIndex(mUi->cmbGestureCircleCCW->currentIndex())); 0106 0107 emit settingsChanged(); 0108 } 0109 0110 void KisSPenSettings::loadPreferences() 0111 { 0112 KConfigGroup cfg = KSharedConfig::openConfig()->group("SPenSettings"); 0113 0114 mUi->cmbClickAction->setCurrentIndex(indexFromActionName(cfg.readEntry("actionButtonClick", QString()))); 0115 mUi->cmbDoubleClickAction->setCurrentIndex(indexFromActionName(cfg.readEntry("actionButtonDoubleClick", QString()))); 0116 mUi->cmbGestureSwipeUp->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureSwipeUp", QString()))); 0117 mUi->cmbGestureSwipeDown->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureSwipeDown", QString()))); 0118 mUi->cmbGestureSwipeLeft->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureSwipeLeft", QString()))); 0119 mUi->cmbGestureSwipeRight->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureSwipeRight", QString()))); 0120 mUi->cmbGestureCircleCW->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureCircleCW", QString()))); 0121 mUi->cmbGestureCircleCCW->setCurrentIndex(indexFromActionName(cfg.readEntry("actionGestureCircleCCW", QString()))); 0122 0123 } 0124 0125 void KisSPenSettings::loadDefaultPreferences() 0126 { 0127 mUi->cmbClickAction->setCurrentIndex(indexFromActionName(QString("fake_show_popup_palette"))); 0128 mUi->cmbDoubleClickAction->setCurrentIndex(indexFromActionName(QString("erase_action"))); 0129 mUi->cmbGestureSwipeUp->setCurrentIndex(indexFromActionName(QString("make_brush_color_lighter"))); 0130 mUi->cmbGestureSwipeDown->setCurrentIndex(indexFromActionName(QString("make_brush_color_darker"))); 0131 mUi->cmbGestureSwipeLeft->setCurrentIndex(indexFromActionName(QString("KritaShape/KisToolBrush"))); 0132 mUi->cmbGestureSwipeRight->setCurrentIndex(indexFromActionName(QString("KritaSelected/KisToolColorSampler"))); 0133 mUi->cmbGestureCircleCW->setCurrentIndex(indexFromActionName(QString("shift_brush_color_clockwise"))); 0134 mUi->cmbGestureCircleCCW->setCurrentIndex(indexFromActionName(QString("shift_brush_color_counter_clockwise"))); 0135 } 0136 0137 QString KisSPenSettings::actionNameForIndex(int index) const 0138 { 0139 QModelIndex modelIndex = m_model->index(index, m_ACTION_NAME_COLUMN); 0140 QString actionName = m_model->itemFromIndex(modelIndex)->data(Qt::DisplayRole).toString(); 0141 return actionName; 0142 } 0143 0144 int KisSPenSettings::indexFromActionName(QString actionName) const 0145 { 0146 if (actionName.isEmpty()) { 0147 return 0; 0148 } else { 0149 QList<QStandardItem*> itemsFound = m_model->findItems(actionName, Qt::MatchExactly, m_ACTION_NAME_COLUMN); 0150 if (itemsFound.size() == 0) { 0151 return 1; 0152 } else { 0153 return itemsFound[0]->index().row(); 0154 } 0155 } 0156 }