diff --git a/config.h b/config.h index b428783..b4c21f0 100644 --- a/config.h +++ b/config.h @@ -8,7 +8,6 @@ /* Repository URL */ -// #define OSLIST_URL "http://f.maxnet.eu/os_list_imagingutility.json" #define OSLIST_URL "https://downloads.raspberrypi.org/os_list_imagingutility.json" /* Hash algorithm for verifying (uncompressed image) checksum */ diff --git a/icons/Logo Stacked.png b/icons/Logo Stacked.png deleted file mode 100644 index 17fca8c..0000000 Binary files a/icons/Logo Stacked.png and /dev/null differ diff --git a/icons/ic_build_48px.svg b/icons/ic_build_48px.svg deleted file mode 100644 index ac42b58..0000000 --- a/icons/ic_build_48px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/ic_chevron_left_48px.svg b/icons/ic_chevron_left_48px.svg deleted file mode 100644 index 4449fbd..0000000 --- a/icons/ic_chevron_left_48px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/ic_chevron_right_48px.svg b/icons/ic_chevron_right_48px.svg deleted file mode 100644 index ab7c4c5..0000000 --- a/icons/ic_chevron_right_48px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/ic_close_18px.svg b/icons/ic_close_18px.svg deleted file mode 100644 index 6170eec..0000000 --- a/icons/ic_close_18px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/ic_computer_48px.svg b/icons/ic_computer_48px.svg deleted file mode 100644 index 49ac0cb..0000000 --- a/icons/ic_computer_48px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/ic_delete_48px.svg b/icons/ic_delete_48px.svg deleted file mode 100644 index 3051156..0000000 --- a/icons/ic_delete_48px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/ic_sd_storage_48px.svg b/icons/ic_sd_storage_48px.svg deleted file mode 100644 index 17de23a..0000000 --- a/icons/ic_sd_storage_48px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/ic_settings_48px.svg b/icons/ic_settings_48px.svg deleted file mode 100644 index 7a01c33..0000000 --- a/icons/ic_settings_48px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/ic_storage_48px.svg b/icons/ic_storage_48px.svg deleted file mode 100644 index c5f46be..0000000 --- a/icons/ic_storage_48px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/ic_usb_48px.svg b/icons/ic_usb_48px.svg deleted file mode 100644 index 23479df..0000000 --- a/icons/ic_usb_48px.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/icons/imagingutility-old.icns b/icons/imagingutility-old.icns deleted file mode 100644 index 9a4a922..0000000 Binary files a/icons/imagingutility-old.icns and /dev/null differ diff --git a/icons/rpi.png b/icons/rpi.png deleted file mode 100644 index de06b9b..0000000 Binary files a/icons/rpi.png and /dev/null differ diff --git a/main-orig.qml b/main-orig.qml deleted file mode 100644 index e138702..0000000 --- a/main-orig.qml +++ /dev/null @@ -1,726 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright (C) 2020 Raspberry Pi (Trading) Limited - */ - -import QtQuick 2.9 -import QtQuick.Window 2.2 -import QtQuick.Controls 2.2 -import QtQuick.Layouts 1.0 -import QtQuick.Controls.Material 2.2 -import Qt.labs.settings 1.0 - -ApplicationWindow { - id: window - visible: true - width: 680 - height: 420 - /*minimumWidth: width - maximumWidth: width - minimumHeight: height - maximumHeight: height - minimumHeight: gridLayout.height+100*/ - minimumWidth: 680 - maximumWidth: 680 - minimumHeight: 420 - maximumHeight: 420 - - title: qsTr("Raspberry Pi Imaging Utility") - - GridLayout { - id: gridLayout - rowSpacing: 25 - anchors.top: parent.top - anchors.topMargin: 50 - anchors.right: parent.right - anchors.rightMargin: 50 - anchors.left: parent.left - anchors.leftMargin: 50 - rows: 4 - columns: 3 - - Image { - id: image - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.columnSpan: 3 - Layout.preferredHeight: 92 - Layout.preferredWidth: 330 - fillMode: Image.PreserveAspectFit - source: "icons/rpi.png" - } - - ColumnLayout { - id: columnLayout - spacing: 0 - Layout.fillWidth: true - - Text { - id: text1 - color: "#696969" - text: qsTr("Operating System") - Layout.fillWidth: true - Layout.preferredHeight: 17 - Layout.preferredWidth: 132 - font.pixelSize: 12 - } - - Button { - id: osbutton - text: imageWriter.srcFileName() === "" ? qsTr("CHOOSE OS") : imageWriter.srcFileName() - spacing: 0 - padding: 0 - bottomPadding: 0 - topPadding: 0 - Layout.minimumHeight: 40 - Layout.fillWidth: true - Layout.minimumWidth: 0 - onClicked: { - ospopup.open() - // force property bindings to refresh - window.setHeight(window.height) - } - Material.background: "#ffffff" - Material.foreground: "#c51a4a" - } - } - - Item { - id: spacer1 - Layout.preferredHeight: 10 - Layout.preferredWidth: 25 - } - - ColumnLayout { - id: columnLayout2 - spacing: 0 - Layout.fillWidth: true - - Text { - id: text2 - color: "#696969" - text: qsTr("SD Card") - Layout.fillWidth: true - Layout.preferredHeight: 17 - Layout.preferredWidth: 127 - font.pixelSize: 12 - } - - Button { - id: dstbutton - text: qsTr("CHOOSE SD") - Layout.minimumHeight: 40 - Layout.fillWidth: true - onClicked: { - imageWriter.refreshDriveList() - drivePollTimer.start() - dstpopup.open() - } - Material.background: "#ffffff" - Material.foreground: "#c51a4a" - } - } - - - Switch { - Layout.columnSpan: 3 - Layout.alignment: Qt.AlignHCenter - Layout.maximumHeight: 25 - - id: verifySwitch - text: qsTr("Verify written data") - checked: true - onCheckedChanged: { - imageWriter.setVerifyEnabled(verifySwitch.checked) - } - } - - ColumnLayout { - id: columnLayout3 - Layout.columnSpan: 3 - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - - Button { - id: writebutton - text: qsTr("WRITE") - font.pointSize: 11 - Layout.minimumWidth: 100 - Layout.minimumHeight: 50 - topPadding: 12 - enabled: false - Material.foreground: "#ffffff" - Material.background: "#c51a4a" - onClicked: { - if (!imageWriter.readyToWrite()) - return; - visible = false - cancelbutton.enabled = true - cancelbutton.visible = true - progressText.visible = true - progressBar.visible = true - progressBar.indeterminate = true - progressBar.Material.accent = Material.Pink - osbutton.enabled = false - dstbutton.enabled = false - imageWriter.setVerifyEnabled(verifySwitch.checked) - imageWriter.startWrite() - } - } - - Text { - id: progressText - font.pointSize: 10 - color: "grey" - text: qsTr("Writing... %1%").arg("0") - visible: false - } - - ProgressBar { - id: progressBar - Layout.fillWidth: true - visible: false - } - - Button { - id: cancelbutton - text: qsTr("CANCEL") - onClicked: { - enabled = false - imageWriter.cancelWrite() - } - Material.background: "#ffffff" - Material.foreground: "#c51a4a" - Layout.alignment: Qt.AlignRight - visible: false - } - } - } - - /* - Popup for OS selection - */ - Popup { - id: ospopup - x: 50 - y: 25 - width: parent.width-100 - height: parent.height-50 - padding: 25 - focus: true - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside - - ColumnLayout { - spacing: 10 - - Text { - text: qsTr("Operating System") - font.pointSize: 14 - } - Rectangle { - id: hr - implicitWidth: parent.width //540 - implicitHeight: 1 - color: "#1E000000" - } - - Item { - clip: true - width: oslist.width - height: oslist.height - - SwipeView { - id: osswipeview - interactive: false - - ListView { - id: oslist - model: osmodel - delegate: osdelegate - width: window.width-140 //540 - height: window.height-170 //250 - focus: true - boundsBehavior: Flickable.StopAtBounds - ScrollBar.vertical: ScrollBar { - width: 10 - policy: ScrollBar.AlwaysOn - } - } - - ListView { - id: suboslist - model: subosmodel - delegate: osdelegate - width: window.width-140 //540 - height: window.height-170 //250 - boundsBehavior: Flickable.StopAtBounds - ScrollBar.vertical: ScrollBar { - width: 10 - policy: ScrollBar.AlwaysOn - } - } - } - } - } - } - - ListModel { - id: osmodel - - ListElement { - url: "internal://format" - icon: "icons/ic_delete_48px.svg" - extract_size: 0 - image_download_size: 0 - extract_sha256: "" - contains_multiple_files: false - release_date: "" - subitems_url: "" - subitems: [] - name: qsTr("Erase") - description: qsTr("Format card as FAT32") - } - - ListElement { - url: "" - icon: "icons/ic_computer_48px.svg" - name: qsTr("Use custom") - description: qsTr("Select a custom .img from your computer") - } - - Component.onCompleted: { - httpRequest(imageWriter.constantOsListUrl(), function (x) { - var o = JSON.parse(x.responseText) - if (!"os_list" in o) { - onError(qsTr("Error parsing os_list.json")) - return; - } - var oslist = o["os_list"] - for (var i in oslist) { - osmodel.insert(osmodel.count-2, oslist[i]) - } - }) - } - } - - ListModel { - id: subosmodel - - ListElement { - url: "" - icon: "icons/ic_chevron_left_48px.svg" - extract_size: 0 - image_download_size: 0 - extract_sha256: "" - contains_multiple_files: false - release_date: "" - subitems_url: "internal://back" - subitems: [] - name: qsTr("Back") - description: qsTr("Go back to main menu") - } - } - - Component { - id: osdelegate - - Item { - width: window.width-140 //540 - height: image_download_size ? 100 : 60 - - Rectangle { - id: bgrect - anchors.fill: parent - color: "#f5f5f5" - visible: false - } - - Row { - Column { - width: 64 - - Image { - source: icon - verticalAlignment: Image.AlignVCenter - height: parent.parent.parent.height - fillMode: Image.Pad - } - Text { - text: " " - visible: !icon - } - } - Column { - width: parent.parent.width-64-50 - //height: parent.parent.height - - Text { - verticalAlignment: Text.AlignVCenter - height: parent.parent.parent.height - textFormat: Text.StyledText - text: { - var txt = ""+name+"
" - txt += ""+description - if (typeof(release_date) == "string" && release_date) - txt += "
"+qsTr("Released: %1").arg(release_date) - 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 { - txt += "
"+qsTr("Online - %1 GB download").arg((image_download_size/1073741824).toFixed(1)); - } - } - txt += "
"; - - return txt; - } - } - - } - Column { - Image { - source: "icons/ic_chevron_right_48px.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 - } - } - } - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - - onEntered: { - bgrect.visible = true - } - - onExited: { - bgrect.visible = false - } - - onClicked: { - if (typeof(subitems) == "object" && subitems.count) { - if (subosmodel.count>1) - { - subosmodel.remove(1, subosmodel.count-1) - } - for (var i=0; i1) - { - subosmodel.remove(1, subosmodel.count-1) - } - - httpRequest(subitems_url, function (x) { - var o = JSON.parse(x.responseText) - if (!"os_list" in o) { - onError(qsTr("Error parsing os_list.json")) - return; - } - var oslist = o["os_list"] - for (var i in oslist) { - subosmodel.append(oslist[i]) - } - }) - osswipeview.setCurrentIndex(1) - } - } else if (url == "") { - //fileDialog.open() - imageWriter.openFileDialog() - } else { - imageWriter.setSrc(url, image_download_size, extract_size, typeof(extract_sha256) != "undefined" ? extract_sha256 : "", typeof(contains_multiple_files) != "undefined" ? contains_multiple_files : false) - osbutton.text = name - ospopup.close() - if (imageWriter.readyToWrite()) { - writebutton.enabled = true - } - } - } - } - } - } - - - /* - Popup for SD card device selection - */ - Popup { - id: dstpopup - x: 50 - y: 25 - width: parent.width-100 - height: parent.height-50 - padding: 25 - focus: true - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside - - ColumnLayout { - spacing: 10 - - Text { - text: qsTr("SD Card") - font.pointSize: 14 - } - Text { - text: qsTr("Any existing data on the device selected will be DELETED") - font.pointSize: 10 - color: "#c51a4a" - } - Rectangle { - implicitWidth: parent.width //540 - implicitHeight: 1 - color: "#1E000000" - } - - Item { - clip: true - width: dstlist.width - height: dstlist.height - - ListView { - id: dstlist - model: driveListModel - delegate: dstdelegate - width: window.width-140 //540 - height: window.height-170 //250 - focus: true - boundsBehavior: Flickable.StopAtBounds - ScrollBar.vertical: ScrollBar { - width: 10 - } - } - } - } - } - - Component { - id: dstdelegate - - Item { - width: window.width-140 //540 - height: 50 - - Rectangle { - id: dstbgrect - anchors.fill: parent - color: "#f5f5f5" - visible: false - } - - Row { - Column { - width: 64 - - Image { - source: isUsb ? "icons/ic_usb_48px.svg" : isScsi ? "icons/ic_storage_48px.svg" : "icons/ic_sd_storage_48px.svg" - } - } - Column { - width: parent.parent.width-64 - - Text { - textFormat: Text.StyledText - text: { - var txt = ""+description+" - "+Math.floor(size/1000000000)+" GB"+"
" - if (mountpoints.length > 0) { - txt += ""+qsTr("Mounted as %1").arg(mountpoints.join(", "))+"" - } - return txt; - } - } - } - } - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - - onEntered: { - dstbgrect.visible = true - } - - onExited: { - dstbgrect.visible = false - } - - onClicked: { - drivePollTimer.stop() - dstpopup.close() - imageWriter.setDst(device, size) - dstbutton.text = description - if (imageWriter.readyToWrite()) { - writebutton.enabled = true - } - } - } - } - } - - Popup { - id: msgpopup - x: 75 - y: 50 - width: parent.width-150 - height: parent.height-100 - padding: 25 - focus: true - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside - - ColumnLayout { - spacing: 10 - anchors.fill: parent - - Text { - id: msgpopupheader - font.pointSize: 14 - } - - Text { - id: msgpopupbody - font.pointSize: 12 - wrapMode: Text.Wrap - Layout.maximumWidth: msgpopup.width-50 //msgpopup.width-20 - } - - RowLayout { - Layout.alignment: Qt.AlignRight | Qt.AlignBottom - spacing: 20 - - Button { - id: quitbutton - text: qsTr("QUIT APP") - onClicked: Qt.quit() - Material.background: "#ffffff" - Material.foreground: "#c51a4a" - } - - Button { - id: continuebutton - text: qsTr("CONTINUE") - onClicked: msgpopup.close() - Material.background: "#ffffff" - Material.foreground: "#6cc04a" - } - - Text { text: " " } - } - } - } - - /* Persistent settings */ - Settings { - category: "General" - property alias x: window.x - property alias y: window.y - property alias verifyEnabled: verifySwitch.checked - } - - /* Timer for polling drivelist changes */ - Timer { - id: drivePollTimer - repeat: true - onTriggered: imageWriter.refreshDriveList() - } - - /* Utility functions */ - function httpRequest(url, callback) { - var xhr = new XMLHttpRequest(); - xhr.timeout = 5000 - xhr.onreadystatechange = (function(x) { - return function() { - if (x.readyState === x.DONE) - { - if (x.status === 200) - { - callback(x) - } - else - { - onError(qsTr("Error downloading OS list from Internet")) - } - } - } - })(xhr) - xhr.open("GET", url) - xhr.send() - } - - /* Slots for signals imagewrite emits */ - function onDownloadProgress(now,total) { - var newPos - if (total) { - newPos = now/(total+1) - } else { - newPos = 0 - } - if (progressBar.value != newPos) { - progressText.text = qsTr("Writing... %1%").arg(Math.floor(newPos*100)) - progressBar.indeterminate = false - progressBar.value = newPos - } - } - - function onVerifyProgress(now,total) { - var newPos - if (total) { - newPos = now/total - } else { - newPos = 0 - } - - if (progressBar.value != newPos) { - progressText.text = qsTr("Verifying... %1%").arg(Math.floor(newPos*100)) - progressBar.Material.accent = "#6cc04a" - progressBar.value = newPos - } - } - - function resetWriteButton() { - progressText.visible = false - progressBar.visible = false - osbutton.enabled = true - dstbutton.enabled = true - writebutton.visible = true - cancelbutton.visible = false - } - - function onError(msg) { - msgpopupheader.text = qsTr("Error") - msgpopupbody.text = msg - msgpopup.open() - resetWriteButton() - } - - function onSuccess() { - msgpopupheader.text = qsTr("Write Successful") - msgpopupbody.text = osbutton.text+" "+qsTr("has been written to")+" "+dstbutton.text+"\r\n"+qsTr("You can now remove card from reader"); - continuebutton.visible = false - msgpopup.open() - resetWriteButton() - } - - function onFileSelected(file) { - imageWriter.setSrc(file) - osbutton.text = imageWriter.srcFileName() - ospopup.close() - if (imageWriter.readyToWrite()) { - writebutton.enabled = true - } - } - - function onCancelled() { - resetWriteButton() - } -} diff --git a/qml.qrc b/qml.qrc index 8a879a2..63b1315 100644 --- a/qml.qrc +++ b/qml.qrc @@ -2,7 +2,6 @@ main.qml qtquickcontrols2.conf - icons/rpi.png icons/imagingutility.ico icons/rpi2.png fonts/Roboto-Bold.ttf