Files
qt-creator/src/plugins/qmldesigner/components/integration/componentview.h
Marco Bubke 0be4de69d8 QmlDesigner: Remove parent from abstract view
We apply not very often the parent to views. So it can lead to dangling
pointer if the parent is used by other objects and does not handle the
null pointer case. It can lead to double deletion if the parent is
deleted before the object when it is on the stack or handled by smart
pointer.

If you really want to use it there is still setParent.

Change-Id: I1fc6b145a50f037a0e9d415fb36e7970ea7296ed
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2022-09-22 19:08:12 +00:00

77 lines
2.2 KiB
C++

// 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
#pragma once
#include <abstractview.h>
#include <modelnode.h>
#include <QStringList>
QT_BEGIN_NAMESPACE
class QStandardItemModel;
class QComboBox;
QT_END_NAMESPACE
namespace QmlDesigner {
class ComponentAction;
class ComponentView : public AbstractView
{
Q_OBJECT
public:
enum UserRoles
{
ModelNodeRole = Qt::UserRole
};
ComponentView();
void modelAttached(Model *model) override;
void modelAboutToBeDetached(Model *model) override;
ComponentAction *action();
void nodeCreated(const ModelNode &createdNode) override;
void nodeAboutToBeRemoved(const ModelNode &removedNode) override;
void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent,
const NodeAbstractProperty &oldPropertyParent,
AbstractView::PropertyChangeFlags propertyChange) override;
void nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId) override;
void nodeSourceChanged(const ModelNode &node, const QString &newNodeSource) override;
QStandardItemModel *standardItemModel() const;
ModelNode modelNode(int index) const;
void setComponentNode(const ModelNode &node);
void setComponentToMaster();
signals:
void componentListChanged(const QStringList &componentList);
private: //functions
void updateModel();
void searchForComponentAndAddToList(const ModelNode &node);
void removeFromListRecursive(const ModelNode &node);
void removeNodeFromList(const ModelNode &node);
void addNodeToList(const ModelNode &node);
int indexForNode(const ModelNode &node) const;
int indexOfMaster() const;
bool hasMasterEntry() const;
bool hasEntryForNode(const ModelNode &node) const;
void ensureMasterDocument();
void maybeRemoveMasterDocument();
QString descriptionForNode(const ModelNode &node) const;
void updateDescription(const ModelNode &node);
bool isSubComponentNode(const ModelNode &node) const;
private:
QStandardItemModel *m_standardItemModel;
ComponentAction *m_componentAction;
};
} // namespace QmlDesigner