catching back up
|
@ -8,8 +8,9 @@ build:
|
||||||
cmake:
|
cmake:
|
||||||
source_dir: src/
|
source_dir: src/
|
||||||
# You should also set your Qt6_ROOT here, like so:
|
# You should also set your Qt6_ROOT here, like so:
|
||||||
# extra_variables:
|
extra_variables:
|
||||||
# - Qt6_ROOT=
|
Qt6_ROOT: /home/corey/Qt/6.7.3/gcc_64
|
||||||
|
Qt6_DIR: /home/corey/Qt/6.7.3/gcc_64/lib/cmake/Qt6
|
||||||
environment:
|
environment:
|
||||||
BUILD_TYPE: MinSizeRel
|
BUILD_TYPE: MinSizeRel
|
||||||
|
|
||||||
|
@ -18,7 +19,9 @@ appimage:
|
||||||
plugins:
|
plugins:
|
||||||
- qt
|
- qt
|
||||||
raw_environment:
|
raw_environment:
|
||||||
|
QMAKE: /home/corey/Qt/6.7.3/gcc_64/bin/qmake
|
||||||
QML_SOURCES_PATHS: "\"$PROJECT_ROOT\"/src/qmlcomponents/"
|
QML_SOURCES_PATHS: "\"$PROJECT_ROOT\"/src/qmlcomponents/"
|
||||||
environment:
|
environment:
|
||||||
EXTRA_PLATFORM_PLUGINS: "libqwayland-egl.so;libqwayland-generic.so"
|
EXTRA_PLATFORM_PLUGINS: "libqwayland-egl.so;libqwayland-generic.so"
|
||||||
EXTRA_QT_PLUGINS: "waylandcompositor"
|
EXTRA_QT_PLUGINS: "waylandcompositor"
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,14 @@ Popup {
|
||||||
closePolicy: Popup.CloseOnEscape
|
closePolicy: Popup.CloseOnEscape
|
||||||
modal: true
|
modal: true
|
||||||
|
|
||||||
|
// Define the colors
|
||||||
|
property color beigeColor: "#c4bebb"
|
||||||
|
property color maroonColor: "#800000"
|
||||||
|
property color yellowColor: "#fcad01"
|
||||||
|
property string selectedCFW: "" // This should be set dynamically
|
||||||
|
// Set the color scheme based on the selected CFW
|
||||||
|
property color backgroundColor: selectedCFW.toLowerCase().indexOf("muos") !== -1 ? yellowColor : beigeColor
|
||||||
|
property color accentColor: selectedCFW.toLowerCase().indexOf("muos") !== -1 ? yellowColor : maroonColor
|
||||||
property alias title: msgpopupheader.text
|
property alias title: msgpopupheader.text
|
||||||
property alias text: msgpopupbody.text
|
property alias text: msgpopupbody.text
|
||||||
property bool continueButton: true
|
property bool continueButton: true
|
||||||
|
@ -31,7 +39,7 @@ Popup {
|
||||||
// background of title
|
// background of title
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: msgpopup_title_background
|
id: msgpopup_title_background
|
||||||
color: "#f5f5f5"
|
color: accentColor
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
height: 35
|
height: 35
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
|
|
||||||
/* Repository URL */
|
/* Repository URL */
|
||||||
#define OSLIST_URL "https://downloads.raspberrypi.org/os_list_imagingutility_v4.json"
|
#define OSLIST_URL "https://raw.githubusercontent.com/cmclark00/retro-imager/boogaloo/src/os_list.json"
|
||||||
|
|
||||||
/* Time synchronization URL (only used on eglfs QPA platform, URL must be HTTP) */
|
/* Time synchronization URL (only used on eglfs QPA platform, URL must be HTTP) */
|
||||||
#define TIME_URL "http://downloads.raspberrypi.org/os_list_imagingutility_v4.json?time_synchronization"
|
#define TIME_URL "http://downloads.raspberrypi.org/os_list_imagingutility_v4.json?time_synchronization"
|
||||||
|
|
BIN
src/icons/RG28XX.png
Normal file
After Width: | Height: | Size: 62 KiB |
BIN
src/icons/RG35XX - + (Corner).png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
src/icons/RG35XX - 2024 (Corner).png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
src/icons/RG35XX - 2024.png
Normal file
After Width: | Height: | Size: 83 KiB |
BIN
src/icons/RG35XX - 24 (Corner).png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
src/icons/RG35XX - OG.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
src/icons/RG35XX - PLUS.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
src/icons/RG35XX H.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
src/icons/RG35XX SP.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
src/icons/RG35XX.png
Normal file
After Width: | Height: | Size: 66 KiB |
BIN
src/icons/RG40XX H.png
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
src/icons/RG40XX V.png
Normal file
After Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 11 KiB |
|
@ -184,9 +184,9 @@ int main(int argc, char *argv[])
|
||||||
#else
|
#else
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
#endif
|
#endif
|
||||||
app.setOrganizationName("Raspberry Pi");
|
app.setOrganizationName("mustardOS");
|
||||||
app.setOrganizationDomain("raspberrypi.org");
|
app.setOrganizationDomain("muos.dev");
|
||||||
app.setApplicationName("Imager");
|
app.setApplicationName("Retro Imager");
|
||||||
app.setWindowIcon(QIcon(":/icons/rpi-imager.ico"));
|
app.setWindowIcon(QIcon(":/icons/rpi-imager.ico"));
|
||||||
ImageWriter imageWriter;
|
ImageWriter imageWriter;
|
||||||
NetworkAccessManagerFactory namf;
|
NetworkAccessManagerFactory namf;
|
||||||
|
|
166
src/main.qml
|
@ -11,15 +11,22 @@ import QtQuick.Controls.Material 2.2
|
||||||
import "qmlcomponents"
|
import "qmlcomponents"
|
||||||
|
|
||||||
ApplicationWindow {
|
ApplicationWindow {
|
||||||
|
// Define the colors
|
||||||
|
property color beigeColor: "#c4bebb"
|
||||||
|
property color maroonColor: "#800000"
|
||||||
|
property color yellowColor: "#fcad01"
|
||||||
|
property string selectedCFW: "" // This should be set dynamically
|
||||||
|
property color backgroundColor: beigeColor
|
||||||
|
property color accentColor: maroonColor
|
||||||
id: window
|
id: window
|
||||||
visible: true
|
visible: true
|
||||||
|
|
||||||
width: imageWriter.isEmbeddedMode() ? -1 : 680
|
width: imageWriter.isEmbeddedMode() ? -1 : 680
|
||||||
height: imageWriter.isEmbeddedMode() ? -1 : 450
|
height: imageWriter.isEmbeddedMode() ? -1 : 450
|
||||||
minimumWidth: imageWriter.isEmbeddedMode() ? -1 : 680
|
minimumWidth: imageWriter.isEmbeddedMode() ? -1 : 680
|
||||||
minimumHeight: imageWriter.isEmbeddedMode() ? -1 : 420
|
minimumHeight: imageWriter.isEmbeddedMode() ? -1 : 450
|
||||||
|
|
||||||
title: qsTr("Raspberry Pi Imager v%1").arg(imageWriter.constantVersion())
|
title: qsTr("Retro Imager v%1").arg(imageWriter.constantVersion())
|
||||||
|
|
||||||
FontLoader {id: roboto; source: "fonts/Roboto-Regular.ttf"}
|
FontLoader {id: roboto; source: "fonts/Roboto-Regular.ttf"}
|
||||||
FontLoader {id: robotoLight; source: "fonts/Roboto-Light.ttf"}
|
FontLoader {id: robotoLight; source: "fonts/Roboto-Light.ttf"}
|
||||||
|
@ -56,6 +63,7 @@ ApplicationWindow {
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: logoContainer
|
id: logoContainer
|
||||||
|
color: accentColor
|
||||||
implicitHeight: window.height/4
|
implicitHeight: window.height/4
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
|
@ -66,30 +74,22 @@ ApplicationWindow {
|
||||||
width: window.width * 0.45
|
width: window.width * 0.45
|
||||||
height: window.height / 3
|
height: window.height / 3
|
||||||
|
|
||||||
// Within the image's specified size rectangle, resize the
|
smooth: true
|
||||||
// image to fit within the rectangle while keeping its aspect
|
antialiasing: true
|
||||||
// ratio the same. Preserving the aspect ratio implies some
|
|
||||||
// extra padding between the Image's extend and the actual
|
|
||||||
// image content: align left so all this padding is on the
|
|
||||||
// right.
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
horizontalAlignment: Image.AlignLeft
|
|
||||||
|
|
||||||
// Keep the left side of the image 40 pixels from the left
|
anchors {
|
||||||
// edge
|
left: logoContainer.left
|
||||||
anchors.left: logoContainer.left
|
leftMargin: 40
|
||||||
anchors.leftMargin: 40
|
top: logoContainer.top
|
||||||
|
bottom: logoContainer.bottom
|
||||||
// Equal padding above and below the image
|
topMargin: window.height / 25
|
||||||
anchors.top: logoContainer.top
|
bottomMargin: window.height / 25
|
||||||
anchors.bottom: logoContainer.bottom
|
}
|
||||||
anchors.topMargin: window.height / 25
|
|
||||||
anchors.bottomMargin: window.height / 25
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
color: "#cd2355"
|
color: backgroundColor
|
||||||
implicitWidth: window.width
|
implicitWidth: window.width
|
||||||
implicitHeight: window.height * (1 - 1/4)
|
implicitHeight: window.height * (1 - 1/4)
|
||||||
|
|
||||||
|
@ -115,8 +115,8 @@ ApplicationWindow {
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
id: text0
|
id: text0
|
||||||
color: "#ffffff"
|
color: accentColor
|
||||||
text: qsTr("Raspberry Pi Device")
|
text: qsTr("Retro Gaming Handheld Device")
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: 17
|
Layout.preferredHeight: 17
|
||||||
Layout.preferredWidth: 100
|
Layout.preferredWidth: 100
|
||||||
|
@ -135,12 +135,31 @@ ApplicationWindow {
|
||||||
topPadding: 0
|
topPadding: 0
|
||||||
Layout.minimumHeight: 40
|
Layout.minimumHeight: 40
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
Accessible.ignored: ospopup.visible || dstpopup.visible || hwpopup.visible
|
||||||
|
Accessible.description: qsTr("Select this button to choose your target Retro Gaming Handheld")
|
||||||
|
MouseArea {
|
||||||
|
id: hwbuttonMouseArea
|
||||||
|
anchors.fill: parent
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
hoverEnabled: true
|
||||||
|
onEntered: {
|
||||||
|
bgrect.mouseOver = true
|
||||||
|
}
|
||||||
|
onExited: {
|
||||||
|
bgrect.mouseOver = false
|
||||||
|
}
|
||||||
onClicked: {
|
onClicked: {
|
||||||
hwpopup.open()
|
hwpopup.open()
|
||||||
hwlist.forceActiveFocus()
|
hwlist.forceActiveFocus()
|
||||||
}
|
}
|
||||||
Accessible.ignored: ospopup.visible || dstpopup.visible || hwpopup.visible
|
}
|
||||||
Accessible.description: qsTr("Select this button to choose your target Raspberry Pi")
|
Rectangle {
|
||||||
|
id: bgrect
|
||||||
|
anchors.fill: parent
|
||||||
|
color: accentColor
|
||||||
|
visible: mouseOver
|
||||||
|
property bool mouseOver: false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,8 +172,8 @@ ApplicationWindow {
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
id: text1
|
id: text1
|
||||||
color: "#ffffff"
|
color: accentColor
|
||||||
text: qsTr("Operating System")
|
text: qsTr("Custom Firmware")
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: 17
|
Layout.preferredHeight: 17
|
||||||
font.pixelSize: 12
|
font.pixelSize: 12
|
||||||
|
@ -165,19 +184,40 @@ ApplicationWindow {
|
||||||
|
|
||||||
ImButton {
|
ImButton {
|
||||||
id: osbutton
|
id: osbutton
|
||||||
text: imageWriter.srcFileName() === "" ? qsTr("CHOOSE OS") : imageWriter.srcFileName()
|
text: imageWriter.srcFileName() === "" ? qsTr("CHOOSE CFW") : imageWriter.srcFileName()
|
||||||
spacing: 0
|
spacing: 0
|
||||||
padding: 0
|
padding: 0
|
||||||
bottomPadding: 0
|
bottomPadding: 0
|
||||||
topPadding: 0
|
topPadding: 0
|
||||||
Layout.minimumHeight: 40
|
Layout.minimumHeight: 40
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
Accessible.ignored: ospopup.visible || dstpopup.visible || hwpopup.visible
|
||||||
|
Accessible.description: qsTr("Select this button to change the custom firmware")
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
id: osbuttonMouseArea
|
||||||
|
anchors.fill: parent
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
hoverEnabled: true
|
||||||
|
onEntered: {
|
||||||
|
bgrect1.mouseOver = true
|
||||||
|
}
|
||||||
|
onExited: {
|
||||||
|
bgrect1.mouseOver = false
|
||||||
|
}
|
||||||
onClicked: {
|
onClicked: {
|
||||||
ospopup.open()
|
ospopup.open()
|
||||||
osswipeview.currentItem.forceActiveFocus()
|
osswipeview.currentItem.forceActiveFocus()
|
||||||
}
|
}
|
||||||
Accessible.ignored: ospopup.visible || dstpopup.visible || hwpopup.visible
|
}
|
||||||
Accessible.description: qsTr("Select this button to change the operating system")
|
|
||||||
|
Rectangle {
|
||||||
|
id: bgrect1
|
||||||
|
anchors.fill: parent
|
||||||
|
color: accentColor
|
||||||
|
visible: mouseOver
|
||||||
|
property bool mouseOver: false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,7 +230,7 @@ ApplicationWindow {
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
id: text2
|
id: text2
|
||||||
color: "#ffffff"
|
color: accentColor
|
||||||
text: qsTr("Storage")
|
text: qsTr("Storage")
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: 17
|
Layout.preferredHeight: 17
|
||||||
|
@ -230,7 +270,7 @@ ApplicationWindow {
|
||||||
Text {
|
Text {
|
||||||
id: progressText
|
id: progressText
|
||||||
font.pointSize: 10
|
font.pointSize: 10
|
||||||
color: "white"
|
color: accentColor
|
||||||
font.family: robotoBold.name
|
font.family: robotoBold.name
|
||||||
font.bold: true
|
font.bold: true
|
||||||
visible: false
|
visible: false
|
||||||
|
@ -244,7 +284,7 @@ ApplicationWindow {
|
||||||
id: progressBar
|
id: progressBar
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
visible: false
|
visible: false
|
||||||
Material.background: "#d15d7d"
|
Material.background: accentColor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,7 +352,7 @@ ApplicationWindow {
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
Layout.columnSpan: 3
|
Layout.columnSpan: 3
|
||||||
color: "#ffffff"
|
color: accentColor
|
||||||
font.pixelSize: 18
|
font.pixelSize: 18
|
||||||
font.family: roboto.name
|
font.family: roboto.name
|
||||||
visible: imageWriter.isEmbeddedMode() && imageWriter.customRepo()
|
visible: imageWriter.isEmbeddedMode() && imageWriter.customRepo()
|
||||||
|
@ -322,7 +362,7 @@ ApplicationWindow {
|
||||||
Text {
|
Text {
|
||||||
id: networkInfo
|
id: networkInfo
|
||||||
Layout.columnSpan: 3
|
Layout.columnSpan: 3
|
||||||
color: "#ffffff"
|
color: accentColor
|
||||||
font.pixelSize: 18
|
font.pixelSize: 18
|
||||||
font.family: roboto.name
|
font.family: roboto.name
|
||||||
visible: imageWriter.isEmbeddedMode()
|
visible: imageWriter.isEmbeddedMode()
|
||||||
|
@ -331,7 +371,7 @@ ApplicationWindow {
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
Layout.columnSpan: 3
|
Layout.columnSpan: 3
|
||||||
color: "#ffffff"
|
color: accentColor
|
||||||
font.pixelSize: 18
|
font.pixelSize: 18
|
||||||
font.family: roboto.name
|
font.family: roboto.name
|
||||||
visible: !imageWriter.hasMouse()
|
visible: !imageWriter.hasMouse()
|
||||||
|
@ -346,7 +386,7 @@ ApplicationWindow {
|
||||||
visible: imageWriter.isEmbeddedMode()
|
visible: imageWriter.isEmbeddedMode()
|
||||||
implicitWidth: langbar.width
|
implicitWidth: langbar.width
|
||||||
implicitHeight: langbar.height
|
implicitHeight: langbar.height
|
||||||
color: "#ffffe3"
|
color: backgroundColor
|
||||||
radius: 5
|
radius: 5
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
@ -442,7 +482,7 @@ ApplicationWindow {
|
||||||
// background of title
|
// background of title
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: hwpopup_title_background
|
id: hwpopup_title_background
|
||||||
color: "#f5f5f5"
|
color: backgroundColor
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
height: 35
|
height: 35
|
||||||
|
@ -507,7 +547,6 @@ ApplicationWindow {
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
|
|
||||||
ScrollBar.vertical: ScrollBar {
|
ScrollBar.vertical: ScrollBar {
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
width: 10
|
width: 10
|
||||||
|
@ -542,14 +581,14 @@ ApplicationWindow {
|
||||||
// background of title
|
// background of title
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: ospopup_title_background
|
id: ospopup_title_background
|
||||||
color: "#f5f5f5"
|
color: backgroundColor
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
height: 35
|
height: 35
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
text: qsTr("Operating System")
|
text: qsTr("Custom Firmware")
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.topMargin: 10
|
anchors.topMargin: 10
|
||||||
|
@ -607,7 +646,6 @@ ApplicationWindow {
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
width: ospopup.width
|
width: ospopup.width
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
|
|
||||||
ScrollBar.vertical: ScrollBar {
|
ScrollBar.vertical: ScrollBar {
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
width: 10
|
width: 10
|
||||||
|
@ -659,7 +697,6 @@ ApplicationWindow {
|
||||||
delegate: osdelegate
|
delegate: osdelegate
|
||||||
|
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
|
|
||||||
ScrollBar.vertical: ScrollBar {
|
ScrollBar.vertical: ScrollBar {
|
||||||
width: 10
|
width: 10
|
||||||
policy: parent.contentHeight > parent.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded
|
policy: parent.contentHeight > parent.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded
|
||||||
|
@ -726,7 +763,7 @@ ApplicationWindow {
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: bgrect
|
id: bgrect
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color: "#f5f5f5"
|
color: accentColor
|
||||||
visible: mouseOver && parent.ListView.view.currentIndex !== index
|
visible: mouseOver && parent.ListView.view.currentIndex !== index
|
||||||
property bool mouseOver: false
|
property bool mouseOver: false
|
||||||
}
|
}
|
||||||
|
@ -734,7 +771,7 @@ ApplicationWindow {
|
||||||
id: borderrect
|
id: borderrect
|
||||||
implicitHeight: 1
|
implicitHeight: 1
|
||||||
implicitWidth: parent.width
|
implicitWidth: parent.width
|
||||||
color: "#dcdcdc"
|
color: accentColor
|
||||||
y: parent.height
|
y: parent.height
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -771,16 +808,8 @@ ApplicationWindow {
|
||||||
Text {
|
Text {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
font.family: roboto.name
|
font.family: roboto.name
|
||||||
text: description
|
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
color: "#1a1a1a"
|
color: accentColor
|
||||||
}
|
|
||||||
|
|
||||||
ToolTip {
|
|
||||||
visible: hwMouseArea.containsMouse && typeof(tooltip) == "string" && tooltip != ""
|
|
||||||
delay: 1000
|
|
||||||
text: typeof(tooltip) == "string" ? tooltip : ""
|
|
||||||
clip: false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -792,7 +821,7 @@ ApplicationWindow {
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
width: window.width-100
|
width: window.width-100
|
||||||
height: contentLayout.implicitHeight + 24
|
height: Math.max(contentLayout.implicitHeight + 24, 50)
|
||||||
Accessible.name: name+".\n"+description
|
Accessible.name: name+".\n"+description
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
|
@ -803,10 +832,14 @@ ApplicationWindow {
|
||||||
|
|
||||||
onEntered: {
|
onEntered: {
|
||||||
bgrect.mouseOver = true
|
bgrect.mouseOver = true
|
||||||
|
mouseText.color = backgroundColor
|
||||||
|
mouseText2.color = backgroundColor
|
||||||
}
|
}
|
||||||
|
|
||||||
onExited: {
|
onExited: {
|
||||||
bgrect.mouseOver = false
|
bgrect.mouseOver = false
|
||||||
|
mouseText.color = accentColor
|
||||||
|
mouseText2.color = accentColor
|
||||||
}
|
}
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
@ -817,7 +850,7 @@ ApplicationWindow {
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: bgrect
|
id: bgrect
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
color: "#f5f5f5"
|
color: backgroundColor
|
||||||
visible: mouseOver && parent.ListView.view.currentIndex !== index
|
visible: mouseOver && parent.ListView.view.currentIndex !== index
|
||||||
property bool mouseOver: false
|
property bool mouseOver: false
|
||||||
}
|
}
|
||||||
|
@ -825,7 +858,7 @@ ApplicationWindow {
|
||||||
id: borderrect
|
id: borderrect
|
||||||
implicitHeight: 1
|
implicitHeight: 1
|
||||||
implicitWidth: parent.width
|
implicitWidth: parent.width
|
||||||
color: "#dcdcdc"
|
color: accentColor
|
||||||
y: parent.height
|
y: parent.height
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -884,17 +917,19 @@ ApplicationWindow {
|
||||||
}
|
}
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
|
id:mouseText
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
color: "#646464"
|
color: accentColor
|
||||||
font.weight: Font.Light
|
font.weight: Font.Light
|
||||||
visible: typeof(release_date) == "string" && release_date
|
visible: typeof(release_date) == "string" && release_date
|
||||||
text: qsTr("Released: %1").arg(release_date)
|
text: qsTr("Released: %1").arg(release_date)
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
|
id:mouseText2
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
color: "#646464"
|
color: accentColor
|
||||||
font.weight: Font.Light
|
font.weight: Font.Light
|
||||||
visible: typeof(url) == "string" && url != "" && url != "internal://format"
|
visible: typeof(url) == "string" && url != "" && url != "internal://format"
|
||||||
text: !url ? "" :
|
text: !url ? "" :
|
||||||
|
@ -939,7 +974,7 @@ ApplicationWindow {
|
||||||
// background of title
|
// background of title
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: dstpopup_title_background
|
id: dstpopup_title_background
|
||||||
color: "#f5f5f5"
|
color: backgroundColor
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
height: 35
|
height: 35
|
||||||
|
@ -993,7 +1028,6 @@ ApplicationWindow {
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
|
|
||||||
clip: true
|
clip: true
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
|
@ -1051,7 +1085,7 @@ ApplicationWindow {
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
height: 60
|
height: 60
|
||||||
|
|
||||||
color: mouseOver ? "#f5f5f5" : "#ffffff"
|
color: mouseOver ? accentColor : "#ffffff"
|
||||||
property bool mouseOver: false
|
property bool mouseOver: false
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
@ -1150,7 +1184,7 @@ ApplicationWindow {
|
||||||
yesButton: true
|
yesButton: true
|
||||||
noButton: true
|
noButton: true
|
||||||
title: qsTr("Are you sure you want to quit?")
|
title: qsTr("Are you sure you want to quit?")
|
||||||
text: qsTr("Raspberry Pi Imager is still busy.<br>Are you sure you want to quit?")
|
text: qsTr("Retro-Imager is still busy.<br>Are you sure you want to quit?")
|
||||||
onYes: {
|
onYes: {
|
||||||
Qt.quit()
|
Qt.quit()
|
||||||
}
|
}
|
||||||
|
@ -1174,7 +1208,7 @@ ApplicationWindow {
|
||||||
progressText.visible = true
|
progressText.visible = true
|
||||||
progressBar.visible = true
|
progressBar.visible = true
|
||||||
progressBar.indeterminate = true
|
progressBar.indeterminate = true
|
||||||
progressBar.Material.accent = "#ffffff"
|
progressBar.Material.accent = accentColor
|
||||||
osbutton.enabled = false
|
osbutton.enabled = false
|
||||||
dstbutton.enabled = false
|
dstbutton.enabled = false
|
||||||
hwbutton.enabled = false
|
hwbutton.enabled = false
|
||||||
|
@ -1277,7 +1311,7 @@ ApplicationWindow {
|
||||||
return
|
return
|
||||||
|
|
||||||
progressText.text = qsTr("Verifying... %1%").arg(Math.floor(newPos*100))
|
progressText.text = qsTr("Verifying... %1%").arg(Math.floor(newPos*100))
|
||||||
progressBar.Material.accent = "#6cc04a"
|
progressBar.Material.accent = accentColor
|
||||||
progressBar.value = newPos
|
progressBar.value = newPos
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1652,7 +1686,7 @@ ApplicationWindow {
|
||||||
oslist.currentIndex = -1
|
oslist.currentIndex = -1
|
||||||
osswipeview.currentIndex = 0
|
osswipeview.currentIndex = 0
|
||||||
imageWriter.setSrc("")
|
imageWriter.setSrc("")
|
||||||
osbutton.text = qsTr("CHOOSE OS")
|
osbutton.text = qsTr("CHOOSE CFW")
|
||||||
writebutton.enabled = false
|
writebutton.enabled = false
|
||||||
|
|
||||||
hwbutton.text = hwmodel.name
|
hwbutton.text = hwmodel.name
|
||||||
|
|
68
src/os_list.json
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"os_list": [
|
||||||
|
{
|
||||||
|
"name": "muOS 2405.1 Refried Beans for RG35XX Plus/H/SP/2024",
|
||||||
|
"description": "muOS 2405.1 Refried Beans firmware optimized for Anbernic RG35XX Plus/H/SP/2024.",
|
||||||
|
"icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
|
||||||
|
"url": "https://dl.muos.dev/RG35XX-SPLUSH24/muOS-RG35XX-2405.1-REFRIED.zip",
|
||||||
|
"release_date": "2024-06-23",
|
||||||
|
"image_download_size": 1900000000,
|
||||||
|
"extract_size": 4294967296,
|
||||||
|
"extract_sha256": "60b556c123825c586b02da6e257d6e385a70ef64a7c542f4287c373f8b853405",
|
||||||
|
"devices": [
|
||||||
|
"rg35xxh",
|
||||||
|
"rg35xx_plus",
|
||||||
|
"rg35xx_sp",
|
||||||
|
"rg35xx_2024"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "muOS 2405.1 Refried Beans for RG28XX",
|
||||||
|
"description": "muOS 2405.1 Refried Beans firmware optimized for Anbernic RG35XXH.",
|
||||||
|
"icon": "https://muos.dev/lib/tpl/muos/images/logo.png",
|
||||||
|
"url": "https://dl.muos.dev/RG28XX/muOS-RG28XX-2405.1-REFRIED.zip",
|
||||||
|
"release_date": "2024-06-23",
|
||||||
|
"image_download_size": 1900000000,
|
||||||
|
"extract_size": 4626317312,
|
||||||
|
"extract_sha256": "4d538985e82eef5aa98b438f88276bb69c015533b0ee537ddac3d8642d2f8e94",
|
||||||
|
"devices": [
|
||||||
|
"rg28xx"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"imager": {
|
||||||
|
"devices": [
|
||||||
|
{
|
||||||
|
"name": "Anbernic RG40XXH",
|
||||||
|
"tags": ["rg40xxh"],
|
||||||
|
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG40XX%20H.png?raw=true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Anbernic RG35XXH",
|
||||||
|
"tags": ["rg35xxh"],
|
||||||
|
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20H.png?raw=true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Anbernic RG35XX Plus",
|
||||||
|
"tags": ["rg35xx_plus"],
|
||||||
|
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20-%20PLUS.png?raw=true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Anbernic RG35XX SP",
|
||||||
|
"tags": ["rg35xx_sp"],
|
||||||
|
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20SP.png?raw=true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Anbernic RG35XX 2024",
|
||||||
|
"tags": ["rg35xx_2024"],
|
||||||
|
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG35XX%20-%202024.png?raw=true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Anbernic RG28XX",
|
||||||
|
"tags": ["rg28xx"],
|
||||||
|
"icon": "https://github.com/cmclark00/retro-imager/blob/boogaloo/src/icons/RG28XX.png?raw=true"
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|