| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file LICENSE.rst or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include <memory> | |
| #include <QEventLoop> | |
| #include <QMainWindow> | |
| #include <QThread> | |
| #include <QVector> | |
| #include "QCMake.h" | |
| #include "QCMakePreset.h" | |
| #include "ui_CMakeSetupDialog.h" | |
| class QCMakePresetItemModel; | |
| class QCMakeThread; | |
| class CMakeCacheModel; | |
| class QProgressBar; | |
| class QToolButton; | |
| #ifdef QT_WINEXTRAS | |
| class QWinTaskbarButton; | |
| #endif | |
| /// Qt user interface for CMake | |
| class CMakeSetupDialog | |
| : public QMainWindow | |
| , public Ui::CMakeSetupDialog | |
| { | |
| Q_OBJECT | |
| public: | |
| CMakeSetupDialog(); | |
| ~CMakeSetupDialog(); | |
| public slots: | |
| void setBinaryDirectory(QString const& dir); | |
| void setSourceDirectory(QString const& dir); | |
| void setDeferredPreset(QString const& preset); | |
| void setStartupBinaryDirectory(bool startup); | |
| protected slots: | |
| void initialize(); | |
| void doConfigure(); | |
| void doGenerate(); | |
| void doOpenProject(); | |
| void doInstallForCommandLine(); | |
| void doHelp(); | |
| void doAbout(); | |
| void doInterrupt(); | |
| void error(QString const& message); | |
| void message(QString const& message); | |
| void doSourceBrowse(); | |
| void doBinaryBrowse(); | |
| void doReloadCache(); | |
| void doDeleteCache(); | |
| void updateSourceDirectory(QString const& dir); | |
| void updateBinaryDirectory(QString const& dir); | |
| void updatePresets(QVector<QCMakePreset> const& presets); | |
| void updatePreset(QString const& name); | |
| void onPresetApplied(quint64 requestId, QString const& name, | |
| QCMakePropertyList const& properties); | |
| void showPresetLoadError(QString const& dir, QString const& message); | |
| void showProgress(QString const& msg, float percent); | |
| void setEnabledState(bool); | |
| bool setupFirstConfigure(); | |
| void updateGeneratorLabel(QString const& gen); | |
| void setExitAfterGenerate(bool); | |
| void addBinaryPath(QString const&); | |
| QStringList loadBuildPaths(); | |
| void saveBuildPaths(QStringList const&); | |
| void onBinaryDirectoryChanged(QString const& dir); | |
| void onSourceDirectoryChanged(QString const& dir); | |
| void onBuildPresetChanged(QString const& name); | |
| void setCacheModified(); | |
| void removeSelectedCacheEntries(); | |
| void selectionChanged(); | |
| void editEnvironment(); | |
| void addCacheEntry(); | |
| void startSearch(); | |
| void setDebugOutput(bool); | |
| void setAdvancedView(bool); | |
| void setGroupedView(bool); | |
| void showUserChanges(); | |
| void setSearchFilter(QString const& str); | |
| bool prepareConfigure(); | |
| bool doConfigureInternal(); | |
| bool doGenerateInternal(); | |
| void exitLoop(int); | |
| void doOutputContextMenu(QPoint pt); | |
| void doOutputFindDialog(); | |
| void doOutputFindNext(bool directionForward = true); | |
| void doOutputFindPrev(); | |
| void doOutputErrorNext(); | |
| void doRegexExplorerDialog(); | |
| /// display the modal warning messages dialog window | |
| void doWarningMessagesDialog(); | |
| protected: | |
| enum State | |
| { | |
| Interrupting, | |
| ReadyConfigure, | |
| ReadyGenerate, | |
| Configuring, | |
| Generating | |
| }; | |
| void enterState(State s); | |
| // Recompute command/control availability from state and pending. Kept out | |
| // of enterState() since pending can toggle without a lifecycle change. | |
| void updateCommandState(); | |
| void closeEvent(QCloseEvent*); | |
| void dragEnterEvent(QDragEnterEvent*); | |
| void dropEvent(QDropEvent*); | |
| QCMakeThread* CMakeThread; | |
| bool ExitAfterGenerate; | |
| bool CacheModified; | |
| bool ConfigureNeeded; | |
| QAction* ReloadCacheAction; | |
| QAction* DeleteCacheAction; | |
| QAction* ExitAction; | |
| QAction* ConfigureAction; | |
| QAction* GenerateAction; | |
| QAction* InstallForCommandLineAction; | |
| State CurrentState; | |
| QString DeferredPreset; | |
| bool StartupBinaryDirectory = false; | |
| // Only the completion matching LatestPresetRequestId is accepted; a request | |
| // is outstanding while PresetApplicationPending holds. | |
| quint64 LatestPresetRequestId = 0; | |
| bool PresetApplicationPending = false; | |
| QTextCharFormat ErrorFormat; | |
| QTextCharFormat MessageFormat; | |
| QStringList AddVariableNames; | |
| QStringList AddVariableTypes; | |
| QStringList FindHistory; | |
| QEventLoop LocalLoop; | |
| #ifdef QT_WINEXTRAS | |
| QWinTaskbarButton* TaskbarButton; | |
| #endif | |
| float ProgressOffset; | |
| float ProgressFactor; | |
| }; | |
| // QCMake instance on a thread | |
| class QCMakeThread : public QThread | |
| { | |
| Q_OBJECT | |
| public: | |
| QCMakeThread(QObject* p); | |
| QCMake* cmakeInstance() const; | |
| signals: | |
| void cmakeInitialized(); | |
| protected: | |
| virtual void run(); | |
| std::unique_ptr<QCMake> CMakeInstance; | |
| }; |