• Skip to content
  • Skip to link menu
KDE 4.1 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->sortingReverse->setChecked(m_model->isSortingReverse());
00051   ui->sortingCaseSensitive->setChecked(m_model->sortingCaseSensitivity() == Qt::CaseSensitive);
00052   ui->groupingOrderUp->setIcon(KIcon("go-up"));
00053   ui->groupingOrderDown->setIcon(KIcon("go-down"));
00054   connect(ui->groupingOrderUp, SIGNAL(pressed()), SLOT(moveGroupingOrderUp()));
00055   connect(ui->groupingOrderDown, SIGNAL(pressed()), SLOT(moveGroupingOrderDown()));
00056 
00057   // Filtering
00058   ui->filtering->setChecked(m_model->isFilteringEnabled());
00059   ui->filteringContextMatchOnly->setChecked(m_model->filterContextMatchesOnly());
00060   ui->filteringHideAttributes->setChecked(m_model->filterByAttribute());
00061 
00062   for (CodeCompletionModel::CompletionProperty i = CodeCompletionModel::FirstProperty; i <= CodeCompletionModel::LastProperty; i = static_cast<CodeCompletionModel::CompletionProperty>(i << 1)) {
00063     QListWidgetItem* item = new QListWidgetItem(m_model->propertyName(i), ui->filteringAttributesList, i);
00064     item->setCheckState((m_model->filterAttributes() & i) ? Qt::Checked : Qt::Unchecked);
00065   }
00066 
00067   ui->filteringMaximumInheritanceDepth->setValue(m_model->maximumInheritanceDepth());
00068 
00069   // Grouping
00070   ui->grouping->setChecked(m_model->isGroupingEnabled());
00071   ui->groupingUp->setIcon(KIcon("go-up"));
00072   ui->groupingDown->setIcon(KIcon("go-down"));
00073 
00074   m_groupingScopeType = ui->groupingMethods->topLevelItem(0);
00075   m_groupingScopeType->setCheckState(0, (m_model->groupingMethod() & KateCompletionModel::ScopeType) ? Qt::Checked : Qt::Unchecked);
00076 
00077   m_groupingScope = ui->groupingMethods->topLevelItem(1);
00078   m_groupingScope->setCheckState(0, (m_model->groupingMethod() & KateCompletionModel::Scope) ? Qt::Checked : Qt::Unchecked);
00079 
00080   m_groupingAccessType = ui->groupingMethods->topLevelItem(2);
00081   m_groupingAccessType->setCheckState(0, (m_model->groupingMethod() & KateCompletionModel::AccessType) ? Qt::Checked : Qt::Unchecked);
00082 
00083   m_groupingItemType = ui->groupingMethods->topLevelItem(3);
00084   m_groupingItemType->setCheckState(0, (m_model->groupingMethod() & KateCompletionModel::ItemType) ? Qt::Checked : Qt::Unchecked);
00085 
00086   ui->accessConst->setChecked(m_model->accessIncludeConst());
00087   ui->accessStatic->setChecked(m_model->accessIncludeStatic());
00088   ui->accessSignalSlot->setChecked(m_model->accessIncludeSignalSlot());
00089 
00090   for (int i = 0; i < 4; ++i)
00091     ui->groupingMethods->topLevelItem(i)->setCheckState(0, Qt::Unchecked);
00092   connect(ui->groupingUp, SIGNAL(pressed()), SLOT(moveGroupingUp()));
00093   connect(ui->groupingDown, SIGNAL(pressed()), SLOT(moveGroupingDown()));
00094 
00095   // Column merging
00096   ui->columnMerging->setChecked(m_model->isColumnMergingEnabled());
00097   ui->columnUp->setIcon(KIcon("go-up"));
00098   ui->columnDown->setIcon(KIcon("go-down"));
00099   connect(ui->columnUp, SIGNAL(pressed()), SLOT(moveColumnUp()));
00100   connect(ui->columnDown, SIGNAL(pressed()), SLOT(moveColumnDown()));
00101 
00102 
00103   QList<int> mergedColumns;
00104   if (!m_model->columnMerges().isEmpty()) {
00105     foreach (const QList<int>& list, m_model->columnMerges()) {
00106       bool first = true;
00107       foreach (int column, list) {
00108         QTreeWidgetItem* item = new QTreeWidgetItem(ui->columnMergeTree, column);
00109         item->setText(0, KateCompletionModel::columnName(column) + QString(" %1").arg(column));
00110         item->setCheckState(1, first ? Qt::Unchecked : Qt::Checked);
00111 
00112         if (column == KTextEditor::CodeCompletionModel::Name)
00113           item->setText(2, i18n("Always"));
00114         else
00115           item->setCheckState(2, Qt::Checked);
00116 
00117         first = false;
00118         mergedColumns << column;
00119       }
00120     }
00121 
00122     for (int column = 0; column < KTextEditor::CodeCompletionModel::ColumnCount; ++column) {
00123       if (!mergedColumns.contains(column)) {
00124         QTreeWidgetItem* item = new QTreeWidgetItem(ui->columnMergeTree, column);
00125         item->setText(0, KateCompletionModel::columnName(column) + QString(" %1").arg(column));
00126         item->setCheckState(1, Qt::Unchecked);
00127 
00128         Q_ASSERT(column != KTextEditor::CodeCompletionModel::Name);
00129 
00130         item->setCheckState(2, Qt::Unchecked);
00131       }
00132     }
00133 
00134   } else {
00135     for (int column = 0; column < KTextEditor::CodeCompletionModel::ColumnCount; ++column) {
00136       QTreeWidgetItem* item = new QTreeWidgetItem(ui->columnMergeTree, column);
00137       item->setText(0, KateCompletionModel::columnName(column) + QString(" %1").arg(column));
00138       item->setCheckState(1, Qt::Unchecked);
00139 
00140       if (column == KTextEditor::CodeCompletionModel::Name)
00141         item->setText(2, i18n("Always"));
00142       else
00143         item->setCheckState(2, Qt::Checked);
00144     }
00145   }
00146 
00147   // init with defaults from config or really hardcoded ones
00148   KConfigGroup config( KGlobal::config(), "Kate Code Completion Defaults");
00149   readConfig (config);
00150 }
00151 
00152 KateCompletionConfig::~ KateCompletionConfig( )
00153 {
00154   delete ui;
00155 }
00156 
00157 void KateCompletionConfig::readConfig(const KConfigGroup &config)
00158 {
00159   configStart ();
00160 
00161   // Sorting
00162   ui->sorting->setChecked(config.readEntry("Sorting Enabled", true));
00163   ui->sortingAlphabetical->setChecked(config.readEntry("Sort Alphabetically", true));
00164   ui->sortingReverse->setChecked(config.readEntry("Reverse Sort", false));
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("Reverse Sort", ui->sortingReverse->isChecked());
00214   config.writeEntry("Case Sensitive Sort", ui->sortingCaseSensitive->isChecked());
00215   config.writeEntry("Sort by Inheritance Depth", ui->sortingInheritanceDepth->isChecked());
00216 
00217   // Filtering
00218   config.writeEntry("Filtering Enabled", ui->filtering->isChecked());
00219   config.writeEntry("Filter by Context Match Only", ui->filteringContextMatchOnly->isChecked());
00220   config.writeEntry("Hide Completions by Attribute", ui->filteringHideAttributes->isChecked());
00221 
00222   int attributes = 0;
00223   for (int i = 0; i < ui->filteringAttributesList->count(); ++i) {
00224     QListWidgetItem* item = ui->filteringAttributesList->item(i);
00225     if (item->checkState() == Qt::Checked)
00226       attributes |= 1 << (i - 1);
00227   }
00228   config.writeEntry("Filter Attribute Mask", attributes);
00229 
00230   config.writeEntry("Filter by Maximum Inheritance Depth", ui->filteringMaximumInheritanceDepth->value());
00231 
00232   // Grouping
00233   config.writeEntry("Grouping Enabled", ui->grouping->isChecked());
00234 
00235   config.writeEntry("Group by Scope Type", m_groupingScopeType->checkState(0) == Qt::Checked ? true : false);
00236   config.writeEntry("Group by Scope", m_groupingScope->checkState(0) == Qt::Checked ? true : false);
00237   config.writeEntry("Group by Access Type", m_groupingAccessType->checkState(0) == Qt::Checked ? true : false);
00238   config.writeEntry("Group by Item Type", m_groupingItemType->checkState(0) == Qt::Checked ? true : false);
00239 
00240   config.writeEntry("Group by Const", ui->accessConst->isChecked());
00241   config.writeEntry("Group by Static", ui->accessStatic->isChecked());
00242   config.writeEntry("Group by Signals and Slots", ui->accessSignalSlot->isChecked());
00243 
00244   // Column merging
00245   config.writeEntry("Column Merging Enabled", ui->columnMerging->isChecked());
00246 
00247   for (int i = 0; i < ui->columnMergeTree->topLevelItemCount(); ++i) {
00248     QTreeWidgetItem* item = ui->columnMergeTree->topLevelItem(i);
00249     config.writeEntry(QString("Column %1 Merge").arg(i), item->checkState(1) == Qt::Checked ? true : false);
00250     config.writeEntry(QString("Column %1 Show").arg(i), item->checkState(2) == Qt::Checked ? true : false);
00251   }
00252 
00253   config.sync();
00254 }
00255 
00256 void KateCompletionConfig::updateConfig()
00257 {
00258   // Ah, nothing to do, I think...?
00259 }
00260 
00261 void KateCompletionConfig::moveColumnUp( )
00262 {
00263   QTreeWidgetItem* item = ui->columnMergeTree->currentItem();
00264   if (item) {
00265     int index = ui->columnMergeTree->indexOfTopLevelItem(item);
00266     if (index > 0) {
00267       ui->columnMergeTree->takeTopLevelItem(index);
00268       ui->columnMergeTree->insertTopLevelItem(index - 1, item);
00269       ui->columnMergeTree->setCurrentItem(item);
00270     }
00271   }
00272 }
00273 
00274 void KateCompletionConfig::moveColumnDown( )
00275 {
00276   QTreeWidgetItem* item = ui->columnMergeTree->currentItem();
00277   if (item) {
00278     int index = ui->columnMergeTree->indexOfTopLevelItem(item);
00279     if (index < ui->columnMergeTree->topLevelItemCount() - 1) {
00280       ui->columnMergeTree->takeTopLevelItem(index);
00281       ui->columnMergeTree->insertTopLevelItem(index + 1, item);
00282       ui->columnMergeTree->setCurrentItem(item);
00283     }
00284   }
00285 }
00286 
00287 void KateCompletionConfig::apply( )
00288 {
00289   applyInternal();
00290 
00291   KConfigGroup config( KGlobal::config(), "Kate Code Completion Defaults");
00292   writeConfig (config);
00293 }
00294 
00295 void KateCompletionConfig::applyInternal()
00296 {
00297   // Sorting
00298   m_model->setSortingEnabled(ui->sorting->isChecked());
00299   m_model->setSortingAlphabetical(ui->sortingAlphabetical->isChecked());
00300   m_model->setSortingReverse(ui->sortingReverse->isChecked());
00301   m_model->setSortingCaseSensitivity(ui->sortingCaseSensitive->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive);
00302   m_model->setSortingByInheritanceDepth(ui->sortingInheritanceDepth->isChecked());
00303 
00304   // Filtering
00305   m_model->setFilteringEnabled(ui->filtering->isChecked());
00306 
00307   m_model->setFilterContextMatchesOnly(ui->filteringContextMatchOnly->isChecked());
00308   m_model->setFilterByAttribute(ui->filteringHideAttributes->isChecked());
00309 
00310   CodeCompletionModel::CompletionProperties attributes = 0;
00311   for (int i = 0; i < ui->filteringAttributesList->count(); ++i) {
00312     QListWidgetItem* item = ui->filteringAttributesList->item(i);
00313     if (item->checkState() == Qt::Checked)
00314       attributes |= static_cast<CodeCompletionModel::CompletionProperty>(item->type());
00315   }
00316   m_model->setFilterAttributes(attributes);
00317 
00318   m_model->setMaximumInheritanceDepth(ui->filteringMaximumInheritanceDepth->value());
00319 
00320   // Grouping
00321   m_model->setGroupingEnabled(ui->grouping->isChecked());
00322 
00323   KateCompletionModel::GroupingMethods groupingMethod = 0;
00324   if (m_groupingScopeType->checkState(0) == Qt::Checked)
00325     groupingMethod = KateCompletionModel::ScopeType;
00326   if (m_groupingScope->checkState(0) == Qt::Checked)
00327     groupingMethod |= KateCompletionModel::Scope;
00328   if (m_groupingAccessType->checkState(0) == Qt::Checked)
00329     groupingMethod |= KateCompletionModel::AccessType;
00330   if (m_groupingItemType->checkState(0) == Qt::Checked)
00331     groupingMethod |= KateCompletionModel::ItemType;
00332   m_model->setGroupingMethod(groupingMethod);
00333 
00334   m_model->setAccessIncludeConst(ui->accessConst->isChecked());
00335   m_model->setAccessIncludeStatic(ui->accessStatic->isChecked());
00336   m_model->setAccessIncludeSignalSlot(ui->accessSignalSlot->isChecked());
00337 
00338   // Column merging
00339   m_model->setColumnMergingEnabled(ui->columnMerging->isChecked());
00340 
00341   QList< QList<int> > mergedColumns;
00342   QList<int> oneMerge;
00343   for (int i = 0; i < ui->columnMergeTree->topLevelItemCount(); ++i) {
00344     QTreeWidgetItem* item = ui->columnMergeTree->topLevelItem(i);
00345 
00346     if (item->type() != KTextEditor::CodeCompletionModel::Name && item->checkState(2) == Qt::Unchecked)
00347       continue;
00348 
00349     if (item->checkState(1) == Qt::Unchecked) {
00350       if (oneMerge.count())
00351         mergedColumns.append(oneMerge);
00352       oneMerge.clear();
00353     }
00354 
00355     oneMerge.append(item->type());
00356   }
00357 
00358   if (oneMerge.count())
00359     mergedColumns.append(oneMerge);
00360 
00361   m_model->setColumnMerges(mergedColumns);
00362 }
00363 
00364 void KateCompletionConfig::moveGroupingUp( )
00365 {
00366   QTreeWidgetItem* item = ui->groupingMethods->currentItem();
00367   if (item) {
00368     int index = ui->groupingMethods->indexOfTopLevelItem(item);
00369     if (index > 0) {
00370       ui->groupingMethods->takeTopLevelItem(index);
00371       ui->groupingMethods->insertTopLevelItem(index - 1, item);
00372       ui->groupingMethods->setCurrentItem(item);
00373     }
00374   }
00375 }
00376 
00377 void KateCompletionConfig::moveGroupingDown( )
00378 {
00379   QTreeWidgetItem* item = ui->groupingMethods->currentItem();
00380   if (item) {
00381     int index = ui->groupingMethods->indexOfTopLevelItem(item);
00382     if (index < ui->groupingMethods->topLevelItemCount() - 1) {
00383       ui->groupingMethods->takeTopLevelItem(index);
00384       ui->groupingMethods->insertTopLevelItem(index + 1, item);
00385       ui->groupingMethods->setCurrentItem(item);
00386     }
00387   }
00388 }
00389 
00390 void KateCompletionConfig::moveGroupingOrderUp( )
00391 {
00392   QListWidgetItem* item = ui->sortGroupingOrder->currentItem();
00393   int index = ui->sortGroupingOrder->currentRow();
00394   if (index > 0) {
00395     ui->sortGroupingOrder->takeItem(index);
00396     ui->sortGroupingOrder->insertItem(index - 1, item);
00397     ui->sortGroupingOrder->setCurrentItem(item);
00398   }
00399 }
00400 
00401 void KateCompletionConfig::moveGroupingOrderDown( )
00402 {
00403   QListWidgetItem* item = ui->sortGroupingOrder->currentItem();
00404   int index = ui->sortGroupingOrder->currentRow();
00405   if (index < ui->sortGroupingOrder->count() - 1) {
00406     ui->sortGroupingOrder->takeItem(index);
00407     ui->sortGroupingOrder->insertItem(index + 1, item);
00408     ui->sortGroupingOrder->setCurrentItem(item);
00409   }
00410 }
00411 
00412 #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
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.4
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