• Skip to content
  • Skip to link menu
KDE 4.6 API Reference
  • KDE API Reference
  • kdelibs
  • KDE Home
  • Contact Us
 

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"

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
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.7.3
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