diff --git a/src/plugins/qmldesigner/components/importmanager/importlabel.cpp b/src/plugins/qmldesigner/components/importmanager/importlabel.cpp index ec4e547ce0a14563aef0ebf23cef2c77773a647d..54190859000c36c8d938a5cb573d85cc6c64d905 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 5adece6e1ca456a8734604a5820dd670b331031c..b403a7f4a363bfe7a8bfc6277008700a1081d7a3 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 013a82160a932025aafc20af65e228360b6be83a..bbf2412cb94b609855de9e05190f072126116255 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);