Warning, /education/kstars/kstars/kstarslite/qml/indi/INDIControlPanel.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003
0004 import QtQuick 2.6
0005 import QtQuick.Window 2.2
0006 import QtQuick.Controls 2.0
0007 import QtQuick.Layouts 1.2
0008 import Qt.labs.settings 1.0
0009 import "../modules"
0010 import "../constants" 1.0
0011
0012 KSPage {
0013 id: indiPage
0014 objectName: "indiControlPanel"
0015 title: xi18n("INDI Control Panel")
0016
0017 property bool connected: ClientManagerLite.connected
0018 property alias webMStatusText: webMStatusLabel.text
0019 property alias webMStatusTextVisible: webMStatusLabel.visible
0020 property alias webMActiveProfileText: webMActiveProfileLabel.text
0021 property alias webMActiveProfileLayoutVisible: webMActiveProfileLayout.visible
0022 property alias webMBrowserButtonVisible: webMBrowserButton.visible
0023 property alias webMProfileListVisible: webMProfileList.visible
0024
0025 function connectIndiServer() {
0026 indiServerConnectButton.clicked()
0027 }
0028
0029 Component.onCompleted: {
0030 // Debug purposes
0031 ClientManagerLite.setHost("localhost", 7624)
0032 }
0033
0034 onConnectedChanged: {
0035 if (!indiPage.connected) {
0036 for (var i = 0; i < devicesModel.count; ++i) {
0037 devicesModel.get(i).panel.destroy()
0038 stackView.pop(indiPage)
0039 }
0040 devicesModel.clear()
0041 skyMapLite.notification.showNotification("Disconnected from the server")
0042 }
0043 }
0044
0045 ColumnLayout {
0046 anchors.fill: parent
0047 id: cPanelColumn
0048 spacing: 5 * Num.dp
0049
0050 ColumnLayout {
0051 visible: !indiPage.connected
0052 anchors {
0053 left: parent.left
0054 right: parent.right
0055 }
0056
0057 KSLabel {
0058 text: xi18n("IP Address or Hostname")
0059 }
0060
0061 RowLayout {
0062 anchors {
0063 left: parent.left
0064 right: parent.right
0065 }
0066
0067 KSTextField {
0068 id: ipHost
0069 placeholderText: xi18n("xxx.xxx.xxx.xxx")
0070 Layout.alignment: Qt.AlignHCenter
0071 Layout.maximumWidth: parent.width*0.8
0072 Layout.fillWidth: true
0073 font.capitalization: Font.AllLowercase
0074 //text: ClientManagerLite.lastUsedServer
0075 text: "localhost"
0076
0077 Settings
0078 {
0079 property alias ipHostText : ipHost.text
0080 }
0081 }
0082 }
0083
0084 KSLabel {
0085 text: xi18n("Web Manager Port")
0086 }
0087
0088 RowLayout {
0089 anchors {
0090 left: parent.left
0091 right: parent.right
0092 }
0093
0094 KSTextField {
0095 id: portWebManager
0096 placeholderText: xi18n("xxxx")
0097 Layout.alignment: Qt.AlignHCenter
0098 Layout.maximumWidth: parent.width*0.2
0099 Layout.fillWidth: true
0100 //text: ClientManagerLite.lastUsedWebManagerPort
0101 text: "8624"
0102
0103 Settings
0104 {
0105 property alias portWebManagerText : portWebManager.text
0106 }
0107 }
0108
0109 Button {
0110 id: webMConnectButton
0111 text: xi18n("Get Status")
0112
0113 onClicked: {
0114 ClientManagerLite.getWebManagerProfiles(ipHost.text, parseInt(portWebManager.text));
0115 Qt.inputMethod.hide()
0116 }
0117 }
0118 }
0119
0120 KSLabel {
0121 id: webMStatusLabel
0122 text: xi18n("Web Manager Status:")
0123 visible: false
0124 }
0125
0126 RowLayout {
0127 id: webMActiveProfileLayout
0128 visible: false
0129
0130 KSLabel {
0131 id: webMActiveProfileLabel
0132 text: xi18n("Active Profile:")
0133 }
0134
0135 Button {
0136 id: webMStopButton
0137 text: xi18n("Stop")
0138
0139 onClicked: {
0140 ClientManagerLite.stopWebManagerProfile();
0141 }
0142 }
0143 }
0144
0145 ListView {
0146 id: webMProfileList
0147 model: webMProfileModel
0148 highlightFollowsCurrentItem: false
0149 width: parent.width
0150 height: childrenRect.height
0151 visible: false
0152
0153 delegate: RowLayout {
0154 height: webMConnectButton.height
0155
0156 Rectangle {
0157 width: webMStatusLabel.width
0158 height: webMConnectButton.height
0159 KSLabel {
0160 text: xi18n("Profile: %1", modelData)
0161 }
0162 }
0163
0164 Button {
0165 height: webMConnectButton.height
0166 text: xi18n("Start")
0167
0168 onClicked: {
0169 ClientManagerLite.startWebManagerProfile(modelData);
0170 }
0171 }
0172 }
0173 } // ListView
0174
0175 Button {
0176 id: webMBrowserButton
0177 text: xi18n("Manage Profiles")
0178 visible: false
0179
0180 onClicked: {
0181 Qt.openUrlExternally("http://"+ipHost.text+":"+portWebManager.text)
0182 }
0183 }
0184
0185 KSLabel {
0186 text: xi18n("Server Port")
0187 }
0188
0189 RowLayout {
0190 anchors {
0191 left: parent.left
0192 right: parent.right
0193 }
0194
0195 KSTextField {
0196 id: portHost
0197 placeholderText: xi18n("INDI Server Port")
0198 Layout.alignment: Qt.AlignHCenter
0199 Layout.maximumWidth: parent.width*0.2
0200 Layout.fillWidth: true
0201 //text: ClientManagerLite.lastUsedPort
0202 text: "7624"
0203
0204 Settings
0205 {
0206 property alias portHostText : portHost.text
0207 }
0208 }
0209
0210 Button {
0211 id: indiServerConnectButton
0212 text: indiPage.connected ? xi18n("Disconnect") : xi18n("Connect")
0213
0214 onClicked: {
0215 if (!indiPage.connected) {
0216 if(ClientManagerLite.setHost(ipHost.text, parseInt(portHost.text))) {
0217 skyMapLite.notification.showNotification(xi18n("Successfully connected to the server"))
0218 } else {
0219 skyMapLite.notification.showNotification(xi18n("Could not connect to the server"))
0220 }
0221 } else {
0222
0223 ClientManagerLite.disconnectHost()
0224 }
0225 Qt.inputMethod.hide()
0226 }
0227 }
0228
0229 }
0230 }
0231
0232 KSLabel {
0233 id: connectedTo
0234 visible: indiPage.connected
0235 text: xi18n("Connected to %1", ClientManagerLite.connectedHost)
0236 }
0237
0238
0239 ColumnLayout {
0240 Layout.fillHeight: true
0241 Layout.fillWidth: true
0242 visible: indiPage.connected
0243
0244 Rectangle {
0245 Layout.fillWidth: true
0246 height: 1 * Num.dp
0247 color: "gray"
0248 }
0249
0250 KSLabel {
0251 id: devicesLabel
0252 text: xi18n("Available Devices")
0253 }
0254
0255 ListModel {
0256 id: devicesModel
0257 }
0258
0259 Connections {
0260 target: ClientManagerLite
0261 onNewINDIDevice: {
0262 var component = Qt.createComponent(Qt.resolvedUrl("./DevicePanel.qml"));
0263 var devicePanel = component.createObject(window);
0264 devicePanel.deviceName = deviceName
0265 devicesModel.append({ name: deviceName, panel: devicePanel })
0266 }
0267 onRemoveINDIDevice: {
0268 for (i = 0; i < devicesModel.count; ++i) {
0269 if(devicesModel.get(i).name == deviceName) {
0270 devicesModel.panel.destroy()
0271 devicesModel.remove(i)
0272 }
0273 }
0274 }
0275 onNewINDIMessage: {
0276 skyMapLite.notification.showNotification(message)
0277 }
0278 }
0279 }
0280
0281 KSListView {
0282 id: devicesPage
0283 Layout.fillHeight: true
0284 Layout.fillWidth: true
0285
0286 model: devicesModel
0287 textRole: "name"
0288
0289 onClicked: {
0290 stackView.push(devicesModel.get(currentIndex).panel)
0291 }
0292 }
0293
0294 KSButton
0295 {
0296 id: disconnectINDI
0297 visible: indiPage.connected
0298 text: xi18n("Disconnect INDI");
0299
0300 onClicked:
0301 {
0302 ClientManagerLite.disconnectHost();
0303 }
0304 }
0305 }
0306 }