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