blob: 2745b4e648d202557573f96cdb3c09bf4c552d29 (
plain) (
tree)
|
|
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.2
import "ArrayExtensions.js" as ArrayExtensions
import "FileUtils.js" as FileUtils
import HeimdallFrontend 1.0 as Native
DropFilesForm {
id: background
property var fileUrls: []
signal nextPressed(var files)
ListModel {
id: fileModel
}
function setFileGridVisible(visible) {
if (fileGridContainer.visible !== visible) {
dropFilesContainer.visible = !visible;
bottomButtonsContainer.visible = visible;
fileGridContainer.visible = visible;
if (visible) {
fileGridView.forceActiveFocus();
}
}
}
function addFiles(urls) {
var count = urls.length;
if (count > 0) {
for (var i = 0; i < count; i++) {
if (FileUtils.isFile(urls[i])) {
if (FileUtils.isArchive(urls[i])) {
var packageData = Native.Firmware.extractArchive(urls[i]);
packageData.filePaths.forEach(function(path) {
var filename = FileUtils.filenameFromPath(path);
fileModel.append({ icon: "drop_zone.svg", text: filename });
});
fileUrls.extend(packageData.filePaths);
} else {
var filename = FileUtils.filenameFromUrl(urls[i]);
fileModel.append({ icon: "drop_zone.svg", text: filename });
fileUrls.push(urls[i]);
}
}
}
setFileGridVisible(true);
}
}
function removeFile(index) {
if (index >= 0) {
fileModel.remove(index);
fileUrls.splice(index, 1);
if (fileUrls.length == 0) {
setFileGridVisible(false);
}
}
}
onKeyPressed: {
if (event.key === Qt.Key_Delete || event.key === Qt.Key_Backspace) {
event.accepted = true;
removeFile(fileGridView.currentIndex);
}
}
dropFilesArea {
onDropped: {
if ((drop.action == Qt.CopyAction || drop.action == Qt.MoveAction) && drop.urls.length > 0) {
addFiles(drop.urls);
drop.acceptProposedAction();
drop.accept(Qt.CopyAction);
}
}
}
browseButton.onClicked: {
browseDialog.open()
}
bottomBrowseButton.onClicked: {
browseDialog.open()
}
nextButton {
onClicked: nextPressed(fileUrls)
}
fileGridView {
model: fileModel
}
FileDialog {
id: browseDialog
title: "Select firmware file(s)"
selectMultiple: true
selectFolder: false
onAccepted: {
addFiles(browseDialog.fileUrls);
}
}
}
|