cmake-gui: Add button to open the generated project
Look for VS or Xcode project files at the top of the build tree. If present, enable an "Open Project" button to open them through the OS desktop services.
This commit is contained in:
parent
112f758223
commit
1ca2d5d1db
|
@ -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.
|
|
@ -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"));
|
||||
}
|
||||
|
|
|
@ -41,6 +41,8 @@ protected slots:
|
|||
void initialize();
|
||||
void doConfigure();
|
||||
void doGenerate();
|
||||
QString getProjectFilename();
|
||||
void doOpenProject();
|
||||
void doInstallForCommandLine();
|
||||
void doHelp();
|
||||
void doAbout();
|
||||
|
|
|
@ -238,6 +238,13 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="OpenProjectButton">
|
||||
<property name="text">
|
||||
<string>Open &Project</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="Generator">
|
||||
<property name="text">
|
||||
|
|
Loading…
Reference in New Issue