Files
advotracker/advotracker_qml/resources/pages/advotracker.qml
2020-06-19 17:44:02 +02:00

560 lines
14 KiB
QML
Executable File

/* AdvoTracker - Hotline tracking tool for Advocats
*
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
* SPDX-License-Identifier: (0BSD or MIT)
*/
import QtQuick 2.9
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.3
import QtQuick.Controls.Material 2.1
import QtQuick.Controls.Universal 2.1
import Qt.labs.settings 1.0
import RustCode 1.0
// AdvoTracker Module
//import de.networkx.AdvoTracker 1.0 as Nwx
ApplicationWindow {
id: windowMain
visible: true
property int margin: 5
property bool authenticated: false
title: "AdvoTracker"
width: minimumWidth
height: minimumHeight
//minimumWidth: Math.max(toolBarMain.implicitWidth, (advotrackerLabel.implicitWidth + 2 * paneMain.padding))
minimumWidth: Math.max(toolBarMain.implicitWidth, (customerLogo.implicitWidth + 2 * paneMain.padding))
//minimumHeight: columnMain.implicitHeight
//minimumWidth: 50
minimumHeight: 680
Settings {
id: settings
property string style: "Default"
}
Action {
id: actionStackPrevious
shortcut: ["Esc", "Back", "Ctrl+Left", "p"]
enabled: stackViewMain.depth > 1
onTriggered: {
stackViewMain.pop()
listViewDrawerMain.currentIndex = -1
}
}
Action {
id: actionStackNext
shortcut: ["Ctrl+Right"]
enabled: stackViewMain.depth > 1
onTriggered: {
listViewDrawerMain.currentIndex = +1
stackViewMain.push(listViewMain.source)
}
}
Action {
id: actionStackTest
shortcut: ["Ctrl+Alt+t"]
enabled: stackViewMain.depth > 1
onTriggered: {
listViewDrawerMain.currentIndex = +1
stackView.push("qrc:/TestPage.qml", {user_info: user_data})
}
}
Action {
id: actionAbout
text: Nwx.MdiFont.Icon.helpCircleOutline + " " + qsTr("&About")
shortcut: "Ctrl+A"
onTriggered: dialogAbout.open()
}
Action {
id: actionCopy
text: Nwx.MdiFont.Icon.contentCopy + " " + qsTr("&Copy")
//iconName: "copy"
enabled: (!!activeFocusItem && !!activeFocusItem["copy"])
shortcut: StandardKey.Copy
onTriggered: window.activeFocusItem.copy()
}
Action {
id: actionCut
text: Nwx.MdiFont.Icon.contentCut + " " + qsTr("Cu&t")
//icon.name: "cut"
shortcut: StandardKey.Cut
//tooltip: "Cut marked text"
//shortcut: "Ctrl+X"
//onTriggered: window.activeFocusItem.cut()
}
Action {
id: actionExport
text: Nwx.MdiFont.Icon.export + " " + qsTr("E&xport")
shortcut: "Alt+X"
}
Action {
id: actionMenu
shortcut: "Ctrl+M"
onTriggered: menuOptions.open()
}
Action {
id: actionQuit
text: Nwx.MdiFont.Icon.closeCircleOutline + " " + qsTr("&Quit")
icon.name: "eject"
shortcut: "Ctrl+Q"
onTriggered: quitDialog.open()
}
Action {
id: actionPaste
text: Nwx.MdiFont.Icon.contentPaste + " " + qsTr("P&aste")
shortcut: StandardKey.Paste
//shortcut: "Ctrl+V"
onTriggered: window.activeFocusItem.paste()
}
Action {
id: actionSettings
text: Nwx.MdiFont.Icon.settings + " " + qsTr("Settings")
//shortcut: "Ctrl+S"
//onTriggered: window.activeFocusItem.paste()
}
Action {
id: actionUserChange
text: Nwx.MdiFont.Icon.accountSettings + " " + qsTr("&User Settings")
shortcut: "Ctrl+C"
onTriggered: {
stackViewMain.push("qrc:/pages/UserPage.qml");
//changeUserDrawer.open()
}
}
Action {
id: actionUserNew
text: Nwx.MdiFont.Icon.accountPlus + " " + qsTr("&New User")
shortcut: "Ctrl+N"
onTriggered: {
stackViewMain.push("qrc:/pages/NewUserPage.qml");
//newUserDrawer.open()
}
}
Action {
id: actionUserRemove
text: Nwx.MdiFont.Icon.accountRemove + " " + qsTr("&Remove User")
shortcut: "Ctrl+R"
onTriggered: {
//source: "qrc:/pages/NewUserPage.qml";
stackViewMain.push("qrc:/pages/NewUserPage.qml");
//newUserDrawer.open()
}
}
header: ToolBar {
id: toolBarMain
Material.foreground: "white"
Layout.fillWidth: true
RowLayout {
spacing: 15
anchors.fill: parent
Layout.fillWidth: true
ToolButton {
id: toolButtonMain
//icon.name: stackViewMain.depth > 1 ? "back" : "drawer"
text: stackViewMain.depth > 1 ? Nwx.MdiFont.Icon.arrowLeft : Nwx.MdiFont.Icon.menu
font.pixelSize: 28
onClicked: {
if (stackViewMain.depth > 1) {
stackViewMain.pop()
listViewDrawerMain.currentIndex = -1
} else {
drawerMain.open()
}
}
}
Label {
id: titleLabel
text: listViewDrawerMain.currentItem ? listViewDrawerMain.currentItem.text : "Hiedemann Rechtsanwälte"
horizontalAlignment: Qt.AlignHCenter
verticalAlignment: Qt.AlignVCenter
Layout.fillWidth: true
}
Label {
text: Nwx.MdiFont.Icon.account
// only show account-icon, if authentication succeeded
opacity: authenticated ? 1.0 : 0
anchors.right: menuMain.left
}
ToolButton {
id: menuMain
text: Nwx.MdiFont.Icon.dotsVertical
font.pixelSize: 28
action: actionMenu
Menu {
id: menuOptions
title: qsTr("Menu")
x: parent.width - width
transformOrigin: Menu.TopRight
Menu {
id: menuEdit
title: Nwx.MdiFont.Icon.pencil + " " + qsTr("Edit")
//title: qsTr("Edit")
MenuItem {
id: menuOptionsCut
action: actionCut
}
MenuItem {
id: menuOptionsCopy
action: actionCopy
}
MenuItem {
id: menuOptionsPaste
action: actionPaste
}
}
MenuSeparator { }
Menu {
id: menuOptionsSettings
title: Nwx.MdiFont.Icon.settings + " " + qsTr("Settings")
//action: actionSettings
MenuItem {
text: Nwx.MdiFont.Icon.settingsBox + " " + qsTr("Dialog Settings")
//text: qsTr("Dialog Settings")
//action: actionDialog
onTriggered: dialogSettings.open()
}
Menu {
id: menuUserSettings
title: Nwx.MdiFont.Icon.accountSettingsVariant + " " + qsTr("User Settings")
//title: qsTr("User Settings")
MenuItem {
id: menuOptonsUserChange
action: actionUserChange
}
MenuItem {
id: menuOptionsUserNew
action: actionUserNew
}
}
}
MenuSeparator { }
MenuItem {
id: menuOptionsAbout
action: actionAbout
}
MenuSeparator { }
MenuItem {
id: menuOptionsQuit
action: actionQuit
//onPressed: quitDialog.open()
}
} // menuOptions
}
}
}
Drawer {
id: drawerMain
width: Math.min(windowMain.width, windowMain.height) / 4 * 2
height: Math.min(windowMain.height) / 4 * 2
interactive: stackViewMain.depth === 1
ListView {
id: listViewDrawerMain
focus: true
currentIndex: -1
anchors.fill: parent
model: ListModel {
ListElement { title: qsTr("Login Page"); source: "qrc:/pages/LoginPage.qml" }
ListElement { title: qsTr("List of claims"); source: "qrc:/pages/PageNumberHarmList.qml" }
//ListElement { title: qsTr("Case of damage"); source: "qrc:/pages/PageNumberHarm.qml" }
ListElement { title: qsTr("List of users"); source: "qrc:/pages/PageUserList.qml" }
ListElement { title: qsTr("List of user roles"); source: "qrc:/pages/UserRoleTablePage.qml" }
//ListElement { title: qsTr("User Roles List"); source: "qrc:/pages/UserRoleListPage.qml" }
//ListElement { title: qsTr("User List"); source: "qrc:/pages/UserListPage.qml" }
//ListElement { title: qsTr("User Roles List"); source: "qrc:/pages/UserRoleListPage.qml" }
//ListElement { title: qsTr("TableView Page"); source: "qrc:/pages/TableViewPage.qml" }
//ListElement { title: qsTr("SqlView Page"); source: "qrc:/pages/SqlViewPage.qml" }
ListElement { title: qsTr("List of MaterialIcons"); source: "qrc:/pages/MaterialIconsPage.qml" }
ListElement { title: qsTr("Case of damage (static)"); source: "qrc:/pages/PageNumberHarmStatic.qml" }
ListElement { title: qsTr("Test UserModel Page"); source: "qrc:/pages/UserModelPage.qml" }
ListElement { title: qsTr("Test Page"); source: "qrc:/pages/TestPage.qml" }
ListElement { title: qsTr("SqlTest Page"); source: "qrc:/pages/SqlTestPage.qml" }
ListElement { title: qsTr("SwipeDelegate Page"); source: "qrc:/pages/SwipeDelegatePage.qml" }
}
delegate: ItemDelegate {
width: parent.width
text: model.title
//highlighted: listViewDrawerMain.isCurrentItem
//highlighted: drawerMain.listviewDrawerMain.isCurrentItem
highlighted: ListView.isCurrentItem
onPressed: {
listViewDrawerMain.currentIndex = index
stackViewMain.push(model.source)
drawerMain.close()
}
}
}
} // drawerMain
StackView {
id: stackViewMain
anchors.fill: parent
initialItem: Pane {
id: paneMain
padding: 15
ColumnLayout {
id: columnMain
anchors.fill: parent
Image {
id: customerLogo
source: "images/customer_logo.jpg"
fillMode: Image.PreserveAspectFit
anchors.top: parent.top
Layout.fillWidth: true
Layout.fillHeight: true
Layout.alignment: Qt.AlignHCenter
} // customerLogo
//Nwx.Label {
Label {
id: advotrackerLabel
text: qsTr("AdvoTracker© - hotline records for advocats")
//anchors.top: customerLogo.bottom
anchors.bottom: parent.bottom
//anchors.topMargin: 12
Layout.alignment: Qt.AlignHCenter
//Layout.fillWidth: true
//anchors.bottom: networkxRow.top
} // advotrackerLabel
/* networkxRox
RowLayout {
id: networkxRow
opacity: 0
Layout.alignment: Qt.AlignVCenter | Qt.AlignBaseline
//Layout.fillWidth: true
//width: paneMain.availableWidth / 6 * 1
//height: paneMain.availableHeight / 6 * 1
anchors.top: advotrackerLabel.bottom
anchors.right: parent.right
anchors.bottom: parent.bottom
//anchors.topMargin: 18
//Layout.minimumWidth: 150
//Layout.preferredWidth: 150
//spacing: 2
Label {
id: networkxLabel
text: qsTr("created by")
antialiasing: true
font.pointSize: 9
}
Image {
id: networkxLogo
//anchors.top: networkxLabel
source: "images/networkx_logo.jpg"
//anchors.right: paneMain.right
//anchors.bottom: paneMain.bottom
sourceSize.width: 1024
sourceSize.height: 1024
Layout.preferredWidth: sourceSize.width / 15
Layout.preferredHeight: sourceSize.height / 18
//width: paneMain.availableWidth / 10
//height: paneMain.availableHeight / 100 * 8
//text: "© Networkx GmbH"
//fillMode: networkxLogo.PreserveAspectFit
//fillMode: networkxLogo.PreserveAspectCrop
//clip: true
} // networkxLogo
} // networkxRow
*/ //networkxRox
} // columnViewMain
} // paneMain
} // stackViewMain
Dialog {
id: dialogSettings
x: Math.round((windowMain.width - width) / 2)
y: Math.round(windowMain.height / 6)
width: Math.round(Math.min(windowMain.width, windowMain.height) / 3 * 2)
modal: true
focus: true
title: "Settings"
standardButtons: Dialog.Ok | Dialog.Cancel
onAccepted: {
settings.style = styleBox.displayText
dialogSettings.close()
}
onRejected: {
styleBox.currentIndex = styleBox.styleIndex
dialogSettings.close()
}
contentItem: ColumnLayout {
id: settingsColumn
spacing: 20
RowLayout {
spacing: 10
//Nwx.Label {
Label {
text: "Style:"
}
ComboBox {
id: styleBox
property int styleIndex: -1
model: availableStyles
Component.onCompleted: {
styleIndex = find(settings.style, Qt.MatchFixedString)
if (styleIndex !== -1)
currentIndex = styleIndex
}
Layout.fillWidth: true
}
}
//Nwx.Label {
Label {
text: "Restart required"
opacity: styleBox.currentIndex !== styleBox.styleIndex ? 1.0 : 0.0
horizontalAlignment: Label.AlignHCenter
verticalAlignment: Label.AlignVCenter
Layout.fillWidth: true
Layout.fillHeight: true
}
}
} // dialogSettings
Dialog {
id: dialogAbout
modal: true
focus: true
title: "About"
width: Math.min(windowMain.width, windowMain.height) / 3 * 2
contentHeight: aboutColumn.height
x: (windowMain.width - width) / 2
y: windowMain.height / 6
Column {
id: aboutColumn
spacing: 20
//Nwx.Label {
Label {
width: dialogAbout.availableWidth
text: "AdvoTracker verwendet Qt."
wrapMode: Label.Wrap
//font.pixelSize: 12
}
//Nwx.Label {
Label {
width: dialogAbout.availableWidth
text: "Mit Qt Quick Controls 2, einer schnellen Multiplattform GUI, "
+ "ist AdvoTracker bereits bestens für Android und andere "
+ "mobile Plattformen vorbereitet ..."
wrapMode: Label.Wrap
//font.pixelSize: 12
}
}
MouseArea {
id: mouseAreaDialogAbout
width: parent.width
height: parent.height
onClicked: dialogAbout.close()
}
} // dialogAbout
Dialog {
id: quitDialog
modal: true
focus: true
x: (windowMain.width - width) / 2
y: windowMain.height / 6
standardButtons: Dialog.Ok | Dialog.Cancel
onAccepted: {
settings.style = styleBox.displayText
Qt.quit()
}
onRejected: {
styleBox.currentIndex = styleBox.styleIndex
dialogSettings.close()
}
contentItem: ColumnLayout {
id: quitColumn
spacing: 20
RowLayout {
spacing: 10
//Nwx.Label {
Label {
text: qsTr("Do you realy want to quit AdvoTracker?")
}
}
}
} // dialogQuit
Dialog {
id: newUserDrawer
width: windowMain.width
height: windowMain.height
//width: Math.min(windowMain.width, parent.height) / 4 * 2
//height: Math.min(windowMain.height) / 4 * 2
title: qsTr("New User")
modal: true
focus: true
enter: Transition {
NumberAnimation { property: "opacity"; from: 0.0; to: 1.0 }
}
exit: Transition {
NumberAnimation { property: "opacity"; from: 1.0; to: 0.0 }
}
Loader {
//id: newUserLoader
anchors.fill: parent
anchors.centerIn: parent
//sourceComponent: rect
source: "qrc:/pages/NewUserPage.qml"
}
} // newUserDrawer
} // windowMain