From 123542a66b3b7c6bef86405915a6366b3b63bbc7 Mon Sep 17 00:00:00 2001 From: Floris Bos Date: Mon, 1 Jun 2020 17:45:41 +0200 Subject: [PATCH] Linux embedded: misc improvements - Allow static build - Use .svg icons - Linux Embedded lacks normal "open file dialog". So simply scan files in root folder of USB stick and return list. - Change QProcess::execute(command) calls to QProcess::execute(command, args) calls to silence Qt 5.15.0 depreciation warning. --- CMakeLists.txt | 9 +++- driveformatthread.cpp | 2 +- icons/ic_build_40px.png | Bin 493 -> 0 bytes icons/ic_build_40px.svg | 6 +++ icons/ic_chevron_left_40px.png | Bin 224 -> 0 bytes icons/ic_chevron_left_40px.svg | 6 +++ icons/ic_chevron_right_40px.png | Bin 225 -> 0 bytes icons/ic_chevron_right_40px.svg | 6 +++ icons/ic_close_18px.png | Bin 202 -> 0 bytes icons/ic_computer_40px.png | Bin 321 -> 0 bytes icons/ic_computer_40px.svg | 6 +++ icons/ic_delete_40px.png | Bin 278 -> 0 bytes icons/ic_delete_40px.svg | 6 +++ icons/ic_sd_storage_40px.png | Bin 372 -> 0 bytes icons/ic_sd_storage_40px.svg | 6 +++ icons/ic_storage_40px.png | Bin 235 -> 0 bytes icons/ic_storage_40px.svg | 6 +++ icons/ic_usb_40px.png | Bin 513 -> 0 bytes icons/ic_usb_40px.svg | 6 +++ icons/rpi2-hires.png | Bin 0 -> 69985 bytes imagewriter.cpp | 91 ++++++++++++++++++++++++++++++-- imagewriter.h | 9 ++++ linux/linuxdrivelist.cpp | 3 +- main.cpp | 10 ++++ main.qml | 65 +++++++++++++++-------- qml.qrc | 18 +++---- 26 files changed, 216 insertions(+), 39 deletions(-) delete mode 100644 icons/ic_build_40px.png create mode 100644 icons/ic_build_40px.svg delete mode 100644 icons/ic_chevron_left_40px.png create mode 100644 icons/ic_chevron_left_40px.svg delete mode 100644 icons/ic_chevron_right_40px.png create mode 100644 icons/ic_chevron_right_40px.svg delete mode 100644 icons/ic_close_18px.png delete mode 100644 icons/ic_computer_40px.png create mode 100644 icons/ic_computer_40px.svg delete mode 100644 icons/ic_delete_40px.png create mode 100644 icons/ic_delete_40px.svg delete mode 100644 icons/ic_sd_storage_40px.png create mode 100644 icons/ic_sd_storage_40px.svg delete mode 100644 icons/ic_storage_40px.png create mode 100644 icons/ic_storage_40px.svg delete mode 100644 icons/ic_usb_40px.png create mode 100644 icons/ic_usb_40px.svg create mode 100644 icons/rpi2-hires.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 399943e..cf2dfd0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -240,5 +240,12 @@ else() install(FILES linux/rpi-imager.desktop DESTINATION share/applications) endif() +get_target_property(QT_TARGET_TYPE Qt5::Core TYPE) +if(${QT_TARGET_TYPE} STREQUAL "STATIC_LIBRARY") + find_package(Qt5QmlImportScanner REQUIRED) + qt5_import_qml_plugins(${PROJECT_NAME}) + qt5_import_plugins(${PROJECT_NAME} INCLUDE Qt5::QSvgPlugin) +endif() + include_directories(${CURL_INCLUDE_DIR} ${LibArchive_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}) -target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Quick Qt5::Svg ${CURL_LIBRARIES} ${LibArchive_LIBRARIES} ${OPENSSL_LIBRARIES} ${ATOMIC_LIBRARY} ${EXTRALIBS}) +target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Quick Qt5::Svg ${CURL_LIBRARIES} ${LibArchive_LIBRARIES} ${OPENSSL_LIBRARIES} ${ATOMIC_LIBRARY} ${EXTRALIBS}) diff --git a/driveformatthread.cpp b/driveformatthread.cpp index 49a220b..c83113a 100644 --- a/driveformatthread.cpp +++ b/driveformatthread.cpp @@ -186,7 +186,7 @@ void DriveFormatThread::run() return; } - proc.execute("partprobe"); + proc.execute("partprobe", QStringList() ); args.clear(); args << fatpartition; diff --git a/icons/ic_build_40px.png b/icons/ic_build_40px.png deleted file mode 100644 index 4790c3684f19bf519d07dbaa59ac80221a9a9449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmV7Vt#NCO8Uzuzuxb92?QPuhjY8Y4zLNl0x9t9`v%s4OJD}5B_jo{ zfWA-U5cninXb%GsFG7jTsN247HRWS_oRS_3yI5+w#{-N1w3Dpya;KFQ@}}86)Zx! z;1sYY1&j?B$&ju%1#C+;N?L++#XU)&nz`fal5JVTG4~tLmaJf3?@E;5xRpjG!a#9k z3%IEOc@JzzAv-!@(3OnzmT4aPoQ(A|$JDTtJo-jv(bNB}$G|?Yr9W@$iw1!#iuDzm zOSExnWR0wm{~5W;Iyqk03I>Th`t8>yF35La;N#tn&7AzyPnq7rg!GOxA%nr?=j1py j=S~SQnz~yD{MGmYUB1xUNpB_400000NkvXXu0mjfbRpN? diff --git a/icons/ic_build_40px.svg b/icons/ic_build_40px.svg new file mode 100644 index 0000000..e414923 --- /dev/null +++ b/icons/ic_build_40px.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/ic_chevron_left_40px.png b/icons/ic_chevron_left_40px.png deleted file mode 100644 index 4d3f16c83f3b06bd96edf44644485820bef890ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEY)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHi2mq!0rS!;$6^pir)-i(^Q{;kVZ|ayA%L7cRY3AW6+aE70;Dc2~4xD?BKO%RMq_?Sw7#+GSA?g z#bd9&)pqx8H!ABRnZ(fO0-G+LFemJ5EY;< + + + + + diff --git a/icons/ic_chevron_right_40px.png b/icons/ic_chevron_right_40px.png deleted file mode 100644 index 2b8b4490595a8214807313317eddfb08948ae056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEY)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHi2mq!5FOX`yx>P$*r OX7F_Nb6Mw<&;$T(tW9 + + + + + diff --git a/icons/ic_close_18px.png b/icons/ic_close_18px.png deleted file mode 100644 index 6825159c250ccd05c01f6daacaf43b2d90d87aea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7l!{JxM1({$v_d#0*}aI zppNSx%;=;sy8q#o^1pwKx_7srr@!*8b>avgFIaE(85j#*>k z9EUYII!A?bG-|lB+AHB9*VnA3mFi`yRj2=Aarc{VE5BjI znacb(!f%*Dud_~EpfnAHt}RdsJF@oW^>yCM{TrrEbbs`ve15{aFU1Mc50*dOcTmED z)n@XX#=^_uK8>~k5?!JP_-5>}UJ`OEtuE5Q=#E#5K>bN(8H?U-mReb1pwAdQUHx3v IIVCg!0O8zti~s-t diff --git a/icons/ic_computer_40px.svg b/icons/ic_computer_40px.svg new file mode 100644 index 0000000..e92b53c --- /dev/null +++ b/icons/ic_computer_40px.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/ic_delete_40px.png b/icons/ic_delete_40px.png deleted file mode 100644 index 699a10e16c21845b16d5ca24b652bdef18eba7b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEY)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHi2mq@b1fT0gBFK%vE+E{-7)hu_Yy8BtF1=FVe)M$x{KY}5OC~*PzjJKIw*=iCcQ4B5cCx5yIC6Rg zGzm>vz@l0)^+8rd`B_B^X)Zs@U3Vq_X>8f)wuss7fV#)eg6~VO?-OXNVaONsO?-Fx RXgtul44$rjF6*2UngFp5WHSH& diff --git a/icons/ic_delete_40px.svg b/icons/ic_delete_40px.svg new file mode 100644 index 0000000..c2bcbf3 --- /dev/null +++ b/icons/ic_delete_40px.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/ic_sd_storage_40px.png b/icons/ic_sd_storage_40px.png deleted file mode 100644 index c0bea0a4d8669e56073aa51ab9fca16d8cc377bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEY)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHi2mq!5$zM#U6E1_nk(PZ!6Kh{JDZ81gka2)N20sbJw+ zpXhp&*GI>qgXQg&h*jnrFI>8Hs#{`jL#tUvqe>fx-Ue=$=jxLu+&o~HHshv&!mq+e zsdcZ9yjHs}@@{A?(Tl4T6xURh}T)k)V56@*13xMIn N;OXk;vd$@?2>_FhiPr!C diff --git a/icons/ic_sd_storage_40px.svg b/icons/ic_sd_storage_40px.svg new file mode 100644 index 0000000..ef75ae8 --- /dev/null +++ b/icons/ic_sd_storage_40px.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/ic_storage_40px.png b/icons/ic_storage_40px.png deleted file mode 100644 index f5ce8d7cd379a966fcfe07f7eb3a870d4e59b503..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEY)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHi2mq!6>xcl)~_p$bnI$B>A_Z>OH-Y%maDb>GPI_OM&d zX(u1$m(IU0WOGRD$!(E5k$Cdy+h@iKO8?VVyb_IQGM?*DciZQH?4BUWjI5GLjeA%0 zcNA`8iYql2?AdES=^9IV!fVS1Ql;T!wCY@@66W`nD X_|~;b-#b_XbOVE@tDnm{r-UW|Q9xAN diff --git a/icons/ic_storage_40px.svg b/icons/ic_storage_40px.svg new file mode 100644 index 0000000..22f5fc3 --- /dev/null +++ b/icons/ic_storage_40px.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/ic_usb_40px.png b/icons/ic_usb_40px.png deleted file mode 100644 index 667e9fdcd4ae93a0375bf3c58d1fa42d58c297a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 513 zcmV+c0{;DpP)-+#QVd*+$`DsB{Ms_7x-ryRwh>e1E0C*4p=h;!W;VKbuo;g_-7|00t2&^i93$T=b2J9)nC8ZW!->>GH znzT=P=TDmABCrX}0d?RIcu2919TKktr&+(m7;vW*ehXMik>aoo1vGy{)_j+{C+*;!4P+wvhFu-4tLcVr)VJ z;6=pPrGy$R0=EG*c%#xRLM49w<$6|DjY)m3T%NuG#f_v?$=X7S00000NkvXXu0mjf DEk4%( diff --git a/icons/ic_usb_40px.svg b/icons/ic_usb_40px.svg new file mode 100644 index 0000000..21567e5 --- /dev/null +++ b/icons/ic_usb_40px.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/icons/rpi2-hires.png b/icons/rpi2-hires.png new file mode 100644 index 0000000000000000000000000000000000000000..e997a615562de3313575c2db9669433760e08173 GIT binary patch literal 69985 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 aJ0v?&VT9Bq7rn5(shgQt8JC=Ni~cY3oiZf= literal 0 HcmV?d00001 diff --git a/imagewriter.cpp b/imagewriter.cpp index 69d955c..e0d6e40 100644 --- a/imagewriter.cpp +++ b/imagewriter.cpp @@ -476,6 +476,7 @@ void ImageWriter::pollNetwork() if (!a.isLoopback() && a.scopeId().isEmpty()) { /* Not a loopback or IPv6 link-local address, so online */ + qDebug() << "IP:" << a; _online = true; break; } @@ -484,14 +485,23 @@ void ImageWriter::pollNetwork() if (_online) { _networkchecktimer.stop(); - qDebug() << "Network online. Synchronizing time."; - QNetworkAccessManager *manager = new QNetworkAccessManager(this); - connect(manager, SIGNAL(finished(QNetworkReply*)), SLOT(onTimeSyncReply(QNetworkReply*))); - manager->head(QNetworkRequest(QUrl(TIME_URL))); + + // Wait another 0.1 sec, as dhcpcd may not have set up nameservers yet + QTimer::singleShot(100, this, SLOT(syncTime())); } #endif } +void ImageWriter::syncTime() +{ +#ifdef Q_OS_LINUX + qDebug() << "Network online. Synchronizing time."; + QNetworkAccessManager *manager = new QNetworkAccessManager(this); + connect(manager, SIGNAL(finished(QNetworkReply*)), SLOT(onTimeSyncReply(QNetworkReply*))); + manager->head(QNetworkRequest(QUrl(TIME_URL))); +#endif +} + void ImageWriter::onTimeSyncReply(QNetworkReply *reply) { #ifdef Q_OS_LINUX @@ -508,7 +518,8 @@ void ImageWriter::onTimeSyncReply(QNetworkReply *reply) } else { - // TODO: try again later? + qDebug() << "Error synchronizing time. Trying again in 3 seconds"; + QTimer::singleShot(3000, this, SLOT(syncTime())); } reply->deleteLater(); @@ -520,6 +531,76 @@ bool ImageWriter::isEmbeddedMode() return _embeddedMode; } +/* Mount any USB sticks that can contain source images under /media */ +bool ImageWriter::mountUsbSourceMedia() +{ + int devices = 0; +#ifdef Q_OS_LINUX + QDir dir("/sys/class/block"); + QStringList list = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + + if (!dir.exists("/media")) + dir.mkdir("/media"); + + for (auto devname : list) + { + if (!devname.startsWith("mmcblk0") && !QFile::symLinkTarget("/sys/class/block/"+devname).contains("/devices/virtual/")) + { + QString mntdir = "/media/"+devname; + + if (dir.exists(mntdir)) + { + devices++; + continue; + } + + dir.mkdir(mntdir); + QStringList args = { "-o", "ro", QString("/dev/")+devname, mntdir }; + + if ( QProcess::execute("mount", args) == 0 ) + devices++; + else + dir.rmdir(mntdir); + } + } +#endif + return devices > 0; +} + +QByteArray ImageWriter::getUsbSourceOSlist() +{ +#ifdef Q_OS_LINUX + QJsonArray oslist; + QDir dir("/media"); + QStringList medialist = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); + QStringList namefilters = {"*.img", "*.zip", "*.gz", "*.xz"}; + + for (auto devname : medialist) + { + QDir subdir("/media/"+devname); + QStringList files = subdir.entryList(namefilters, QDir::Files, QDir::Name); + for (auto file : files) + { + QString path = "/media/"+devname+"/"+file; + QFileInfo fi(path); + + QJsonObject f = { + {"name", file}, + {"description", devname+"/"+file}, + {"url", QUrl::fromLocalFile(path).toString() }, + {"release_date", ""}, + {"image_download_size", fi.size()} + }; + oslist.append(f); + } + } + + return QJsonDocument(oslist).toJson(); +#else + return QByteArray(); +#endif +} + void MountUtilsLog(std::string msg) { qDebug() << "mountutils:" << msg.c_str(); } diff --git a/imagewriter.h b/imagewriter.h index 2d23a30..a6edfa8 100644 --- a/imagewriter.h +++ b/imagewriter.h @@ -75,8 +75,16 @@ public: /* Returns true if online */ Q_INVOKABLE bool isOnline(); + /* Returns true if run on embedded Linux platform */ Q_INVOKABLE bool isEmbeddedMode(); + /* Mount any USB sticks that can contain source images under /media + Returns true if at least one device was mounted */ + Q_INVOKABLE bool mountUsbSourceMedia(); + + /* Returns a json formatted list of the OS images found on USB stick */ + Q_INVOKABLE QByteArray getUsbSourceOSlist(); + signals: /* We are emiting signals with QVariant as parameters because QML likes it that way */ @@ -93,6 +101,7 @@ protected slots: void pollProgress(); void pollNetwork(); + void syncTime(); void onSuccess(); void onError(QString msg); void onFileSelected(QString filename); diff --git a/linux/linuxdrivelist.cpp b/linux/linuxdrivelist.cpp index 77ab43d..c375ac4 100644 --- a/linux/linuxdrivelist.cpp +++ b/linux/linuxdrivelist.cpp @@ -48,7 +48,8 @@ namespace Drivelist std::vector deviceList; QProcess p; - p.start("lsblk --bytes --json --paths --output-all"); + QStringList args = { "--bytes", "--json", "--paths", "--output-all" }; + p.start("lsblk", args); p.waitForFinished(2000); QByteArray output = p.readAll(); diff --git a/main.cpp b/main.cpp index 0e38780..0af33c6 100644 --- a/main.cpp +++ b/main.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #ifndef QT_NO_WIDGETS #include #endif @@ -37,6 +38,15 @@ int main(int argc, char *argv[]) QCoreApplication::setAttribute(Qt::AA_UseOpenGLES); #endif #ifdef QT_NO_WIDGETS + { + QGuiApplication tmp(argc, argv); + int h = QGuiApplication::primaryScreen()->geometry().height(); + if (h > 720) + { + qputenv("QT_SCALE_FACTOR", QByteArray::number(h / 720.0, 'f', 2)); + } + } + QGuiApplication app(argc, argv); #else QApplication app(argc, argv); diff --git a/main.qml b/main.qml index bb4abf5..d49db15 100644 --- a/main.qml +++ b/main.qml @@ -13,12 +13,13 @@ import Qt.labs.settings 1.0 ApplicationWindow { id: window visible: true - width: 680 - height: 420 - minimumWidth: 680 - maximumWidth: 680 - minimumHeight: 420 - maximumHeight: 420 + + width: imageWriter.isEmbeddedMode() ? -1 : 680 + height: imageWriter.isEmbeddedMode() ? -1 : 420 + minimumWidth: imageWriter.isEmbeddedMode() ? -1 : 680 + maximumWidth: imageWriter.isEmbeddedMode() ? -1 : 680 + minimumHeight: imageWriter.isEmbeddedMode() ? -1 : 420 + maximumHeight: imageWriter.isEmbeddedMode() ? -1 : 420 title: qsTr("Raspberry Pi Imager v%1").arg(imageWriter.constantVersion()) @@ -50,13 +51,18 @@ ApplicationWindow { id: bg spacing: 0 - Image { - id: image - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.preferredWidth: window.width - fillMode: Image.PreserveAspectFit - source: "icons/rpi2.png" + Rectangle { + implicitHeight: window.height/2 + + Image { + id: image + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + fillMode: Image.PreserveAspectFit + source: imageWriter.isEmbeddedMode() ? "icons/rpi2-hires.png" : "icons/rpi2.png" + width: window.width + height: window.height/2 + } } Rectangle { @@ -347,7 +353,7 @@ ApplicationWindow { ListElement { url: "internal://format" - icon: "icons/ic_delete_40px.png" + icon: "icons/ic_delete_40px.svg" extract_size: 0 image_download_size: 0 extract_sha256: "" @@ -362,7 +368,7 @@ ApplicationWindow { ListElement { url: "" - icon: "icons/ic_computer_40px.png" + icon: "icons/ic_computer_40px.svg" name: qsTr("Use custom") description: qsTr("Select a custom .img from your computer") } @@ -379,7 +385,7 @@ ApplicationWindow { ListElement { url: "" - icon: "icons/ic_chevron_left_40px.png" + icon: "icons/ic_chevron_left_40px.svg" extract_size: 0 image_download_size: 0 extract_sha256: "" @@ -421,7 +427,7 @@ ApplicationWindow { width: 64 Image { - source: icon == "icons/ic_build_48px.svg" ? "icons/ic_build_40px.png": icon + source: icon == "icons/ic_build_48px.svg" ? "icons/ic_build_40px.svg": icon verticalAlignment: Image.AlignVCenter height: parent.parent.parent.height fillMode: Image.Pad @@ -447,6 +453,8 @@ ApplicationWindow { if (typeof(url) == "string" && url != "" && url != "internal://format") { if (typeof(extract_sha256) != "undefined" && imageWriter.isCached(url,extract_sha256)) { txt += "
"+qsTr("Cached on your computer") + } else if (url.startsWith("file://")) { + txt += "
"+qsTr("Local file") } else { txt += "
"+qsTr("Online - %1 GB download").arg((image_download_size/1073741824).toFixed(1)); } @@ -467,7 +475,7 @@ ApplicationWindow { } Column { Image { - source: "icons/ic_chevron_right_40px.png" + source: "icons/ic_chevron_right_40px.svg" visible: (typeof(subitems) == "object" && subitems.count) || (typeof(subitems_url) == "string" && subitems_url != "" && subitems_url != "internal://back") height: parent.parent.parent.height fillMode: Image.Pad @@ -531,8 +539,22 @@ ApplicationWindow { imageWriter.openFileDialog() } else { - // FIXME: provide QML file dialog - onError("Using custom images is not implemented on this platform yet.") + if (imageWriter.mountUsbSourceMedia()) { + if (subosmodel.count>1) + { + subosmodel.remove(1, subosmodel.count-1) + } + + var oslist = JSON.parse(imageWriter.getUsbSourceOSlist()) + for (var i in oslist) { + subosmodel.append(oslist[i]) + } + osswipeview.setCurrentIndex(1) + } + else + { + onError(qsTr("Connect an USB stick containing images first.
The images must be located in the root folder of the USB stick.")) + } } } else { imageWriter.setSrc(url, image_download_size, extract_size, typeof(extract_sha256) != "undefined" ? extract_sha256 : "", typeof(contains_multiple_files) != "undefined" ? contains_multiple_files : false) @@ -547,7 +569,6 @@ ApplicationWindow { } } - /* Popup for SD card device selection */ @@ -658,7 +679,7 @@ ApplicationWindow { width: 64 Image { - source: isUsb ? "icons/ic_usb_40px.png" : isScsi ? "icons/ic_storage_40px.png" : "icons/ic_sd_storage_40px.png" + source: isUsb ? "icons/ic_usb_40px.svg" : isScsi ? "icons/ic_storage_40px.svg" : "icons/ic_sd_storage_40px.svg" verticalAlignment: Image.AlignVCenter height: parent.parent.parent.height fillMode: Image.Pad diff --git a/qml.qrc b/qml.qrc index 4c80f1a..0648227 100644 --- a/qml.qrc +++ b/qml.qrc @@ -7,14 +7,14 @@ fonts/Roboto-Bold.ttf fonts/Roboto-Light.ttf fonts/Roboto-Regular.ttf - icons/ic_chevron_right_40px.png - icons/ic_chevron_left_40px.png - icons/ic_computer_40px.png - icons/ic_delete_40px.png - icons/ic_usb_40px.png - icons/ic_storage_40px.png - icons/ic_sd_storage_40px.png - icons/ic_build_40px.png - icons/ic_close_18px.png + icons/rpi2-hires.png + icons/ic_build_40px.svg + icons/ic_chevron_left_40px.svg + icons/ic_chevron_right_40px.svg + icons/ic_computer_40px.svg + icons/ic_delete_40px.svg + icons/ic_sd_storage_40px.svg + icons/ic_storage_40px.svg + icons/ic_usb_40px.svg