summaryrefslogtreecommitdiffstats
path: root/Source/QtDialog
diff options
context:
space:
mode:
authorSergey Zolotarev <sryze@yandex.com>2014-01-13 10:28:16 (GMT)
committerBrad King <brad.king@kitware.com>2014-01-16 14:23:36 (GMT)
commitcfec180d66a7210606c5274e6ba3bb86a1e197a7 (patch)
treeed13abe0f993ac2b9e204da65d5e7c1e892e9e24 /Source/QtDialog
parent9f6b633f37bebecc989cc8fc026da999148038f9 (diff)
downloadCMake-cfec180d66a7210606c5274e6ba3bb86a1e197a7.zip
CMake-cfec180d66a7210606c5274e6ba3bb86a1e197a7.tar.gz
CMake-cfec180d66a7210606c5274e6ba3bb86a1e197a7.tar.bz2
cmake-gui: Remember variable type in Add Entry
Store variable types together with their names in the variable completion list so that the type is automatically recovered when you select a variable. Keep variable names and types in separate lists. This removes the :TYPE string from completion list and the Name field and makes variable search easier. The variable names and types are now kept in two different settings - AddVariableNames and AddVariableTypes. Drop the old AddVariableCompletionEntries setting.
Diffstat (limited to 'Source/QtDialog')
-rw-r--r--Source/QtDialog/AddCacheEntry.cxx38
-rw-r--r--Source/QtDialog/AddCacheEntry.h11
-rw-r--r--Source/QtDialog/CMakeSetupDialog.cxx26
-rw-r--r--Source/QtDialog/CMakeSetupDialog.h3
4 files changed, 62 insertions, 16 deletions
diff --git a/Source/QtDialog/AddCacheEntry.cxx b/Source/QtDialog/AddCacheEntry.cxx
index e7fedc5..3881045 100644
--- a/Source/QtDialog/AddCacheEntry.cxx
+++ b/Source/QtDialog/AddCacheEntry.cxx
@@ -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;
+ }
+ }
+ }
+}
diff --git a/Source/QtDialog/AddCacheEntry.h b/Source/QtDialog/AddCacheEntry.h
index e219d4e..38c3a74 100644
--- a/Source/QtDialog/AddCacheEntry.h
+++ b/Source/QtDialog/AddCacheEntry.h
@@ -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
diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx
index 1903c02..f62afd6 100644
--- a/Source/QtDialog/CMakeSetupDialog.cxx
+++ b/Source/QtDialog/CMakeSetupDialog.cxx
@@ -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);
}
}
}
diff --git a/Source/QtDialog/CMakeSetupDialog.h b/Source/QtDialog/CMakeSetupDialog.h
index 963c7d1..1b26c64 100644
--- a/Source/QtDialog/CMakeSetupDialog.h
+++ b/Source/QtDialog/CMakeSetupDialog.h
@@ -110,7 +110,8 @@ protected:
QTextCharFormat ErrorFormat;
QTextCharFormat MessageFormat;
- QStringList AddVariableCompletions;
+ QStringList AddVariableNames;
+ QStringList AddVariableTypes;
QStringList FindHistory;
QEventLoop LocalLoop;