From b488d975942edabe465564c671bc149cdcce3e46 Mon Sep 17 00:00:00 2001 From: Marco Bubke <marco.bubke@digia.com> Date: Wed, 14 Aug 2013 13:40:49 +0200 Subject: [PATCH] QmlDesigner: Show imports Change-Id: If72caf241fcb3cda69790102e369e0ddac9d8d50 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com> --- .../components/importmanager/importlabel.cpp | 25 +++++++++++++-- .../components/importmanager/importlabel.h | 6 +++- .../importmanager/importswidget.cpp | 31 ++++++++++++++++++- 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/components/importmanager/importlabel.cpp b/src/plugins/qmldesigner/components/importmanager/importlabel.cpp index ec4e547ce0a..54190859000 100644 --- a/src/plugins/qmldesigner/components/importmanager/importlabel.cpp +++ b/src/plugins/qmldesigner/components/importmanager/importlabel.cpp @@ -29,16 +29,37 @@ #include "importlabel.h" +#include <QHBoxLayout> +#include <QPushButton> + namespace QmlDesigner { ImportLabel::ImportLabel(QWidget *parent) : - QLabel(parent) + QWidget(parent) { + QHBoxLayout *layout = new QHBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + + + m_removeButton = new QPushButton("X", this); + m_removeButton->setFlat(true); + m_removeButton->setMaximumWidth(20); + m_removeButton->setMaximumHeight(20); + m_removeButton->setFocusPolicy(Qt::NoFocus); + m_removeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + layout->addWidget(m_removeButton); + + m_importLabel = new QLabel(this); + layout->addWidget(m_importLabel); + + setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); } void ImportLabel::setImport(const Import &import) { - setText(import.toString()); + m_importLabel->setText(import.toString(false)); + if (import.url() == "QtQuick") + m_removeButton->setDisabled(true); } } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/importmanager/importlabel.h b/src/plugins/qmldesigner/components/importmanager/importlabel.h index 5adece6e1ca..b403a7f4a36 100644 --- a/src/plugins/qmldesigner/components/importmanager/importlabel.h +++ b/src/plugins/qmldesigner/components/importmanager/importlabel.h @@ -31,12 +31,13 @@ #define IMPORTLABEL_H #include <QLabel> +#include <QPushButton> #include <import.h> namespace QmlDesigner { -class ImportLabel : public QLabel +class ImportLabel : public QWidget { Q_OBJECT public: @@ -44,6 +45,9 @@ public: void setImport(const Import &import); +private: + QLabel *m_importLabel; + QPushButton *m_removeButton; }; } diff --git a/src/plugins/qmldesigner/components/importmanager/importswidget.cpp b/src/plugins/qmldesigner/components/importmanager/importswidget.cpp index 013a82160a9..bbf2412cb94 100644 --- a/src/plugins/qmldesigner/components/importmanager/importswidget.cpp +++ b/src/plugins/qmldesigner/components/importmanager/importswidget.cpp @@ -38,6 +38,7 @@ namespace QmlDesigner { ImportsWidget::ImportsWidget(QWidget *parent) : QWidget(parent) { + setWindowTitle(tr("Import Manager")); } void ImportsWidget::removeAllImports() @@ -47,12 +48,39 @@ void ImportsWidget::removeAllImports() updateLayout(); } +static bool importLess(const Import &firstImport, const Import &secondImport) +{ + if (firstImport.url() == "QtQuick") + return true; + + if (secondImport.url() == "QtQuick") + return false; + + if (firstImport.isLibraryImport() && secondImport.isFileImport()) + return true; + + if (firstImport.isFileImport() && secondImport.isLibraryImport()) + return false; + + if (firstImport.isFileImport() && secondImport.isFileImport()) + return QString::localeAwareCompare(firstImport.file(), secondImport.file()) < 0; + + if (firstImport.isLibraryImport() && secondImport.isLibraryImport()) + return QString::localeAwareCompare(firstImport.url(), secondImport.url()) < 0; + + return false; +} + void ImportsWidget::setImports(const QList<Import> &imports) { qDeleteAll(m_importLabels); m_importLabels.clear(); - foreach (const Import &import, imports) { + QList<Import> sortedImports = imports; + + qSort(sortedImports.begin(), sortedImports.end(), importLess); + + foreach (const Import &import, sortedImports) { ImportLabel *importLabel = new ImportLabel(this); importLabel->setImport(import); m_importLabels.append(importLabel); @@ -66,6 +94,7 @@ void ImportsWidget::updateLayout() delete layout(); QVBoxLayout *layout = new QVBoxLayout(this); + layout->setSpacing(0); foreach (ImportLabel *importLabel, m_importLabels) layout->addWidget(importLabel); -- GitLab