Merge topic 'cmake-gui-open-project'

1ca2d5d1 cmake-gui: Add button to open the generated project
This commit is contained in:
Brad King 2016-09-14 08:56:12 -04:00 committed by CMake Topic Stage
commit 321c179962
4 changed files with 51 additions and 0 deletions

View File

@ -0,0 +1,5 @@
cmake-gui-open-project
----------------------
* :manual:`cmake-gui(1)` gained a button to open the generated project file
for :ref:`Visual Studio Generators` and the :generator:`Xcode` generator.

View File

@ -14,6 +14,7 @@
#include <QCloseEvent>
#include <QCoreApplication>
#include <QDesktopServices>
#include <QDialogButtonBox>
#include <QDragEnterEvent>
#include <QFileDialog>
@ -227,6 +228,8 @@ void CMakeSetupDialog::initialize()
QObject::connect(this->GenerateButton, SIGNAL(clicked(bool)), this,
SLOT(doGenerate()));
QObject::connect(this->OpenProjectButton, SIGNAL(clicked(bool)), this,
SLOT(doOpenProject()));
QObject::connect(this->BrowseSourceDirectoryButton, SIGNAL(clicked(bool)),
this, SLOT(doSourceBrowse()));
@ -499,6 +502,26 @@ void CMakeSetupDialog::doGenerate()
this->ConfigureNeeded = true;
}
QString CMakeSetupDialog::getProjectFilename()
{
QStringList nameFilter;
nameFilter << "*.sln"
<< "*.xcodeproj";
QDir directory(this->BinaryDirectory->currentText());
QStringList nlnFile = directory.entryList(nameFilter);
if (nlnFile.count() == 1) {
return this->BinaryDirectory->currentText() + "/" + nlnFile.at(0);
}
return QString();
}
void CMakeSetupDialog::doOpenProject()
{
QDesktopServices::openUrl(QUrl::fromLocalFile(this->getProjectFilename()));
}
void CMakeSetupDialog::closeEvent(QCloseEvent* e)
{
// prompt for close if there are unsaved changes, and we're not busy
@ -617,6 +640,11 @@ void CMakeSetupDialog::updateBinaryDirectory(const QString& dir)
this->BinaryDirectory->setEditText(dir);
this->BinaryDirectory->blockSignals(false);
}
if (!this->getProjectFilename().isEmpty()) {
this->OpenProjectButton->setEnabled(true);
} else {
this->OpenProjectButton->setEnabled(false);
}
}
void CMakeSetupDialog::doBinaryBrowse()
@ -1002,22 +1030,28 @@ void CMakeSetupDialog::enterState(CMakeSetupDialog::State s)
if (s == Interrupting) {
this->ConfigureButton->setEnabled(false);
this->GenerateButton->setEnabled(false);
this->OpenProjectButton->setEnabled(false);
} else if (s == Configuring) {
this->setEnabledState(false);
this->GenerateButton->setEnabled(false);
this->GenerateAction->setEnabled(false);
this->OpenProjectButton->setEnabled(false);
this->ConfigureButton->setText(tr("&Stop"));
} else if (s == Generating) {
this->CacheModified = false;
this->setEnabledState(false);
this->ConfigureButton->setEnabled(false);
this->GenerateAction->setEnabled(false);
this->OpenProjectButton->setEnabled(false);
this->GenerateButton->setText(tr("&Stop"));
} else if (s == ReadyConfigure) {
this->setEnabledState(true);
this->GenerateButton->setEnabled(true);
this->GenerateAction->setEnabled(true);
this->ConfigureButton->setEnabled(true);
if (!this->getProjectFilename().isEmpty()) {
this->OpenProjectButton->setEnabled(true);
}
this->ConfigureButton->setText(tr("&Configure"));
this->GenerateButton->setText(tr("&Generate"));
} else if (s == ReadyGenerate) {
@ -1025,6 +1059,9 @@ void CMakeSetupDialog::enterState(CMakeSetupDialog::State s)
this->GenerateButton->setEnabled(true);
this->GenerateAction->setEnabled(true);
this->ConfigureButton->setEnabled(true);
if (!this->getProjectFilename().isEmpty()) {
this->OpenProjectButton->setEnabled(true);
}
this->ConfigureButton->setText(tr("&Configure"));
this->GenerateButton->setText(tr("&Generate"));
}

View File

@ -41,6 +41,8 @@ protected slots:
void initialize();
void doConfigure();
void doGenerate();
QString getProjectFilename();
void doOpenProject();
void doInstallForCommandLine();
void doHelp();
void doAbout();

View File

@ -238,6 +238,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="OpenProjectButton">
<property name="text">
<string>Open &amp;Project</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="Generator">
<property name="text">