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