Kate
katecompletionconfig.cpp
Go to the documentation of this file.
00001 /* This file is part of the KDE libraries and the Kate part. 00002 * 00003 * Copyright (C) 2006 Hamish Rodda <rodda@kde.org> 00004 * 00005 * This library is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU Library General Public 00007 * License as published by the Free Software Foundation; either 00008 * version 2 of the License, or (at your option) any later version. 00009 * 00010 * This library is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 * Library General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU Library General Public License 00016 * along with this library; see the file COPYING.LIB. If not, write to 00017 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00018 * Boston, MA 02110-1301, USA. 00019 */ 00020 00021 #include "katecompletionconfig.h" 00022 00023 #include <QtGui/QTreeWidget> 00024 00025 #include <kicon.h> 00026 #include <kglobal.h> 00027 00028 #include "katecompletionmodel.h" 00029 00030 #include "ui_completionconfigwidget.h" 00031 00032 using namespace KTextEditor; 00033 00034 KateCompletionConfig::KateCompletionConfig(KateCompletionModel* model, QWidget* parent) 00035 : KDialog(parent) 00036 , ui(new Ui::CompletionConfigWidget()) 00037 , m_model(model) 00038 { 00039 //setAttribute(Qt::WA_DestructiveClose); 00040 setCaption(i18n("Code Completion Configuration")); 00041 setButtons(KDialog::Ok | KDialog::Cancel); 00042 setDefaultButton(KDialog::Ok); 00043 connect(this, SIGNAL(okClicked()), SLOT(apply())); 00044 00045 QWidget* mw = new QWidget(this); 00046 ui->setupUi(mw); 00047 setMainWidget(mw); 00048 00049 // Sorting 00050 ui->sorting->setChecked(m_model->isSortingEnabled()); 00051 ui->sortingAlphabetical->setChecked(m_model->isSortingAlphabetical()); 00052 ui->sortingCaseSensitive->setChecked(m_model->sortingCaseSensitivity() == Qt::CaseSensitive); 00053 ui->groupingOrderUp->setIcon(KIcon("go-up")); 00054 ui->groupingOrderDown->setIcon(KIcon("go-down")); 00055 connect(ui->groupingOrderUp, SIGNAL(pressed()), SLOT(moveGroupingOrderUp())); 00056 connect(ui->groupingOrderDown, SIGNAL(pressed()), SLOT(moveGroupingOrderDown())); 00057 00058 // Filtering 00059 ui->filtering->setChecked(m_model->isFilteringEnabled()); 00060 ui->filteringContextMatchOnly->setChecked(m_model->filterContextMatchesOnly()); 00061 ui->filteringHideAttributes->setChecked(m_model->filterByAttribute()); 00062 00063 for (CodeCompletionModel::CompletionProperty i = CodeCompletionModel::FirstProperty; i <= CodeCompletionModel::LastProperty; i = static_cast<CodeCompletionModel::CompletionProperty>(i << 1)) { 00064 QListWidgetItem* item = new QListWidgetItem(m_model->propertyName(i), ui->filteringAttributesList, i); 00065 item->setCheckState((m_model->filterAttributes() & i) ? Qt::Checked : Qt::Unchecked); 00066 } 00067 00068 ui->filteringMaximumInheritanceDepth->setValue(m_model->maximumInheritanceDepth()); 00069 00070 // Grouping 00071 ui->grouping->setChecked(m_model->isGroupingEnabled()); 00072 ui->groupingUp->setIcon(KIcon("go-up")); 00073 ui->groupingDown->setIcon(KIcon("go-down")); 00074 00075 m_groupingScopeType = ui->groupingMethods->topLevelItem(0); 00076 m_groupingScopeType->setCheckState(0, (m_model->groupingMethod() & KateCompletionModel::ScopeType) ? Qt::Checked : Qt::Unchecked); 00077 00078 m_groupingScope = ui->groupingMethods->topLevelItem(1); 00079 m_groupingScope->setCheckState(0, (m_model->groupingMethod() & KateCompletionModel::Scope) ? Qt::Checked : Qt::Unchecked); 00080 00081 m_groupingAccessType = ui->groupingMethods->topLevelItem(2); 00082 m_groupingAccessType->setCheckState(0, (m_model->groupingMethod() & KateCompletionModel::AccessType) ? Qt::Checked : Qt::Unchecked); 00083 00084 m_groupingItemType = ui->groupingMethods->topLevelItem(3); 00085 m_groupingItemType->setCheckState(0, (m_model->groupingMethod() & KateCompletionModel::ItemType) ? Qt::Checked : Qt::Unchecked); 00086 00087 ui->accessConst->setChecked(m_model->accessIncludeConst()); 00088 ui->accessStatic->setChecked(m_model->accessIncludeStatic()); 00089 ui->accessSignalSlot->setChecked(m_model->accessIncludeSignalSlot()); 00090 00091 for (int i = 0; i < 4; ++i) 00092 ui->groupingMethods->topLevelItem(i)->setCheckState(0, Qt::Unchecked); 00093 connect(ui->groupingUp, SIGNAL(pressed()), SLOT(moveGroupingUp())); 00094 connect(ui->groupingDown, SIGNAL(pressed()), SLOT(moveGroupingDown())); 00095 00096 // Column merging 00097 ui->columnMerging->setChecked(m_model->isColumnMergingEnabled()); 00098 ui->columnUp->setIcon(KIcon("go-up")); 00099 ui->columnDown->setIcon(KIcon("go-down")); 00100 connect(ui->columnUp, SIGNAL(pressed()), SLOT(moveColumnUp())); 00101 connect(ui->columnDown, SIGNAL(pressed()), SLOT(moveColumnDown())); 00102 00103 00104 QList<int> mergedColumns; 00105 if (!m_model->columnMerges().isEmpty()) { 00106 foreach (const QList<int>& list, m_model->columnMerges()) { 00107 bool first = true; 00108 foreach (int column, list) { 00109 QTreeWidgetItem* item = new QTreeWidgetItem(ui->columnMergeTree, column); 00110 item->setText(0, KateCompletionModel::columnName(column) + QString(" %1").arg(column)); 00111 item->setCheckState(1, first ? Qt::Unchecked : Qt::Checked); 00112 00113 if (column == KTextEditor::CodeCompletionModel::Name) 00114 item->setText(2, i18n("Always")); 00115 else 00116 item->setCheckState(2, Qt::Checked); 00117 00118 first = false; 00119 mergedColumns << column; 00120 } 00121 } 00122 00123 for (int column = 0; column < KTextEditor::CodeCompletionModel::ColumnCount; ++column) { 00124 if (!mergedColumns.contains(column)) { 00125 QTreeWidgetItem* item = new QTreeWidgetItem(ui->columnMergeTree, column); 00126 item->setText(0, KateCompletionModel::columnName(column) + QString(" %1").arg(column)); 00127 item->setCheckState(1, Qt::Unchecked); 00128 00129 Q_ASSERT(column != KTextEditor::CodeCompletionModel::Name); 00130 00131 item->setCheckState(2, Qt::Unchecked); 00132 } 00133 } 00134 00135 } else { 00136 for (int column = 0; column < KTextEditor::CodeCompletionModel::ColumnCount; ++column) { 00137 QTreeWidgetItem* item = new QTreeWidgetItem(ui->columnMergeTree, column); 00138 item->setText(0, KateCompletionModel::columnName(column) + QString(" %1").arg(column)); 00139 item->setCheckState(1, Qt::Unchecked); 00140 00141 if (column == KTextEditor::CodeCompletionModel::Name) 00142 item->setText(2, i18n("Always")); 00143 else 00144 item->setCheckState(2, Qt::Checked); 00145 } 00146 } 00147 00148 // init with defaults from config or really hardcoded ones 00149 KConfigGroup config( KGlobal::config(), "Kate Code Completion Defaults"); 00150 readConfig (config); 00151 } 00152 00153 KateCompletionConfig::~ KateCompletionConfig( ) 00154 { 00155 delete ui; 00156 } 00157 00158 void KateCompletionConfig::readConfig(const KConfigGroup &config) 00159 { 00160 configStart (); 00161 00162 // Sorting 00163 ui->sorting->setChecked(config.readEntry("Sorting Enabled", true)); 00164 ui->sortingAlphabetical->setChecked(config.readEntry("Sort Alphabetically", true)); 00165 ui->sortingCaseSensitive->setChecked(config.readEntry("Case Sensitive Sort", false)); 00166 ui->sortingInheritanceDepth->setChecked(config.readEntry("Sort by Inheritance Depth", true)); 00167 00168 // Filtering 00169 ui->filtering->setChecked(config.readEntry("Filtering Enabled", false)); 00170 ui->filteringContextMatchOnly->setChecked(config.readEntry("Filter by Context Match Only", false)); 00171 ui->filteringHideAttributes->setChecked(config.readEntry("Hide Completions by Attribute", false)); 00172 00173 int attributes = config.readEntry("Filter Attribute Mask", 0); 00174 for (int i = 0; i < ui->filteringAttributesList->count(); ++i) { 00175 QListWidgetItem* item = ui->filteringAttributesList->item(i); 00176 item->setCheckState(((1 << (i - 1)) & attributes) ? Qt::Checked : Qt::Unchecked); 00177 } 00178 00179 ui->filteringMaximumInheritanceDepth->setValue(config.readEntry("Filter by Maximum Inheritance Depth", 0)); 00180 00181 // Grouping 00182 ui->grouping->setChecked(config.readEntry("Grouping Enabled", true)); 00183 00184 m_groupingScopeType->setCheckState(0, config.readEntry("Group by Scope Type", true) ? Qt::Checked : Qt::Unchecked); 00185 m_groupingScope->setCheckState(0, config.readEntry("Group by Scope", false) ? Qt::Checked : Qt::Unchecked); 00186 m_groupingAccessType->setCheckState(0, config.readEntry("Group by Access Type", true) ? Qt::Checked : Qt::Unchecked); 00187 m_groupingItemType->setCheckState(0, config.readEntry("Group by Item Type", false) ? Qt::Checked : Qt::Unchecked); 00188 00189 ui->accessConst->setChecked(config.readEntry("Group by Const", false)); 00190 ui->accessStatic->setChecked(config.readEntry("Group by Static", false)); 00191 ui->accessSignalSlot->setChecked(config.readEntry("Group by Signals and Slots", false)); 00192 00193 // Column merging 00194 ui->columnMerging->setChecked(config.readEntry("Column Merging Enabled", true)); 00195 00196 for (int i = 0; i < ui->columnMergeTree->topLevelItemCount(); ++i) { 00197 QTreeWidgetItem* item = ui->columnMergeTree->topLevelItem(i); 00199 item->setCheckState(1, config.readEntry(QString("Column %1 Merge").arg(i), (i == CodeCompletionModel::Scope || i == CodeCompletionModel::Name || i == CodeCompletionModel::Arguments)) ? Qt::Checked : Qt::Unchecked); 00200 item->setCheckState(2, config.readEntry(QString("Column %1 Show").arg(i), true) ? Qt::Checked : Qt::Unchecked); 00201 } 00202 00203 applyInternal(); 00204 00205 configEnd(); 00206 } 00207 00208 void KateCompletionConfig::writeConfig(KConfigGroup &config) 00209 { 00210 // Sorting 00211 config.writeEntry("Sorting Enabled", ui->sorting->isChecked()); 00212 config.writeEntry("Sort Alphabetically", ui->sortingAlphabetical->isChecked()); 00213 config.writeEntry("Case Sensitive Sort", ui->sortingCaseSensitive->isChecked()); 00214 config.writeEntry("Sort by Inheritance Depth", ui->sortingInheritanceDepth->isChecked()); 00215 00216 // Filtering 00217 config.writeEntry("Filtering Enabled", ui->filtering->isChecked()); 00218 config.writeEntry("Filter by Context Match Only", ui->filteringContextMatchOnly->isChecked()); 00219 config.writeEntry("Hide Completions by Attribute", ui->filteringHideAttributes->isChecked()); 00220 00221 int attributes = 0; 00222 for (int i = 0; i < ui->filteringAttributesList->count(); ++i) { 00223 QListWidgetItem* item = ui->filteringAttributesList->item(i); 00224 if (item->checkState() == Qt::Checked) 00225 attributes |= 1 << (i - 1); 00226 } 00227 config.writeEntry("Filter Attribute Mask", attributes); 00228 00229 config.writeEntry("Filter by Maximum Inheritance Depth", ui->filteringMaximumInheritanceDepth->value()); 00230 00231 // Grouping 00232 config.writeEntry("Grouping Enabled", ui->grouping->isChecked()); 00233 00234 config.writeEntry("Group by Scope Type", m_groupingScopeType->checkState(0) == Qt::Checked ? true : false); 00235 config.writeEntry("Group by Scope", m_groupingScope->checkState(0) == Qt::Checked ? true : false); 00236 config.writeEntry("Group by Access Type", m_groupingAccessType->checkState(0) == Qt::Checked ? true : false); 00237 config.writeEntry("Group by Item Type", m_groupingItemType->checkState(0) == Qt::Checked ? true : false); 00238 00239 config.writeEntry("Group by Const", ui->accessConst->isChecked()); 00240 config.writeEntry("Group by Static", ui->accessStatic->isChecked()); 00241 config.writeEntry("Group by Signals and Slots", ui->accessSignalSlot->isChecked()); 00242 00243 // Column merging 00244 config.writeEntry("Column Merging Enabled", ui->columnMerging->isChecked()); 00245 00246 for (int i = 0; i < ui->columnMergeTree->topLevelItemCount(); ++i) { 00247 QTreeWidgetItem* item = ui->columnMergeTree->topLevelItem(i); 00248 config.writeEntry(QString("Column %1 Merge").arg(i), item->checkState(1) == Qt::Checked ? true : false); 00249 config.writeEntry(QString("Column %1 Show").arg(i), item->checkState(2) == Qt::Checked ? true : false); 00250 } 00251 00252 config.sync(); 00253 } 00254 00255 void KateCompletionConfig::updateConfig() 00256 { 00257 // Ah, nothing to do, I think...? 00258 } 00259 00260 void KateCompletionConfig::moveColumnUp( ) 00261 { 00262 QTreeWidgetItem* item = ui->columnMergeTree->currentItem(); 00263 if (item) { 00264 int index = ui->columnMergeTree->indexOfTopLevelItem(item); 00265 if (index > 0) { 00266 ui->columnMergeTree->takeTopLevelItem(index); 00267 ui->columnMergeTree->insertTopLevelItem(index - 1, item); 00268 ui->columnMergeTree->setCurrentItem(item); 00269 } 00270 } 00271 } 00272 00273 void KateCompletionConfig::moveColumnDown( ) 00274 { 00275 QTreeWidgetItem* item = ui->columnMergeTree->currentItem(); 00276 if (item) { 00277 int index = ui->columnMergeTree->indexOfTopLevelItem(item); 00278 if (index < ui->columnMergeTree->topLevelItemCount() - 1) { 00279 ui->columnMergeTree->takeTopLevelItem(index); 00280 ui->columnMergeTree->insertTopLevelItem(index + 1, item); 00281 ui->columnMergeTree->setCurrentItem(item); 00282 } 00283 } 00284 } 00285 00286 void KateCompletionConfig::apply( ) 00287 { 00288 applyInternal(); 00289 00290 KConfigGroup config( KGlobal::config(), "Kate Code Completion Defaults"); 00291 writeConfig (config); 00292 } 00293 00294 void KateCompletionConfig::applyInternal() 00295 { 00296 // Sorting 00297 m_model->setSortingEnabled(ui->sorting->isChecked()); 00298 m_model->setSortingAlphabetical(ui->sortingAlphabetical->isChecked()); 00299 m_model->setSortingCaseSensitivity(ui->sortingCaseSensitive->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive); 00300 m_model->setSortingByInheritanceDepth(ui->sortingInheritanceDepth->isChecked()); 00301 00302 // Filtering 00303 m_model->setFilteringEnabled(ui->filtering->isChecked()); 00304 00305 m_model->setFilterContextMatchesOnly(ui->filteringContextMatchOnly->isChecked()); 00306 m_model->setFilterByAttribute(ui->filteringHideAttributes->isChecked()); 00307 00308 CodeCompletionModel::CompletionProperties attributes = 0; 00309 for (int i = 0; i < ui->filteringAttributesList->count(); ++i) { 00310 QListWidgetItem* item = ui->filteringAttributesList->item(i); 00311 if (item->checkState() == Qt::Checked) 00312 attributes |= static_cast<CodeCompletionModel::CompletionProperty>(item->type()); 00313 } 00314 m_model->setFilterAttributes(attributes); 00315 00316 m_model->setMaximumInheritanceDepth(ui->filteringMaximumInheritanceDepth->value()); 00317 00318 // Grouping 00319 m_model->setGroupingEnabled(ui->grouping->isChecked()); 00320 00321 KateCompletionModel::GroupingMethods groupingMethod = 0; 00322 if (m_groupingScopeType->checkState(0) == Qt::Checked) 00323 groupingMethod = KateCompletionModel::ScopeType; 00324 if (m_groupingScope->checkState(0) == Qt::Checked) 00325 groupingMethod |= KateCompletionModel::Scope; 00326 if (m_groupingAccessType->checkState(0) == Qt::Checked) 00327 groupingMethod |= KateCompletionModel::AccessType; 00328 if (m_groupingItemType->checkState(0) == Qt::Checked) 00329 groupingMethod |= KateCompletionModel::ItemType; 00330 m_model->setGroupingMethod(groupingMethod); 00331 00332 m_model->setAccessIncludeConst(ui->accessConst->isChecked()); 00333 m_model->setAccessIncludeStatic(ui->accessStatic->isChecked()); 00334 m_model->setAccessIncludeSignalSlot(ui->accessSignalSlot->isChecked()); 00335 00336 // Column merging 00337 m_model->setColumnMergingEnabled(ui->columnMerging->isChecked()); 00338 00339 QList< QList<int> > mergedColumns; 00340 QList<int> oneMerge; 00341 for (int i = 0; i < ui->columnMergeTree->topLevelItemCount(); ++i) { 00342 QTreeWidgetItem* item = ui->columnMergeTree->topLevelItem(i); 00343 00344 if (item->type() != KTextEditor::CodeCompletionModel::Name && item->checkState(2) == Qt::Unchecked) 00345 continue; 00346 00347 if (item->checkState(1) == Qt::Unchecked) { 00348 if (oneMerge.count()) 00349 mergedColumns.append(oneMerge); 00350 oneMerge.clear(); 00351 } 00352 00353 oneMerge.append(item->type()); 00354 } 00355 00356 if (oneMerge.count()) 00357 mergedColumns.append(oneMerge); 00358 00359 m_model->setColumnMerges(mergedColumns); 00360 } 00361 00362 void KateCompletionConfig::moveGroupingUp( ) 00363 { 00364 QTreeWidgetItem* item = ui->groupingMethods->currentItem(); 00365 if (item) { 00366 int index = ui->groupingMethods->indexOfTopLevelItem(item); 00367 if (index > 0) { 00368 ui->groupingMethods->takeTopLevelItem(index); 00369 ui->groupingMethods->insertTopLevelItem(index - 1, item); 00370 ui->groupingMethods->setCurrentItem(item); 00371 } 00372 } 00373 } 00374 00375 void KateCompletionConfig::moveGroupingDown( ) 00376 { 00377 QTreeWidgetItem* item = ui->groupingMethods->currentItem(); 00378 if (item) { 00379 int index = ui->groupingMethods->indexOfTopLevelItem(item); 00380 if (index < ui->groupingMethods->topLevelItemCount() - 1) { 00381 ui->groupingMethods->takeTopLevelItem(index); 00382 ui->groupingMethods->insertTopLevelItem(index + 1, item); 00383 ui->groupingMethods->setCurrentItem(item); 00384 } 00385 } 00386 } 00387 00388 void KateCompletionConfig::moveGroupingOrderUp( ) 00389 { 00390 QListWidgetItem* item = ui->sortGroupingOrder->currentItem(); 00391 int index = ui->sortGroupingOrder->currentRow(); 00392 if (index > 0) { 00393 ui->sortGroupingOrder->takeItem(index); 00394 ui->sortGroupingOrder->insertItem(index - 1, item); 00395 ui->sortGroupingOrder->setCurrentItem(item); 00396 } 00397 } 00398 00399 void KateCompletionConfig::moveGroupingOrderDown( ) 00400 { 00401 QListWidgetItem* item = ui->sortGroupingOrder->currentItem(); 00402 int index = ui->sortGroupingOrder->currentRow(); 00403 if (index < ui->sortGroupingOrder->count() - 1) { 00404 ui->sortGroupingOrder->takeItem(index); 00405 ui->sortGroupingOrder->insertItem(index + 1, item); 00406 ui->sortGroupingOrder->setCurrentItem(item); 00407 } 00408 } 00409 00410 #include "katecompletionconfig.moc"
KDE 4.6 API Reference