Artemis 4 RC1
This commit is contained in:
450
ui/Artemis.qml
Normal file
450
ui/Artemis.qml
Normal file
@@ -0,0 +1,450 @@
|
||||
import QtQuick
|
||||
import QtQuick.Window
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Controls.Material
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Dialogs
|
||||
|
||||
|
||||
Window {
|
||||
id: window
|
||||
width: 1100
|
||||
height: 800
|
||||
|
||||
Component.onCompleted: {
|
||||
x = Screen.width/2 - width/2
|
||||
y = Screen.height/2 - height/2
|
||||
}
|
||||
|
||||
title: qsTr("Artemis")
|
||||
visible: true
|
||||
|
||||
modality: Qt.ApplicationModal
|
||||
flags: Qt.Window
|
||||
|
||||
// Windows without upper bar
|
||||
//flags: Qt.FramelessWindowHint
|
||||
|
||||
signal loadSignal(int signalId)
|
||||
signal showPref()
|
||||
signal showDBmanager()
|
||||
signal showCatManager()
|
||||
signal openSigEditor(string type, var sig_param, bool is_new)
|
||||
signal showSpaceWeather()
|
||||
signal checkDbUpdates()
|
||||
signal startDownloader()
|
||||
signal openDbDirectory()
|
||||
signal newDb(string name)
|
||||
signal exportDb(string path)
|
||||
signal importDb(string path)
|
||||
|
||||
property var loadedList
|
||||
|
||||
function populateList(signalsList) {
|
||||
loadedList = signalsList
|
||||
textFieldSearch.enabled = true
|
||||
var currentIndex = listView.currentIndex
|
||||
refreshList()
|
||||
// Set the currentIndex back after refreshing the list
|
||||
if (currentIndex >= 0 && currentIndex < listModel.count) {
|
||||
listView.currentIndex = currentIndex
|
||||
}
|
||||
}
|
||||
|
||||
function refreshList() {
|
||||
listModel.clear()
|
||||
for (var i = 0; i < loadedList.length; i++) {
|
||||
var name = loadedList[i].name.toLowerCase()
|
||||
var search = textFieldSearch.text.toLowerCase()
|
||||
if (name.includes(search)) {
|
||||
listModel.append(loadedList[i])
|
||||
}
|
||||
}
|
||||
itemChangedList()
|
||||
}
|
||||
|
||||
function itemChangedList() {
|
||||
var selected_sig = listModel.get(listView.currentIndex)
|
||||
if (selected_sig !== undefined) {
|
||||
loadSignal(listModel.get(listView.currentIndex).SIG_ID)
|
||||
editSignalMenu.enabled = true
|
||||
} else {
|
||||
editSignalMenu.enabled = false
|
||||
}
|
||||
}
|
||||
|
||||
function clearList() {
|
||||
listModel.clear()
|
||||
loadedList = []
|
||||
textFieldSearch.clear()
|
||||
textFieldSearch.enabled = false
|
||||
}
|
||||
|
||||
function lockMenu(toggle) {
|
||||
if (toggle) {
|
||||
openFileMenu.enabled = false
|
||||
exportFileMenu.enabled = false
|
||||
newSignalMenu.enabled = false
|
||||
editCategoryMenu.enabled = false
|
||||
} else {
|
||||
openFileMenu.enabled = true
|
||||
exportFileMenu.enabled = true
|
||||
newSignalMenu.enabled = true
|
||||
editCategoryMenu.enabled = true
|
||||
}
|
||||
}
|
||||
|
||||
function bottomInfoBar(message, messageType) {
|
||||
bottomInfoLabel.text = message
|
||||
switch (messageType) {
|
||||
case "warning":
|
||||
bottomInfoLabel.color = Material.color(Material.Red)
|
||||
break
|
||||
case "info":
|
||||
bottomInfoLabel.color = Material.foreground
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
function openGeneralDialog(messageType, title, message) {
|
||||
dialogGeneral.messageType = messageType
|
||||
dialogGeneral.title = title
|
||||
dialogGeneral.message = message
|
||||
dialogGeneral.open()
|
||||
}
|
||||
|
||||
function openDialogDownloadDb(messageType, title, message) {
|
||||
dialogDownloadDb.messageType = messageType
|
||||
dialogDownloadDb.title = title
|
||||
dialogDownloadDb.message = message
|
||||
dialogDownloadDb.open()
|
||||
}
|
||||
|
||||
function openDialogDownloadArtemis(messageType, title, message) {
|
||||
dialogDownloadArtemis.messageType = messageType
|
||||
dialogDownloadArtemis.title = title
|
||||
dialogDownloadArtemis.message = message
|
||||
dialogDownloadArtemis.open()
|
||||
}
|
||||
|
||||
DialogMessage {
|
||||
id: dialogDownloadDb
|
||||
modal: true
|
||||
|
||||
standardButtons: Dialog.Cancel | Dialog.Yes
|
||||
|
||||
onAccepted: {
|
||||
startDownloader()
|
||||
}
|
||||
}
|
||||
|
||||
DialogMessage {
|
||||
id: dialogDownloadArtemis
|
||||
modal: true
|
||||
|
||||
standardButtons: Dialog.Cancel | Dialog.Yes
|
||||
|
||||
onAccepted: {
|
||||
Qt.openUrlExternally("https://github.com/AresValley/Artemis")
|
||||
}
|
||||
}
|
||||
|
||||
DialogMessage {
|
||||
id: dialogGeneral
|
||||
modal: true
|
||||
|
||||
standardButtons: Dialog.Ok
|
||||
}
|
||||
|
||||
Dialog {
|
||||
id: dialogNewDb
|
||||
|
||||
x: (parent.width - width) / 2
|
||||
y: (parent.height - height) / 2
|
||||
|
||||
modal: true
|
||||
closePolicy: Popup.NoAutoClose
|
||||
|
||||
standardButtons: Dialog.Ok | Dialog.Cancel
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
|
||||
TextField {
|
||||
id: newDbName
|
||||
Layout.fillWidth: true
|
||||
placeholderText: qsTr("New DB Name")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
onAccepted: {
|
||||
newDb(newDbName.text)
|
||||
}
|
||||
}
|
||||
|
||||
FileDialog {
|
||||
id: exportDialog
|
||||
title: "Please choose a save folder..."
|
||||
fileMode: FileDialog.SaveFile
|
||||
nameFilters: ["Archive (.tar)"]
|
||||
|
||||
onAccepted: {
|
||||
exportDb(selectedFile)
|
||||
}
|
||||
}
|
||||
|
||||
FileDialog {
|
||||
id: importDialog
|
||||
title: "Please choose a valid tar.gz archive..."
|
||||
fileMode: FileDialog.OpenFile
|
||||
nameFilters: ["Archive (*.tar)"]
|
||||
|
||||
onAccepted: {
|
||||
importDb(selectedFile)
|
||||
}
|
||||
}
|
||||
|
||||
About {
|
||||
id: aboutDialog
|
||||
}
|
||||
|
||||
Page {
|
||||
anchors.fill: parent
|
||||
leftPadding: 5
|
||||
rightPadding: 5
|
||||
bottomPadding: 5
|
||||
|
||||
header: MenuBar {
|
||||
id: topBar
|
||||
|
||||
Menu {
|
||||
title: qsTr("File")
|
||||
|
||||
MenuItem {
|
||||
text: "New Database..."
|
||||
onClicked: {dialogNewDb.open()}
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: "Load Database..."
|
||||
onClicked: {showDBmanager()}
|
||||
}
|
||||
|
||||
MenuSeparator {}
|
||||
|
||||
MenuItem {
|
||||
id: importFileMenu
|
||||
text: "Import Database"
|
||||
onClicked: {importDialog.open()}
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
id: exportFileMenu
|
||||
text: "Export Database"
|
||||
onClicked: {exportDialog.open()}
|
||||
enabled: false
|
||||
}
|
||||
|
||||
MenuSeparator {}
|
||||
|
||||
MenuItem {
|
||||
id: editCategoryMenu
|
||||
text: "Edit Tags"
|
||||
onClicked: {showCatManager()}
|
||||
enabled: false
|
||||
}
|
||||
|
||||
MenuSeparator {}
|
||||
|
||||
MenuItem {
|
||||
id: openFileMenu
|
||||
text: "Open Database Folder"
|
||||
onClicked: {openDbDirectory()}
|
||||
enabled: false
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: "Preferences"
|
||||
onClicked: {showPref()}
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: "Exit"
|
||||
onClicked: {window.close()}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Menu {
|
||||
id: signalMenu
|
||||
title: qsTr("Signal")
|
||||
|
||||
MenuItem {
|
||||
id: newSignalMenu
|
||||
enabled: false
|
||||
text: "New.."
|
||||
onClicked: {openSigEditor('Signal', [], true)}
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
id: editSignalMenu
|
||||
enabled: false
|
||||
text: "Edit..."
|
||||
onClicked: {openSigEditor('Signal', [], false)}
|
||||
}
|
||||
}
|
||||
|
||||
Menu {
|
||||
title: qsTr("Space Weather")
|
||||
|
||||
MenuItem {
|
||||
text: "Check Report"
|
||||
onClicked: {
|
||||
showSpaceWeather()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Menu {
|
||||
id: aboutMenu
|
||||
title: qsTr("Help")
|
||||
|
||||
MenuItem {
|
||||
text: "Check for Updates"
|
||||
onClicked: {checkDbUpdates()}
|
||||
}
|
||||
|
||||
MenuSeparator {}
|
||||
|
||||
MenuItem {
|
||||
text: "Documentation"
|
||||
onClicked: {Qt.openUrlExternally('https://AresValley.github.io/Artemis')}
|
||||
}
|
||||
|
||||
MenuItem {
|
||||
text: "Show Release Notes"
|
||||
onClicked: {Qt.openUrlExternally('https://github.com/AresValley/Artemis/blob/master/CHANGELOG.md')}
|
||||
}
|
||||
|
||||
MenuSeparator {}
|
||||
|
||||
MenuItem {
|
||||
text: "Report Issue"
|
||||
onClicked: {Qt.openUrlExternally('https://github.com/AresValley/Artemis/issues')}
|
||||
}
|
||||
|
||||
MenuSeparator {}
|
||||
|
||||
MenuItem {
|
||||
text: "About"
|
||||
onClicked: {
|
||||
aboutDialog.open()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
footer: Label {
|
||||
id: bottomInfoLabel
|
||||
font.pixelSize: 12
|
||||
leftPadding: 5
|
||||
rightPadding: 5
|
||||
bottomPadding: 5
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
spacing: 20
|
||||
|
||||
ColumnLayout {
|
||||
Layout.maximumWidth: 250
|
||||
|
||||
TextField {
|
||||
id: textFieldSearch
|
||||
enabled: false
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 10
|
||||
placeholderText: qsTr("Search")
|
||||
onTextChanged: {
|
||||
refreshList()
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
|
||||
ListView {
|
||||
id: listView
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
highlightMoveDuration: 0
|
||||
clip: true
|
||||
focus: true
|
||||
ScrollBar.vertical: bar
|
||||
highlight: Rectangle { color: Material.accent; radius: 5 }
|
||||
onCurrentIndexChanged: { itemChangedList() }
|
||||
delegate: Item {
|
||||
id: listDelegate
|
||||
width: ListView.view.width
|
||||
height: 20
|
||||
Label {text: name}
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: listView.currentIndex = index
|
||||
}
|
||||
}
|
||||
model: ListModel {
|
||||
id: listModel
|
||||
}
|
||||
}
|
||||
|
||||
ScrollBar {
|
||||
id: bar
|
||||
Layout.fillHeight: true
|
||||
active: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
TabBar {
|
||||
id: tabBar
|
||||
width: parent.width
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
Layout.fillWidth: true
|
||||
|
||||
TabButton {
|
||||
text: qsTr("Signal")
|
||||
}
|
||||
|
||||
TabButton {
|
||||
text: qsTr("Filter")
|
||||
}
|
||||
}
|
||||
|
||||
StackLayout {
|
||||
currentIndex: tabBar.currentIndex
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
Item {
|
||||
SignalPage {
|
||||
id: signalPage
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
FilterPage {
|
||||
id: filterPage
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user