• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • Contact Us
 

Kate

katecompletionconfig.cpp

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

Kate

Skip menu "Kate"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.7
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal