diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx
index 521390832..c1484f54b 100644
--- a/Source/QtDialog/CMakeSetupDialog.cxx
+++ b/Source/QtDialog/CMakeSetupDialog.cxx
@@ -162,10 +162,9 @@ void CMakeSetupDialog::initialize()
this, SLOT(doBinaryBrowse()));
QObject::connect(this->BinaryDirectory, SIGNAL(editTextChanged(QString)),
- this, SLOT(setBinaryDirectory(QString)));
+ this, SLOT(onBinaryDirectoryChanged(QString)));
QObject::connect(this->SourceDirectory, SIGNAL(textChanged(QString)),
- this->CMakeThread->cmakeInstance(),
- SLOT(setSourceDirectory(QString)));
+ this, SLOT(onSourceDirectoryChanged(QString)));
QObject::connect(this->CMakeThread->cmakeInstance(),
SIGNAL(sourceDirChanged(QString)),
@@ -207,7 +206,20 @@ void CMakeSetupDialog::initialize()
// get the saved binary directories
QStringList buildPaths = this->loadBuildPaths();
+ this->BinaryDirectory->blockSignals(true);
this->BinaryDirectory->addItems(buildPaths);
+ this->BinaryDirectory->blockSignals(false);
+
+ if(!this->SourceDirectory->text().isEmpty() ||
+ !this->BinaryDirectory->lineEdit()->text().isEmpty())
+ {
+ this->onSourceDirectoryChanged(this->SourceDirectory->text());
+ this->onBinaryDirectoryChanged(this->BinaryDirectory->lineEdit()->text());
+ }
+ else
+ {
+ this->onBinaryDirectoryChanged(this->BinaryDirectory->lineEdit()->text());
+ }
}
CMakeSetupDialog::~CMakeSetupDialog()
@@ -251,9 +263,11 @@ void CMakeSetupDialog::doConfigure()
// remember path
this->addBinaryPath(dir.absolutePath());
-
+
this->InterruptButton->setEnabled(true);
this->setEnabledState(false);
+ this->setGenerateEnabled(false);
+
this->Output->clear();
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"setProperties", Qt::QueuedConnection,
@@ -405,10 +419,20 @@ void CMakeSetupDialog::doBinaryBrowse()
}
void CMakeSetupDialog::setBinaryDirectory(const QString& dir)
+{
+ this->BinaryDirectory->setEditText(dir);
+}
+
+void CMakeSetupDialog::onSourceDirectoryChanged(const QString& dir)
+{
+ QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
+ "setSourceDirectory", Qt::QueuedConnection, Q_ARG(QString, dir));
+}
+
+void CMakeSetupDialog::onBinaryDirectoryChanged(const QString& dir)
{
this->CacheValues->cacheModel()->clear();
this->Output->clear();
- this->BinaryDirectory->setEditText(dir);
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"setBinaryDirectory", Qt::QueuedConnection, Q_ARG(QString, dir));
}
@@ -441,7 +465,7 @@ void CMakeSetupDialog::error(const QString& title, const QString& message,
void CMakeSetupDialog::setEnabledState(bool enabled)
{
// disable parts of the GUI during configure/generate
- this->CacheValues->setEnabled(enabled);
+ this->CacheValues->cacheModel()->setEditEnabled(enabled);
this->SourceDirectory->setEnabled(enabled);
this->BrowseSourceDirectoryButton->setEnabled(enabled);
this->BinaryDirectory->setEnabled(enabled);
diff --git a/Source/QtDialog/CMakeSetupDialog.h b/Source/QtDialog/CMakeSetupDialog.h
index 0010e1d14..006569fe8 100644
--- a/Source/QtDialog/CMakeSetupDialog.h
+++ b/Source/QtDialog/CMakeSetupDialog.h
@@ -66,6 +66,8 @@ protected slots:
void addBinaryPath(const QString&);
QStringList loadBuildPaths();
void saveBuildPaths(const QStringList&);
+ void onBinaryDirectoryChanged(const QString& dir);
+ void onSourceDirectoryChanged(const QString& dir);
protected:
void closeEvent(QCloseEvent*);
diff --git a/Source/QtDialog/CMakeSetupDialog.ui b/Source/QtDialog/CMakeSetupDialog.ui
index 1b3b5373f..aa2433ad2 100644
--- a/Source/QtDialog/CMakeSetupDialog.ui
+++ b/Source/QtDialog/CMakeSetupDialog.ui
@@ -67,6 +67,22 @@
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Minimum
+
+
+
+ 40
+ 20
+
+
+
+
-
diff --git a/Source/QtDialog/QCMakeCacheView.cxx b/Source/QtDialog/QCMakeCacheView.cxx
index eca2b96c7..1937f241c 100644
--- a/Source/QtDialog/QCMakeCacheView.cxx
+++ b/Source/QtDialog/QCMakeCacheView.cxx
@@ -124,7 +124,8 @@ void QCMakeCacheView::setSearchFilter(const QString& s)
}
QCMakeCacheModel::QCMakeCacheModel(QObject* p)
- : QAbstractTableModel(p), NewCount(0), ModifiedValues(false)
+ : QAbstractTableModel(p),
+ NewCount(0), ModifiedValues(false), EditEnabled(true)
{
}
@@ -173,6 +174,16 @@ QCMakeCachePropertyList QCMakeCacheModel::properties() const
return this->Properties;
}
+void QCMakeCacheModel::setEditEnabled(bool e)
+{
+ this->EditEnabled = e;
+}
+
+bool QCMakeCacheModel::editEnabled() const
+{
+ return this->EditEnabled;
+}
+
int QCMakeCacheModel::columnCount (const QModelIndex& /*p*/ ) const
{
return 2;
@@ -250,7 +261,7 @@ Qt::ItemFlags QCMakeCacheModel::flags (const QModelIndex& idx) const
{
Qt::ItemFlags f = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
// all column 1's are editable
- if(idx.column() == 1)
+ if(idx.column() == 1 && this->EditEnabled)
{
f |= Qt::ItemIsEditable;
// booleans are editable in place
diff --git a/Source/QtDialog/QCMakeCacheView.h b/Source/QtDialog/QCMakeCacheView.h
index 5ea671f0a..52b154e7e 100644
--- a/Source/QtDialog/QCMakeCacheView.h
+++ b/Source/QtDialog/QCMakeCacheView.h
@@ -65,6 +65,7 @@ public:
public slots:
void setProperties(const QCMakeCachePropertyList& props);
void clear();
+ void setEditEnabled(bool);
public:
// satisfy [pure] virtuals
@@ -80,11 +81,15 @@ public:
bool modifiedValues() const;
// get the properties
QCMakeCachePropertyList properties() const;
+
+ // editing enabled
+ bool editEnabled() const;
protected:
QCMakeCachePropertyList Properties;
int NewCount;
bool ModifiedValues;
+ bool EditEnabled;
};
/// Qt delegate class for interaction (or other customization)