diff --git a/qml/ConfigPageKits.qml b/qml/ConfigPageKits.qml
index ffa719b6..e860b46a 100644
--- a/qml/ConfigPageKits.qml
+++ b/qml/ConfigPageKits.qml
@@ -79,32 +79,23 @@ ColumnLayout {
elide: Text.ElideMiddle
}
- ColumnLayout {
+ FileSelect {
+ id: flashEdit
Layout.fillWidth: true
-
- FileSelect {
- id: flashEdit
- Layout.fillWidth: true
- filePath: kitList.currentItem.myData.flash
- onFilePathChanged: {
- if(filePath !== kitList.currentItem.myData.flash)
- kitModel.setDataRow(kitList.currentIndex, filePath, KitModel.FlashRole);
- filePath = Qt.binding(function() { return kitList.currentItem.myData.flash; });
- }
- }
-
- FlashDialog {
- id: flashDialog
- onFlashCreated: {
+ filePath: kitList.currentItem.myData.flash
+ onFilePathChanged: {
+ if(filePath !== kitList.currentItem.myData.flash)
kitModel.setDataRow(kitList.currentIndex, filePath, KitModel.FlashRole);
- }
+ filePath = Qt.binding(function() { return kitList.currentItem.myData.flash; });
}
+ showCreateButton: true
+ onCreate: flashDialog.visible = true
+ }
- Button {
- id: createButton
- Layout.alignment: Qt.AlignRight
- text: qsTr("New")
- onClicked: flashDialog.visible = true
+ FlashDialog {
+ id: flashDialog
+ onFlashCreated: {
+ kitModel.setDataRow(kitList.currentIndex, filePath, KitModel.FlashRole);
}
}
diff --git a/qml/Firebird/UIComponents/FileSelect.qml b/qml/Firebird/UIComponents/FileSelect.qml
index 6dedaaa2..9a503ecc 100644
--- a/qml/Firebird/UIComponents/FileSelect.qml
+++ b/qml/Firebird/UIComponents/FileSelect.qml
@@ -5,9 +5,10 @@ import QtQuick.Layouts 1.0
import Firebird.Emu 1.0
RowLayout {
- id: root
property string filePath: ""
property bool selectExisting: true
+ property bool showCreateButton: false
+ signal create()
Loader {
id: dialogLoader
@@ -15,7 +16,7 @@ RowLayout {
sourceComponent: FileDialog {
folder: filePath ? Emu.dir(filePath) : Global.lastFileDialogDir
// If save dialogs are not supported, force an open dialog
- selectExisting: root.selectExisting || !Emu.saveDialogSupported()
+ selectExisting: parent.selectExisting || !Emu.saveDialogSupported()
onAccepted: {
filePath = Emu.toLocalFile(fileUrl);
Global.lastFileDialogDir = Emu.dir(filePath);
@@ -38,13 +39,40 @@ RowLayout {
color: (!selectExisting || filePath === "" || Emu.fileExists(filePath)) ? paletteActive.text : "red"
}
- Button {
- id: selectButton
- text: qsTr("Select")
+ // Button for either custom creation functionality (onCreate) or
+ // if the open file dialog doesn't allow creation, to open a file creation dialog.
+ IconButton {
+ visible: showCreateButton || (!selectExisting && !Emu.saveDialogSupported())
+ icon: "qrc:/icons/resources/icons/document-new.png"
+ Loader {
+ id: createDialogLoader
+ active: false
+ sourceComponent: FileDialog {
+ folder: filePath ? Emu.dir(filePath) : Global.lastFileDialogDir
+ selectExisting: false
+ onAccepted: {
+ filePath = Emu.toLocalFile(fileUrl);
+ Global.lastFileDialogDir = Emu.dir(filePath);
+ }
+ }
+ }
+
+ onClicked: {
+ if(showCreateButton)
+ parent.create()
+ else {
+ createDialogLoader.active = true;
+ createDialogLoader.item.visible = true;
+ }
+ }
+ }
+
+ IconButton {
+ icon: "qrc:/icons/resources/icons/document-edit.png"
onClicked: {
- dialogLoader.active = true
- dialogLoader.item.visible = true
+ dialogLoader.active = true;
+ dialogLoader.item.visible = true;
}
}
}
diff --git a/qml/Firebird/UIComponents/IconButton.qml b/qml/Firebird/UIComponents/IconButton.qml
new file mode 100644
index 00000000..cb8feba5
--- /dev/null
+++ b/qml/Firebird/UIComponents/IconButton.qml
@@ -0,0 +1,23 @@
+import QtQuick 2.0
+import QtQuick.Controls 1.0
+
+/* A push button with a symbol instead of text.
+ * ToolButton and in Label don't size correctly,
+ * so do it manually.
+ * With QQC2, button icons have a better default size
+ * and it can also be specified explicitly. */
+
+Button {
+ property alias icon: image.source
+
+ implicitHeight: TextMetrics.normalSize * 2.5
+ implicitWidth: implicitHeight
+
+ Image {
+ id: image
+ height: parent.height * 0.6
+ anchors.centerIn: parent
+
+ fillMode: Image.PreserveAspectFit
+ }
+}
diff --git a/qml/FlashDialog.qml b/qml/FlashDialog.qml
index cad5b2d8..e424e797 100644
--- a/qml/FlashDialog.qml
+++ b/qml/FlashDialog.qml
@@ -23,7 +23,7 @@ Dialog {
GridLayout {
id: layout
width: parent.width
- columns: width > modelCombo.implicitWidth * 2 ? 2 : 1
+ columns: 2
FBLabel {
Layout.minimumHeight: implicitHeight
diff --git a/resources.qrc b/resources.qrc
index 0b951751..5ba3d243 100644
--- a/resources.qrc
+++ b/resources.qrc
@@ -22,6 +22,8 @@
resources/icons/drive-removable-media-usb.png
resources/icons/smartphone.png
resources/icons/video-display.png
+ resources/icons/document-edit.png
+ resources/icons/document-new.png
qml/Keypad.qml
@@ -58,6 +60,7 @@
qml/Firebird/UIComponents/VerticalSwipeBar.qml
qml/Firebird/UIComponents/Global.qml
qml/FlashDialog.qml
+ qml/Firebird/UIComponents/IconButton.qml
i18n/de_DE.qm
diff --git a/resources/icons/document-edit.png b/resources/icons/document-edit.png
new file mode 100644
index 00000000..e8fe0972
Binary files /dev/null and b/resources/icons/document-edit.png differ
diff --git a/resources/icons/document-new.png b/resources/icons/document-new.png
new file mode 100644
index 00000000..61db97ae
Binary files /dev/null and b/resources/icons/document-new.png differ