You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

532 lines
19 KiB
QML

/*
Copyright (C) 2019-2021 Doug McLain
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import QtQuick
import QtQuick.Window
import QtQuick.Controls
import QtQuick.Dialogs
import org.dudetronics.droidstar
ApplicationWindow {
// @disable-check M16
visible: true
// @disable-check M16
width: 340
// @disable-check M16
height: 480
// @disable-check M16
// @disable-check M16
title: qsTr("DroidStar")
palette.window: "#252424"
palette.button: "#252424"
palette.buttonText: "white"
palette.base: "black"
palette.text: "white"
palette.windowText: "white"
palette.highlight: "steelblue"
MessageDialog {
id: errorDialog
title: "Error"
}
MessageDialog {
id: updateDialog
title: "Updating..."
text: "Check log tab for details"
}
MessageDialog {
id: vocoderDialog
title: "No vocoder found"
text: "No hardware or software vocoder found for this mode. You can still connect, but you will not RX or TX any audio. See the project website (url on the About tab) for info on loading a sw vocoder, or use a USB AMBE dongle (and an OTG adapter on Android devices)"
}
TabBar {
id: bar
width: parent.width
currentIndex: swiper.currentIndex
background: Rectangle {
color: "steelblue"
}
TabButton {
id: mainButton
padding: 10
background: Rectangle {
color: bar.currentIndex === 0 ? "steelblue" : "#353535"
}
text: qsTr("Main")
}
TabButton {
id: settingsButton
padding: 10
background: Rectangle {
color: bar.currentIndex === 1 ? "steelblue" : "#353535"
}
text: qsTr("Settings")
}
TabButton {
id: logButton
padding: 10
background: Rectangle {
color: bar.currentIndex === 2 ? "steelblue" : "#353535"
}
text: qsTr("Log")
}
TabButton {
id: hostsButton
padding: 10
background: Rectangle {
color: bar.currentIndex === 3 ? "steelblue" : "#353535"
}
text: qsTr("Hosts")
}
TabButton {
id: aboutButton
padding: 10
background: Rectangle {
color: bar.currentIndex === 4 ? "steelblue" : "#353535"
}
text: qsTr("About")
}
}
SwipeView {
id: swiper
width: parent.width
height: parent.height - 50
x: 0
y: 50
currentIndex: bar.currentIndex
interactive: false
MainTab{
id: mainTab
}
SettingsTab{
id: settingsTab
}
LogTab{
id: logTab
}
HostsTab{
id: hostsTab
}
AboutTab{}
}
DroidStar {
id: droidstar
}
Connections {
target: Qt.application
function onStateChanged() {
if (Qt.application.state !== Qt.ApplicationActive) {
droidstar.reset_connect_status();
}
}
}
Connections {
target: droidstar
Component.onCompleted: {
mainTab.comboMode.loaded = true;
droidstar.process_settings();
settingsTab.comboVocoder.model = droidstar.get_vocoders();
settingsTab.comboModem.model = droidstar.get_modems();
settingsTab.comboPlayback.model = droidstar.get_playbacks();
settingsTab.comboCapture.model = droidstar.get_captures();
mainTab.data1.font.family = droidstar.get_monofont();
mainTab.data2.font.family = droidstar.get_monofont();
mainTab.data3.font.family = droidstar.get_monofont();
mainTab.data4.font.family = droidstar.get_monofont();
mainTab.data5.font.family = droidstar.get_monofont();
mainTab.data6.font.family = droidstar.get_monofont();
}
function onSwtx_state(s){
mainTab.swtxBox.checked = s;
mainTab.swtxBox.enabled = !s;
}
function onSwrx_state(s){
mainTab.swrxBox.checked = s;
mainTab.swrxBox.enabled = !s;
}
function onMycall_changed(s){
settingsTab.mycallEdit.text = s;
}
function onUrcall_changed(s){
settingsTab.urcallEdit.text = s;
}
function onRptr1_changed(s){
settingsTab.rptr1Edit.text = s;
}
function onRptr2_changed(s){
settingsTab.rptr2Edit.text = s;
}
function onUpdate_devices(){
settingsTab.comboVocoder.model = droidstar.get_vocoders();
settingsTab.comboModem.model = droidstar.get_modems();
settingsTab.comboPlayback.model = droidstar.get_playbacks();
settingsTab.comboCapture.model = droidstar.get_captures();
}
function onMode_changed() {
//console.log("onMode_changed ", mainTab.comboMode.find(droidstar.get_mode()), ":", droidstar.get_mode(), ":", droidstar.get_ref_host(), ":", droidstar.get_module());
mainTab.label1.text = droidstar.get_label1();
mainTab.label2.text = droidstar.get_label2();
mainTab.label3.text = droidstar.get_label3();
mainTab.label4.text = droidstar.get_label4();
mainTab.label5.text = droidstar.get_label5();
mainTab.label6.text = droidstar.get_label6();
droidstar.set_modelchange(true);
mainTab.comboHost.model = droidstar.get_hosts();
droidstar.set_modelchange(false);
mainTab.comboMode.currentIndex = mainTab.comboMode.find(droidstar.get_mode());
if(droidstar.get_mode() === "REF"){
//mainTab.comboMode.width = mainTab.width / 2;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = false;
mainTab.editIAXDTMF.visible = false;
mainTab.dtmfsendbutton.visible = false;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_ref_host());
mainTab.comboModule.visible = true;
mainTab.comboSlot.visible = false;
mainTab.comboCC.visible = false;
mainTab.element3.visible = false;
mainTab.dmrtgidEdit.visible = false;
mainTab.comboM17CAN.visible = false;
mainTab.privateBox.visible = false;
mainTab.sliderMicGain.value = 0.0;
}
if(droidstar.get_mode() === "DCS"){
//mainTab.comboMode.width = mainTab.width / 2;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = false;
mainTab.editIAXDTMF.visible = false;
mainTab.dtmfsendbutton.visible = false;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_dcs_host());
mainTab.comboModule.visible = true;
mainTab.comboSlot.visible = false;
mainTab.comboCC.visible = false;
mainTab.element3.visible = false;
mainTab.dmrtgidEdit.visible = false;
mainTab.comboM17CAN.visible = false;
mainTab.privateBox.visible = false;
mainTab.sliderMicGain.value = 0.0;
}
if(droidstar.get_mode() === "XRF"){
//mainTab.comboMode.width = mainTab.width / 2;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = false;
mainTab.editIAXDTMF.visible = false;
mainTab.dtmfsendbutton.visible = false;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_xrf_host());
mainTab.comboModule.visible = true;
mainTab.comboSlot.visible = false;
mainTab.comboCC.visible = false;
mainTab.element3.visible = false;
mainTab.dmrtgidEdit.visible = false;
mainTab.comboM17CAN.visible = false;
mainTab.privateBox.visible = false;
mainTab.sliderMicGain.value = 0.0;
}
if(droidstar.get_mode() === "YSF"){
//mainTab.comboMode.width = mainTab.width / 2;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = false;
mainTab.editIAXDTMF.visible = false;
mainTab.dtmfsendbutton.visible = false;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_ysf_host());
mainTab.comboModule.visible = false;
mainTab.comboSlot.visible = false;
mainTab.comboCC.visible = false;
mainTab.element3.visible = false;
mainTab.dmrtgidEdit.visible = false;
mainTab.comboM17CAN.visible = false;
mainTab.privateBox.visible = false;
mainTab.sliderMicGain.value = 0.5;
}
if(droidstar.get_mode() === "FCS"){
//mainTab.comboMode.width = mainTab.width / 2;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = false;
mainTab.editIAXDTMF.visible = false;
mainTab.dtmfsendbutton.visible = false;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_fcs_host());
mainTab.comboModule.visible = false;
mainTab.comboSlot.visible = false;
mainTab.comboCC.visible = false;
mainTab.element3.visible = false;
mainTab.dmrtgidEdit.visible = false;
mainTab.comboM17CAN.visible = false;
mainTab.privateBox.visible = false;
mainTab.sliderMicGain.value = 0.5;
}
if(droidstar.get_mode() === "DMR"){
//mainTab.comboMode.width = (mainTab.width / 5) - 5;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = false;
mainTab.editIAXDTMF.visible = false;
mainTab.dtmfsendbutton.visible = false;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_dmr_host());
mainTab.comboModule.visible = false;
mainTab.comboSlot.visible = true;
mainTab.comboCC.visible = true;
mainTab.element3.text = "TGID";
mainTab.element3.visible = true;
mainTab.dmrtgidEdit.visible = true;
mainTab.comboM17CAN.visible = false;
mainTab.privateBox.visible = true;
mainTab.sliderMicGain.value = 0.5;
}
if(droidstar.get_mode() === "P25"){
//mainTab.comboMode.width = mainTab.width / 2;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = false;
mainTab.editIAXDTMF.visible = false;
mainTab.dtmfsendbutton.visible = false;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_p25_host());
mainTab.comboModule.visible = false;
mainTab.comboSlot.visible = false;
mainTab.comboCC.visible = false;
mainTab.element3.text = "TGID";
mainTab.element3.visible = true;
mainTab.dmrtgidEdit.visible = true;
mainTab.comboM17CAN.visible = false;
mainTab.privateBox.visible = false;
mainTab.sliderMicGain.value = 0.5;
}
if(droidstar.get_mode() === "NXDN"){
//mainTab.comboMode.width = mainTab.width / 2;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = false;
mainTab.editIAXDTMF.visible = false;
mainTab.dtmfsendbutton.visible = false;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_nxdn_host());
mainTab.comboModule.visible = false;
mainTab.comboSlot.visible = false;
mainTab.comboCC.visible = false;
mainTab.element3.visible = false;
mainTab.dmrtgidEdit.visible = false;
mainTab.comboM17CAN.visible = false;
mainTab.privateBox.visible = false;
mainTab.sliderMicGain.value = 0.5;
}
if(droidstar.get_mode() === "M17"){
//mainTab.comboMode.width = mainTab.width / 2;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = false;
mainTab.editIAXDTMF.visible = false;
mainTab.dtmfsendbutton.visible = false;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_m17_host());
mainTab.comboModule.currentIndex = mainTab.comboModule.find(droidstar.get_module());
mainTab.comboModule.visible = true;
mainTab.comboSlot.visible = false;
mainTab.comboCC.visible = false;
mainTab.element3.text = "CAN";
mainTab.element3.visible = true;
mainTab.dmrtgidEdit.visible = false;
mainTab.comboM17CAN.visible = true;
mainTab.privateBox.visible = false;
mainTab.sliderMicGain.value = 0.5;
}
if(droidstar.get_mode() === "IAX"){
//mainTab.comboMode.width = mainTab.width / 2;
mainTab.comboHost.visible = true;
mainTab.dtmflabel.visible = true;
mainTab.editIAXDTMF.visible = true;
mainTab.dtmfsendbutton.visible = true;
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_iax_host());
mainTab.comboModule.visible = false;
mainTab.comboSlot.visible = false;
mainTab.comboCC.visible = false;
mainTab.element3.visible = false;
mainTab.dmrtgidEdit.visible = false;
mainTab.comboM17CAN.visible = false;
mainTab.privateBox.visible = false;
mainTab.sliderMicGain.value = 0.5;
}
}
function onUpdate_data() {
mainTab.data1.text = droidstar.get_data1();
mainTab.data2.text = droidstar.get_data2();
mainTab.data3.text = droidstar.get_data3();
mainTab.data4.text = droidstar.get_data4();
mainTab.data5.text = droidstar.get_data5();
mainTab.data6.text = droidstar.get_data6();
mainTab.ambestatus.text = droidstar.get_ambestatustxt();
mainTab.mmdvmstatus.text = droidstar.get_mmdvmstatustxt();
mainTab.netstatus.text = droidstar.get_netstatustxt();
++mainTab.uitimer.rxcnt;
}
function onUpdate_settings() {
//console.log("update_settings comboHost == ", mainTab.comboHost.find(droidstar.get_host()));
//console.log("update_settings comboModule == ", mainTab.comboModule.find(droidstar.get_module()));
settingsTab.ipv6.checked = droidstar.get_ipv6();
settingsTab.xrf2ref.checked = droidstar.get_xrf2ref();
settingsTab.toggleTX.checked = droidstar.get_toggletx();
if(droidstar.get_mode() === "REF"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_ref_host());
}
if(droidstar.get_mode() === "DCS"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_dcs_host());
}
if(droidstar.get_mode() === "XRF"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_xrf_host());
}
if(droidstar.get_mode() === "YSF"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_ysf_host());
}
if(droidstar.get_mode() === "FCS"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_fcs_host());
}
if(droidstar.get_mode() === "DMR"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_dmr_host());
}
if(droidstar.get_mode() === "P25"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_p25_host());
}
if(droidstar.get_mode() === "NXDN"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_nxdn_host());
}
if(droidstar.get_mode() === "M17"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_m17_host());
}
if(droidstar.get_mode() === "IAX"){
mainTab.comboHost.currentIndex = mainTab.comboHost.find(droidstar.get_iax_host());
}
mainTab.comboModule.currentIndex = mainTab.comboModule.find(droidstar.get_module());
settingsTab.callsignEdit.text = droidstar.get_callsign();
settingsTab.dmridEdit.text = droidstar.get_dmrid();
settingsTab.comboEssid.currentIndex = settingsTab.comboEssid.find(droidstar.get_essid());
settingsTab.bmpwEdit.text = droidstar.get_bm_password();
settingsTab.tgifpwEdit.text = droidstar.get_tgif_password();
settingsTab.latEdit.text = droidstar.get_latitude();
settingsTab.lonEdit.text = droidstar.get_longitude();
settingsTab.locEdit.text = droidstar.get_location();
settingsTab.descEdit.text = droidstar.get_description();
settingsTab.urlEdit.text = droidstar.get_url();
settingsTab.swidEdit.text = droidstar.get_swid();
settingsTab.pkgidEdit.text = droidstar.get_pkgid();
settingsTab.dmroptsEdit.text = droidstar.get_dmr_options();
mainTab.dmrtgidEdit.text = droidstar.get_dmrtgid();
settingsTab.mycallEdit.text = droidstar.get_mycall();
settingsTab.urcallEdit.text = droidstar.get_urcall();
settingsTab.rptr1Edit.text = droidstar.get_rptr1();
settingsTab.rptr2Edit.text = droidstar.get_rptr2();
settingsTab.txtimerEdit.text = droidstar.get_txtimeout();
settingsTab.modemRXFreqEdit.text = droidstar.get_modemRxFreq();
settingsTab.modemTXFreqEdit.text = droidstar.get_modemTxFreq();
settingsTab.modemRXOffsetEdit.text = droidstar.get_modemRxOffset();
settingsTab.modemTXOffsetEdit.text = droidstar.get_modemTxOffset();
settingsTab.modemRXDCOffsetEdit.text = droidstar.get_modemRxDCOffset();
settingsTab.modemTXDCOffsetEdit.text = droidstar.get_modemTxDCOffset();
settingsTab.modemRXLevelEdit.text = droidstar.get_modemRxLevel();
settingsTab.modemTXLevelEdit.text = droidstar.get_modemTxLevel();
settingsTab.modemRFLevelEdit.text = droidstar.get_modemRFLevel();
settingsTab.modemTXDelayEdit.text = droidstar.get_modemTxDelay();
settingsTab.modemCWIdTXLevelEdit.text = droidstar.get_modemCWIdTxLevel();
settingsTab.modemDStarTXLevelEdit.text = droidstar.get_modemDstarTxLevel();
settingsTab.modemDMRTXLevelEdit.text = droidstar.get_modemDMRTxLevel();
settingsTab.modemYSFTXLevelEdit.text = droidstar.get_modemYSFTxLevel();
settingsTab.modemP25TXLevelEdit.text = droidstar.get_modemP25TxLevel()
settingsTab.modemNXDNTXLevelEdit.text = droidstar.get_modemNXDNTxLevel();
settingsTab.modemBaudEdit.text = droidstar.get_modemBaud();
hostsTab.hostsTextEdit.text = droidstar.get_local_hosts();
}
function onUpdate_log(s) {
logTab.logText.append(s);
}
function onOpen_vocoder_dialog() {
vocoderDialog.open();
}
function onConnect_status_changed(c) {
if(c === 0){
if(mainTab.buttonTX.tx){
mainTab.buttonTX.tx = false;
droidstar.tx_clicked(false);
mainTab.txtimer.running = false;
mainTab.btntxt.color = "black";
mainTab.btntxt.text = "TX";
}
mainTab.connectbutton.text = "Connect";
mainTab.comboMode.enabled = true;
mainTab.comboHost.enabled = true;
mainTab.comboModule.enabled = true;
mainTab.buttonTX.enabled = false;
mainTab.btntxt.color = "steelblue";
mainTab.data1.text = "";
mainTab.data2.text = "";
mainTab.data3.text = "";
mainTab.data4.text = "";
mainTab.data5.text = "";
mainTab.data6.text = "";
mainTab.netstatus.text = "Not connected";
}
if(c === 1){
mainTab.connectbutton.text = "Connecting";
mainTab.comboMode.enabled = false;
mainTab.comboHost.enabled = false;
if(mainTab.comboMode.currentText != "REF"){
mainTab.comboModule.enabled = false;
}
}
if(c === 2){
mainTab.connectbutton.text = "Disconnect";
mainTab.comboMode.enabled = false;
mainTab.comboHost.enabled = false;
if(mainTab.comboMode.currentText != "REF"){
mainTab.comboModule.enabled = false;
}
if(mainTab.comboMode.currentText === "YSF"){
settingsTab.m171600.checked = true;
}
if(mainTab.comboMode.currentText === "FCS"){
settingsTab.m171600.checked = true;
}
if(mainTab.comboMode.currentText === "M17"){
if(settingsTab.mmdvmBox.checked){
mainTab.comboModule.enabled = true;
mainTab.comboHost.enabled = true;
}
settingsTab.m173200.checked = true;
}
mainTab.buttonTX.enabled = true;
mainTab.btntxt.color = "black";
mainTab.agcBox.checked = true;
droidstar.set_debug(settingsTab.debugBox.checked);
}
if(c === 3){
}
if(c === 4){
idcheckDialog.open();
onConnect_status_changed(0);
}
if(c === 5){
errorDialog.text = droidstar.get_error_text();
if(errorDialog.text == ""){
errorDialog.text = "Banned!"
}
errorDialog.open();
droidstar.onConnect_status_changed(0);
}
}
}
}