Warning, /plasma/drkonqi/src/coredump/gui/qml/DetailsPage.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0002 // SPDX-FileCopyrightText: 2020-2022 Harald Sitter <sitter@kde.org>
0003 
0004 import QtQuick 2.15
0005 import QtQuick.Layouts 1.15
0006 import QtQuick.Controls 2.15 as QQC2
0007 import org.kde.kirigami 2.19 as Kirigami
0008 import org.kde.syntaxhighlighting 1.0
0009 
0010 import org.kde.drkonqi.coredump.gui 1.0 as DrKonqi
0011 
0012 Kirigami.ScrollablePage {
0013     id: page
0014 
0015     property alias patient: detailsLoader.patient
0016     property string text
0017     property string errorText
0018 
0019     title: i18nc("@title", "Details")
0020     horizontalScrollBarPolicy: Qt.ScrollBarAsNeeded
0021 
0022     Kirigami.Theme.colorSet: Kirigami.Theme.View
0023 
0024     contextualActions: [
0025         Kirigami.Action {
0026             enabled: state === ""
0027             iconName: "edit-copy"
0028             text: i18nc("@action", "Copy to Clipboard")
0029             onTriggered: {
0030                 contentLoader.item.selectAll()
0031                 contentLoader.item.copy()
0032             }
0033         },
0034         Kirigami.Action {
0035             enabled: patient.canDebug
0036             iconName: "debug-run"
0037             text: i18nc("@action", "Run Interactive Debugger")
0038             onTriggered: patient.debug()
0039         }
0040     ]
0041 
0042     Component {
0043         id: loadingComponent
0044         QQC2.BusyIndicator {
0045             id: indicator
0046             visible: false
0047             running: true
0048 
0049             // only show the indicator after a brief timeout otherwise we can have a situtation where loading takes a couple
0050             // milliseconds during which time the indicator flashes up for no good reason
0051             Timer {
0052                 running: true
0053                 repeat: false
0054                 interval: 500
0055                 onTriggered: indicator.visible = true
0056             }
0057         }
0058     }
0059 
0060     Component {
0061         id: errorComponent
0062 
0063         Kirigami.PlaceholderMessage {
0064             Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
0065             text: page.errorText
0066             icon.name: "data-warning"
0067         }
0068     }
0069 
0070     Component {
0071         id: dataComponent
0072 
0073         QQC2.TextArea {
0074             id: textfield
0075             Layout.fillWidth: true
0076             Layout.fillHeight: true
0077             readOnly: true
0078             wrapMode: TextEdit.NoWrap
0079             textFormat: TextEdit.PlainText
0080             background.visible: false
0081             font.family: "monospace"
0082             text: page.text
0083             selectByMouse: Kirigami.Settings.isMobile ? false : true
0084 
0085             SyntaxHighlighter {
0086                 textEdit: textfield
0087                 definition: "GDB Backtrace"
0088             }
0089         }
0090     }
0091 
0092     Loader {
0093         id: contentLoader
0094 
0095         DrKonqi.DetailsLoader {
0096             id: detailsLoader
0097             onDetails: text = details
0098             onError: {
0099                 console.log("error" + error)
0100                 errorText = error
0101             }
0102         }
0103     }
0104 
0105     states: [
0106         State {
0107             name: "error"
0108             when: errorText !== ""
0109             PropertyChanges { target: contentLoader; sourceComponent: errorComponent }
0110         },
0111         State {
0112             name: "loading"
0113             when: text === ""
0114             PropertyChanges { target: contentLoader; sourceComponent: loadingComponent }
0115         },
0116         State {
0117             name: "" // default state
0118             PropertyChanges { target: contentLoader; sourceComponent: dataComponent }
0119         }
0120     ]
0121 }