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
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
#include "editorwindow.h"
#include "editorarea.h"
#include "editormanager_p.h"
#include <aggregation/aggregate.h>
#include <coreplugin/coreconstants.h>
#include <coreplugin/icontext.h>
#include <coreplugin/icore.h>
#include <coreplugin/locator/locatormanager.h>
#include <coreplugin/minisplitter.h>
#include <utils/qtcassert.h>
#include <QStatusBar>
#include <QVBoxLayout>
const char geometryKey[] = "geometry";
const char splitStateKey[] = "splitstate";
namespace Core {
namespace Internal {
EditorWindow::EditorWindow(QWidget *parent) :
QWidget(parent)
{
m_area = new EditorArea;
auto layout = new QVBoxLayout;
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
setLayout(layout);
layout->addWidget(m_area);
setFocusProxy(m_area);
auto statusBar = new QStatusBar;
layout->addWidget(statusBar);
auto splitter = new NonResizingSplitter(statusBar);
splitter->setChildrenCollapsible(false);
statusBar->addPermanentWidget(splitter, 10);
auto locatorWidget = LocatorManager::createLocatorInputWidget(this);
splitter->addWidget(locatorWidget);
splitter->addWidget(new QWidget);
setAttribute(Qt::WA_DeleteOnClose);
setAttribute(Qt::WA_QuitOnClose, false); // don't prevent Qt Creator from closing
resize(QSize(800, 600));
static int windowId = 0;
ICore::registerWindow(this,
Context(Utils::Id("EditorManager.ExternalWindow.").withSuffix(++windowId),
Constants::C_EDITORMANAGER));
connect(m_area, &EditorArea::windowTitleNeedsUpdate,
this, &EditorWindow::updateWindowTitle);
// editor area can be deleted by editor manager
connect(m_area, &EditorArea::destroyed, this, [this] {
m_area = nullptr;
deleteLater();
});
updateWindowTitle();
}
EditorWindow::~EditorWindow()
{
if (m_area)
disconnect(m_area, nullptr, this, nullptr);
}
EditorArea *EditorWindow::editorArea() const
{
return m_area;
}
QVariantHash EditorWindow::saveState() const
{
QVariantHash state;
state.insert(geometryKey, saveGeometry());
if (QTC_GUARD(m_area)) {
const QByteArray splitState = m_area->saveState();
state.insert(splitStateKey, splitState);
}
return state;
}
void EditorWindow::restoreState(const QVariantHash &state)
{
if (state.contains(geometryKey))
restoreGeometry(state.value(geometryKey).toByteArray());
if (state.contains(splitStateKey) && m_area)
m_area->restoreState(state.value(splitStateKey).toByteArray());
}
void EditorWindow::updateWindowTitle()
{
EditorManagerPrivate::updateWindowTitleForDocument(m_area->currentDocument(), this);
}
} // Internal
} // Core
|