summaryrefslogtreecommitdiffstats
path: root/Source/QtDialog
diff options
context:
space:
mode:
authorClinton Stimpson <clinton@elemtech.com>2007-11-12 22:41:15 (GMT)
committerClinton Stimpson <clinton@elemtech.com>2007-11-12 22:41:15 (GMT)
commitfcc62c6d0dc4dd514a0588ff21339d39b7e641f2 (patch)
tree77e907941122b1172e6901b5a23e39e280e73eaa /Source/QtDialog
parentf97dddf0eecfd0b4a50166420ae8aabcb5571027 (diff)
downloadCMake-fcc62c6d0dc4dd514a0588ff21339d39b7e641f2.zip
CMake-fcc62c6d0dc4dd514a0588ff21339d39b7e641f2.tar.gz
CMake-fcc62c6d0dc4dd514a0588ff21339d39b7e641f2.tar.bz2
BUG: Fix pause at shutdown.
ENH: Remove interrupt button and make configure/generate turn to stop during runs. ENH: Add text to remove cache entry button.
Diffstat (limited to 'Source/QtDialog')
-rw-r--r--Source/QtDialog/CMakeSetupDialog.cxx160
-rw-r--r--Source/QtDialog/CMakeSetupDialog.h7
-rw-r--r--Source/QtDialog/CMakeSetupDialog.ui142
3 files changed, 177 insertions, 132 deletions
diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx
index b3a093a..3eb3ef1 100644
--- a/Source/QtDialog/CMakeSetupDialog.cxx
+++ b/Source/QtDialog/CMakeSetupDialog.cxx
@@ -66,7 +66,7 @@ void QCMakeThread::run()
}
CMakeSetupDialog::CMakeSetupDialog()
- : ExitAfterGenerate(true), CacheModified(false)
+ : ExitAfterGenerate(true), CacheModified(false), CurrentState(Interrupting)
{
// create the GUI
QSettings settings;
@@ -81,9 +81,6 @@ CMakeSetupDialog::CMakeSetupDialog()
this->Splitter->setStretchFactor(1, 1);
this->setCentralWidget(cont);
this->ProgressBar->reset();
- this->InterruptButton->setIcon(
- this->style()->standardPixmap(QStyle::SP_DialogCancelButton));
- this->InterruptButton->setEnabled(false);
this->RemoveEntry->setEnabled(false);
QMenu* FileMenu = this->menuBar()->addMenu(tr("&File"));
@@ -104,15 +101,6 @@ CMakeSetupDialog::CMakeSetupDialog()
this->GenerateAction = ToolsMenu->addAction(tr("&Generate"));
QObject::connect(this->GenerateAction, SIGNAL(triggered(bool)),
this, SLOT(doGenerate()));
- /*
- QMenu* OptionsMenu = this->menuBar()->addMenu(tr("&Options"));
- QAction* a = OptionsMenu->addAction(tr("Exit after Generation"));
- a->setCheckable(true);
- this->ExitAfterGenerate = settings.value("ExitAfterGenerate", true).toBool();
- a->setChecked(this->ExitAfterGenerate);
- QObject::connect(a, SIGNAL(triggered(bool)),
- this, SLOT(setExitAfterGenerate(bool)));
- */
QMenu* HelpMenu = this->menuBar()->addMenu(tr("&Help"));
QAction* a = HelpMenu->addAction(tr("About"));
@@ -122,8 +110,6 @@ CMakeSetupDialog::CMakeSetupDialog()
QObject::connect(a, SIGNAL(triggered(bool)),
this, SLOT(doHelp()));
- this->setGenerateEnabled(false);
-
this->setAcceptDrops(true);
// start the cmake worker thread
@@ -131,6 +117,8 @@ CMakeSetupDialog::CMakeSetupDialog()
QObject::connect(this->CMakeThread, SIGNAL(cmakeInitialized()),
this, SLOT(initialize()), Qt::QueuedConnection);
this->CMakeThread->start();
+
+ this->enterState(ReadyConfigure);
}
void CMakeSetupDialog::initialize()
@@ -175,9 +163,6 @@ void CMakeSetupDialog::initialize()
SIGNAL(errorMessage(QString)),
this, SLOT(error(QString)));
- QObject::connect(this->InterruptButton, SIGNAL(clicked(bool)),
- this, SLOT(doInterrupt()));
-
QObject::connect(this->CMakeThread->cmakeInstance(),
SIGNAL(outputMessage(QString)),
this->Output, SLOT(append(QString)));
@@ -234,6 +219,13 @@ CMakeSetupDialog::~CMakeSetupDialog()
void CMakeSetupDialog::doConfigure()
{
+ if(this->CurrentState == Configuring)
+ {
+ // stop configure
+ doInterrupt();
+ return;
+ }
+
QString bindir = this->CMakeThread->cmakeInstance()->binaryDirectory();
QDir dir(bindir);
if(!dir.exists())
@@ -262,9 +254,7 @@ void CMakeSetupDialog::doConfigure()
// remember path
this->addBinaryPath(dir.absolutePath());
- this->InterruptButton->setEnabled(true);
- this->setEnabledState(false);
- this->setGenerateEnabled(false);
+ this->enterState(Configuring);
this->Output->clear();
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
@@ -277,47 +267,44 @@ void CMakeSetupDialog::doConfigure()
void CMakeSetupDialog::finishConfigure(int err)
{
- this->InterruptButton->setEnabled(false);
- this->setEnabledState(true);
- this->ProgressBar->reset();
+ if(0 == err && 0 == this->CacheValues->cacheModel()->newCount())
+ {
+ this->enterState(ReadyGenerate);
+ }
+ else
+ {
+ this->enterState(ReadyConfigure);
+ this->CacheValues->scrollToTop();
+ }
+
if(err != 0)
{
QMessageBox::critical(this, tr("Error"),
tr("Error in configuration process, project files may be invalid"),
QMessageBox::Ok);
}
- else if(0 == this->CacheValues->cacheModel()->newCount())
- {
- this->setGenerateEnabled(true);
- }
}
void CMakeSetupDialog::finishGenerate(int err)
{
- this->InterruptButton->setEnabled(false);
- this->setEnabledState(true);
- this->setGenerateEnabled(true);
- this->ProgressBar->reset();
+ this->enterState(ReadyGenerate);
if(err != 0)
{
QMessageBox::critical(this, tr("Error"),
tr("Error in generation process, project files may be invalid"),
QMessageBox::Ok);
}
- /*
- else if(this->ExitAfterGenerate)
- {
- QApplication::quit();
- }
- */
}
void CMakeSetupDialog::doGenerate()
{
- this->InterruptButton->setEnabled(true);
- this->setEnabledState(false);
- this->setGenerateEnabled(false);
- this->Output->clear();
+ if(this->CurrentState == Generating)
+ {
+ // stop generate
+ doInterrupt();
+ return;
+ }
+ this->enterState(Generating);
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"generate", Qt::QueuedConnection);
}
@@ -325,7 +312,7 @@ void CMakeSetupDialog::doGenerate()
void CMakeSetupDialog::closeEvent(QCloseEvent* e)
{
// don't close if we're busy
- if(this->InterruptButton->isEnabled())
+ if(this->CurrentState == Configuring || this->CurrentState == Generating)
{
e->ignore();
}
@@ -382,7 +369,7 @@ void CMakeSetupDialog::doHelp()
void CMakeSetupDialog::doInterrupt()
{
- this->InterruptButton->setEnabled(false);
+ this->enterState(Interrupting);
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
"interrupt", Qt::QueuedConnection);
}
@@ -458,7 +445,6 @@ void CMakeSetupDialog::setEnabledState(bool enabled)
this->BrowseSourceDirectoryButton->setEnabled(enabled);
this->BinaryDirectory->setEnabled(enabled);
this->BrowseBinaryDirectoryButton->setEnabled(enabled);
- this->ConfigureButton->setEnabled(enabled);
this->ReloadCacheAction->setEnabled(enabled);
this->DeleteCacheAction->setEnabled(enabled);
this->ExitAction->setEnabled(enabled);
@@ -549,17 +535,6 @@ void CMakeSetupDialog::doAbout()
void CMakeSetupDialog::setExitAfterGenerate(bool b)
{
this->ExitAfterGenerate = b;
- /*
- QSettings settings;
- settings.beginGroup("Settings/StartPath");
- settings.setValue("ExitAfterGenerate", b);
- */
-}
-
-void CMakeSetupDialog::setGenerateEnabled(bool b)
-{
- this->GenerateButton->setEnabled(b);
- this->GenerateAction->setEnabled(b);
}
void CMakeSetupDialog::addBinaryPath(const QString& path)
@@ -586,7 +561,8 @@ void CMakeSetupDialog::addBinaryPath(const QString& path)
void CMakeSetupDialog::dragEnterEvent(QDragEnterEvent* e)
{
- if(!this->ConfigureButton->isEnabled())
+ if(this->CurrentState != ReadyConfigure ||
+ this->CurrentState != ReadyGenerate)
{
e->ignore();
return;
@@ -609,10 +585,12 @@ void CMakeSetupDialog::dragEnterEvent(QDragEnterEvent* e)
void CMakeSetupDialog::dropEvent(QDropEvent* e)
{
- if(!this->ConfigureButton->isEnabled())
+ if(this->CurrentState != ReadyConfigure ||
+ this->CurrentState != ReadyGenerate)
{
return;
}
+
const QMimeData* dat = e->mimeData();
QList<QUrl> urls = dat->urls();
QString file = urls.count() ? urls[0].toLocalFile() : QString();
@@ -672,7 +650,7 @@ void CMakeSetupDialog::saveBuildPaths(const QStringList& paths)
void CMakeSetupDialog::setCacheModified()
{
this->CacheModified = true;
- this->setGenerateEnabled(false);
+ this->enterState(ReadyConfigure);
}
void CMakeSetupDialog::removeSelectedCacheEntries()
@@ -692,7 +670,9 @@ void CMakeSetupDialog::removeSelectedCacheEntries()
void CMakeSetupDialog::selectionChanged()
{
QModelIndexList idxs = this->CacheValues->selectionModel()->selectedRows();
- if(idxs.count() && !this->InterruptButton->isEnabled())
+ if(idxs.count() &&
+ (this->CurrentState == ReadyConfigure ||
+ this->CurrentState == ReadyGenerate) )
{
this->RemoveEntry->setEnabled(true);
}
@@ -701,4 +681,64 @@ void CMakeSetupDialog::selectionChanged()
this->RemoveEntry->setEnabled(false);
}
}
+
+void CMakeSetupDialog::enterState(CMakeSetupDialog::State s)
+{
+ if(s == this->CurrentState)
+ {
+ return;
+ }
+
+ CMakeSetupDialog::State old = this->CurrentState;
+ this->CurrentState = s;
+
+ if(s == Interrupting)
+ {
+ if(old == Configuring)
+ {
+ this->ConfigureButton->setEnabled(false);
+ }
+ if(old == Generating)
+ {
+ this->GenerateButton->setEnabled(false);
+ }
+ }
+ else if(s == Configuring)
+ {
+ this->Output->clear();
+ this->setEnabledState(false);
+ this->GenerateButton->setEnabled(false);
+ this->GenerateAction->setEnabled(false);
+ this->ConfigureButton->setText(tr("Stop"));
+ }
+ else if(s == Generating)
+ {
+ this->Output->clear();
+ this->setEnabledState(false);
+ this->ConfigureButton->setEnabled(false);
+ this->GenerateAction->setEnabled(false);
+ this->GenerateButton->setText(tr("Stop"));
+ }
+ else if(s == ReadyConfigure)
+ {
+ this->ProgressBar->reset();
+ this->setEnabledState(true);
+ this->GenerateButton->setEnabled(false);
+ this->GenerateAction->setEnabled(false);
+ this->ConfigureButton->setEnabled(true);
+ this->ConfigureButton->setText(tr("Configure"));
+ this->GenerateButton->setText(tr("Generate"));
+ }
+ else if(s == ReadyGenerate)
+ {
+ this->ProgressBar->reset();
+ this->setEnabledState(true);
+ this->GenerateButton->setEnabled(true);
+ this->GenerateAction->setEnabled(true);
+ this->ConfigureButton->setEnabled(true);
+ this->ConfigureButton->setText(tr("Configure"));
+ this->GenerateButton->setText(tr("Generate"));
+ }
+}
+
diff --git a/Source/QtDialog/CMakeSetupDialog.h b/Source/QtDialog/CMakeSetupDialog.h
index cf298f3..d8bea36 100644
--- a/Source/QtDialog/CMakeSetupDialog.h
+++ b/Source/QtDialog/CMakeSetupDialog.h
@@ -61,7 +61,6 @@ protected slots:
void promptForGenerator();
void updateGeneratorLabel(const QString& gen);
void setExitAfterGenerate(bool);
- void setGenerateEnabled(bool);
void addBinaryPath(const QString&);
QStringList loadBuildPaths();
void saveBuildPaths(const QStringList&);
@@ -72,6 +71,10 @@ protected slots:
void selectionChanged();
protected:
+
+ enum State { Interrupting, ReadyConfigure, ReadyGenerate, Configuring, Generating };
+ void enterState(State s);
+
void closeEvent(QCloseEvent*);
void dragEnterEvent(QDragEnterEvent*);
void dropEvent(QDropEvent*);
@@ -84,6 +87,8 @@ protected:
QAction* ExitAction;
QAction* ConfigureAction;
QAction* GenerateAction;
+ State CurrentState;
+
};
// QCMake instance on a thread
diff --git a/Source/QtDialog/CMakeSetupDialog.ui b/Source/QtDialog/CMakeSetupDialog.ui
index b0288b3..d32b7a5 100644
--- a/Source/QtDialog/CMakeSetupDialog.ui
+++ b/Source/QtDialog/CMakeSetupDialog.ui
@@ -70,11 +70,11 @@
<property name="frameShadow" >
<enum>QFrame::Raised</enum>
</property>
- <layout class="QGridLayout" >
+ <layout class="QVBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
- <item row="0" column="0" colspan="6" >
+ <item>
<layout class="QHBoxLayout" >
<item>
<widget class="QLabel" name="label_4" >
@@ -128,16 +128,19 @@
<string>Remove Selected Entries</string>
</property>
<property name="text" >
- <string/>
+ <string>Remove Entry</string>
</property>
<property name="icon" >
<iconset resource="CMakeSetup.qrc" >:/Icons/Delete16.png</iconset>
</property>
+ <property name="toolButtonStyle" >
+ <enum>Qt::ToolButtonTextBesideIcon</enum>
+ </property>
</widget>
</item>
</layout>
</item>
- <item row="1" column="0" colspan="6" >
+ <item>
<widget class="QCMakeCacheView" name="CacheValues" >
<property name="alternatingRowColors" >
<bool>true</bool>
@@ -150,73 +153,7 @@
</property>
</widget>
</item>
- <item row="3" column="0" >
- <widget class="QPushButton" name="ConfigureButton" >
- <property name="text" >
- <string>Configure</string>
- </property>
- </widget>
- </item>
- <item row="3" column="1" >
- <widget class="QPushButton" name="GenerateButton" >
- <property name="text" >
- <string>Generate</string>
- </property>
- </widget>
- </item>
- <item row="3" column="2" >
- <widget class="QLabel" name="Generator" >
- <property name="text" >
- <string>Current Generator:</string>
- </property>
- </widget>
- </item>
- <item row="3" column="3" >
- <spacer>
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>121</width>
- <height>27</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="3" column="5" >
- <widget class="QProgressBar" name="ProgressBar" >
- <property name="minimum" >
- <number>0</number>
- </property>
- <property name="maximum" >
- <number>100</number>
- </property>
- <property name="value" >
- <number>0</number>
- </property>
- <property name="textVisible" >
- <bool>false</bool>
- </property>
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="textDirection" >
- <enum>QProgressBar::BottomToTop</enum>
- </property>
- </widget>
- </item>
- <item row="3" column="4" >
- <widget class="QToolButton" name="InterruptButton" >
- <property name="text" >
- <string>...</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0" colspan="6" >
+ <item>
<widget class="QLabel" name="label_3" >
<property name="text" >
<string>Press Configure to update and display new values in red, then press Generate to generate selected build files.</string>
@@ -229,6 +166,69 @@
</property>
</widget>
</item>
+ <item>
+ <layout class="QHBoxLayout" >
+ <item>
+ <widget class="QPushButton" name="ConfigureButton" >
+ <property name="text" >
+ <string>Configure</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="GenerateButton" >
+ <property name="text" >
+ <string>Generate</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="Generator" >
+ <property name="text" >
+ <string>Current Generator:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>121</width>
+ <height>27</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="ProgressBar" >
+ <property name="minimum" >
+ <number>0</number>
+ </property>
+ <property name="maximum" >
+ <number>100</number>
+ </property>
+ <property name="value" >
+ <number>0</number>
+ </property>
+ <property name="textVisible" >
+ <bool>false</bool>
+ </property>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="textDirection" >
+ <enum>QProgressBar::BottomToTop</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
<widget class="QTextEdit" name="Output" >