File indexing completed on 2024-04-28 05:49:07
0001 /* This file is part of the KDE project 0002 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #include "kateprojectconfigpage.h" 0007 #include "kateprojectplugin.h" 0008 0009 #include <KLocalizedString> 0010 #include <KUrlRequester> 0011 #include <QCheckBox> 0012 #include <QComboBox> 0013 #include <QGroupBox> 0014 #include <QLabel> 0015 #include <QVBoxLayout> 0016 0017 KateProjectConfigPage::KateProjectConfigPage(QWidget *parent, KateProjectPlugin *plugin) 0018 : KTextEditor::ConfigPage(parent) 0019 , m_plugin(plugin) 0020 { 0021 QVBoxLayout *layout = new QVBoxLayout(this); 0022 0023 QVBoxLayout *vbox = new QVBoxLayout; 0024 QGroupBox *group = new QGroupBox(i18nc("Groupbox title", "Autoload Repositories"), this); 0025 group->setWhatsThis( 0026 i18n("Project plugin is able to autoload repository working copies when " 0027 "there is no .kateproject file defined yet.")); 0028 0029 m_cbAutoGit = new QCheckBox(i18n("&Git"), this); 0030 vbox->addWidget(m_cbAutoGit); 0031 0032 m_cbAutoSubversion = new QCheckBox(i18n("&Subversion"), this); 0033 vbox->addWidget(m_cbAutoSubversion); 0034 m_cbAutoMercurial = new QCheckBox(i18n("&Mercurial"), this); 0035 vbox->addWidget(m_cbAutoMercurial); 0036 m_cbAutoFossil = new QCheckBox(i18n("&Fossil"), this); 0037 vbox->addWidget(m_cbAutoFossil); 0038 0039 vbox->addStretch(1); 0040 group->setLayout(vbox); 0041 0042 layout->addWidget(group); 0043 0044 vbox = new QVBoxLayout(); 0045 group = new QGroupBox(i18nc("Groupbox title", "Session Behavior"), this); 0046 group->setWhatsThis(i18n("Session settings for projects")); 0047 m_cbSessionRestoreOpenProjects = new QCheckBox(i18n("Restore Open Projects"), this); 0048 vbox->addWidget(m_cbSessionRestoreOpenProjects); 0049 vbox->addStretch(1); 0050 group->setLayout(vbox); 0051 layout->addWidget(group); 0052 0053 vbox = new QVBoxLayout(); 0054 group = new QGroupBox(i18nc("Groupbox title", "Project Index"), this); 0055 group->setWhatsThis(i18n("Project ctags index settings")); 0056 m_cbIndexEnabled = new QCheckBox(i18n("Enable indexing"), this); 0057 vbox->addWidget(m_cbIndexEnabled); 0058 auto label = new QLabel(this); 0059 label->setText(i18n("Directory for index files")); 0060 vbox->addWidget(label); 0061 m_indexPath = new KUrlRequester(this); 0062 m_indexPath->setMode(KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly); 0063 m_indexPath->setToolTip(i18n("The system temporary directory is used if not specified, which may overflow for very large repositories")); 0064 vbox->addWidget(m_indexPath); 0065 vbox->addStretch(1); 0066 group->setLayout(vbox); 0067 layout->addWidget(group); 0068 0069 vbox = new QVBoxLayout; 0070 group = new QGroupBox(i18nc("Groupbox title", "Cross-Project Functionality"), this); 0071 group->setWhatsThis(i18n("Project plugin is able to perform some operations across multiple projects")); 0072 m_cbMultiProjectCompletion = new QCheckBox(i18n("Cross-Project Completion"), this); 0073 vbox->addWidget(m_cbMultiProjectCompletion); 0074 m_cbMultiProjectGoto = new QCheckBox(i18n("Cross-Project Goto Symbol"), this); 0075 vbox->addWidget(m_cbMultiProjectGoto); 0076 vbox->addStretch(1); 0077 group->setLayout(vbox); 0078 layout->addWidget(group); 0079 0080 /** Git specific **/ 0081 vbox = new QVBoxLayout; 0082 group = new QGroupBox(i18nc("Groupbox title", "Git"), this); 0083 0084 auto hbox = new QHBoxLayout; 0085 label = new QLabel(i18n("Single click action in the git status view"), this); 0086 m_cmbSingleClick = new QComboBox(this); 0087 m_cmbSingleClick->addItem(i18n("No Action")); 0088 m_cmbSingleClick->addItem(i18n("Show Diff")); 0089 m_cmbSingleClick->addItem(i18n("Open file")); 0090 m_cmbSingleClick->addItem(i18n("Stage / Unstage")); 0091 label->setBuddy(m_cmbSingleClick); 0092 hbox->addWidget(label); 0093 hbox->addWidget(m_cmbSingleClick); 0094 vbox->addLayout(hbox); 0095 0096 hbox = new QHBoxLayout; 0097 label = new QLabel(i18n("Double click action in the git status view"), this); 0098 m_cmbDoubleClick = new QComboBox(this); 0099 m_cmbDoubleClick->addItem(i18n("No Action")); 0100 m_cmbDoubleClick->addItem(i18n("Show Diff")); 0101 m_cmbDoubleClick->addItem(i18n("Open file")); 0102 m_cmbDoubleClick->addItem(i18n("Stage / Unstage")); 0103 label->setBuddy(m_cmbDoubleClick); 0104 hbox->addWidget(label); 0105 hbox->addWidget(m_cmbDoubleClick); 0106 vbox->addLayout(hbox); 0107 0108 vbox->addStretch(1); 0109 group->setLayout(vbox); 0110 layout->addWidget(group); 0111 0112 layout->insertStretch(-1, 10); 0113 0114 connect(m_cbAutoGit, &QCheckBox::stateChanged, this, &KateProjectConfigPage::slotMyChanged); 0115 connect(m_cbAutoSubversion, &QCheckBox::stateChanged, this, &KateProjectConfigPage::slotMyChanged); 0116 connect(m_cbAutoMercurial, &QCheckBox::stateChanged, this, &KateProjectConfigPage::slotMyChanged); 0117 connect(m_cbAutoFossil, &QCheckBox::stateChanged, this, &KateProjectConfigPage::slotMyChanged); 0118 connect(m_cbSessionRestoreOpenProjects, &QCheckBox::stateChanged, this, &KateProjectConfigPage::slotMyChanged); 0119 connect(m_cbIndexEnabled, &QCheckBox::stateChanged, this, &KateProjectConfigPage::slotMyChanged); 0120 connect(m_indexPath, &KUrlRequester::textChanged, this, &KateProjectConfigPage::slotMyChanged); 0121 connect(m_indexPath, &KUrlRequester::urlSelected, this, &KateProjectConfigPage::slotMyChanged); 0122 connect(m_cbMultiProjectCompletion, &QCheckBox::stateChanged, this, &KateProjectConfigPage::slotMyChanged); 0123 connect(m_cbMultiProjectGoto, &QCheckBox::stateChanged, this, &KateProjectConfigPage::slotMyChanged); 0124 0125 connect(m_cmbSingleClick, QOverload<int>::of(&QComboBox::activated), this, &KateProjectConfigPage::slotMyChanged); 0126 connect(m_cmbDoubleClick, QOverload<int>::of(&QComboBox::activated), this, &KateProjectConfigPage::slotMyChanged); 0127 0128 reset(); 0129 } 0130 0131 QString KateProjectConfigPage::name() const 0132 { 0133 return i18n("Projects"); 0134 } 0135 0136 QString KateProjectConfigPage::fullName() const 0137 { 0138 return i18nc("Groupbox title", "Projects Properties"); 0139 } 0140 0141 QIcon KateProjectConfigPage::icon() const 0142 { 0143 return QIcon::fromTheme(QLatin1String("project-open"), QIcon::fromTheme(QLatin1String("view-list-tree"))); 0144 } 0145 0146 void KateProjectConfigPage::apply() 0147 { 0148 if (!m_changed) { 0149 return; 0150 } 0151 0152 m_changed = false; 0153 0154 m_plugin->setAutoRepository(m_cbAutoGit->checkState() == Qt::Checked, 0155 m_cbAutoSubversion->checkState() == Qt::Checked, 0156 m_cbAutoMercurial->checkState() == Qt::Checked, 0157 m_cbAutoFossil->checkState() == Qt::Checked); 0158 m_plugin->setIndex(m_cbIndexEnabled->checkState() == Qt::Checked, m_indexPath->url()); 0159 m_plugin->setMultiProject(m_cbMultiProjectCompletion->checkState() == Qt::Checked, m_cbMultiProjectGoto->checkState() == Qt::Checked); 0160 0161 m_plugin->setSingleClickAction((ClickAction)m_cmbSingleClick->currentIndex()); 0162 m_plugin->setDoubleClickAction((ClickAction)m_cmbDoubleClick->currentIndex()); 0163 0164 m_plugin->setRestoreProjectsForSession(m_cbSessionRestoreOpenProjects->isChecked()); 0165 } 0166 0167 void KateProjectConfigPage::reset() 0168 { 0169 m_cbAutoGit->setCheckState(m_plugin->autoGit() ? Qt::Checked : Qt::Unchecked); 0170 m_cbAutoSubversion->setCheckState(m_plugin->autoSubversion() ? Qt::Checked : Qt::Unchecked); 0171 m_cbAutoMercurial->setCheckState(m_plugin->autoMercurial() ? Qt::Checked : Qt::Unchecked); 0172 m_cbAutoFossil->setCheckState(m_plugin->autoFossil() ? Qt::Checked : Qt::Unchecked); 0173 m_cbIndexEnabled->setCheckState(m_plugin->getIndexEnabled() ? Qt::Checked : Qt::Unchecked); 0174 m_indexPath->setUrl(m_plugin->getIndexDirectory()); 0175 m_cbMultiProjectCompletion->setCheckState(m_plugin->multiProjectCompletion() ? Qt::Checked : Qt::Unchecked); 0176 m_cbMultiProjectGoto->setCheckState(m_plugin->multiProjectGoto() ? Qt::Checked : Qt::Unchecked); 0177 0178 m_cmbSingleClick->setCurrentIndex((int)m_plugin->singleClickAcion()); 0179 m_cmbDoubleClick->setCurrentIndex((int)m_plugin->doubleClickAcion()); 0180 0181 m_cbSessionRestoreOpenProjects->setCheckState(m_plugin->restoreProjectsForSession() ? Qt::Checked : Qt::Unchecked); 0182 0183 m_changed = false; 0184 } 0185 0186 void KateProjectConfigPage::defaults() 0187 { 0188 reset(); 0189 } 0190 0191 void KateProjectConfigPage::slotMyChanged() 0192 { 0193 m_changed = true; 0194 Q_EMIT changed(); 0195 } 0196 0197 #include "moc_kateprojectconfigpage.cpp"