From af41cca569d22d6f7255408f484637e03ff12a33 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Fri, 5 Mar 2021 19:47:53 +0200 Subject: [PATCH] QmlDesigner: Move new item lib qmls to the share folder ...so that theming and hot reloading can be applied. Theming isn't part of this commit. Also used icon font instead of pngs. Change-Id: I7df149fe9c07fb4c2e3deca6bcf3b0346025e3d6 Reviewed-by: Miikka Heikkinen Reviewed-by: Miina Puuronen Reviewed-by: Thomas Hartmann --- .../itemLibraryQmlSources/AddImport.qml | 4 +- .../itemLibraryQmlSources/LibraryHeader.qml | 47 ++++++++++++------ .../components/itemlibrary/images/add.png | Bin 1033 -> 0 bytes .../components/itemlibrary/images/add@2x.png | Bin 1032 -> 0 bytes .../itemlibrary/images/add_unselected.png | Bin 1025 -> 0 bytes .../itemlibrary/images/add_unselected@2x.png | Bin 1032 -> 0 bytes .../components/itemlibrary/images/down.png | Bin 209 -> 0 bytes .../components/itemlibrary/images/down@2x.png | Bin 283 -> 0 bytes .../itemlibrary/images/tab_icon.png | Bin 233 -> 0 bytes .../itemlibrary/images/tab_icon@2x.png | Bin 339 -> 0 bytes .../components/itemlibrary/itemlibrary.qrc | 10 ---- .../itemlibrary/itemlibrarywidget.cpp | 39 ++++++++------- .../itemlibrary/itemlibrarywidget.h | 14 +++--- 13 files changed, 58 insertions(+), 56 deletions(-) rename src/plugins/qmldesigner/components/itemlibrary/qml/addimport.qml => share/qtcreator/qmldesigner/itemLibraryQmlSources/AddImport.qml (97%) rename src/plugins/qmldesigner/components/itemlibrary/qml/libraryheader.qml => share/qtcreator/qmldesigner/itemLibraryQmlSources/LibraryHeader.qml (74%) delete mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/add.png delete mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/add@2x.png delete mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/add_unselected.png delete mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/add_unselected@2x.png delete mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/down.png delete mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/down@2x.png delete mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/tab_icon.png delete mode 100644 src/plugins/qmldesigner/components/itemlibrary/images/tab_icon@2x.png diff --git a/src/plugins/qmldesigner/components/itemlibrary/qml/addimport.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/AddImport.qml similarity index 97% rename from src/plugins/qmldesigner/components/itemlibrary/qml/addimport.qml rename to share/qtcreator/qmldesigner/itemLibraryQmlSources/AddImport.qml index e73623bd7ee..53712827700 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/qml/addimport.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/AddImport.qml @@ -30,8 +30,6 @@ import QtQuickDesignerTheme 1.0 Column { id: root - signal addImport(int index) - Text { id: header text: qsTr("Select a Module to Add") @@ -78,7 +76,7 @@ Column { id: mouseArea anchors.fill: parent hoverEnabled: true - onClicked: addImport(index) + onClicked: rootView.handleAddImport(index) enabled: !isSeparator } } diff --git a/src/plugins/qmldesigner/components/itemlibrary/qml/libraryheader.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/LibraryHeader.qml similarity index 74% rename from src/plugins/qmldesigner/components/itemlibrary/qml/libraryheader.qml rename to share/qtcreator/qmldesigner/itemLibraryQmlSources/LibraryHeader.qml index 18587c07ff4..12052d2a3cb 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/qml/libraryheader.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/LibraryHeader.qml @@ -26,17 +26,14 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuickDesignerTheme 1.0 +import StudioControls 1.0 as StudioControls +import StudioTheme 1.0 as StudioTheme Item { id: root width: 200 height: 75 - signal tabChanged(int index) - signal filterChanged(string filterText) - signal addModuleClicked() - signal addAssetClicked() - function setTab(index) { tabBar.setCurrentIndex(index); @@ -86,26 +83,30 @@ Item { anchors.bottom: parent.bottom anchors.rightMargin: 2 anchors.bottomMargin: 2 - width: img.width + 10 - height: img.height + 10 + width: 25 + height: 25 color: mouseArea.containsMouse ? "#353535" : "#262626" ToolTip.delay: 500 ToolTip.text: modelData.addToolTip ToolTip.visible: mouseArea.containsMouse - Image { - id: img - source: tabBar.currentIndex === index ? "../images/add.png" - : "../images/add_unselected.png" + Label { // + sign + text: StudioTheme.Constants.plus + font.family: StudioTheme.Constants.iconFont.family + font.pixelSize: StudioTheme.Values.myIconFontSize + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter anchors.centerIn: parent + color: tabBar.currentIndex === index ? "#0094ce" : "#a8a8a8" } MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true - onClicked: index == 0 ? addModuleClicked() : addAssetClicked() + onClicked: index == 0 ? rootView.handleAddModule() + : rootView.handleAddAsset() } } @@ -117,7 +118,7 @@ Item { } } - onClicked: tabChanged(index) + onClicked: rootView.handleTabChanged(index); } } } @@ -138,16 +139,30 @@ Item { anchors.rightMargin: 5 selectByMouse: true - onTextChanged: filterChanged(text) + onTextChanged: rootView.handleSearchfilterChanged(text) - Image { // clear text button - source: "../images/x.png" + Rectangle { // x button + width: 15 + height: 15 anchors.right: parent.right anchors.rightMargin: 5 anchors.verticalCenter: parent.verticalCenter visible: searchFilterText.text !== "" + color: xMouseArea.containsMouse ? "#353535" : "transparent" + + Label { + text: StudioTheme.Constants.closeCross + font.family: StudioTheme.Constants.iconFont.family + font.pixelSize: StudioTheme.Values.myIconFontSize + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + anchors.centerIn: parent + color: "#dadada" + } MouseArea { + id: xMouseArea + hoverEnabled: true anchors.fill: parent onClicked: searchFilterText.text = "" } diff --git a/src/plugins/qmldesigner/components/itemlibrary/images/add.png b/src/plugins/qmldesigner/components/itemlibrary/images/add.png deleted file mode 100644 index 1b9edadee58798488c5c3d80f8695910f8729213..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUiyV_#8_n4Fzj zqL7rDo|$K>^nUk#C56lsTcvPQUjyF)=hTc$kE){7;3~h6MhI|Z8xtBTx$ z+|-gpg^Jvqyke^gTP3i$R(Zu%AYpwa1+bEmY+EIWqau6*6rA&mQWebf40MwX3``Zw zE%gk|OiV2ebQFvXj12S*jr0vHbqx)zOwFxKOcbC%$xgwhC?(A*$i)q6S5Zoutx`rw zNr9EVetCJhUb(Seeo?xGK4GRy>*)Z*l#%z~24 z{5%DaiHS-1r6smXN>F1fatnNY;RfdwLjx)~KUcpZu|VHY&pC^bzP$twI7ffN?_`dYcSkaFa=fF7i>0%Hvw@SLg_D7)shJW~ZweNVL-iWs)T?i& zV51L;S)`bT2?e>hftcV#2}+=L3W$`SnwMg$RHS5Y_b^xe3bKB_-^{CjN1pf-b>h$e|Nlc~^-f}7VBjnX@(cbC1q{Ld6+#RQ3=Wg3xpK8epER||CE_q hz2(*0ou>p77?#Ph-JSUR>t#^p^mO%eS?83{1OSKlQDy)D diff --git a/src/plugins/qmldesigner/components/itemlibrary/images/add@2x.png b/src/plugins/qmldesigner/components/itemlibrary/images/add@2x.png deleted file mode 100644 index ba352300c65a368e5c1dc1f4532083412d549af3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1032 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGBuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFe_(wn^Gtf;oFfdgx zx70HucqbpIn-onpfiKVyje}KTTSPSl>zP+vl9-pA3e%g3&})QOua$FA zYGO%#QAmD%4lMQpGV)9Ei!<^I6pW1Y3>7rOGxJjN%ZoKZVG9m8E0@%w%(B!Jx1#)9 z1#sY4WnyuFfwQBrg@L(&shfcz$nlOQE|$&)&IV3~7ET7Hre;b|y(w5c4%KUjQ?I_A zf{i{XW|3kVCKTl224aE}B`AT~DIijQYF>)1QjwCq-P5;QH!(0Uhz9tCxH7Ez9ev_Y z+{r)5r~k69`K_?^&;S4bUE5;x85kJYOM?7@|APU8lsB^*0|SG*r;B4q#jT_SWd?~A zYa2RSTRGP=xv{Yw3uJZCNJvXaI2Ll?2nYKb9-cKEa>5~u%zh4Qn3}=_N}gooOj_5F gaBQLLGgb}*hIn@o-sPK$IzV~T)78&qol`;+0IX6+n*aa+ diff --git a/src/plugins/qmldesigner/components/itemlibrary/images/add_unselected.png b/src/plugins/qmldesigner/components/itemlibrary/images/add_unselected.png deleted file mode 100644 index 8e237ce4a12b1fcd36124544e5b40de1dc1f1397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUiyV_#8_n4Fzj zqL7rDo|$K>^nUk#C56lsTcvPQUjyF)=hTc$kE){7;3~h6MhI|Z8xtBTx$ z+|-gpg^Jvqyke^gTP3i$R(Zu%AYpwa1+bEmY+EIWqau6*6rA&mQWebf40MwX3``Zw zE%gk|OiV2ebQFvXj12S*jr0vHbqx)zOwFxKOcbC%$xgwhC?(A*$i)q6S5Zoutx`rw zNr9EVetCJhUb(Seeo?xGK4GRy>*)Z*l#%z~24 z{5%DaiHS-1r6smXN>F1fatnNY;RfdwLjx)~KUcpZu|VHY&pC^bzP$twI7ffN?_`dYcSkaFa=fF7i>0%Hvw@SLg_D7)shJW~ZweNVL-iWs)T?i& zV51L;S)`bT2?e>hftcV#2}+=L3W$`SnwMg$RHS5YcdU|aCj$e6M1W6->&A^6H*MOq za^=cn$BwOAw{FFX6~~Vs|NsAgr0bVu3=9k$B|(0{{~>_kUi02a1_lNjPZ!6Kid#tu z?#w&^vwC@b8>Wi-HZ(R)U{F@hV@wlcV{>y;Q*(1;V-riuVQM+6a7|Xi@AwB983q;! Y2CciSUtcY=dkxBzp00i_>zopr0BsFLt^fc4 diff --git a/src/plugins/qmldesigner/components/itemlibrary/images/add_unselected@2x.png b/src/plugins/qmldesigner/components/itemlibrary/images/add_unselected@2x.png deleted file mode 100644 index 8be6882f3d9e551ca2fffb958740af28d0d365fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1032 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGBuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFe_(wn^Gtf;oFfdgx zx70HucqbpIn-onpfiKVyjezP+vl9-pA3e%g3(Cds>ua$FA zYGO%#QAmD%4lMQpGV)9Ei!<^I6pW1Y3>7rOGxJjN%ZoKZVG9m8E0@%w%(B!Jx1#)9 z1#sY4WnyuFfwQBrg@L(&shfcz$nlOQE|$&)&IV3~7ET7Hre;b|y(w5c4%KUjQ?I_A zf{i{XW|3kVCKTl224aE}B`AT~DIijQYF>)1QjwCq-Ql{Htqcqdq5(c3t}9loIDY*2 zi4!MQty*>J)TzyzH~;_t|K7>9HyIch*h_-^g8zd7gOoS38v_G_yQhm|NX4zB1Z4(^ z6>A$hXU^nY&*a9&b}W$9MI#|GA>m-ifg>F3Yj}9paL5UVFf#i&tYK;j6DWC-kuzys hL&C9zuFqIG3>f0wMR-py?f(SIo1U(IF6*2UngDr4OF{qu diff --git a/src/plugins/qmldesigner/components/itemlibrary/images/down.png b/src/plugins/qmldesigner/components/itemlibrary/images/down.png deleted file mode 100644 index d2772546bc88543265a35a4b4f6578330f081347..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0y~yVBle3VBp|jV_;x7`$X;|0|NtRfk$L90|U1Z2s2)~ zTla^7fuY&c#W6%;YVCxBqD=+@F7{yw!o}NJtQoyGGFv-nHS&F!qpP;>sIQ!o#qu|A z{+#iiHRTek!=-L}BjfXP{SPqDIJ?HW>v$fU8~d^kzil=4*d42$TwL~tG!7Acigu%su4`89;&xGr#Wy=X}JERNj1W8&U>B3 zZbD(7(j|<%pV{7M2|2funIXtHk5W;(ZaRt8V&;3(AK^)j%5f>Hk8q{05;$~c zxjbXcBBSje!j3OyohOo_V!rpi&WAM$%AJ#2lApQ%_Db^g$H-6mAUUtAcXwJ{Yhu*HPeEN*fg1J0lQ+HZqn$feBO@FfXt41E&D{C84 zz;rKq64RP93pdyE>w2=vP2p9##B*~OhklHhiONoGc56r1Nv99G9`q_Z^-w|(qq!x zcp_WZ{9*I9_0N~=VPIUho`qq(;!dx_QrapSwie^$ZLQ44$rjF6*2UngCtLf4l$y diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.qrc b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.qrc index 69ef5b2c1f8..197dd87655b 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.qrc +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrary.qrc @@ -29,17 +29,7 @@ images/asset_sound_192.png images/asset_sound_256.png images/asset_sound_384.png - images/tab_icon.png - images/tab_icon@2x.png images/x.png images/x@2x.png - images/add.png - images/add@2x.png - images/add_unselected.png - images/add_unselected@2x.png - images/down.png - images/down@2x.png - qml/libraryheader.qml - qml/addimport.qml diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 7ce542de024..8571f7a7d4b 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -141,27 +141,19 @@ ItemLibraryWidget::ItemLibraryWidget(AsynchronousImageCache &imageCache, // create header widget m_headerWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); - m_headerWidget->setClearColor(Theme::getColor(Theme::Color::QmlDesigner_BackgroundColorDarkAlternate)); Theme::setupTheme(m_headerWidget->engine()); - m_headerWidget->setSource(QUrl("qrc:/ItemLibrary/qml/libraryheader.qml")); - QObject::connect(m_headerWidget->rootObject(), SIGNAL(tabChanged(int)), this, - SLOT(handleTabChanged(int))); - QObject::connect(m_headerWidget->rootObject(), SIGNAL(filterChanged(QString)), this, - SLOT(handleFilterChanged(QString))); - QObject::connect(m_headerWidget->rootObject(), SIGNAL(addModuleClicked()), this, - SLOT(handleAddModule())); - QObject::connect(m_headerWidget->rootObject(), SIGNAL(addAssetClicked()), this, - SLOT(handleAddAsset())); + m_headerWidget->engine()->addImportPath(propertyEditorResourcesPath() + "/imports"); + m_headerWidget->setClearColor(Theme::getColor(Theme::Color::QmlDesigner_BackgroundColorDarkAlternate)); + m_headerWidget->rootContext()->setContextProperty("rootView", QVariant::fromValue(this)); // create add imports widget m_addImportWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); m_addImportWidget->setClearColor(Theme::getColor(Theme::Color::QmlDesigner_BackgroundColorDarkAlternate)); Theme::setupTheme(m_addImportWidget->engine()); - m_addImportWidget->setSource(QUrl("qrc:/ItemLibrary/qml/addimport.qml")); - m_addImportWidget->rootContext()->setContextProperty( - "addImportModel", QVariant::fromValue(m_itemLibraryAddImportModel.data())); - QObject::connect(m_addImportWidget->rootObject(), SIGNAL(addImport(int)), this, - SLOT(handleAddImport(int))); + m_addImportWidget->rootContext()->setContextProperties({ + {"addImportModel", QVariant::fromValue(m_itemLibraryAddImportModel.data())}, + {"rootView", QVariant::fromValue(this)}, + }); // set up Item Library view and model m_itemViewQuickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); @@ -270,7 +262,7 @@ QList ItemLibraryWidget::createToolBarWidgets() return buttons; } -void ItemLibraryWidget::handleFilterChanged(const QString &filterText) +void ItemLibraryWidget::handleSearchfilterChanged(const QString &filterText) { m_filterText = filterText; @@ -339,11 +331,20 @@ void ItemLibraryWidget::clearSearchFilter() void ItemLibraryWidget::reloadQmlSource() { - QString itemLibraryQmlFilePath = qmlSourcesPath() + QStringLiteral("/ItemsView.qml"); + const QString libraryHeaderQmlPath = qmlSourcesPath() + "/LibraryHeader.qml"; + QTC_ASSERT(QFileInfo::exists(libraryHeaderQmlPath), return); + m_headerWidget->engine()->clearComponentCache(); + m_headerWidget->setSource(QUrl::fromLocalFile(libraryHeaderQmlPath)); - QTC_ASSERT(QFileInfo::exists(itemLibraryQmlFilePath), return); + const QString addImportQmlPath = qmlSourcesPath() + "/AddImport.qml"; + QTC_ASSERT(QFileInfo::exists(addImportQmlPath), return); + m_addImportWidget->engine()->clearComponentCache(); + m_addImportWidget->setSource(QUrl::fromLocalFile(addImportQmlPath)); + + const QString itemLibraryQmlPath = qmlSourcesPath() + "/ItemsView.qml"; + QTC_ASSERT(QFileInfo::exists(itemLibraryQmlPath), return); m_itemViewQuickWidget->engine()->clearComponentCache(); - m_itemViewQuickWidget->setSource(QUrl::fromLocalFile(itemLibraryQmlFilePath)); + m_itemViewQuickWidget->setSource(QUrl::fromLocalFile(itemLibraryQmlPath)); } void ItemLibraryWidget::updateModel() diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h index 0b78c485e58..1a34c7e96a1 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h @@ -91,6 +91,11 @@ public: Q_INVOKABLE void startDragAndDrop(const QVariant &itemLibEntry, const QPointF &mousePos); Q_INVOKABLE void removeImport(const QString &importUrl); Q_INVOKABLE void addImportForItem(const QVariant &entry); + Q_INVOKABLE void handleTabChanged(int index); + Q_INVOKABLE void handleAddModule(); + Q_INVOKABLE void handleAddAsset(); + Q_INVOKABLE void handleSearchfilterChanged(const QString &filterText); + Q_INVOKABLE void handleAddImport(int index); signals: void itemActivated(const QString& itemName); @@ -130,13 +135,6 @@ private: bool m_updateRetry = false; QString m_filterText; QPoint m_dragStartPoint; - -private slots: - void handleTabChanged(int index); - void handleFilterChanged(const QString &filterText); - void handleAddModule(); - void handleAddAsset(); - void handleAddImport(int index); }; -} +} // namespace QmlDesigner