1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
/* 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 "QCMake.h"
#include "QCMakePreset.h"
#include <QEventLoop>
#include <QMainWindow>
#include <QThread>
#include <QVector>
#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 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);
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* WarnUninitializedAction;
QAction* InstallForCommandLineAction;
State CurrentState;
QString DeferredPreset;
bool StartupBinaryDirectory = 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;
};
|