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:
Marco Bubke
2022-01-04 16:01:24 +01:00
parent 9d8a419d10
commit 5c98d40901
4 changed files with 46 additions and 47 deletions

View File

@@ -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>();

View File

@@ -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;

View File

@@ -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

View File

@@ -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);