00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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"