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->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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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"