forked from qt-creator/qt-creator
QmlDesigner: Improve ownership for ViewManager additionalViews
Change-Id: I0fc72336ea612324ae900cbffae10721ab3863c8 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -58,15 +58,14 @@
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
AssetExporterPlugin::AssetExporterPlugin() :
|
||||
m_view(new AssetExporterView)
|
||||
AssetExporterPlugin::AssetExporterPlugin()
|
||||
{
|
||||
ProjectExplorer::TaskHub::addCategory( Constants::TASK_CATEGORY_ASSET_EXPORT,
|
||||
tr("Asset Export"), false);
|
||||
|
||||
auto *designerPlugin = QmlDesigner::QmlDesignerPlugin::instance();
|
||||
auto &viewManager = designerPlugin->viewManager();
|
||||
viewManager.registerViewTakingOwnership(m_view);
|
||||
m_view = viewManager.registerView(std::make_unique<AssetExporterView>());
|
||||
|
||||
// Add dumper templates for factory instantiation.
|
||||
Component::addNodeDumper<ItemNodeDumper>();
|
||||
|
@@ -72,7 +72,13 @@ public:
|
||||
void resetPropertyEditorView();
|
||||
|
||||
void registerFormEditorToolTakingOwnership(AbstractCustomTool *tool);
|
||||
void registerViewTakingOwnership(AbstractView *view);
|
||||
template<typename View>
|
||||
View *registerView(std::unique_ptr<View> &&view)
|
||||
{
|
||||
auto notOwningPointer = view.get();
|
||||
addView(std::move(view));
|
||||
return notOwningPointer;
|
||||
}
|
||||
|
||||
QList<WidgetInfo> widgetInfos() const;
|
||||
QWidget *widget(const QString & uniqueId) const;
|
||||
@@ -109,6 +115,8 @@ public:
|
||||
private: // functions
|
||||
Q_DISABLE_COPY(ViewManager)
|
||||
|
||||
void addView(std::unique_ptr<AbstractView> &&view);
|
||||
|
||||
void attachNodeInstanceView();
|
||||
void attachItemLibraryView();
|
||||
void attachAdditionalViews();
|
||||
@@ -121,8 +129,8 @@ private: // functions
|
||||
|
||||
void switchStateEditorViewToBaseState();
|
||||
void switchStateEditorViewToSavedState();
|
||||
QList<QPointer<AbstractView>> views() const;
|
||||
const QList<QPointer<AbstractView> > standardViews() const;
|
||||
QList<AbstractView *> views() const;
|
||||
QList<AbstractView *> standardViews() const;
|
||||
|
||||
private: // variables
|
||||
std::unique_ptr<ViewManagerData> d;
|
||||
|
@@ -76,7 +76,7 @@ public:
|
||||
PropertyEditorView propertyEditorView;
|
||||
StatesEditorView statesEditorView;
|
||||
|
||||
QList<QPointer<AbstractView> > additionalViews;
|
||||
std::vector<std::unique_ptr<AbstractView>> additionalViews;
|
||||
bool disableStandardViews = false;
|
||||
};
|
||||
|
||||
@@ -94,12 +94,7 @@ ViewManager::ViewManager()
|
||||
});
|
||||
}
|
||||
|
||||
ViewManager::~ViewManager()
|
||||
{
|
||||
for (const QPointer<AbstractView> &view : qAsConst(d->additionalViews))
|
||||
delete view.data();
|
||||
|
||||
}
|
||||
ViewManager::~ViewManager() = default;
|
||||
|
||||
DesignDocument *ViewManager::currentDesignDocument() const
|
||||
{
|
||||
@@ -169,25 +164,24 @@ void ViewManager::switchStateEditorViewToSavedState()
|
||||
d->statesEditorView.setCurrentState(d->savedState);
|
||||
}
|
||||
|
||||
QList<QPointer<AbstractView> > ViewManager::views() const
|
||||
QList<AbstractView *> ViewManager::views() const
|
||||
{
|
||||
auto list = d->additionalViews;
|
||||
auto list = Utils::transform<QList<AbstractView *>>(d->additionalViews,
|
||||
[](auto &&view) { return view.get(); });
|
||||
list.append(standardViews());
|
||||
return list;
|
||||
}
|
||||
|
||||
const QList<QPointer<AbstractView> > ViewManager::standardViews() const
|
||||
QList<AbstractView *> ViewManager::standardViews() const
|
||||
{
|
||||
QList<QPointer<AbstractView>> list = {
|
||||
&d->edit3DView,
|
||||
&d->formEditorView,
|
||||
&d->textEditorView,
|
||||
&d->itemLibraryView,
|
||||
&d->navigatorView,
|
||||
&d->propertyEditorView,
|
||||
&d->statesEditorView,
|
||||
&d->designerActionManagerView
|
||||
};
|
||||
QList<AbstractView *> list = {&d->edit3DView,
|
||||
&d->formEditorView,
|
||||
&d->textEditorView,
|
||||
&d->itemLibraryView,
|
||||
&d->navigatorView,
|
||||
&d->propertyEditorView,
|
||||
&d->statesEditorView,
|
||||
&d->designerActionManagerView};
|
||||
|
||||
if (QmlDesignerPlugin::instance()->settings().value(
|
||||
DesignerSettingsKey::ENABLE_DEBUGVIEW).toBool())
|
||||
@@ -206,11 +200,6 @@ void ViewManager::registerFormEditorToolTakingOwnership(AbstractCustomTool *tool
|
||||
d->formEditorView.registerTool(tool);
|
||||
}
|
||||
|
||||
void ViewManager::registerViewTakingOwnership(AbstractView *view)
|
||||
{
|
||||
d->additionalViews.append(view);
|
||||
}
|
||||
|
||||
void ViewManager::detachViewsExceptRewriterAndComponetView()
|
||||
{
|
||||
switchStateEditorViewToBaseState();
|
||||
@@ -228,14 +217,14 @@ void ViewManager::attachItemLibraryView()
|
||||
|
||||
void ViewManager::attachAdditionalViews()
|
||||
{
|
||||
foreach (const QPointer<AbstractView> &view, d->additionalViews)
|
||||
currentModel()->attachView(view.data());
|
||||
for (auto &view : d->additionalViews)
|
||||
currentModel()->attachView(view.get());
|
||||
}
|
||||
|
||||
void ViewManager::detachAdditionalViews()
|
||||
{
|
||||
foreach (const QPointer<AbstractView> &view, d->additionalViews)
|
||||
currentModel()->detachView(view.data());
|
||||
for (auto &view : d->additionalViews)
|
||||
currentModel()->detachView(view.get());
|
||||
}
|
||||
|
||||
void ViewManager::detachStandardViews()
|
||||
@@ -337,9 +326,9 @@ QList<WidgetInfo> ViewManager::widgetInfos() const
|
||||
if (d->debugView.hasWidget())
|
||||
widgetInfoList.append(d->debugView.widgetInfo());
|
||||
|
||||
foreach (const QPointer<AbstractView> &abstractView, d->additionalViews) {
|
||||
if (abstractView && abstractView->hasWidget())
|
||||
widgetInfoList.append(abstractView->widgetInfo());
|
||||
for (auto &view : d->additionalViews) {
|
||||
if (view->hasWidget())
|
||||
widgetInfoList.append(view->widgetInfo());
|
||||
}
|
||||
|
||||
Utils::sort(widgetInfoList, [](const WidgetInfo &firstWidgetInfo, const WidgetInfo &secondWidgetInfo) {
|
||||
@@ -457,6 +446,11 @@ AsynchronousImageCache &ViewManager::imageCache()
|
||||
return d->itemLibraryView.imageCache();
|
||||
}
|
||||
|
||||
void ViewManager::addView(std::unique_ptr<AbstractView> &&view)
|
||||
{
|
||||
d->additionalViews.push_back(std::move(view));
|
||||
}
|
||||
|
||||
} // namespace QmlDesigner
|
||||
|
||||
#endif //QMLDESIGNER_TEST
|
||||
|
@@ -249,22 +249,20 @@ bool QmlDesignerPlugin::delayedInitialize()
|
||||
|
||||
d->settings.fromSettings(Core::ICore::settings());
|
||||
|
||||
d->viewManager.registerViewTakingOwnership(new QmlDesigner::Internal::ConnectionView);
|
||||
d->viewManager.registerView(std::make_unique<QmlDesigner::Internal::ConnectionView>());
|
||||
if (DesignerSettings::getValue(DesignerSettingsKey::ENABLE_TIMELINEVIEW).toBool()) {
|
||||
auto timelineView = new QmlDesigner::TimelineView;
|
||||
d->viewManager.registerViewTakingOwnership(timelineView);
|
||||
auto timelineView = d->viewManager.registerView(std::make_unique<QmlDesigner::TimelineView>());
|
||||
timelineView->registerActions();
|
||||
|
||||
auto curveEditorView = new QmlDesigner::CurveEditorView;
|
||||
d->viewManager.registerViewTakingOwnership(curveEditorView);
|
||||
d->viewManager.registerView(std::make_unique<QmlDesigner::CurveEditorView>());
|
||||
|
||||
auto eventlistView = new QmlDesigner::EventListPluginView;
|
||||
d->viewManager.registerViewTakingOwnership(eventlistView);
|
||||
auto eventlistView = d->viewManager.registerView(
|
||||
std::make_unique<QmlDesigner::EventListPluginView>());
|
||||
eventlistView->registerActions();
|
||||
}
|
||||
|
||||
auto transitionEditorView = new QmlDesigner::TransitionEditorView;
|
||||
d->viewManager.registerViewTakingOwnership(transitionEditorView);
|
||||
auto transitionEditorView = d->viewManager.registerView(
|
||||
std::make_unique<QmlDesigner::TransitionEditorView>());
|
||||
transitionEditorView->registerActions();
|
||||
|
||||
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::SourceTool);
|
||||
|
Reference in New Issue
Block a user