diff --git a/Gui/Dashboard.qml b/Gui/Dashboard.qml index 22bf6c2..37f523e 100644 --- a/Gui/Dashboard.qml +++ b/Gui/Dashboard.qml @@ -2,127 +2,106 @@ import QtQuick import QtQuick.Controls import QtQuick.Layouts -ColumnLayout -{ - anchors.top: TopBar.bottom +ColumnLayout { + anchors.top: Navigation.bottom - Rectangle - { - color: "dimgrey" + Rectangle { + Layout.bottomMargin: 3 Layout.fillHeight: true Layout.fillWidth: true - Layout.bottomMargin: 3 + color: "dimgrey" radius: 45 - RowLayout - { + RowLayout { anchors.fill: parent - Rectangle - { + Rectangle { id: contractButton - width: 300 - height: 145 - color: "darkslategray" - radius: 45 + Layout.alignment: Qt.AlignHCenter border.color: "steelblue" border.width: 1 - Text - { - text: qsTr("Aufträge") - anchors.centerIn: parent - font.pixelSize: 45 - font.bold: true - color: "lightgoldenrodyellow" - } + color: "darkslategray" + height: 145 + radius: 45 + width: 300 - MouseArea - { + Text { + anchors.centerIn: parent + color: "lightgoldenrodyellow" + font.bold: true + font.pixelSize: 45 + text: qsTr("Aufträge") + } + MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true - onPressed: - { - contractButton.color = "darkolivegreen" - contractButton.border.width = 3 - contractButton.border.color = "skyblue" - console.log("Aufträge...") + + onExited: { + contractButton.color = "darkslategray"; + contractButton.border.color = "steelblue"; + contractButton.border.width = 1; } - - onReleased: - { - contractButton.color = "darkslategray" - contractButton.border.width = 1 - contractButton.border.color = "steelblue" + onHoveredChanged: { + var w = contractButton.border.width === 3 ? 1 : 3; + contractButton.border.width = w; } - - onHoveredChanged: - { - var w = contractButton.border.width === 3? 1: 3 - contractButton.border.width = w + onPressed: { + contractButton.color = "darkolivegreen"; + contractButton.border.width = 3; + contractButton.border.color = "skyblue"; + console.log("Aufträge..."); } - - onExited: - { - - contractButton.color = "darkslategray" - contractButton.border.color = "steelblue" - contractButton.border.width = 1 + onReleased: { + contractButton.color = "darkslategray"; + contractButton.border.width = 1; + contractButton.border.color = "steelblue"; } } } - - Rectangle - { + Rectangle { id: offerButton - width: 300 - height: 145 - color: "darkslategray" - radius: 45 + Layout.alignment: Qt.AlignHCenter border.color: "steelblue" border.width: 1 - Text - { - text: qsTr("Angebote") + color: "darkslategray" + height: 145 + radius: 45 + width: 300 + + Text { anchors.centerIn: parent - font.pixelSize: 45 - font.bold: true color: "lightgoldenrodyellow" + font.bold: true + font.pixelSize: 45 + text: qsTr("Angebote") } - MouseArea - { + MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor hoverEnabled: true - onPressed: - { - offerButton.color = "darkolivegreen" - offerButton.border.width = 3 - offerButton.border.color = "skyblue" - console.log("Angebote...") + onExited: { + offerButton.color = "darkslategray"; + offerButton.border.color = "steelblue"; + offerButton.border.width = 1; } - onReleased: - { - offerButton.color = "darkslategray" - offerButton.border.width = 1 - offerButton.border.color = "steelblue" + onHoveredChanged: { + var w = offerButton.border.width === 3 ? 1 : 3; + offerButton.border.width = w; } - - onHoveredChanged: - { - var w = offerButton.border.width === 3? 1: 3 - offerButton.border.width = w + onPressed: { + offerButton.color = "darkolivegreen"; + offerButton.border.width = 3; + offerButton.border.color = "skyblue"; + console.log("Angebote..."); } - - onExited: - { - - offerButton.color = "darkslategray" - offerButton.border.color = "steelblue" - offerButton.border.width = 1 + onReleased: { + offerButton.color = "darkslategray"; + offerButton.border.width = 1; + offerButton.border.color = "steelblue"; } } } diff --git a/Gui/TopBar.qml b/Gui/Navigation.qml similarity index 81% rename from Gui/TopBar.qml rename to Gui/Navigation.qml index 6378bc9..b0a4058 100644 --- a/Gui/TopBar.qml +++ b/Gui/Navigation.qml @@ -3,8 +3,6 @@ import QtQuick.Controls import QtQuick.Layouts ColumnLayout { - id: topBar - height: parent.height spacing: 0 @@ -14,18 +12,12 @@ ColumnLayout { } ButtonGroup { id: buttonBar - } BarButton { id: dashBoard ButtonGroup.group: buttonBar - Layout.margins: 3 - Layout.topMargin: Dimensions.s - flat: true icon.source: "qrc:/images/dash.svg" - implicitHeight: 90 - implicitWidth: 90 text: qsTr("Dashboard") onClicked: { @@ -36,11 +28,7 @@ ColumnLayout { id: kunden ButtonGroup.group: buttonBar - Layout.margins: 3 - flat: true icon.source: "qrc:/images/customer.svg" - implicitHeight: 90 - implicitWidth: 90 text: qsTr("Kunden") onClicked: { @@ -51,11 +39,7 @@ ColumnLayout { id: objekt ButtonGroup.group: buttonBar - Layout.margins: 3 - flat: true icon.source: "qrc:/images/object.svg" - implicitHeight: 90 - implicitWidth: 90 text: qsTr("Objekt") onClicked: { @@ -66,11 +50,7 @@ ColumnLayout { id: mitarbeiter ButtonGroup.group: buttonBar - Layout.margins: 3 - flat: true icon.source: "qrc:/images/employee.svg" - implicitHeight: 90 - implicitWidth: 90 text: qsTr("Mitarbeiter") onClicked: { @@ -81,11 +61,7 @@ ColumnLayout { id: offers ButtonGroup.group: buttonBar - Layout.margins: 3 - flat: true icon.source: "qrc:/images/offer.svg" - implicitHeight: 90 - implicitWidth: 90 text: qsTr("Angebote") onClicked: { @@ -96,11 +72,7 @@ ColumnLayout { id: abrechnung ButtonGroup.group: buttonBar - Layout.margins: 3 - flat: true icon.source: "qrc:/images/invoice.svg" - implicitHeight: 90 - implicitWidth: 90 text: qsTr("Abrechnung") } Item { diff --git a/Gui/main.qml b/Gui/main.qml index 404cf37..393c4b7 100644 --- a/Gui/main.qml +++ b/Gui/main.qml @@ -4,173 +4,148 @@ import QtQuick.Controls import QtQuick.Dialogs import QtCore -ApplicationWindow -{ +ApplicationWindow { id: appWindow - width: Screen.width * .75 - height: Screen.height * .85 - visible: true - title: "TERO Personal" - font: Typography.body - color: Colors.mantle + property string confile: "" property alias settingsFileDialog: settingsFiledialog + function goToLogin() { + appLoader.source = "LoginScreen.qml"; + navigation.visible = true; + } + function showWindow(why) { + if (why === 3) { + systray.setVisible(false); + appWindow.show(); + } + } + + color: Colors.mantle + font: Typography.body + height: Screen.height * .85 palette.text: Colors.foreground + title: "TERO Personal" + visible: true + width: Screen.width * .75 + Component.onCompleted: { + config.configurationReady.connect(goToLogin); + systray.activated.connect(showWindow); - TopBar - { - id:topBar - visible: bad_config || !db_con ? false: true + if (bad_config) { + importDialog.open(); + } else { + if (db_con) + appLoader.source = "LoginScreen.qml"; + else + appLoader.source = "NoDbConnection.qml"; + } + } + onClosing: close => { + if (false) { + console.log("Main window closed!! Was soll ich tun? kann ich mich beenden?!"); + } + } + onVisibilityChanged: { + if (appWindow.visibility === Window.Minimized && config.systray()) { + systray.setVisible(true); + appWindow.hide(); + } + } + onWindowStateChanged: windowState => { + if (windowState !== Qt.WindowMinimized) { + systray.setVisible(false); + appWindow.show(); + } } - PrinterDialog - { + Navigation { + id: navigation + + visible: bad_config || !db_con ? false : true + } + PrinterDialog { id: printerDialog - } - ReadMe - { + } + ReadMe { id: readMeWin - } - Item - { + } + Item { id: mainView + } - Loader - { - id: appLoader - - anchors - { - left: topBar.right + Rectangle { + id: contentBackground + anchors { + bottom: parent.bottom + left: navigation.right right: parent.right top: parent.top - bottom: parent.bottom - - - - topMargin: Dimensions.l - bottomMargin: Dimensions.l - rightMargin: Dimensions.l - leftMargin: Dimensions.l - } + color: Colors.background + } + + Loader { + id: appLoader property alias window: appWindow + + anchors { + fill: contentBackground + margins: Dimensions.l + } } - - Dialog - { + Dialog { id: importDialog - modal: true + anchors.centerIn: parent + modal: true standardButtons: Dialog.Yes | Dialog.No - onAccepted: settingsFiledialog.open() - onRejected: appLoader.source= "Firststart.qml" title: qsTr("Einstellungen importieren") + + onAccepted: settingsFiledialog.open() + onRejected: appLoader.source = "Firststart.qml" } - - FileDialog - { - + FileDialog { id: settingsFiledialog - title: qsTr("PYQCRM Einstellungen") + currentFolder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0] modality: "ApplicationModal" nameFilters: [qsTr("PYQCRM Einstellungen (*.pyqrec)")] - onAccepted: - { - exportFilePassword.open() - confile = selectedFile + title: qsTr("PYQCRM Einstellungen") + + onAccepted: { + exportFilePassword.open(); + confile = selectedFile; } } - - Dialog - { + Dialog { id: exportFilePassword - modal: true - title: qsTr("PYQCRM Einstellungen") + anchors.centerIn: parent + modal: true standardButtons: Dialog.Ok | Dialog.Cancel + title: qsTr("PYQCRM Einstellungen") + onAccepted: config.importConfig(confile, exportPasswordInput.text) - ColumnLayout - { - RowLayout - { - Label - { + + ColumnLayout { + RowLayout { + Label { text: qsTr("Passwort eingeben:") } - - TextField - { + TextField { id: exportPasswordInput + echoMode: TextInput.Password implicitWidth: 300 } } } } - - Component.onCompleted: - { - config.configurationReady.connect(goToLogin) - systray.activated.connect(showWindow) - - if(bad_config) - { - importDialog.open() - } - else - { - if (db_con) appLoader.source= "LoginScreen.qml" - else appLoader.source= "NoDbConnection.qml" - } - } - - - function showWindow(why) - { - if (why === 3) - { - systray.setVisible(false) - appWindow.show() - } - } - onVisibilityChanged: - { - if (appWindow.visibility === Window.Minimized && config.systray()) - { - systray.setVisible(true) - appWindow.hide() - } - } - - onWindowStateChanged: (windowState) => - { - if (windowState !== Qt.WindowMinimized) - { - systray.setVisible(false) - appWindow.show() - } - } - - onClosing: (close) => - { - if (false) - { - console.log("Main window closed!! Was soll ich tun? kann ich mich beenden?!") - } - } - - function goToLogin() - { - appLoader.source= "LoginScreen.qml" - topBar.visible = true - } } diff --git a/Gui/qmldir b/Gui/qmldir index 2c090fe..a5ac533 100644 --- a/Gui/qmldir +++ b/Gui/qmldir @@ -1,2 +1,2 @@ module gui -TopBar 1.0 TopBar.qml +TopBar 1.0 Navigation.qml diff --git a/TeroStyle/BarButton.qml b/TeroStyle/BarButton.qml index 6c87f15..c29de2e 100644 --- a/TeroStyle/BarButton.qml +++ b/TeroStyle/BarButton.qml @@ -10,40 +10,43 @@ T.ToolButton { icon.color: Colors.foreground icon.height: 36 icon.width: 36 - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, implicitContentHeight + topPadding + bottomPadding) - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, implicitContentWidth + leftPadding + rightPadding) + implicitHeight: 90 + implicitWidth: 100 topPadding: 20 - background: Rectangle { - id: mainrect - - border.color: control.palette.highlight - border.width: control.visualFocus ? 2 : 0 - color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button, control.palette.mid, control.down ? 0.5 : 0.0) - implicitHeight: control.height - implicitWidth: control.width - visible: !control.flat || control.down || control.checked || control.highlighted - x: control.left - y: control.top - - Rectangle { - color: "yellow" - implicitHeight: control.height - implicitWidth: 6 - x: mainrect.left - y: mainrect.top - } - } contentItem: Column { + readonly property color color: control.checked ? Colors.primaryShade : control.hovered ? Colors.primary : Colors.foreground + IconLabel { - icon: control.icon + icon.color: parent.color + icon.source: control.icon.source + icon.height: control.icon.height + icon.width: control.icon.width + color: parent.color x: parent.width * .5 - width * .5 } Label { - color: Colors.foreground - font: Typography.dash + font: Typography.small + color: parent.color text: control.text x: parent.width * .5 - width * .5 } } + + Rectangle { + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.top: parent.top + color: control.checked ? Colors.primaryShade : Colors.primary + implicitWidth: 6 + visible: control.checked || control.hovered + } + MouseArea { + id: mouseArea + + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + + onPressed: mouse => mouse.accepted = false + } } diff --git a/TeroStyle/Colors.qml b/TeroStyle/Colors.qml index bcc1df6..af7cb98 100644 --- a/TeroStyle/Colors.qml +++ b/TeroStyle/Colors.qml @@ -11,9 +11,10 @@ QtObject { readonly property color primary: "#b81a34" readonly property color primaryContrast: "#fdfdfd" readonly property color primaryLighter: Qt.lighter(primary, 1.5) + readonly property color primaryShade: theme === dark ? primaryLighter : Qt.darker(primary, 1.5) readonly property color foreground: theme === dark ? "#fdfdfd" : "#110b0c" readonly property color background: theme === dark ? "#303136" : "#eff1f5" - readonly property color mantle: theme === dark ? "#1e1f22" : "#e7e9ef" + readonly property color mantle: theme === dark ? "#1E1E23" : "#e7e9ef" readonly property color interactive: theme === dark ? "#878b97" : "#d9d9da" readonly property color error: theme === dark ? "#ff2264" : "#ff004b" readonly property color transparent: "transparent" diff --git a/TeroStyle/Typography.qml b/TeroStyle/Typography.qml index 145d16d..006b1c4 100644 --- a/TeroStyle/Typography.qml +++ b/TeroStyle/Typography.qml @@ -3,38 +3,29 @@ pragma Singleton import QtCore import QtQuick -Item -{ - readonly property FontLoader robotoCondensed: FontLoader - { +Item { + readonly property font body: ({ + family: robotoCondensed.font, + pointSize: 16, + weight: Font.Medium, + letterSpacing: 0, + kerning: true + }) + readonly property font small: ({ + family: body.family, + pointSize: 11, + weight: Font.DemiBold, + letterSpacing: body.letterSpacing, + kerning: body.kerning + }) + readonly property font h1: ({ + family: body.family, + pointSize: 38, + weight: body.weight, + letterSpacing: body.letterSpacing, + kerning: body.kerning + }) + readonly property FontLoader robotoCondensed: FontLoader { source: "qrc:/fonts/RobotoCondensed.otf" } - - readonly property font body: - ({ - family: robotoCondensed.font, - pointSize: 16, - weight: Font.Medium, - letterSpacing: 0, - kerning: true, - }) - - readonly property font h1: - ({ - family: body.family, - pointSize: 38, - weight: body.weight, - letterSpacing: body.letterSpacing, - kerning: body.kerning, - }) - - readonly property font dash: - ({ - family: body.family, - pointSize: 10, - weight: body.weight, - letterSpacing: body.letterSpacing, - kerning: body.kerning, - }) - } diff --git a/qml.qrc b/qml.qrc index 05ec096..fe5b25a 100644 --- a/qml.qrc +++ b/qml.qrc @@ -1,6 +1,6 @@ - Gui/TopBar.qml + Gui/Navigation.qml Gui/AdminUserConfig.qml Gui/EncryptionKey.qml Gui/DbConfiguration.qml