File indexing completed on 2024-05-05 04:39:24

0001 /*
0002     SPDX-FileCopyrightText: 2016 René J.V. Bertin <rjvbertin@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "cmakeextraargumentshistory.h"
0008 
0009 #include <KSharedConfig>
0010 #include <KConfigGroup>
0011 
0012 namespace {
0013 
0014 const int maxExtraArgumentsInHistory = 15;
0015 
0016 }
0017 
0018 CMakeExtraArgumentsHistory::CMakeExtraArgumentsHistory(KComboBox* widget)
0019     : m_arguments(widget)
0020 {
0021     if (m_arguments) {
0022         KConfigGroup config = KSharedConfig::openConfig()->group("CMakeBuildDirChooser");
0023         QStringList lastExtraArguments = config.readEntry("LastExtraArguments", QStringList());
0024         m_arguments->addItem(QString());
0025         m_arguments->addItems(lastExtraArguments);
0026         m_arguments->setInsertPolicy(QComboBox::InsertAtTop);
0027         KCompletion *comp = m_arguments->completionObject();
0028         QObject::connect(m_arguments, QOverload<const QString&>::of(&KComboBox::returnPressed),
0029                         comp, QOverload<const QString&>::of(&KCompletion::addItem));
0030         comp->insertItems(lastExtraArguments);
0031     } else {
0032         qFatal("CMakeExtraArgumentsHistory initialised with invalid widget");
0033     }
0034 }
0035 
0036 CMakeExtraArgumentsHistory::~CMakeExtraArgumentsHistory()
0037 {
0038     KConfigGroup config = KSharedConfig::openConfig()->group("CMakeBuildDirChooser");
0039     config.writeEntry("LastExtraArguments", list());
0040     config.sync();
0041 }
0042 
0043 QStringList CMakeExtraArgumentsHistory::list() const
0044 {
0045     QStringList list;
0046     if (!m_arguments->currentText().isEmpty()) {
0047         list << m_arguments->currentText();
0048     }
0049     for (int i = 0; i < qMin(maxExtraArgumentsInHistory, m_arguments->count()); ++i) {
0050         if (!m_arguments->itemText(i).isEmpty() &&
0051             (m_arguments->currentText() != m_arguments->itemText(i))) {
0052             list << m_arguments->itemText(i);
0053         }
0054     }
0055     return list;
0056 }