Warning, /utilities/fielding/src/ui/Main.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Felipe Kinoshita <kinofhek@gmail.com> 0002 // SPDX-License-Identifier: GPL-3.0-or-later 0003 0004 import QtQuick 2.15 0005 import QtQuick.Controls 2.15 as QQC2 0006 import QtQuick.Layouts 1.15 0007 import org.kde.kirigami 2.19 as Kirigami 0008 import org.kde.syntaxhighlighting 1.0 0009 0010 import org.kde.fielding 0011 import org.kde.fielding.config 0012 0013 Kirigami.ApplicationWindow { 0014 id: root 0015 0016 title: i18n("Fielding") 0017 0018 width: Kirigami.Units.gridUnit * 42 0019 height: Kirigami.Units.gridUnit * 32 0020 minimumWidth: Kirigami.Units.gridUnit * 20 0021 minimumHeight: Kirigami.Units.gridUnit * 20 0022 0023 Timer { 0024 id: saveWindowGeometryTimer 0025 interval: 1000 0026 onTriggered: App.saveWindowGeometry(root) 0027 } 0028 0029 Connections { 0030 id: saveWindowGeometryConnections 0031 enabled: false // Disable on startup to avoid writing wrong values if the window is hidden 0032 target: root 0033 0034 function onClosing() { App.saveWindowGeometry(root) } 0035 function onWidthChanged() { saveWindowGeometryTimer.restart() } 0036 function onHeightChanged() { saveWindowGeometryTimer.restart() } 0037 function onXChanged() { saveWindowGeometryTimer.restart() } 0038 function onYChanged() { saveWindowGeometryTimer.restart() } 0039 } 0040 0041 Loader { 0042 active: !Kirigami.Settings.isMobile 0043 source: Qt.resolvedUrl("GlobalMenu.qml") 0044 } 0045 0046 pageStack.initialPage: Kirigami.Page { 0047 id: page 0048 0049 padding: 0 0050 titleDelegate: PageHeader {} 0051 0052 QQC2.SplitView { 0053 anchors.fill: parent 0054 0055 handle: Rectangle { 0056 implicitWidth: Kirigami.Units.largeSpacing 0057 implicitHeight: Kirigami.Units.largeSpacing 0058 color: Kirigami.Theme.backgroundColor 0059 0060 Kirigami.Separator { 0061 anchors.top: parent.top 0062 anchors.bottom: parent.bottom 0063 anchors.left: parent.left 0064 } 0065 0066 Kirigami.Separator { 0067 anchors.top: parent.top 0068 anchors.bottom: parent.bottom 0069 anchors.right: parent.right 0070 } 0071 } 0072 0073 QQC2.ScrollView { 0074 QQC2.SplitView.minimumWidth: Kirigami.Units.gridUnit * 10 0075 QQC2.SplitView.preferredWidth: Kirigami.Units.gridUnit * 17 0076 QQC2.SplitView.fillHeight: true 0077 0078 QQC2.TextArea { 0079 id: bodyTextArea 0080 0081 wrapMode: Text.Wrap 0082 0083 onEditingFinished: { 0084 if (text.length > 0) { 0085 Controller.setData(JSON.parse(text)) 0086 } 0087 } 0088 0089 placeholderText: i18n("Request body...") 0090 0091 background: Rectangle { 0092 Kirigami.Theme.colorSet: Kirigami.Theme.View 0093 Kirigami.Theme.inherit: false 0094 color: Kirigami.Theme.backgroundColor 0095 } 0096 0097 Kirigami.SpellCheck.enabled: false 0098 0099 SyntaxHighlighter { 0100 textEdit: bodyTextArea 0101 definition: "JSON" 0102 } 0103 } 0104 } 0105 0106 QQC2.ScrollView { 0107 QQC2.SplitView.fillWidth: true 0108 QQC2.SplitView.fillHeight: true 0109 QQC2.SplitView.minimumWidth: Kirigami.Units.gridUnit * 10 0110 0111 QQC2.TextArea { 0112 id: responseTextArea 0113 0114 wrapMode: Text.Wrap 0115 0116 readOnly: true 0117 0118 background: Rectangle { 0119 Kirigami.Theme.colorSet: Kirigami.Theme.View 0120 Kirigami.Theme.inherit: false 0121 color: Kirigami.Theme.backgroundColor 0122 0123 Kirigami.PlaceholderMessage { 0124 anchors.centerIn: parent 0125 visible: responseTextArea.text.length <= 0 0126 width: parent.width - Kirigami.Units.largeSpacing * 4 0127 text: i18n("No Response Yet") 0128 explanation: i18n("Your request response will appear here") 0129 } 0130 } 0131 0132 SyntaxHighlighter { 0133 textEdit: responseTextArea 0134 definition: "JSON" 0135 } 0136 0137 Connections { 0138 target: Controller 0139 0140 function onResponse(response) { 0141 responseTextArea.text = response 0142 } 0143 } 0144 } 0145 } 0146 } 0147 0148 footer: QQC2.ToolBar { 0149 implicitHeight: content.implicitHeight + Kirigami.Units.smallSpacing * 2 0150 position: QQC2.ToolBar.Footer 0151 0152 RowLayout { 0153 id: content 0154 anchors.fill: parent 0155 0156 QQC2.Label { 0157 id: statusLabel 0158 Layout.alignment: Qt.AlignLeft 0159 visible: false 0160 text: i18n("Status: ") 0161 } 0162 QQC2.Label { 0163 id: statusLabelCodeText 0164 Layout.alignment: Qt.AlignLeft 0165 } 0166 0167 Item { 0168 Layout.fillWidth: true 0169 } 0170 0171 Connections { 0172 target: Controller 0173 0174 function onStatus(statusCode, statusText) { 0175 statusLabelCodeText.text = `${statusCode} ${statusText}` 0176 statusLabel.visible = true 0177 0178 if (statusCode >= 100 && statusCode <= 199) { 0179 statusLabelCodeText.color = Kirigami.Theme.disabledTextColor 0180 } else if (statusCode >= 200 && statusCode <= 299) { 0181 statusLabelCodeText.color = Kirigami.Theme.positiveTextColor 0182 } else if (statusCode >= 300 && statusCode <= 399) { 0183 statusLabelCodeText.color = Kirigami.Theme.linkColor 0184 } else if (statusCode >= 400 && statusCode <= 499) { 0185 statusLabelCodeText.color = Kirigami.Theme.negativeTextColor 0186 } else if (statusCode >= 500 && statusCode <= 599) { 0187 statusLabelCodeText.color = Kirigami.Theme.neutralTextColor 0188 } else { 0189 statusLabelCodeText.color = Kirigami.Theme.textColor 0190 } 0191 } 0192 } 0193 } 0194 } 0195 } 0196 0197 Component.onCompleted: { 0198 if (!Kirigami.Settings.isMobile) { 0199 saveWindowGeometryConnections.enabled = true 0200 } 0201 } 0202 }