aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/coreplugin/mainwindow.cpp
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2023-09-15 12:10:35 +0200
committerhjk <hjk@qt.io>2023-09-25 08:47:45 +0000
commit080cb867616f7c3a3502576ba4183d0a4f48e6c4 (patch)
treec71964c922e31b7c5be30865a3d2970bb06f4d67 /src/plugins/coreplugin/mainwindow.cpp
parent4282aff307abe807f52310bdde65e87eb9ab3b82 (diff)
Core: Pimpl MainWindow
I'd like to disentangle things a bit, and there's quite a bit non-window-ish stuff here. Change-Id: Iad1e1d17ccd10b3ffff14251039ae2a5d6bfb675 Reviewed-by: Eike Ziller <eike.ziller@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/plugins/coreplugin/mainwindow.cpp')
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp374
1 files changed, 245 insertions, 129 deletions
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 9e7648e21c..852e33f5cf 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -79,6 +79,7 @@
#include <QStatusBar>
#include <QStyleFactory>
#include <QTextBrowser>
+#include <QTimer>
#include <QToolButton>
#include <QVersionNumber>
@@ -106,26 +107,122 @@ static bool hideToolsMenu()
enum { debugMainWindow = 0 };
-MainWindow::MainWindow()
- : AppMainWindow()
- , m_coreImpl(new ICore(this))
- , m_lowPrioAdditionalContexts(Constants::C_GLOBAL)
- , m_progressManager(new ProgressManagerPrivate)
- , m_jsExpander(JsExpander::createGlobalJsExpander())
- , m_vcsManager(new VcsManager)
- , m_modeStack(new FancyTabWidget(this))
- , m_shortcutSettings(new ShortcutSettings)
- , m_toolSettings(new ToolSettings)
- , m_mimeTypeSettings(new MimeTypeSettings)
- , m_systemEditor(new SystemEditor)
- , m_toggleLeftSideBarButton(new QToolButton)
- , m_toggleRightSideBarButton(new QToolButton)
+
+class MainWindowPrivate : public QObject
+{
+public:
+ explicit MainWindowPrivate(MainWindow *mainWindow)
+ : q(mainWindow)
+ {}
+
+ ~MainWindowPrivate();
+
+ void init();
+
+ static void openFile();
+ static IDocument *openFiles(const FilePaths &filePaths, ICore::OpenFilesFlags flags,
+ const FilePath &workingDirectory = {});
+ void aboutToShowRecentFiles();
+
+ static void setFocusToEditor();
+ void aboutQtCreator();
+ void aboutPlugins();
+ void changeLog();
+ void contact();
+ void updateFocusWidget(QWidget *old, QWidget *now);
+ NavigationWidget *navigationWidget(Side side) const;
+ void setSidebarVisible(bool visible, Side side);
+ void destroyVersionDialog();
+ void openDroppedFiles(const QList<Utils::DropSupport::FileSpec> &files);
+ void restoreWindowState();
+
+ void openFileFromDevice();
+
+ void updateContextObject(const QList<IContext *> &context);
+ void updateContext();
+
+ void registerDefaultContainers();
+ void registerDefaultActions();
+ void registerModeSelectorStyleActions();
+
+ void readSettings();
+ void saveWindowSettings();
+
+ void updateModeSelectorStyleMenu();
+
+ MainWindow *q = nullptr;
+ ICore *m_coreImpl = nullptr;
+ QTimer m_trimTimer;
+ QStringList m_aboutInformation;
+ Context m_highPrioAdditionalContexts;
+ Context m_lowPrioAdditionalContexts{Constants::C_GLOBAL};
+ mutable QPrinter *m_printer = nullptr;
+ WindowSupport *m_windowSupport = nullptr;
+ EditorManager *m_editorManager = nullptr;
+ ExternalToolManager *m_externalToolManager = nullptr;
+ MessageManager *m_messageManager = nullptr;
+ ProgressManagerPrivate *m_progressManager = nullptr;
+ JsExpander *m_jsExpander = nullptr;
+ VcsManager *m_vcsManager = nullptr;
+ ModeManager *m_modeManager = nullptr;
+ FancyTabWidget *m_modeStack = nullptr;
+ NavigationWidget *m_leftNavigationWidget = nullptr;
+ NavigationWidget *m_rightNavigationWidget = nullptr;
+ RightPaneWidget *m_rightPaneWidget = nullptr;
+ VersionDialog *m_versionDialog = nullptr;
+
+ QList<IContext *> m_activeContext;
+
+ std::unordered_map<QWidget *, IContext *> m_contextWidgets;
+
+ ShortcutSettings *m_shortcutSettings = nullptr;
+ ToolSettings *m_toolSettings = nullptr;
+ MimeTypeSettings *m_mimeTypeSettings = nullptr;
+ SystemEditor *m_systemEditor = nullptr;
+
+ // actions
+ QAction *m_focusToEditor = nullptr;
+ QAction *m_newAction = nullptr;
+ QAction *m_openAction = nullptr;
+ QAction *m_openWithAction = nullptr;
+ QAction *m_openFromDeviceAction = nullptr;
+ QAction *m_saveAllAction = nullptr;
+ QAction *m_exitAction = nullptr;
+ QAction *m_optionsAction = nullptr;
+ QAction *m_loggerAction = nullptr;
+ QAction *m_toggleLeftSideBarAction = nullptr;
+ QAction *m_toggleRightSideBarAction = nullptr;
+ QAction *m_toggleMenubarAction = nullptr;
+ QAction *m_cycleModeSelectorStyleAction = nullptr;
+ QAction *m_setModeSelectorStyleIconsAndTextAction = nullptr;
+ QAction *m_setModeSelectorStyleHiddenAction = nullptr;
+ QAction *m_setModeSelectorStyleIconsOnlyAction = nullptr;
+ QAction *m_themeAction = nullptr;
+
+ QToolButton *m_toggleLeftSideBarButton = nullptr;
+ QToolButton *m_toggleRightSideBarButton = nullptr;
+ QColor m_overrideColor;
+ QList<std::function<bool()>> m_preCloseListeners;
+};
+
+void MainWindowPrivate::init()
{
- (void) new DocumentManager(this);
+ m_coreImpl = new ICore(q);
+ m_progressManager = new ProgressManagerPrivate;
+ m_jsExpander = JsExpander::createGlobalJsExpander();
+ m_vcsManager = new VcsManager;
+ m_modeStack = new FancyTabWidget(q);
+ m_shortcutSettings = new ShortcutSettings;
+ m_toolSettings = new ToolSettings;
+ m_mimeTypeSettings = new MimeTypeSettings;
+ m_systemEditor = new SystemEditor;
+ m_toggleLeftSideBarButton = new QToolButton;
+ m_toggleRightSideBarButton = new QToolButton;
+
+ (void) new DocumentManager(q);
HistoryCompleter::setSettings(PluginManager::settings());
- setWindowTitle(QGuiApplication::applicationDisplayName());
if (HostOsInfo::isLinuxHost())
QApplication::setWindowIcon(Icons::QTCREATORLOGO_BIG.icon());
QString baseName = QApplication::style()->objectName();
@@ -148,12 +245,7 @@ MainWindow::MainWindow()
QApplication::setStyle(new ManhattanStyle(baseName));
- setDockNestingEnabled(true);
-
- setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
- setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea);
-
- m_modeManager = new ModeManager(this, m_modeStack);
+ m_modeManager = new ModeManager(q, m_modeStack);
connect(m_modeStack, &FancyTabWidget::topAreaClicked, this, [](Qt::MouseButton, Qt::KeyboardModifiers modifiers) {
if (modifiers & Qt::ShiftModifier) {
QColor color = QColorDialog::getColor(StyleHelper::requestedBaseColor(), ICore::dialogParent());
@@ -172,28 +264,27 @@ MainWindow::MainWindow()
m_messageManager = new MessageManager;
m_editorManager = new EditorManager(this);
m_externalToolManager = new ExternalToolManager();
- setCentralWidget(m_modeStack);
- m_progressManager->progressView()->setParent(this);
+ m_progressManager->progressView()->setParent(q);
- connect(qApp, &QApplication::focusChanged, this, &MainWindow::updateFocusWidget);
+ connect(qApp, &QApplication::focusChanged, this, &MainWindowPrivate::updateFocusWidget);
// Add small Toolbuttons for toggling the navigation widgets
StatusBarManager::addStatusBarWidget(m_toggleLeftSideBarButton, StatusBarManager::First);
- int childsCount = statusBar()->findChildren<QWidget *>(QString(), Qt::FindDirectChildrenOnly).count();
- statusBar()->insertPermanentWidget(childsCount - 1, m_toggleRightSideBarButton); // before QSizeGrip
+ int childsCount = q->statusBar()->findChildren<QWidget *>(QString(), Qt::FindDirectChildrenOnly).count();
+ q->statusBar()->insertPermanentWidget(childsCount - 1, m_toggleRightSideBarButton); // before QSizeGrip
// setUnifiedTitleAndToolBarOnMac(true);
//if (HostOsInfo::isAnyUnixHost())
//signal(SIGINT, handleSigInt);
- statusBar()->setProperty("p_styled", true);
+ q->statusBar()->setProperty("p_styled", true);
- auto dropSupport = new DropSupport(this, [](QDropEvent *event, DropSupport *) {
+ auto dropSupport = new DropSupport(q, [](QDropEvent *event, DropSupport *) {
return event->source() == nullptr; // only accept drops from the "outside" (e.g. file manager)
});
connect(dropSupport, &DropSupport::filesDropped,
- this, &MainWindow::openDroppedFiles);
+ this, &MainWindowPrivate::openDroppedFiles);
if (HostOsInfo::isLinuxHost()) {
m_trimTimer.setSingleShot(true);
@@ -205,12 +296,25 @@ MainWindow::MainWindow()
}
}
-NavigationWidget *MainWindow::navigationWidget(Side side) const
+MainWindow::MainWindow()
+ : d(new MainWindowPrivate(this))
+{
+ d->init(); // Separation needed for now as the call triggers other MainWindow calls.
+
+ setWindowTitle(QGuiApplication::applicationDisplayName());
+ setDockNestingEnabled(true);
+ setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
+ setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea);
+
+ setCentralWidget(d->m_modeStack);
+}
+
+NavigationWidget *MainWindowPrivate::navigationWidget(Side side) const
{
return side == Side::Left ? m_leftNavigationWidget : m_rightNavigationWidget;
}
-void MainWindow::setSidebarVisible(bool visible, Side side)
+void MainWindowPrivate::setSidebarVisible(bool visible, Side side)
{
if (NavigationWidgetPlaceHolder::current(side))
navigationWidget(side)->setShown(visible);
@@ -218,31 +322,36 @@ void MainWindow::setSidebarVisible(bool visible, Side side)
void MainWindow::setOverrideColor(const QColor &color)
{
- m_overrideColor = color;
+ d->m_overrideColor = color;
}
QStringList MainWindow::additionalAboutInformation() const
{
- return m_aboutInformation;
+ return d->m_aboutInformation;
}
void MainWindow::clearAboutInformation()
{
- m_aboutInformation.clear();
+ d->m_aboutInformation.clear();
}
void MainWindow::appendAboutInformation(const QString &line)
{
- m_aboutInformation.append(line);
+ d->m_aboutInformation.append(line);
}
void MainWindow::addPreCloseListener(const std::function<bool ()> &listener)
{
- m_preCloseListeners.append(listener);
+ d->m_preCloseListeners.append(listener);
}
MainWindow::~MainWindow()
{
+ delete d;
+}
+
+MainWindowPrivate::~MainWindowPrivate()
+{
// explicitly delete window support, because that calls methods from ICore that call methods
// from mainwindow, so mainwindow still needs to be alive
delete m_windowSupport;
@@ -295,7 +404,7 @@ MainWindow::~MainWindow()
void MainWindow::init()
{
- m_progressManager->init(); // needs the status bar manager
+ d->m_progressManager->init(); // needs the status bar manager
MessageManager::init();
OutputPaneManager::create();
}
@@ -304,22 +413,22 @@ void MainWindow::extensionsInitialized()
{
EditorManagerPrivate::extensionsInitialized();
MimeTypeSettings::restoreSettings();
- m_windowSupport = new WindowSupport(this, Context("Core.MainWindow"));
- m_windowSupport->setCloseActionEnabled(false);
+ d->m_windowSupport = new WindowSupport(this, Context("Core.MainWindow"));
+ d->m_windowSupport->setCloseActionEnabled(false);
OutputPaneManager::initialize();
VcsManager::extensionsInitialized();
- m_leftNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());
- m_rightNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());
+ d->m_leftNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());
+ d->m_rightNavigationWidget->setFactories(INavigationWidgetFactory::allNavigationFactories());
ModeManager::extensionsInitialized();
- readSettings();
- updateContext();
+ d->readSettings();
+ d->updateContext();
- emit m_coreImpl->coreAboutToOpen();
+ emit d->m_coreImpl->coreAboutToOpen();
// Delay restoreWindowState, since it is overridden by LayoutRequest event
- QMetaObject::invokeMethod(this, &MainWindow::restoreWindowState, Qt::QueuedConnection);
- QMetaObject::invokeMethod(m_coreImpl, &ICore::coreOpened, Qt::QueuedConnection);
+ QMetaObject::invokeMethod(d, &MainWindowPrivate::restoreWindowState, Qt::QueuedConnection);
+ QMetaObject::invokeMethod(d->m_coreImpl, &ICore::coreOpened, Qt::QueuedConnection);
}
static void setRestart(bool restart)
@@ -335,8 +444,8 @@ void MainWindow::restart()
void MainWindow::restartTrimmer()
{
- if (HostOsInfo::isLinuxHost() && !m_trimTimer.isActive())
- m_trimTimer.start();
+ if (HostOsInfo::isLinuxHost() && !d->m_trimTimer.isActive())
+ d->m_trimTimer.start();
}
void MainWindow::closeEvent(QCloseEvent *event)
@@ -372,7 +481,7 @@ void MainWindow::closeEvent(QCloseEvent *event)
return;
}
- const QList<std::function<bool()>> listeners = m_preCloseListeners;
+ const QList<std::function<bool()>> listeners = d->m_preCloseListeners;
for (const std::function<bool()> &listener : listeners) {
if (!listener()) {
cancelClose();
@@ -380,12 +489,12 @@ void MainWindow::closeEvent(QCloseEvent *event)
}
}
- emit m_coreImpl->coreAboutToClose();
+ emit d->m_coreImpl->coreAboutToClose();
- saveWindowSettings();
+ d->saveWindowSettings();
- m_leftNavigationWidget->closeSubWidgets();
- m_rightNavigationWidget->closeSubWidgets();
+ d->m_leftNavigationWidget->closeSubWidgets();
+ d->m_rightNavigationWidget->closeSubWidgets();
event->accept();
alreadyClosed = true;
@@ -403,34 +512,34 @@ void MainWindow::mousePressEvent(QMouseEvent *event)
AppMainWindow::mousePressEvent(event);
}
-void MainWindow::openDroppedFiles(const QList<DropSupport::FileSpec> &files)
+void MainWindowPrivate::openDroppedFiles(const QList<DropSupport::FileSpec> &files)
{
- raiseWindow();
+ q->raiseWindow();
const FilePaths filePaths = Utils::transform(files, &DropSupport::FileSpec::filePath);
- openFiles(filePaths, ICore::SwitchMode);
+ q->openFiles(filePaths, ICore::SwitchMode);
}
IContext *MainWindow::currentContextObject() const
{
- return m_activeContext.isEmpty() ? nullptr : m_activeContext.first();
+ return d->m_activeContext.isEmpty() ? nullptr : d->m_activeContext.first();
}
QStatusBar *MainWindow::statusBar() const
{
- return m_modeStack->statusBar();
+ return d->m_modeStack->statusBar();
}
InfoBar *MainWindow::infoBar() const
{
- return m_modeStack->infoBar();
+ return d->m_modeStack->infoBar();
}
-void MainWindow::registerDefaultContainers()
+void MainWindowPrivate::registerDefaultContainers()
{
ActionContainer *menubar = ActionManager::createMenuBar(Constants::MENU_BAR);
if (!HostOsInfo::isMacHost()) // System menu bar on Mac
- setMenuBar(menubar->menuBar());
+ q->setMenuBar(menubar->menuBar());
menubar->appendGroup(Constants::G_FILE);
menubar->appendGroup(Constants::G_EDIT);
menubar->appendGroup(Constants::G_VIEW);
@@ -451,7 +560,7 @@ void MainWindow::registerDefaultContainers()
filemenu->appendGroup(Constants::G_FILE_CLOSE);
filemenu->appendGroup(Constants::G_FILE_PRINT);
filemenu->appendGroup(Constants::G_FILE_OTHER);
- connect(filemenu->menu(), &QMenu::aboutToShow, this, &MainWindow::aboutToShowRecentFiles);
+ connect(filemenu->menu(), &QMenu::aboutToShow, this, &MainWindowPrivate::aboutToShowRecentFiles);
// Edit Menu
@@ -515,7 +624,7 @@ static QMenuBar *globalMenuBar()
return ActionManager::actionContainer(Constants::MENU_BAR)->menuBar();
}
-void MainWindow::registerDefaultActions()
+void MainWindowPrivate::registerDefaultActions()
{
ActionContainer *mfile = ActionManager::actionContainer(Constants::M_FILE);
ActionContainer *medit = ActionManager::actionContainer(Constants::M_EDIT);
@@ -541,7 +650,7 @@ void MainWindow::registerDefaultActions()
m_focusToEditor = new QAction(Tr::tr("Return to Editor"), this);
Command *cmd = ActionManager::registerAction(m_focusToEditor, Constants::S_RETURNTOEDITOR);
cmd->setDefaultKeySequence(QKeySequence(Qt::Key_Escape));
- connect(m_focusToEditor, &QAction::triggered, this, &MainWindow::setFocusToEditor);
+ connect(m_focusToEditor, &QAction::triggered, this, &MainWindowPrivate::setFocusToEditor);
// New File Action
QIcon icon = Icon::fromTheme("document-new");
@@ -585,7 +694,7 @@ void MainWindow::registerDefaultActions()
cmd = ActionManager::registerAction(m_openAction, Constants::OPEN);
cmd->setDefaultKeySequence(QKeySequence::Open);
mfile->addAction(cmd, Constants::G_FILE_OPEN);
- connect(m_openAction, &QAction::triggered, this, &MainWindow::openFile);
+ connect(m_openAction, &QAction::triggered, this, &MainWindowPrivate::openFile);
// Open With Action
m_openWithAction = new QAction(Tr::tr("Open File &With..."), this);
@@ -598,7 +707,7 @@ void MainWindow::registerDefaultActions()
m_openFromDeviceAction = new QAction(Tr::tr("Open From Device..."), this);
cmd = ActionManager::registerAction(m_openFromDeviceAction, Constants::OPEN_FROM_DEVICE);
mfile->addAction(cmd, Constants::G_FILE_OPEN);
- connect(m_openFromDeviceAction, &QAction::triggered, this, &MainWindow::openFileFromDevice);
+ connect(m_openFromDeviceAction, &QAction::triggered, this, &MainWindowPrivate::openFileFromDevice);
}
// File->Recent Files Menu
@@ -645,7 +754,7 @@ void MainWindow::registerDefaultActions()
cmd = ActionManager::registerAction(m_exitAction, Constants::EXIT);
cmd->setDefaultKeySequence(QKeySequence(Tr::tr("Ctrl+Q")));
mfile->addAction(cmd, Constants::G_FILE_OTHER);
- connect(m_exitAction, &QAction::triggered, this, &MainWindow::exit);
+ connect(m_exitAction, &QAction::triggered, q, &MainWindow::exit);
// Undo Action
icon = Icon::fromTheme("edit-undo");
@@ -872,7 +981,7 @@ void MainWindow::registerDefaultActions()
cmd = ActionManager::registerAction(tmpaction, Constants::ABOUT_QTCREATOR);
mhelp->addAction(cmd, Constants::G_HELP_ABOUT);
tmpaction->setEnabled(true);
- connect(tmpaction, &QAction::triggered, this, &MainWindow::aboutQtCreator);
+ connect(tmpaction, &QAction::triggered, this, &MainWindowPrivate::aboutQtCreator);
//About Plugins Action
tmpaction = new QAction(Tr::tr("About &Plugins..."), this);
@@ -880,7 +989,7 @@ void MainWindow::registerDefaultActions()
cmd = ActionManager::registerAction(tmpaction, Constants::ABOUT_PLUGINS);
mhelp->addAction(cmd, Constants::G_HELP_ABOUT);
tmpaction->setEnabled(true);
- connect(tmpaction, &QAction::triggered, this, &MainWindow::aboutPlugins);
+ connect(tmpaction, &QAction::triggered, this, &MainWindowPrivate::aboutPlugins);
// About Qt Action
// tmpaction = new QAction(Tr::tr("About &Qt..."), this);
// cmd = ActionManager::registerAction(tmpaction, Constants:: ABOUT_QT);
@@ -894,14 +1003,14 @@ void MainWindow::registerDefaultActions()
cmd = ActionManager::registerAction(tmpaction, Constants::CHANGE_LOG);
mhelp->addAction(cmd, Constants::G_HELP_ABOUT);
tmpaction->setEnabled(true);
- connect(tmpaction, &QAction::triggered, this, &MainWindow::changeLog);
+ connect(tmpaction, &QAction::triggered, this, &MainWindowPrivate::changeLog);
// Contact
tmpaction = new QAction(Tr::tr("Contact..."), this);
cmd = ActionManager::registerAction(tmpaction, "QtCreator.Contact");
mhelp->addAction(cmd, Constants::G_HELP_ABOUT);
tmpaction->setEnabled(true);
- connect(tmpaction, &QAction::triggered, this, &MainWindow::contact);
+ connect(tmpaction, &QAction::triggered, this, &MainWindowPrivate::contact);
// About sep
if (!HostOsInfo::isMacHost()) { // doesn't have the "About" actions in the Help menu
@@ -912,7 +1021,7 @@ void MainWindow::registerDefaultActions()
}
}
-void MainWindow::registerModeSelectorStyleActions()
+void MainWindowPrivate::registerModeSelectorStyleActions()
{
ActionContainer *mview = ActionManager::actionContainer(Constants::M_VIEW);
@@ -948,7 +1057,7 @@ void MainWindow::registerModeSelectorStyleActions()
styleMenu->addActions(stylesGroup->actions());
}
-void MainWindow::openFile()
+void MainWindowPrivate::openFile()
{
openFiles(EditorManager::getOpenFilePaths(), ICore::SwitchMode);
}
@@ -982,6 +1091,13 @@ IDocument *MainWindow::openFiles(const FilePaths &filePaths,
ICore::OpenFilesFlags flags,
const FilePath &workingDirectory)
{
+ return MainWindowPrivate::openFiles(filePaths, flags, workingDirectory);
+}
+
+IDocument *MainWindowPrivate::openFiles(const FilePaths &filePaths,
+ ICore::OpenFilesFlags flags,
+ const FilePath &workingDirectory)
+{
const QList<IDocumentFactory*> documentFactories = IDocumentFactory::allDocumentFactories();
IDocument *res = nullptr;
@@ -1027,7 +1143,7 @@ IDocument *MainWindow::openFiles(const FilePaths &filePaths,
return res;
}
-void MainWindow::setFocusToEditor()
+void MainWindowPrivate::setFocusToEditor()
{
EditorManagerPrivate::doEscapeKeyFocusMoveMagic();
}
@@ -1079,15 +1195,15 @@ void MainWindow::openFileWith()
}
}
-void MainWindow::openFileFromDevice()
+void MainWindowPrivate::openFileFromDevice()
{
openFiles(EditorManager::getOpenFilePaths(QFileDialog::DontUseNativeDialog), ICore::SwitchMode);
}
IContext *MainWindow::contextObject(QWidget *widget) const
{
- const auto it = m_contextWidgets.find(widget);
- return it == m_contextWidgets.end() ? nullptr : it->second;
+ const auto it = d->m_contextWidgets.find(widget);
+ return it == d->m_contextWidgets.end() ? nullptr : it->second;
}
void MainWindow::addContextObject(IContext *context)
@@ -1095,10 +1211,10 @@ void MainWindow::addContextObject(IContext *context)
if (!context)
return;
QWidget *widget = context->widget();
- if (m_contextWidgets.find(widget) != m_contextWidgets.end())
+ if (d->m_contextWidgets.find(widget) != d->m_contextWidgets.end())
return;
- m_contextWidgets.insert({widget, context});
+ d->m_contextWidgets.insert({widget, context});
connect(context, &QObject::destroyed, this, [this, context] { removeContextObject(context); });
}
@@ -1109,20 +1225,20 @@ void MainWindow::removeContextObject(IContext *context)
disconnect(context, &QObject::destroyed, this, nullptr);
- const auto it = std::find_if(m_contextWidgets.cbegin(),
- m_contextWidgets.cend(),
+ const auto it = std::find_if(d->m_contextWidgets.cbegin(),
+ d->m_contextWidgets.cend(),
[context](const std::pair<QWidget *, IContext *> &v) {
return v.second == context;
});
- if (it == m_contextWidgets.cend())
+ if (it == d->m_contextWidgets.cend())
return;
- m_contextWidgets.erase(it);
- if (m_activeContext.removeAll(context) > 0)
- updateContextObject(m_activeContext);
+ d->m_contextWidgets.erase(it);
+ if (d->m_activeContext.removeAll(context) > 0)
+ d->updateContextObject(d->m_activeContext);
}
-void MainWindow::updateFocusWidget(QWidget *old, QWidget *now)
+void MainWindowPrivate::updateFocusWidget(QWidget *old, QWidget *now)
{
Q_UNUSED(old)
@@ -1134,7 +1250,7 @@ void MainWindow::updateFocusWidget(QWidget *old, QWidget *now)
if (QWidget *p = QApplication::focusWidget()) {
IContext *context = nullptr;
while (p) {
- context = contextObject(p);
+ context = q->contextObject(p);
if (context)
newContext.append(context);
p = p->parentWidget();
@@ -1142,11 +1258,11 @@ void MainWindow::updateFocusWidget(QWidget *old, QWidget *now)
}
// ignore toplevels that define no context, like popups without parent
- if (!newContext.isEmpty() || QApplication::focusWidget() == focusWidget())
+ if (!newContext.isEmpty() || QApplication::focusWidget() == q->focusWidget())
updateContextObject(newContext);
}
-void MainWindow::updateContextObject(const QList<IContext *> &context)
+void MainWindowPrivate::updateContextObject(const QList<IContext *> &context)
{
emit m_coreImpl->contextAboutToChange(context);
m_activeContext = context;
@@ -1160,14 +1276,14 @@ void MainWindow::updateContextObject(const QList<IContext *> &context)
void MainWindow::aboutToShutdown()
{
- disconnect(qApp, &QApplication::focusChanged, this, &MainWindow::updateFocusWidget);
- for (auto contextPair : m_contextWidgets)
+ disconnect(qApp, &QApplication::focusChanged, d, &MainWindowPrivate::updateFocusWidget);
+ for (auto contextPair : d->m_contextWidgets)
disconnect(contextPair.second, &QObject::destroyed, this, nullptr);
- m_activeContext.clear();
+ d->m_activeContext.clear();
hide();
}
-void MainWindow::readSettings()
+void MainWindowPrivate::readSettings()
{
QtcSettings *settings = PluginManager::settings();
settings->beginGroup(QLatin1String(settingsGroup));
@@ -1217,7 +1333,7 @@ void MainWindow::saveSettings()
QtcSettings *settings = PluginManager::settings();
settings->beginGroup(QLatin1String(settingsGroup));
- if (!(m_overrideColor.isValid() && StyleHelper::baseColor() == m_overrideColor))
+ if (!(d->m_overrideColor.isValid() && StyleHelper::baseColor() == d->m_overrideColor))
settings->setValueWithDefault(colorKey,
StyleHelper::requestedBaseColor(),
QColor(StyleHelper::DEFAULT_BASE_COLOR));
@@ -1230,8 +1346,8 @@ void MainWindow::saveSettings()
DocumentManager::saveSettings();
ActionManager::saveSettings();
EditorManagerPrivate::saveSettings();
- m_leftNavigationWidget->saveSettings(settings);
- m_rightNavigationWidget->saveSettings(settings);
+ d->m_leftNavigationWidget->saveSettings(settings);
+ d->m_rightNavigationWidget->saveSettings(settings);
// TODO Remove some time after Qt Creator 11
// Work around Qt Creator <= 10 writing the default terminal to the settings.
@@ -1242,7 +1358,7 @@ void MainWindow::saveSettings()
TerminalCommand::setTerminalEmulator(TerminalCommand::terminalEmulator());
}
-void MainWindow::saveWindowSettings()
+void MainWindowPrivate::saveWindowSettings()
{
QtcSettings *settings = PluginManager::settings();
settings->beginGroup(settingsGroup);
@@ -1251,16 +1367,16 @@ void MainWindow::saveWindowSettings()
// To be able to restore the correct non-full screen geometry, we have to put
// the window out of full screen before saving the geometry.
// Works around QTBUG-45241
- if (Utils::HostOsInfo::isMacHost() && isFullScreen())
- setWindowState(windowState() & ~Qt::WindowFullScreen);
- settings->setValue(windowGeometryKey, saveGeometry());
- settings->setValue(windowStateKey, saveState());
+ if (Utils::HostOsInfo::isMacHost() && q->isFullScreen())
+ q->setWindowState(q->windowState() & ~Qt::WindowFullScreen);
+ settings->setValue(windowGeometryKey, q->saveGeometry());
+ settings->setValue(windowStateKey, q->saveState());
settings->setValue(modeSelectorLayoutKey, int(ModeManager::modeStyle()));
settings->endGroup();
}
-void MainWindow::updateModeSelectorStyleMenu()
+void MainWindowPrivate::updateModeSelectorStyleMenu()
{
switch (ModeManager::modeStyle()) {
case ModeManager::Style::IconsAndText:
@@ -1281,27 +1397,27 @@ void MainWindow::updateAdditionalContexts(const Context &remove, const Context &
for (const Id id : remove) {
if (!id.isValid())
continue;
- int index = m_lowPrioAdditionalContexts.indexOf(id);
+ int index = d->m_lowPrioAdditionalContexts.indexOf(id);
if (index != -1)
- m_lowPrioAdditionalContexts.removeAt(index);
- index = m_highPrioAdditionalContexts.indexOf(id);
+ d->m_lowPrioAdditionalContexts.removeAt(index);
+ index = d->m_highPrioAdditionalContexts.indexOf(id);
if (index != -1)
- m_highPrioAdditionalContexts.removeAt(index);
+ d->m_highPrioAdditionalContexts.removeAt(index);
}
for (const Id id : add) {
if (!id.isValid())
continue;
- Context &cref = (priority == ICore::ContextPriority::High ? m_highPrioAdditionalContexts
- : m_lowPrioAdditionalContexts);
+ Context &cref = (priority == ICore::ContextPriority::High ? d->m_highPrioAdditionalContexts
+ : d->m_lowPrioAdditionalContexts);
if (!cref.contains(id))
cref.prepend(id);
}
- updateContext();
+ d->updateContext();
}
-void MainWindow::updateContext()
+void MainWindowPrivate::updateContext()
{
Context contexts = m_highPrioAdditionalContexts;
@@ -1320,7 +1436,7 @@ void MainWindow::updateContext()
emit m_coreImpl->contextChanged(uniquecontexts);
}
-void MainWindow::aboutToShowRecentFiles()
+void MainWindowPrivate::aboutToShowRecentFiles()
{
ActionContainer *aci = ActionManager::actionContainer(Constants::M_FILE_RECENTFILES);
QMenu *menu = aci->menu();
@@ -1350,12 +1466,12 @@ void MainWindow::aboutToShowRecentFiles()
}
}
-void MainWindow::aboutQtCreator()
+void MainWindowPrivate::aboutQtCreator()
{
if (!m_versionDialog) {
- m_versionDialog = new VersionDialog(this);
+ m_versionDialog = new VersionDialog(q);
connect(m_versionDialog, &QDialog::finished,
- this, &MainWindow::destroyVersionDialog);
+ this, &MainWindowPrivate::destroyVersionDialog);
ICore::registerWindow(m_versionDialog, Context("Core.VersionDialog"));
m_versionDialog->show();
} else {
@@ -1363,7 +1479,7 @@ void MainWindow::aboutQtCreator()
}
}
-void MainWindow::destroyVersionDialog()
+void MainWindowPrivate::destroyVersionDialog()
{
if (m_versionDialog) {
m_versionDialog->deleteLater();
@@ -1371,9 +1487,9 @@ void MainWindow::destroyVersionDialog()
}
}
-void MainWindow::aboutPlugins()
+void MainWindowPrivate::aboutPlugins()
{
- PluginDialog dialog(this);
+ PluginDialog dialog(q);
dialog.exec();
}
@@ -1396,7 +1512,7 @@ public:
}
};
-void MainWindow::changeLog()
+void MainWindowPrivate::changeLog()
{
static QPointer<LogDialog> dialog;
if (dialog) {
@@ -1497,7 +1613,7 @@ void MainWindow::changeLog()
dialog->show();
}
-void MainWindow::contact()
+void MainWindowPrivate::contact()
{
QMessageBox dlg(QMessageBox::Information, Tr::tr("Contact"),
Tr::tr("<p>Qt Creator developers can be reached at the Qt Creator mailing list:</p>"
@@ -1520,27 +1636,27 @@ void MainWindow::contact()
.arg("<a href=\"https://pastebin.com\">"
"https://pastebin.com"
"</a>"),
- QMessageBox::Ok, this);
+ QMessageBox::Ok, q);
dlg.exec();
}
QPrinter *MainWindow::printer() const
{
- if (!m_printer)
- m_printer = new QPrinter(QPrinter::HighResolution);
- return m_printer;
+ if (!d->m_printer)
+ d->m_printer = new QPrinter(QPrinter::HighResolution);
+ return d->m_printer;
}
-void MainWindow::restoreWindowState()
+void MainWindowPrivate::restoreWindowState()
{
NANOTRACE_SCOPE("Core", "MainWindow::restoreWindowState");
QtcSettings *settings = PluginManager::settings();
settings->beginGroup(settingsGroup);
- if (!restoreGeometry(settings->value(windowGeometryKey).toByteArray()))
- resize(1260, 700); // size without window decoration
- restoreState(settings->value(windowStateKey).toByteArray());
+ if (!q->restoreGeometry(settings->value(windowGeometryKey).toByteArray()))
+ q->resize(1260, 700); // size without window decoration
+ q->restoreState(settings->value(windowStateKey).toByteArray());
settings->endGroup();
- show();
+ q->show();
StatusBarManager::restoreSettings();
}