Merge topic 'var-type-autofill'
cfec180d
cmake-gui: Remember variable type in Add Entry
This commit is contained in:
commit
2d5d690ea6
|
@ -15,14 +15,16 @@
|
|||
#include <QCompleter>
|
||||
|
||||
static const int NumTypes = 4;
|
||||
static const int DefaultTypeIndex = 0;
|
||||
static const QByteArray TypeStrings[NumTypes] =
|
||||
{ "BOOL", "PATH", "FILEPATH", "STRING" };
|
||||
static const QCMakeProperty::PropertyType Types[NumTypes] =
|
||||
{ QCMakeProperty::BOOL, QCMakeProperty::PATH,
|
||||
QCMakeProperty::FILEPATH, QCMakeProperty::STRING};
|
||||
|
||||
AddCacheEntry::AddCacheEntry(QWidget* p, const QStringList& completions)
|
||||
: QWidget(p)
|
||||
AddCacheEntry::AddCacheEntry(QWidget* p, const QStringList& varNames,
|
||||
const QStringList& varTypes)
|
||||
: QWidget(p), VarNames(varNames), VarTypes(varTypes)
|
||||
{
|
||||
this->setupUi(this);
|
||||
for(int i=0; i<NumTypes; i++)
|
||||
|
@ -43,7 +45,10 @@ AddCacheEntry::AddCacheEntry(QWidget* p, const QStringList& completions)
|
|||
this->setTabOrder(path, filepath);
|
||||
this->setTabOrder(filepath, string);
|
||||
this->setTabOrder(string, this->Description);
|
||||
this->Name->setCompleter(new QCompleter(completions, this));
|
||||
QCompleter *completer = new QCompleter(this->VarNames, this);
|
||||
this->Name->setCompleter(completer);
|
||||
connect(completer, SIGNAL(activated(const QString&)),
|
||||
this, SLOT(onCompletionActivated(const QString&)));
|
||||
}
|
||||
|
||||
QString AddCacheEntry::name() const
|
||||
|
@ -77,7 +82,32 @@ QCMakeProperty::PropertyType AddCacheEntry::type() const
|
|||
{
|
||||
return Types[idx];
|
||||
}
|
||||
return QCMakeProperty::BOOL;
|
||||
return Types[DefaultTypeIndex];
|
||||
}
|
||||
|
||||
QString AddCacheEntry::typeString() const
|
||||
{
|
||||
int idx = this->Type->currentIndex();
|
||||
if(idx >= 0 && idx < NumTypes)
|
||||
{
|
||||
return TypeStrings[idx];
|
||||
}
|
||||
return TypeStrings[DefaultTypeIndex];
|
||||
}
|
||||
|
||||
void AddCacheEntry::onCompletionActivated(const QString &text)
|
||||
{
|
||||
int idx = this->VarNames.indexOf(text);
|
||||
if (idx != -1)
|
||||
{
|
||||
QString vartype = this->VarTypes[idx];
|
||||
for (int i = 0; i < NumTypes; i++)
|
||||
{
|
||||
if (TypeStrings[i] == vartype)
|
||||
{
|
||||
this->Type->setCurrentIndex(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,12 +24,21 @@ class AddCacheEntry : public QWidget, public Ui::AddCacheEntry
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
AddCacheEntry(QWidget* p, const QStringList& completions);
|
||||
AddCacheEntry(QWidget* p, const QStringList& varNames,
|
||||
const QStringList& varTypes);
|
||||
|
||||
QString name() const;
|
||||
QVariant value() const;
|
||||
QString description() const;
|
||||
QCMakeProperty::PropertyType type() const;
|
||||
QString typeString() const;
|
||||
|
||||
private slots:
|
||||
void onCompletionActivated(const QString &text);
|
||||
|
||||
private:
|
||||
const QStringList& VarNames;
|
||||
const QStringList& VarTypes;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -70,8 +70,10 @@ CMakeSetupDialog::CMakeSetupDialog()
|
|||
restoreGeometry(settings.value("geometry").toByteArray());
|
||||
restoreState(settings.value("windowState").toByteArray());
|
||||
|
||||
this->AddVariableCompletions = settings.value("AddVariableCompletionEntries",
|
||||
this->AddVariableNames = settings.value("AddVariableNames",
|
||||
QStringList("CMAKE_INSTALL_PREFIX")).toStringList();
|
||||
this->AddVariableTypes = settings.value("AddVariableTypes",
|
||||
QStringList("PATH")).toStringList();
|
||||
|
||||
QWidget* cont = new QWidget(this);
|
||||
this->setupUi(cont);
|
||||
|
@ -1049,7 +1051,8 @@ void CMakeSetupDialog::addCacheEntry()
|
|||
dialog.resize(400, 200);
|
||||
dialog.setWindowTitle(tr("Add Cache Entry"));
|
||||
QVBoxLayout* l = new QVBoxLayout(&dialog);
|
||||
AddCacheEntry* w = new AddCacheEntry(&dialog, this->AddVariableCompletions);
|
||||
AddCacheEntry* w = new AddCacheEntry(&dialog, this->AddVariableNames,
|
||||
this->AddVariableTypes);
|
||||
QDialogButtonBox* btns = new QDialogButtonBox(
|
||||
QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
|
||||
Qt::Horizontal, &dialog);
|
||||
|
@ -1064,23 +1067,26 @@ void CMakeSetupDialog::addCacheEntry()
|
|||
m->insertProperty(w->type(), w->name(), w->description(), w->value(), false);
|
||||
|
||||
// only add variable names to the completion which are new
|
||||
if (!this->AddVariableCompletions.contains(w->name()))
|
||||
if (!this->AddVariableNames.contains(w->name()))
|
||||
{
|
||||
this->AddVariableCompletions << w->name();
|
||||
this->AddVariableNames << w->name();
|
||||
this->AddVariableTypes << w->typeString();
|
||||
// limit to at most 100 completion items
|
||||
if (this->AddVariableCompletions.size() > 100)
|
||||
if (this->AddVariableNames.size() > 100)
|
||||
{
|
||||
this->AddVariableCompletions.removeFirst();
|
||||
this->AddVariableNames.removeFirst();
|
||||
this->AddVariableTypes.removeFirst();
|
||||
}
|
||||
// make sure CMAKE_INSTALL_PREFIX is always there
|
||||
if (!this->AddVariableCompletions.contains("CMAKE_INSTALL_PREFIX"))
|
||||
if (!this->AddVariableNames.contains("CMAKE_INSTALL_PREFIX"))
|
||||
{
|
||||
this->AddVariableCompletions << QString("CMAKE_INSTALL_PREFIX");
|
||||
this->AddVariableNames << "CMAKE_INSTALL_PREFIX";
|
||||
this->AddVariableTypes << "PATH";
|
||||
}
|
||||
QSettings settings;
|
||||
settings.beginGroup("Settings/StartPath");
|
||||
settings.setValue("AddVariableCompletionEntries",
|
||||
this->AddVariableCompletions);
|
||||
settings.setValue("AddVariableNames", this->AddVariableNames);
|
||||
settings.setValue("AddVariableTypes", this->AddVariableTypes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -110,7 +110,8 @@ protected:
|
|||
QTextCharFormat ErrorFormat;
|
||||
QTextCharFormat MessageFormat;
|
||||
|
||||
QStringList AddVariableCompletions;
|
||||
QStringList AddVariableNames;
|
||||
QStringList AddVariableTypes;
|
||||
QStringList FindHistory;
|
||||
|
||||
QEventLoop LocalLoop;
|
||||
|
|
Loading…
Reference in New Issue