| /* |
| * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public License |
| * along with this program; see the file COPYING.LIB. If not, write to |
| * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| * |
| */ |
| |
| import QtQuick 2.0 |
| import Qt.labs.folderlistmodel 1.0 |
| import "../js/MultiSelect.js" as MultiSelect |
| |
| Rectangle { |
| id: filePicker |
| |
| property QtObject fileModel: model |
| property alias folder: folders.folder |
| |
| color: "white" |
| width: 400 |
| height: 500 |
| |
| smooth: true |
| radius: 5 |
| anchors.centerIn: parent |
| |
| border { |
| width: 1 |
| color: "#bfbfbf" |
| } |
| |
| BorderImage { |
| source: "../icons/titlebar.png"; |
| width: parent.width; |
| height: 50 |
| y: -7 |
| id: titleBar |
| |
| anchors { |
| top: parent.top |
| bottom: folderListView.top |
| } |
| Rectangle { |
| id: upButton |
| width: 48 |
| height: titleBar.height - 7 |
| color: "transparent" |
| Image { anchors.centerIn: parent; source: "../icons/up.png" } |
| MouseArea { id: upRegion; anchors.centerIn: parent |
| width: 48 |
| height: 48 |
| onClicked: if (folders.parentFolder != "") up() |
| } |
| } |
| |
| Rectangle { |
| color: "gray" |
| x: 48 |
| width: 1 |
| height: 44 |
| } |
| |
| Text { |
| anchors { |
| left: upButton.right |
| right: parent.right |
| leftMargin: 4 |
| rightMargin: 4 |
| } |
| |
| height: parent.height |
| text: folders.folder |
| color: "white" |
| elide: Text.ElideLeft; |
| horizontalAlignment: Text.AlignLeft; |
| verticalAlignment: Text.AlignVCenter |
| font.pixelSize: 24 |
| } |
| } |
| |
| ListView { |
| id: folderListView |
| |
| width: parent.width |
| height: 400 |
| anchors.centerIn: parent |
| spacing: 2 |
| clip: true |
| |
| FolderListModel { |
| id: folders |
| } |
| |
| Component { |
| id: fileDelegate |
| |
| Rectangle { |
| function selected() { |
| if (folders.isFolder(index)) |
| openFolder(filePath); |
| else { |
| |
| if (fileModel.allowMultipleFiles) { |
| checkbox.checked = !checkbox.checked |
| |
| if (checkbox.checked) |
| MultiSelect.addValue(filePath) |
| else |
| MultiSelect.removeValue(filePath) |
| } |
| else |
| fileModel.accept(filePath) |
| } |
| } |
| |
| height: 50 |
| width: parent.width |
| color: folders.isFolder(index) ? "lightgray": "darkgray" |
| |
| Item { |
| width: 50 |
| height: 48 |
| Image { |
| source: "../icons/folder.png" |
| anchors.centerIn: parent |
| visible: folders.isFolder(index) |
| } |
| } |
| |
| Text { |
| id: fileNameText |
| anchors.centerIn: parent |
| anchors.leftMargin: 20 |
| width: 300 |
| text: fileName |
| elide: Text.ElideLeft; |
| } |
| |
| CheckBox { |
| id: checkbox |
| |
| anchors.right: parent.right |
| anchors.verticalCenter: parent.verticalCenter |
| |
| checked: MultiSelect.isSelected(filePath) |
| visible: fileModel.allowMultipleFiles && !folders.isFolder(index) |
| } |
| |
| MouseArea { |
| anchors.fill: parent |
| onClicked: selected(); |
| } |
| } |
| } |
| model: folders |
| delegate: fileDelegate |
| } |
| |
| Rectangle { |
| id: button |
| |
| height: 50 |
| |
| border { |
| width: 1 |
| color: "#bfbfbf" |
| } |
| |
| anchors { |
| bottom: parent.bottom |
| top: folderListView.bottom |
| left: parent.left |
| right: parent.right |
| } |
| |
| Row { |
| id: buttonRow |
| spacing: 10 |
| anchors.horizontalCenter: parent.horizontalCenter |
| anchors.verticalCenter: parent.verticalCenter |
| |
| DialogButton { |
| id: cancel |
| text: "Cancel" |
| onClicked: fileModel.reject() |
| } |
| |
| DialogButton { |
| id: accept |
| text: "Ok" |
| visible: fileModel.allowMultipleFiles |
| onClicked: |
| fileModel.accept(MultiSelect.selectedValues()); |
| } |
| } |
| } |
| |
| function openFolder(path) { |
| folders.folder = path; |
| } |
| |
| function up() { |
| folders.folder = folders.parentFolder; |
| } |
| } |