Warning, /utilities/krecorder/src/contents/ui/main.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Jonah BrĂ¼chert <jbb@kaidan.im> 0003 * SPDX-FileCopyrightText: 2021 Devin Lin <espidev@gmail.com> 0004 * 0005 * SPDX-License-Identifier: GPL-3.0-or-later 0006 */ 0007 0008 import QtQuick 0009 import QtQuick.Controls as Controls 0010 import QtQuick.Layouts 0011 0012 import QtQml 0013 import QtMultimedia 0014 0015 import org.kde.kirigami as Kirigami 0016 0017 import KRecorder 0018 import "settings" 0019 0020 Kirigami.ApplicationWindow { 0021 id: appwindow 0022 0023 title: i18n("Recorder") 0024 0025 width: Kirigami.Settings.isMobile ? 400 : 800 0026 height: Kirigami.Settings.isMobile ? 550 : 500 0027 0028 readonly property real wideScreenThreshold: Kirigami.Units.gridUnit * 40 0029 readonly property bool isWidescreen: (appwindow.width >= wideScreenThreshold) && appwindow.wideScreen // prevent being widescreen at first launch 0030 0031 property Recording currentRecording: null 0032 0033 pageStack.globalToolBar.style: Kirigami.ApplicationHeaderStyle.ToolBar; 0034 pageStack.globalToolBar.showNavigationButtons: Kirigami.ApplicationHeaderStyle.ShowBackButton; 0035 0036 pageStack.initialPage: RecordingListPage {} 0037 pageStack.columnView.columnResizeMode: isWidescreen ? Kirigami.ColumnView.FixedColumns : Kirigami.ColumnView.SingleColumn 0038 pageStack.popHiddenPages: true 0039 0040 Component.onCompleted: { 0041 switchToRecording(null); 0042 } 0043 0044 // page switch animation 0045 NumberAnimation { 0046 id: anim 0047 from: 0 0048 to: 1 0049 duration: Kirigami.Units.longDuration * 2 0050 easing.type: Easing.InOutQuad 0051 } 0052 NumberAnimation { 0053 id: yAnim 0054 from: Kirigami.Units.gridUnit * 3 0055 to: 0 0056 duration: Kirigami.Units.longDuration * 3 0057 easing.type: Easing.OutQuint 0058 } 0059 0060 Loader { 0061 id: playerPageLoader 0062 } 0063 0064 onIsWidescreenChanged: switchToRecording(currentRecording); 0065 0066 function openSettings() { 0067 if (isWidescreen) { 0068 settingsDialogLoader.active = true; 0069 0070 if (Kirigami.Settings.isMobile) { 0071 // SettingsDialog 0072 settingsDialogLoader.item.open(); 0073 } else { 0074 // SettingsWindow 0075 settingsDialogLoader.item.close(); 0076 settingsDialogLoader.item.show(); 0077 } 0078 } else { 0079 pageStack.push("qrc:/settings/SettingsPage.qml"); 0080 } 0081 } 0082 0083 function openRecordScreen() { 0084 pageStack.layers.push(recordPage); 0085 0086 // if not in a recording session, start recording 0087 if (recordPage.isStopped) { 0088 AudioRecorder.record(); 0089 } 0090 } 0091 0092 function switchToRecording(recording) { 0093 currentRecording = recording; 0094 while (pageStack.depth > 1) pageStack.pop(); 0095 0096 if (recording == null) { 0097 if (isWidescreen) { 0098 playerPageLoader.setSource("qrc:/DefaultPage.qml"); 0099 pageStack.push(playerPageLoader.item); 0100 } 0101 } else { 0102 AudioPlayer.setVolume(100); 0103 AudioPlayer.setMediaPath(recording.filePath) 0104 AudioPlayer.play() 0105 playerPageLoader.setSource("qrc:/PlayerPage.qml", {recording: recording}); 0106 pageStack.push(playerPageLoader.item); 0107 } 0108 0109 // page switch animation 0110 yAnim.target = playerPageLoader.item; 0111 yAnim.properties = "yTranslate"; 0112 anim.target = playerPageLoader.item; 0113 anim.properties = "mainOpacity"; 0114 yAnim.restart(); 0115 anim.restart(); 0116 } 0117 0118 // record page 0119 RecordPage { 0120 id: recordPage 0121 visible: false 0122 } 0123 0124 Loader { 0125 id: settingsDialogLoader 0126 active: false 0127 source: Kirigami.Settings.isMobile ? "qrc:/settings/SettingsDialog.qml" : "qrc:/settings/SettingsWindow.qml" 0128 } 0129 } 0130