QmlDesigner: Fix import list doesn't show all imports issue

Also fix updating the state of 'x' button beside imports correctly.

Task-number: QDS-1592
Change-Id: I15af390effff0bfa71f3b8b1e450e36c9dca00fb
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Mahmoud Badri
2020-04-07 20:48:58 +03:00
parent c0ea5736f3
commit a6af0bb908
7 changed files with 51 additions and 27 deletions

View File

@@ -31,10 +31,8 @@
namespace QmlDesigner { namespace QmlDesigner {
ImportManagerView::ImportManagerView(QObject *parent) : ImportManagerView::ImportManagerView(QObject *parent)
AbstractView(parent), : AbstractView(parent)
m_importsWidget(nullptr)
{ {
} }
@@ -81,25 +79,22 @@ void ImportManagerView::modelAboutToBeDetached(Model *model)
AbstractView::modelAboutToBeDetached(model); AbstractView::modelAboutToBeDetached(model);
} }
void ImportManagerView::nodeCreated(const ModelNode &/*createdNode*/)
{
if (m_importsWidget)
m_importsWidget->setUsedImports(model()->usedImports());
}
void ImportManagerView::nodeAboutToBeRemoved(const ModelNode &/*removedNode*/)
{
if (m_importsWidget)
m_importsWidget->setUsedImports(model()->usedImports());
}
void ImportManagerView::importsChanged(const QList<Import> &/*addedImports*/, const QList<Import> &/*removedImports*/) void ImportManagerView::importsChanged(const QList<Import> &/*addedImports*/, const QList<Import> &/*removedImports*/)
{ {
if (m_importsWidget) { if (m_importsWidget)
m_importsWidget->setImports(model()->imports()); m_importsWidget->setImports(model()->imports());
}
void ImportManagerView::possibleImportsChanged(const QList<Import> &/*possibleImports*/)
{
if (m_importsWidget)
m_importsWidget->setPossibleImports(model()->possibleImports()); m_importsWidget->setPossibleImports(model()->possibleImports());
}
void ImportManagerView::usedImportsChanged(const QList<Import> &/*usedImports*/)
{
if (m_importsWidget)
m_importsWidget->setUsedImports(model()->usedImports()); m_importsWidget->setUsedImports(model()->usedImports());
}
} }
void ImportManagerView::removeImport(const Import &import) void ImportManagerView::removeImport(const Import &import)

View File

@@ -35,6 +35,7 @@ class ImportsWidget;
class ImportManagerView : public AbstractView class ImportManagerView : public AbstractView
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit ImportManagerView(QObject *parent = nullptr); explicit ImportManagerView(QObject *parent = nullptr);
~ImportManagerView() override; ~ImportManagerView() override;
@@ -45,17 +46,16 @@ public:
void modelAttached(Model *model) override; void modelAttached(Model *model) override;
void modelAboutToBeDetached(Model *model) override; void modelAboutToBeDetached(Model *model) override;
void nodeCreated(const ModelNode &createdNode) override;
void nodeAboutToBeRemoved(const ModelNode &removedNode) override;
void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports) override; void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports) override;
void possibleImportsChanged(const QList<Import> &possibleImports) override;
void usedImportsChanged(const QList<Import> &usedImports) override;
private: private:
void removeImport(const Import &import); void removeImport(const Import &import);
void addImport(const Import &import); void addImport(const Import &import);
private: private:
QPointer<ImportsWidget> m_importsWidget; QPointer<ImportsWidget> m_importsWidget = nullptr;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -53,7 +53,7 @@ void ImportsWidget::removeImports()
updateLayout(); updateLayout();
} }
static bool isImportAlreadyUsed(const Import &import, QList<ImportLabel*> importLabels) static bool isImportAlreadyUsed(const Import &import, QList<ImportLabel *> importLabels)
{ {
foreach (ImportLabel *importLabel, importLabels) { foreach (ImportLabel *importLabel, importLabels) {
if (importLabel->import() == import) if (importLabel->import() == import)
@@ -101,12 +101,13 @@ void ImportsWidget::setPossibleImports(QList<Import> possibleImports)
const QStringList mcuWhiteList = {"QtQuick", "QtQuick.Controls"}; const QStringList mcuWhiteList = {"QtQuick", "QtQuick.Controls"};
if (isQtForMCUs) if (isQtForMCUs) {
filteredImports = Utils::filtered(possibleImports, [mcuWhiteList](const Import &import) { filteredImports = Utils::filtered(possibleImports, [mcuWhiteList](const Import &import) {
return mcuWhiteList.contains(import.url()) || !import.url().startsWith("Qt"); return mcuWhiteList.contains(import.url()) || !import.url().startsWith("Qt");
}); });
else } else {
filteredImports = possibleImports; filteredImports = possibleImports;
}
for (const Import &possibleImport : filteredImports) { for (const Import &possibleImport : filteredImports) {
if (!isImportAlreadyUsed(possibleImport, m_importLabels)) if (!isImportAlreadyUsed(possibleImport, m_importLabels))
@@ -123,7 +124,6 @@ void ImportsWidget::setUsedImports(const QList<Import> &usedImports)
{ {
foreach (ImportLabel *importLabel, m_importLabels) foreach (ImportLabel *importLabel, m_importLabels)
importLabel->setReadOnly(usedImports.contains(importLabel->import())); importLabel->setReadOnly(usedImports.contains(importLabel->import()));
} }
void ImportsWidget::removeUsedImports() void ImportsWidget::removeUsedImports()

View File

@@ -229,6 +229,8 @@ public:
virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex); virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex);
virtual void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports); virtual void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports);
virtual void possibleImportsChanged(const QList<Import> &possibleImports);
virtual void usedImportsChanged(const QList<Import> &usedImports);
virtual void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data); virtual void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data);

View File

@@ -345,6 +345,14 @@ void AbstractView::importsChanged(const QList<Import> &/*addedImports*/, const Q
{ {
} }
void AbstractView::possibleImportsChanged(const QList<Import> &/*possibleImports*/)
{
}
void AbstractView::usedImportsChanged(const QList<Import> &/*usedImports*/)
{
}
void AbstractView::auxiliaryDataChanged(const ModelNode &/*node*/, const PropertyName &/*name*/, const QVariant &/*data*/) void AbstractView::auxiliaryDataChanged(const ModelNode &/*node*/, const PropertyName &/*name*/, const QVariant &/*data*/)
{ {
} }

View File

@@ -170,6 +170,22 @@ void ModelPrivate::notifyImportsChanged(const QList<Import> &addedImports, const
resetModelByRewriter(description); resetModelByRewriter(description);
} }
void ModelPrivate::notifyPossibleImportsChanged(const QList<Import> &possibleImports)
{
for (const QPointer<AbstractView> &view : qAsConst(m_viewList)) {
Q_ASSERT(view != nullptr);
view->possibleImportsChanged(possibleImports);
}
}
void ModelPrivate::notifyUsedImportsChanged(const QList<Import> &usedImports)
{
for (const QPointer<AbstractView> &view : qAsConst(m_viewList)) {
Q_ASSERT(view != nullptr);
view->usedImportsChanged(usedImports);
}
}
QUrl ModelPrivate::fileUrl() const QUrl ModelPrivate::fileUrl() const
{ {
return m_fileUrl; return m_fileUrl;
@@ -1879,14 +1895,15 @@ void Model::changeImports(const QList<Import> &importsToBeAdded, const QList<Imp
void Model::setPossibleImports(const QList<Import> &possibleImports) void Model::setPossibleImports(const QList<Import> &possibleImports)
{ {
d->m_possibleImportList = possibleImports; d->m_possibleImportList = possibleImports;
d->notifyPossibleImportsChanged(possibleImports);
} }
void Model::setUsedImports(const QList<Import> &usedImports) void Model::setUsedImports(const QList<Import> &usedImports)
{ {
d->m_usedImportList = usedImports; d->m_usedImportList = usedImports;
d->notifyUsedImportsChanged(usedImports);
} }
static bool compareVersions(const QString &version1, const QString &version2, bool allowHigherVersion) static bool compareVersions(const QString &version1, const QString &version2, bool allowHigherVersion)
{ {
if (version2.isEmpty()) if (version2.isEmpty())

View File

@@ -185,6 +185,8 @@ public:
void removeImport(const Import &import); void removeImport(const Import &import);
void changeImports(const QList<Import> &importsToBeAdded, const QList<Import> &importToBeRemoved); void changeImports(const QList<Import> &importsToBeAdded, const QList<Import> &importToBeRemoved);
void notifyImportsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports); void notifyImportsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports);
void notifyPossibleImportsChanged(const QList<Import> &possibleImports);
void notifyUsedImportsChanged(const QList<Import> &usedImportsChanged);
//node state property manipulation //node state property manipulation