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