Warning, /maui/arca/src/controls/previewer/FilePreviewer.qml is written in an unsupported language. File is not indexed.
0001 import QtQuick 2.14
0002 import QtQuick.Controls 2.14
0003 import QtQuick.Layouts 1.3
0004
0005 import org.mauikit.controls 1.3 as Maui
0006
0007 import org.mauikit.filebrowsing 1.3 as FB
0008
0009 Maui.PopupPage
0010 {
0011 id: control
0012 implicitHeight: 1000
0013 property url currentUrl: ""
0014 property var iteminfo: FB.FM.getFileInfo(control.currentUrl)
0015
0016 ListModel { id: infoModel }
0017
0018
0019 hint: 1
0020 maxWidth: 800
0021 maxHeight: implicitHeight
0022
0023 title: iteminfo.path
0024
0025 headBar.rightContent: ToolButton
0026 {
0027 icon.name: "documentinfo"
0028 checkable: true
0029 checked: _stackView.depth === 2
0030 onClicked:
0031 {
0032 if(_stackView.depth === 2)
0033 {
0034 _stackView.pop()
0035 }else
0036 {
0037 _stackView.push(_infoComponent)
0038 }
0039
0040 }
0041 }
0042
0043 stack: StackView
0044 {
0045 id: _stackView
0046 Layout.fillHeight: true
0047 Layout.fillWidth: true
0048
0049 initialItem: Loader
0050 {
0051 id: previewLoader
0052 asynchronous: true
0053 active: control.visible
0054 source: show()
0055 }
0056
0057 Component
0058 {
0059 id: _infoComponent
0060
0061 ScrollView
0062 {
0063 contentHeight: _layout.implicitHeight
0064 contentWidth: availableWidth
0065 clip: true
0066 padding: Maui.Style.space.big
0067 background: null
0068
0069 Component.onCompleted:
0070 {
0071 initModel()
0072 }
0073
0074 Flickable
0075 {
0076 boundsBehavior: Flickable.StopAtBounds
0077 boundsMovement: Flickable.StopAtBounds
0078
0079 ColumnLayout
0080 {
0081 id: _layout
0082 width: parent.width
0083 spacing: Maui.Style.space.huge
0084
0085 Item
0086 {
0087 Layout.fillWidth: true
0088 Layout.preferredHeight: 150
0089
0090 Maui.IconItem
0091 {
0092 height: parent.height * 0.9
0093 width: height
0094 anchors.centerIn: parent
0095 iconSource: iteminfo.icon
0096 imageSource: iteminfo.thumbnail
0097 iconSizeHint: Maui.Style.iconSizes.large
0098 }
0099 }
0100
0101 Maui.SectionGroup
0102 {
0103 Layout.fillWidth: true
0104
0105 title: i18n("Details")
0106 description: i18n("File information")
0107 Repeater
0108 {
0109 model: infoModel
0110 delegate: Maui.SectionItem
0111 {
0112 visible: model.value ? true : false
0113 Layout.fillWidth: true
0114 label1.text: model.key
0115 label2.text: model.value
0116 label2.wrapMode: Text.Wrap
0117 }
0118 }
0119 }
0120 }
0121 }
0122 }
0123 }
0124
0125 }
0126
0127
0128 footBar.rightContent: Button
0129 {
0130 text: i18n("Open")
0131 icon.name: "document-open"
0132 // flat: true
0133 onClicked:
0134 {
0135 currentBrowser.openFile(control.currentUrl)
0136 }
0137 }
0138
0139 function show()
0140 {
0141 var source = "DefaultPreview.qml"
0142 if(FB.FM.checkFileType(FB.FMList.AUDIO, iteminfo.mime))
0143 {
0144 source = "AudioPreview.qml"
0145 }else if(FB.FM.checkFileType(FB.FMList.VIDEO, iteminfo.mime))
0146 {
0147 source = "VideoPreview.qml"
0148 }else if(FB.FM.checkFileType(FB.FMList.TEXT, iteminfo.mime))
0149 {
0150 source = "TextPreview.qml"
0151 }else if(FB.FM.checkFileType(FB.FMList.IMAGE, iteminfo.mime))
0152 {
0153 source = "ImagePreview.qml"
0154 }else if(FB.FM.checkFileType(FB.FMList.DOCUMENT, iteminfo.mime))
0155 {
0156 source = "DocumentPreview.qml"
0157 }else if(FB.FM.checkFileType(FB.FMList.FONT, iteminfo.mime))
0158 {
0159 source = "FontPreviewer.qml"
0160 }else
0161 {
0162 source = "DefaultPreview.qml"
0163 }
0164
0165 return source;
0166 }
0167
0168
0169 function initModel()
0170 {
0171 infoModel.clear()
0172 infoModel.append({key: "Name", value: iteminfo.label})
0173 infoModel.append({key: "Type", value: iteminfo.mime})
0174 infoModel.append({key: "Date", value: Qt.formatDateTime(new Date(model.date), "d MMM yyyy")})
0175 infoModel.append({key: "Modified", value: Qt.formatDateTime(new Date(model.modified), "d MMM yyyy")})
0176 infoModel.append({key: "Last Read", value: Qt.formatDateTime(new Date(model.lastread), "d MMM yyyy")})
0177 infoModel.append({key: "Owner", value: iteminfo.owner})
0178 infoModel.append({key: "Group", value: iteminfo.group})
0179 infoModel.append({key: "Size", value: Maui.Handy.formatSize(iteminfo.size)})
0180 infoModel.append({key: "Symbolic Link", value: iteminfo.symlink})
0181 infoModel.append({key: "Path", value: iteminfo.path})
0182 infoModel.append({key: "Thumbnail", value: iteminfo.thumbnail})
0183 infoModel.append({key: "Icon Name", value: iteminfo.icon})
0184 }
0185
0186
0187 }