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