Merge branch 'main' into schnacke
merge main
This commit is contained in:
213
Gui/AddNewOffer.qml
Normal file
213
Gui/AddNewOffer.qml
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
GridLayout
|
||||||
|
{
|
||||||
|
id: newObject
|
||||||
|
|
||||||
|
columns: 4
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
rowSpacing: 9
|
||||||
|
|
||||||
|
//New Grid
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Objekt:")
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
font: Typography.h2
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
Layout.columnSpan: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
//New grid row
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Objekt-Nr.")
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
}
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
property string name: "objectno"
|
||||||
|
id: objectno
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Button
|
||||||
|
{
|
||||||
|
text: qsTr("Objekt hinzufügen")
|
||||||
|
icon.source: "qrc:/images/PlusCircle.svg"
|
||||||
|
}
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//// New grid row
|
||||||
|
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Straße")
|
||||||
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
property string name: "street"
|
||||||
|
id: street
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
// onTextChanged: checkFields()
|
||||||
|
}
|
||||||
|
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Nr.*")
|
||||||
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
property string name: "houseno"
|
||||||
|
id: houseno
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
// onTextChanged: checkFields()
|
||||||
|
}
|
||||||
|
|
||||||
|
// New grid row
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("PLZ")
|
||||||
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox
|
||||||
|
{
|
||||||
|
property string name: "postcode"
|
||||||
|
id: postcode
|
||||||
|
Layout.fillWidth: true
|
||||||
|
editable: true
|
||||||
|
// onCurrentTextChanged: checkFields()
|
||||||
|
// onEditTextChanged: checkFields()
|
||||||
|
onActivated: currentValue
|
||||||
|
model: address_model
|
||||||
|
textRole: "display"
|
||||||
|
popup.height: 300
|
||||||
|
currentIndex: -1
|
||||||
|
onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
|
||||||
|
|
||||||
|
validator: RegularExpressionValidator
|
||||||
|
{
|
||||||
|
regularExpression: /([0-9]{1,5})/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Ort")
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox
|
||||||
|
{
|
||||||
|
property string name: "city"
|
||||||
|
id: city
|
||||||
|
Layout.fillWidth: true
|
||||||
|
editable: true
|
||||||
|
// onEditTextChanged: checkFields()
|
||||||
|
// onCurrentTextChanged: checkFields()
|
||||||
|
model: address_model
|
||||||
|
textRole: "city"
|
||||||
|
popup.height: 300
|
||||||
|
currentIndex: -1
|
||||||
|
}
|
||||||
|
|
||||||
|
//New Grid
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Kunde:")
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
font: Typography.h2
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
Layout.columnSpan: 3
|
||||||
|
}
|
||||||
|
|
||||||
|
//New grid row
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Kunden-Nr.")
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
property string name: "customerno"
|
||||||
|
id: customerno
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
Button
|
||||||
|
{
|
||||||
|
text: qsTr("Kunde hinzufügen")
|
||||||
|
icon.source: "qrc:/images/PlusCircle.svg"
|
||||||
|
}
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// New grid row
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Kunden-Name")
|
||||||
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
|
||||||
|
id: customerName
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
Layout.fillHeight: true
|
||||||
|
}
|
||||||
|
|
||||||
|
// function checkObjectField()
|
||||||
|
// {
|
||||||
|
|
||||||
|
// return street.text.trim() && houseno.text.trim() &&
|
||||||
|
|
||||||
|
// (postcode.editText.trim() || postcode.currentText.trim()) &&
|
||||||
|
// (city.editText.trim() || city.currentText.trim()) &&
|
||||||
|
// cleaningproducts.text.trim()
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
112
Gui/AddOffer.qml
Normal file
112
Gui/AddOffer.qml
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Dialogs
|
||||||
|
import "../js/qmldict.js" as JsLib
|
||||||
|
|
||||||
|
ColumnLayout
|
||||||
|
{
|
||||||
|
property var new_object: null
|
||||||
|
//property alias checkAddContact: checkAddContact
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
spacing: 15
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Angebot anlegen")
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
Layout.fillWidth: true
|
||||||
|
font.pixelSize: 35
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RowLayout
|
||||||
|
{
|
||||||
|
id: addObject
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
spacing: 45
|
||||||
|
|
||||||
|
Frame
|
||||||
|
{
|
||||||
|
Layout.alignment: Qt.AlignTop
|
||||||
|
Layout.fillWidth: true
|
||||||
|
AddNewOffer
|
||||||
|
{
|
||||||
|
id: newOffer
|
||||||
|
width: parent.width
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
RowLayout
|
||||||
|
{
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
Button
|
||||||
|
{
|
||||||
|
text: qsTr("Abbrechen")
|
||||||
|
onClicked: appLoader.source = "OfferTable.qml"
|
||||||
|
}
|
||||||
|
Button
|
||||||
|
{
|
||||||
|
property var new_object: null
|
||||||
|
id: saveBtn
|
||||||
|
text: qsTr("Speichern")
|
||||||
|
enabled: false
|
||||||
|
onClicked:
|
||||||
|
{
|
||||||
|
// new_object = JsLib.parseForm(newObject)
|
||||||
|
// new_object['lift'] = new_object['lift'] === 'Ja' ? 1 : 0
|
||||||
|
// new_object['mezzanin'] = new_object['mezzanin'] === 'Ja' ? 1 : 0
|
||||||
|
// object_model.addObject(new_object)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
id: spacer3
|
||||||
|
Layout.fillHeight: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted:
|
||||||
|
{
|
||||||
|
//object_model.objectAdded.connect(onObjectAdded)
|
||||||
|
//contact_model.objectContactAdded.connect(onObjectContact)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Connections
|
||||||
|
// {
|
||||||
|
// target: object_model
|
||||||
|
|
||||||
|
// function onObjectIdReady()
|
||||||
|
// {
|
||||||
|
// var obj_id = arguments[0]
|
||||||
|
// if (checkAddObjectContact.checked && obj_id)
|
||||||
|
// {
|
||||||
|
// var new_objecto = addObjectLayout.getForm()
|
||||||
|
// contact_model.addObjectContact(new_objecto, obj_id)
|
||||||
|
// object_model.viewCriterion("Alle")
|
||||||
|
// }
|
||||||
|
|
||||||
|
// appLoader.source = "ObjectTable.qml"
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// function checkFields()
|
||||||
|
// {
|
||||||
|
// if(checkAddObjectContact.checked)
|
||||||
|
// {
|
||||||
|
// if(!newObject.checkObjectField() || !addObjectLayout.contactPerson.contacts || !addObjectLayout.contactPerson.contacts.length)
|
||||||
|
// saveBtn.enabled = false
|
||||||
|
// else
|
||||||
|
// saveBtn.enabled = true
|
||||||
|
// }
|
||||||
|
// else if (!newObject.checkObjectField())
|
||||||
|
// saveBtn.enabled = false
|
||||||
|
// else
|
||||||
|
// saveBtn.enabled = true
|
||||||
|
// }
|
||||||
|
}
|
||||||
@@ -2,127 +2,106 @@ import QtQuick
|
|||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
|
|
||||||
ColumnLayout
|
ColumnLayout {
|
||||||
{
|
anchors.top: Navigation.bottom
|
||||||
anchors.top: TopBar.bottom
|
|
||||||
|
|
||||||
Rectangle
|
Rectangle {
|
||||||
{
|
Layout.bottomMargin: 3
|
||||||
color: "dimgrey"
|
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.bottomMargin: 3
|
color: "dimgrey"
|
||||||
radius: 45
|
radius: 45
|
||||||
|
|
||||||
RowLayout
|
RowLayout {
|
||||||
{
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
Rectangle
|
Rectangle {
|
||||||
{
|
|
||||||
id: contractButton
|
id: contractButton
|
||||||
width: 300
|
|
||||||
height: 145
|
|
||||||
color: "darkslategray"
|
|
||||||
radius: 45
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
border.color: "steelblue"
|
border.color: "steelblue"
|
||||||
border.width: 1
|
border.width: 1
|
||||||
Text
|
color: "darkslategray"
|
||||||
{
|
height: 145
|
||||||
|
radius: 45
|
||||||
|
width: 300
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: "lightgoldenrodyellow"
|
||||||
|
font.bold: true
|
||||||
|
font.pixelSize: 45
|
||||||
text: qsTr("Aufträge")
|
text: qsTr("Aufträge")
|
||||||
anchors.centerIn: parent
|
|
||||||
font.pixelSize: 45
|
|
||||||
font.bold: true
|
|
||||||
color: "lightgoldenrodyellow"
|
|
||||||
}
|
}
|
||||||
|
MouseArea {
|
||||||
MouseArea
|
|
||||||
{
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
cursorShape: Qt.PointingHandCursor
|
cursorShape: Qt.PointingHandCursor
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
onPressed:
|
|
||||||
{
|
|
||||||
contractButton.color = "darkolivegreen"
|
|
||||||
contractButton.border.width = 3
|
|
||||||
contractButton.border.color = "skyblue"
|
|
||||||
console.log("Aufträge...")
|
|
||||||
}
|
|
||||||
|
|
||||||
onReleased:
|
onExited: {
|
||||||
{
|
contractButton.color = "darkslategray";
|
||||||
contractButton.color = "darkslategray"
|
contractButton.border.color = "steelblue";
|
||||||
contractButton.border.width = 1
|
contractButton.border.width = 1;
|
||||||
contractButton.border.color = "steelblue"
|
|
||||||
}
|
}
|
||||||
|
onHoveredChanged: {
|
||||||
onHoveredChanged:
|
var w = contractButton.border.width === 3 ? 1 : 3;
|
||||||
{
|
contractButton.border.width = w;
|
||||||
var w = contractButton.border.width === 3? 1: 3
|
|
||||||
contractButton.border.width = w
|
|
||||||
}
|
}
|
||||||
|
onPressed: {
|
||||||
onExited:
|
contractButton.color = "darkolivegreen";
|
||||||
{
|
contractButton.border.width = 3;
|
||||||
|
contractButton.border.color = "skyblue";
|
||||||
contractButton.color = "darkslategray"
|
console.log("Aufträge...");
|
||||||
contractButton.border.color = "steelblue"
|
}
|
||||||
contractButton.border.width = 1
|
onReleased: {
|
||||||
|
contractButton.color = "darkslategray";
|
||||||
|
contractButton.border.width = 1;
|
||||||
|
contractButton.border.color = "steelblue";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Rectangle {
|
||||||
Rectangle
|
|
||||||
{
|
|
||||||
id: offerButton
|
id: offerButton
|
||||||
width: 300
|
|
||||||
height: 145
|
|
||||||
color: "darkslategray"
|
|
||||||
radius: 45
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
border.color: "steelblue"
|
border.color: "steelblue"
|
||||||
border.width: 1
|
border.width: 1
|
||||||
Text
|
color: "darkslategray"
|
||||||
{
|
height: 145
|
||||||
text: qsTr("Angebote")
|
radius: 45
|
||||||
|
width: 300
|
||||||
|
|
||||||
|
Text {
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
font.pixelSize: 45
|
|
||||||
font.bold: true
|
|
||||||
color: "lightgoldenrodyellow"
|
color: "lightgoldenrodyellow"
|
||||||
|
font.bold: true
|
||||||
|
font.pixelSize: 45
|
||||||
|
text: qsTr("Angebote")
|
||||||
}
|
}
|
||||||
MouseArea
|
MouseArea {
|
||||||
{
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
cursorShape: Qt.PointingHandCursor
|
cursorShape: Qt.PointingHandCursor
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
|
|
||||||
onPressed:
|
onExited: {
|
||||||
{
|
offerButton.color = "darkslategray";
|
||||||
offerButton.color = "darkolivegreen"
|
offerButton.border.color = "steelblue";
|
||||||
offerButton.border.width = 3
|
offerButton.border.width = 1;
|
||||||
offerButton.border.color = "skyblue"
|
|
||||||
console.log("Angebote...")
|
|
||||||
}
|
}
|
||||||
onReleased:
|
onHoveredChanged: {
|
||||||
{
|
var w = offerButton.border.width === 3 ? 1 : 3;
|
||||||
offerButton.color = "darkslategray"
|
offerButton.border.width = w;
|
||||||
offerButton.border.width = 1
|
|
||||||
offerButton.border.color = "steelblue"
|
|
||||||
}
|
}
|
||||||
|
onPressed: {
|
||||||
onHoveredChanged:
|
offerButton.color = "darkolivegreen";
|
||||||
{
|
offerButton.border.width = 3;
|
||||||
var w = offerButton.border.width === 3? 1: 3
|
offerButton.border.color = "skyblue";
|
||||||
offerButton.border.width = w
|
console.log("Angebote...");
|
||||||
}
|
}
|
||||||
|
onReleased: {
|
||||||
onExited:
|
offerButton.color = "darkslategray";
|
||||||
{
|
offerButton.border.width = 1;
|
||||||
|
offerButton.border.color = "steelblue";
|
||||||
offerButton.color = "darkslategray"
|
|
||||||
offerButton.border.color = "steelblue"
|
|
||||||
offerButton.border.width = 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
132
Gui/Navigation.qml
Normal file
132
Gui/Navigation.qml
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
height: parent.height
|
||||||
|
spacing: 0
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
top: parent.top
|
||||||
|
}
|
||||||
|
ButtonGroup {
|
||||||
|
id: buttonBar
|
||||||
|
}
|
||||||
|
BarButton {
|
||||||
|
id: dashBoard
|
||||||
|
|
||||||
|
ButtonGroup.group: buttonBar
|
||||||
|
icon.source: "qrc:/images/dash.svg"
|
||||||
|
text: qsTr("Dashboard")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
appLoader.source = "Dashboard.qml";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BarButton {
|
||||||
|
id: kunden
|
||||||
|
|
||||||
|
ButtonGroup.group: buttonBar
|
||||||
|
icon.source: "qrc:/images/customer.svg"
|
||||||
|
text: qsTr("Kunden")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
appLoader.source = "CustomerTable.qml";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BarButton {
|
||||||
|
id: objekt
|
||||||
|
|
||||||
|
ButtonGroup.group: buttonBar
|
||||||
|
icon.source: "qrc:/images/object.svg"
|
||||||
|
text: qsTr("Objekt")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
appLoader.source = "ObjectTable.qml";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BarButton {
|
||||||
|
id: mitarbeiter
|
||||||
|
|
||||||
|
ButtonGroup.group: buttonBar
|
||||||
|
icon.source: "qrc:/images/employee.svg"
|
||||||
|
text: qsTr("Mitarbeiter")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
appLoader.source = "EmployeeTable.qml";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BarButton {
|
||||||
|
id: offers
|
||||||
|
|
||||||
|
ButtonGroup.group: buttonBar
|
||||||
|
icon.source: "qrc:/images/offer.svg"
|
||||||
|
text: qsTr("Angebote")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
appLoader.source = "OfferTable.qml";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BarButton {
|
||||||
|
id: abrechnung
|
||||||
|
|
||||||
|
ButtonGroup.group: buttonBar
|
||||||
|
icon.source: "qrc:/images/invoice.svg"
|
||||||
|
text: qsTr("Abrechnung")
|
||||||
|
}
|
||||||
|
Item {
|
||||||
|
id: hspacer
|
||||||
|
|
||||||
|
Layout.fillHeight: true
|
||||||
|
}
|
||||||
|
BarButton {
|
||||||
|
id: atajos
|
||||||
|
|
||||||
|
Layout.bottomMargin: Dimensions.s
|
||||||
|
checkable: false
|
||||||
|
flat: true
|
||||||
|
icon.source: "qrc:/images/Bars3.svg"
|
||||||
|
implicitHeight: 90
|
||||||
|
implicitWidth: 90
|
||||||
|
|
||||||
|
onClicked: mainMenu.open()
|
||||||
|
|
||||||
|
Menu {
|
||||||
|
id: mainMenu
|
||||||
|
|
||||||
|
MenuItem {
|
||||||
|
text: qsTr("Einstellungen")
|
||||||
|
|
||||||
|
onTriggered: {
|
||||||
|
// TODO: Check if logged-in user is admin first!!
|
||||||
|
|
||||||
|
appLoader.source = "PyqcrmConf.qml";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MenuSeparator {
|
||||||
|
}
|
||||||
|
MenuItem {
|
||||||
|
text: qsTr("Als PDF exportieren")
|
||||||
|
}
|
||||||
|
MenuSeparator {
|
||||||
|
}
|
||||||
|
MenuItem {
|
||||||
|
text: qsTr("Drucken")
|
||||||
|
}
|
||||||
|
MenuItem {
|
||||||
|
text: qsTr("Erweiterter Druck")
|
||||||
|
|
||||||
|
onTriggered: printerDialog.show()
|
||||||
|
}
|
||||||
|
MenuSeparator {
|
||||||
|
}
|
||||||
|
MenuItem {
|
||||||
|
text: qsTr("Über PYQCRM")
|
||||||
|
|
||||||
|
onTriggered: readMeWin.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Qt.labs.qmlmodels
|
|
||||||
|
|
||||||
Item {
|
|
||||||
property var availableFilters: [""]
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
StackView
|
|
||||||
{
|
|
||||||
id: objectsStack
|
|
||||||
anchors.fill: parent
|
|
||||||
initialItem: "ObjectsTable.qml"
|
|
||||||
<<<<<<< HEAD
|
|
||||||
anchors.topMargin: Dimensions.m
|
|
||||||
=======
|
|
||||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Qt.labs.qmlmodels
|
|
||||||
|
|
||||||
Item {
|
|
||||||
property var availableFilters: [""]
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
StackView
|
|
||||||
{
|
|
||||||
id: objectsStack
|
|
||||||
anchors.fill: parent
|
|
||||||
initialItem: "ObjectsTable.qml"
|
|
||||||
<<<<<<< HEAD
|
|
||||||
anchors.topMargin: Dimensions.m
|
|
||||||
=======
|
|
||||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Qt.labs.qmlmodels
|
|
||||||
|
|
||||||
Item {
|
|
||||||
property var availableFilters: [""]
|
|
||||||
|
|
||||||
StackView
|
|
||||||
{
|
|
||||||
id: objectsStack
|
|
||||||
anchors.fill: parent
|
|
||||||
initialItem: "ObjectsTable.qml"
|
|
||||||
anchors.margins: 9
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Qt.labs.qmlmodels
|
|
||||||
|
|
||||||
Item {
|
|
||||||
property var availableFilters: [""]
|
|
||||||
|
|
||||||
StackView
|
|
||||||
{
|
|
||||||
id: objectsStack
|
|
||||||
anchors.fill: parent
|
|
||||||
initialItem: "ObjectsTable.qml"
|
|
||||||
anchors.topMargin: Dimensions.m
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Qt.labs.qmlmodels
|
|
||||||
|
|
||||||
Item {
|
|
||||||
property var availableFilters: [""]
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
StackView
|
|
||||||
{
|
|
||||||
id: objectsStack
|
|
||||||
anchors.fill: parent
|
|
||||||
initialItem: "ObjectsTable.qml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,257 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Qt.labs.qmlmodels
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
ColumnLayout
|
|
||||||
{
|
|
||||||
function viewCriterion(criterion)
|
|
||||||
{
|
|
||||||
business_model.viewCriterion(criterion.text);
|
|
||||||
}
|
|
||||||
function onObjectContactAdded(added)
|
|
||||||
{
|
|
||||||
console.log(added)
|
|
||||||
if (added) object_model.viewCriterion("")
|
|
||||||
}
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
Component.onCompleted:
|
|
||||||
{
|
|
||||||
contact_model.objectContactAdded.connect(onObjectContactAdded)
|
|
||||||
objectsStack.pop()
|
|
||||||
}
|
|
||||||
RowLayout
|
|
||||||
{
|
|
||||||
SearchBar
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
QuickFilter {
|
|
||||||
onSelectedChanged: (name) => {
|
|
||||||
business_model.viewCriterion(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
model: ListModel {
|
|
||||||
ListElement {
|
|
||||||
|
|
||||||
name: "Alle"
|
|
||||||
text: qsTr("Alle")
|
|
||||||
selected: true
|
|
||||||
}
|
|
||||||
ListElement {
|
|
||||||
name: "Interessent"
|
|
||||||
text: qsTr("Interessent")
|
|
||||||
selected: false
|
|
||||||
}
|
|
||||||
ListElement {
|
|
||||||
name: "Kunde"
|
|
||||||
text: qsTr("Kunde")
|
|
||||||
selected: false
|
|
||||||
}
|
|
||||||
ListElement {
|
|
||||||
name: "Lieferant"
|
|
||||||
text: qsTr("Lieferant")
|
|
||||||
selected: false
|
|
||||||
}
|
|
||||||
ListElement {
|
|
||||||
name: "Erledigt"
|
|
||||||
text: qsTr("Erledigt")
|
|
||||||
selected: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Button
|
|
||||||
{
|
|
||||||
id: addObjectBtn
|
|
||||||
icon.source: "qrc:/images/PlusCircle.svg"
|
|
||||||
text: qsTr("Objekt Hinzufügen")
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
onClicked: appLoader.source = "AddObject.qml"
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
ColumnLayout {
|
|
||||||
spacing: Dimensions.l
|
|
||||||
function onObjectContactAdded(added) {
|
|
||||||
console.log(added);
|
|
||||||
if (added)
|
|
||||||
object_model.viewCriterion("");
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
contact_model.objectContactAdded.connect(onObjectContactAdded);
|
|
||||||
objectsStack.pop();
|
|
||||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
spacing: Dimensions.l
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
ColumnLayout
|
|
||||||
{
|
|
||||||
id: tableColumn
|
|
||||||
clip: true
|
|
||||||
// anchors
|
|
||||||
// {
|
|
||||||
// top: searchBar.bottom
|
|
||||||
// bottom: parent.bottom
|
|
||||||
// left: parent.left
|
|
||||||
// right: parent.right
|
|
||||||
// topMargin: 15
|
|
||||||
// }
|
|
||||||
HorizontalHeaderView
|
|
||||||
{
|
|
||||||
=======
|
|
||||||
SearchBar {
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: addObjectBtn
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
|
|
||||||
icon.source: "qrc:/images/PlusCircle.svg"
|
|
||||||
text: qsTr("Objekt Hinzufügen")
|
|
||||||
|
|
||||||
onClicked: appLoader.source = "AddObject.qml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ColumnLayout {
|
|
||||||
id: tableColumn
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.verticalStretchFactor: 1
|
|
||||||
|
|
||||||
clip: true
|
|
||||||
|
|
||||||
HorizontalHeaderView {
|
|
||||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
|
||||||
id: horizontalHeaderview
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
|
||||||
implicitHeight: 40
|
|
||||||
movableColumns: true //@disable-check M16
|
|
||||||
syncView: objectTable
|
|
||||||
|
|
||||||
delegate: Rectangle {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
border.color: addObjectBtn.palette.base
|
|
||||||
color: addObjectBtn.palette.alternateBase
|
|
||||||
implicitHeight: 40
|
|
||||||
implicitWidth: 1
|
|
||||||
|
|
||||||
Text {
|
|
||||||
color: addObjectBtn.palette.text
|
|
||||||
elide: Text.ElideRight
|
|
||||||
height: parent.height
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
text: model.display
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
width: parent.width
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
TableView {
|
|
||||||
id: objectTable
|
|
||||||
|
|
||||||
property real newWidth: 0
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
|
||||||
alternatingRows: true
|
|
||||||
columnSpacing: 1
|
|
||||||
height: parent.height - horizontalHeaderview.height
|
|
||||||
model: object_model
|
|
||||||
resizableColumns: true // @disable-check M16
|
|
||||||
rowSpacing: 2
|
|
||||||
selectionBehavior: TableView.SelectRows
|
|
||||||
z: 0
|
|
||||||
|
|
||||||
ScrollBar.vertical: ScrollBar {
|
|
||||||
policy: objectTable.contentHeight > objectTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
|
|
||||||
}
|
|
||||||
delegate: Rectangle {
|
|
||||||
required property bool current
|
|
||||||
required property bool selected
|
|
||||||
|
|
||||||
color: selected ? addObjectBtn.palette.highlight
|
|
||||||
: (objectTable.alternatingRows && row % 2 !== 0 ? addObjectBtn.palette.base
|
|
||||||
: addObjectBtn.palette.alternateBase)
|
|
||||||
|
|
||||||
implicitHeight: 25
|
|
||||||
implicitWidth: objectTable.width / objectTable.columns
|
|
||||||
|
|
||||||
Text {
|
|
||||||
color: addObjectBtn.palette.text
|
|
||||||
elide: Text.ElideRight
|
|
||||||
height: parent.height
|
|
||||||
leftPadding: 9 //@disable-check M16
|
|
||||||
text: (model.display === null || model.display === undefined) ? "" : model.display
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
width: parent.width
|
|
||||||
}
|
|
||||||
MouseArea {
|
|
||||||
id: mouseArea
|
|
||||||
|
|
||||||
property bool hovered: false
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
|
|
||||||
onDoubleClicked: {
|
|
||||||
objectsStack.push("ObjectDetails.qml", {
|
|
||||||
selectedObject: row
|
|
||||||
});
|
|
||||||
}
|
|
||||||
onEntered: {
|
|
||||||
objectTable.selectionModel.select(objectTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
selectionModel: ItemSelectionModel {
|
|
||||||
id: obmodel
|
|
||||||
|
|
||||||
model: objectTable.model
|
|
||||||
}
|
|
||||||
}
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
Item
|
|
||||||
{
|
|
||||||
|
|
||||||
Layout.fillHeight: true
|
|
||||||
}
|
|
||||||
// function onObjectContactAdded(added)
|
|
||||||
// {
|
|
||||||
// console.log(added)
|
|
||||||
// if (added) object_model.viewCriterion("")
|
|
||||||
// }
|
|
||||||
// function viewCriterion(criterion)
|
|
||||||
// {
|
|
||||||
// object_model.viewCriterion(criterion.text)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Component.onCompleted:
|
|
||||||
// {
|
|
||||||
// contact_model.objectContactAdded.connect(onObjectContactAdded)
|
|
||||||
// objectsStack.pop()
|
|
||||||
// }
|
|
||||||
|
|
||||||
// function onObjectContactAdded(added)
|
|
||||||
// {
|
|
||||||
// console.log(added)
|
|
||||||
// if (added) object_model.viewCriterion("")
|
|
||||||
// }
|
|
||||||
=======
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Qt.labs.qmlmodels
|
|
||||||
|
|
||||||
|
|
||||||
Item
|
|
||||||
{
|
|
||||||
anchors.fill: parent
|
|
||||||
StackView
|
|
||||||
{
|
|
||||||
id: offersStack
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
initialItem: "OffersTable.qml"
|
|
||||||
<<<<<<< HEAD
|
|
||||||
anchors.topMargin: Dimensions.m
|
|
||||||
=======
|
|
||||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ ColumnLayout
|
|||||||
icon.source: "qrc:/images/PlusCircle.svg"
|
icon.source: "qrc:/images/PlusCircle.svg"
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
flat: true
|
flat: true
|
||||||
//onClicked: appLoader.source = "AddOffer.qml"
|
onClicked: appLoader.source = "AddOffer.qml"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item {
|
Item {
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Layouts
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Qt.labs.qmlmodels
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
ColumnLayout
|
|
||||||
{
|
|
||||||
anchors.fill: parent
|
|
||||||
function viewOffers(criterion)
|
|
||||||
{
|
|
||||||
//offer_model.viewCriterion(criterion)
|
|
||||||
=======
|
|
||||||
ColumnLayout {
|
|
||||||
property var availableFilters: []
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
spacing: Dimensions.l
|
|
||||||
SearchBar {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Layout.fillHeight: true
|
|
||||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout
|
|
||||||
{
|
|
||||||
SearchBar
|
|
||||||
{
|
|
||||||
id:searchBar
|
|
||||||
}
|
|
||||||
QuickFilter
|
|
||||||
{
|
|
||||||
onSelectedChanged: (name) =>
|
|
||||||
{
|
|
||||||
business_model.viewCriterion(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
model: ListModel
|
|
||||||
{
|
|
||||||
ListElement
|
|
||||||
{
|
|
||||||
|
|
||||||
name: "Alle"
|
|
||||||
text: qsTr("Alle")
|
|
||||||
selected: true
|
|
||||||
}
|
|
||||||
ListElement
|
|
||||||
{
|
|
||||||
name: "Offen"
|
|
||||||
text: qsTr("Offen")
|
|
||||||
selected: false
|
|
||||||
}
|
|
||||||
ListElement
|
|
||||||
{
|
|
||||||
name: "Abgeschlossen"
|
|
||||||
text: qsTr("Abgeschlossen")
|
|
||||||
selected: false
|
|
||||||
}
|
|
||||||
|
|
||||||
ListElement
|
|
||||||
{
|
|
||||||
name: "Erledigt"
|
|
||||||
text: qsTr("Erledigt")
|
|
||||||
selected: false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Button
|
|
||||||
{
|
|
||||||
id: addOfferBtn
|
|
||||||
text: qsTr("Angebote Hinzufügen")
|
|
||||||
icon.source: "qrc:/images/PlusCircle.svg"
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
flat: true
|
|
||||||
//onClicked: appLoader.source = "AddOffer.qml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
id: spacer
|
|
||||||
Layout.fillHeight: true
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
270
Gui/TopBar.qml
270
Gui/TopBar.qml
@@ -1,270 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
import QtQuick.Layouts
|
|
||||||
|
|
||||||
|
|
||||||
ColumnLayout
|
|
||||||
{
|
|
||||||
id: topBar
|
|
||||||
spacing: 0
|
|
||||||
height: parent.height
|
|
||||||
anchors
|
|
||||||
{
|
|
||||||
top: parent.top
|
|
||||||
left: parent.left
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
ButtonGroup
|
|
||||||
{
|
|
||||||
id: buttonBar
|
|
||||||
}
|
|
||||||
|
|
||||||
BarButton
|
|
||||||
{
|
|
||||||
id: dashBoard
|
|
||||||
flat: true
|
|
||||||
text: qsTr("Dashboard")
|
|
||||||
implicitWidth: 90
|
|
||||||
implicitHeight: 90
|
|
||||||
Layout.margins: 3
|
|
||||||
Layout.topMargin: Dimensions.s
|
|
||||||
icon.source: "qrc:/images/dash.svg"
|
|
||||||
ButtonGroup.group: buttonBar
|
|
||||||
// background: Rectangle
|
|
||||||
// {
|
|
||||||
// id: dashiBackie
|
|
||||||
// border.width: dashBoard.activeFocus ? 2 : 1
|
|
||||||
// border.color: "#888"
|
|
||||||
// radius: 4
|
|
||||||
// gradient: Gradient
|
|
||||||
// {
|
|
||||||
// GradientStop { position: 0 ; color: dashBoard.pressed ? "#000" : "#001" }
|
|
||||||
// GradientStop { position: 1 ; color: dashBoard.pressed ? "#100" : "#000" }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
onClicked:
|
|
||||||
{
|
|
||||||
appLoader.source = "Dashboard.qml"
|
|
||||||
|
|
||||||
|
|
||||||
// dashiBackie.border.width = 2
|
|
||||||
// kundiBackie.border.width = 1
|
|
||||||
// mitoBackie.border.width = 1
|
|
||||||
// invoBackie.border.width = 1
|
|
||||||
// objBackie.border.width = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BarButton
|
|
||||||
{
|
|
||||||
id: kunden
|
|
||||||
flat: true
|
|
||||||
text: qsTr("Kunden")
|
|
||||||
implicitWidth: 90
|
|
||||||
implicitHeight: 90
|
|
||||||
Layout.margins: 3
|
|
||||||
icon.source: "qrc:/images/customer.svg"
|
|
||||||
ButtonGroup.group: buttonBar
|
|
||||||
// background: Rectangle
|
|
||||||
// {
|
|
||||||
// id: kundiBackie
|
|
||||||
// border.width: kunden.activeFocus ? 2 : 1
|
|
||||||
// border.color: "#888"
|
|
||||||
// radius: 4
|
|
||||||
// gradient: Gradient
|
|
||||||
// {
|
|
||||||
// GradientStop { position: 0 ; color: kunden.pressed ? "#000" : "#001" }
|
|
||||||
// GradientStop { position: 1 ; color: kunden.pressed ? "#100" : "#000" }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
onClicked:
|
|
||||||
{
|
|
||||||
// TODO: here we should call the model
|
|
||||||
appLoader.source = "CustomerTable.qml"
|
|
||||||
// kundiBackie.border.width = 2
|
|
||||||
// dashiBackie.border.width = 1
|
|
||||||
// mitoBackie.border.width = 1
|
|
||||||
// invoBackie.border.width = 1
|
|
||||||
// objBackie.border.width = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BarButton
|
|
||||||
{
|
|
||||||
id: objekt
|
|
||||||
flat: true
|
|
||||||
text: qsTr("Objekt")
|
|
||||||
implicitWidth: 90
|
|
||||||
implicitHeight: 90
|
|
||||||
Layout.margins: 3
|
|
||||||
icon.source: "qrc:/images/object.svg"
|
|
||||||
ButtonGroup.group: buttonBar
|
|
||||||
// background: Rectangle
|
|
||||||
// {
|
|
||||||
// id: objBackie
|
|
||||||
// border.width: objekt.activeFocus ? 2 : 1
|
|
||||||
// border.color: "#888"
|
|
||||||
// radius: 4
|
|
||||||
// gradient: Gradient
|
|
||||||
// {
|
|
||||||
// GradientStop { position: 0 ; color: objekt.pressed ? "#000" : "#001" }
|
|
||||||
// GradientStop { position: 1 ; color: objekt.pressed ? "#100" : "#000" }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
onClicked:
|
|
||||||
{
|
|
||||||
appLoader.source = "ObjectTable.qml"
|
|
||||||
// objBackie.border.width = 2
|
|
||||||
// dashiBackie.border.width = 1
|
|
||||||
// kundiBackie.border.width = 1
|
|
||||||
// mitoBackie.border.width = 1
|
|
||||||
// invoBackie.border.width = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
BarButton
|
|
||||||
{
|
|
||||||
id: mitarbeiter
|
|
||||||
flat: true
|
|
||||||
text: qsTr("Mitarbeiter")
|
|
||||||
implicitWidth: 90
|
|
||||||
implicitHeight: 90
|
|
||||||
Layout.margins: 3
|
|
||||||
icon.source: "qrc:/images/employee.svg"
|
|
||||||
|
|
||||||
ButtonGroup.group: buttonBar
|
|
||||||
// background: Rectangle
|
|
||||||
// {
|
|
||||||
// id: mitoBackie
|
|
||||||
// border.width: mitarbeiter.activeFocus ? 2 : 1
|
|
||||||
// border.color: "#888"
|
|
||||||
// radius: 4
|
|
||||||
// gradient: Gradient
|
|
||||||
// {
|
|
||||||
// GradientStop { position: 0 ; color: mitarbeiter.pressed ? "#000" : "#001" }
|
|
||||||
// GradientStop { position: 1 ; color: mitarbeiter.pressed ? "#100" : "#000" }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
onClicked:
|
|
||||||
{
|
|
||||||
appLoader.source = "EmployeeTable.qml"
|
|
||||||
// mitoBackie.border.width = 2
|
|
||||||
// dashiBackie.border.width = 1
|
|
||||||
// kundiBackie.border.width = 1
|
|
||||||
// invoBackie.border.width = 1
|
|
||||||
// objBackie.border.width = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BarButton
|
|
||||||
{
|
|
||||||
id: offers
|
|
||||||
flat: true
|
|
||||||
text: qsTr("Angebote")
|
|
||||||
implicitWidth: 90
|
|
||||||
implicitHeight: 90
|
|
||||||
Layout.margins: 3
|
|
||||||
icon.source: "qrc:/images/offer.svg"
|
|
||||||
ButtonGroup.group: buttonBar
|
|
||||||
// background: Rectangle
|
|
||||||
// {
|
|
||||||
// id: offersBackie
|
|
||||||
// border.width: offers.activeFocus ? 2 : 1
|
|
||||||
// border.color: "#888"
|
|
||||||
// radius: 4
|
|
||||||
// gradient: Gradient
|
|
||||||
// {
|
|
||||||
// GradientStop { position: 0 ; color: offers.pressed ? "#000" : "#001" }
|
|
||||||
// GradientStop { position: 1 ; color: offers.pressed ? "#100" : "#000" }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
onClicked:
|
|
||||||
{
|
|
||||||
appLoader.source = "OfferTable.qml"
|
|
||||||
// mitoBackie.border.width = 2
|
|
||||||
// dashiBackie.border.width = 1
|
|
||||||
// kundiBackie.border.width = 1
|
|
||||||
// invoBackie.border.width = 1
|
|
||||||
// objBackie.border.width = 1
|
|
||||||
// offersBackie.border.width = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BarButton
|
|
||||||
{
|
|
||||||
id: abrechnung
|
|
||||||
flat: true
|
|
||||||
text: qsTr("Abrechnung")
|
|
||||||
implicitWidth: 90
|
|
||||||
implicitHeight: 90
|
|
||||||
Layout.margins: 3
|
|
||||||
icon.source: "qrc:/images/invoice.svg"
|
|
||||||
ButtonGroup.group: buttonBar
|
|
||||||
// background: Rectangle
|
|
||||||
// {
|
|
||||||
// id: invoBackie
|
|
||||||
// border.width: abrechnung.activeFocus ? 2 : 1
|
|
||||||
// border.color: "#888"
|
|
||||||
// radius: 4
|
|
||||||
// gradient: Gradient
|
|
||||||
// {
|
|
||||||
// GradientStop { position: 0 ; color: abrechnung.pressed ? "#000" : "#001" }
|
|
||||||
// GradientStop { position: 1 ; color: abrechnung.pressed ? "#100" : "#000" }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
Item
|
|
||||||
{
|
|
||||||
id: hspacer
|
|
||||||
Layout.fillHeight: true
|
|
||||||
}
|
|
||||||
|
|
||||||
BarButton
|
|
||||||
{
|
|
||||||
id: atajos
|
|
||||||
implicitWidth: 90
|
|
||||||
implicitHeight: 90
|
|
||||||
checkable: false
|
|
||||||
icon.source: "qrc:/images/Bars3.svg"
|
|
||||||
|
|
||||||
flat: true
|
|
||||||
Layout.bottomMargin: Dimensions.s
|
|
||||||
onClicked: mainMenu.open()
|
|
||||||
|
|
||||||
Menu {
|
|
||||||
id: mainMenu
|
|
||||||
MenuItem
|
|
||||||
{
|
|
||||||
//text: qsTr("Benutzer-Verwaltung")
|
|
||||||
//onTriggered: appLoader.source = "UsersPage.qml"
|
|
||||||
text: qsTr("Einstellungen")
|
|
||||||
onTriggered:
|
|
||||||
{
|
|
||||||
// TODO: Check if logged-in user is admin first!!
|
|
||||||
|
|
||||||
appLoader.source = "PyqcrmConf.qml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MenuSeparator {}
|
|
||||||
MenuItem { text: qsTr("Als PDF exportieren") }
|
|
||||||
MenuSeparator {}
|
|
||||||
MenuItem { text: qsTr("Drucken") }
|
|
||||||
MenuItem
|
|
||||||
{
|
|
||||||
text: qsTr("Erweiterter Druck")
|
|
||||||
onTriggered: printerDialog.show()
|
|
||||||
}
|
|
||||||
MenuSeparator {}
|
|
||||||
MenuItem
|
|
||||||
{
|
|
||||||
text: qsTr("Über PYQCRM")
|
|
||||||
onTriggered: readMeWin.show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
221
Gui/main.qml
221
Gui/main.qml
@@ -4,173 +4,148 @@ import QtQuick.Controls
|
|||||||
import QtQuick.Dialogs
|
import QtQuick.Dialogs
|
||||||
import QtCore
|
import QtCore
|
||||||
|
|
||||||
ApplicationWindow
|
ApplicationWindow {
|
||||||
{
|
|
||||||
id: appWindow
|
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 string confile: ""
|
||||||
property alias settingsFileDialog: settingsFiledialog
|
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
|
palette.text: Colors.foreground
|
||||||
|
title: "TERO Personal"
|
||||||
|
visible: true
|
||||||
|
width: Screen.width * .75
|
||||||
|
|
||||||
|
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";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Navigation {
|
||||||
|
id: navigation
|
||||||
|
|
||||||
TopBar
|
|
||||||
{
|
|
||||||
id:topBar
|
|
||||||
visible: bad_config || !db_con ? false : true
|
visible: bad_config || !db_con ? false : true
|
||||||
}
|
}
|
||||||
|
PrinterDialog {
|
||||||
PrinterDialog
|
|
||||||
{
|
|
||||||
id: printerDialog
|
id: printerDialog
|
||||||
}
|
|
||||||
|
|
||||||
ReadMe
|
}
|
||||||
{
|
ReadMe {
|
||||||
id: readMeWin
|
id: readMeWin
|
||||||
}
|
|
||||||
|
|
||||||
Item
|
}
|
||||||
{
|
Item {
|
||||||
id: mainView
|
id: mainView
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Loader
|
Rectangle {
|
||||||
{
|
id: contentBackground
|
||||||
id: appLoader
|
anchors {
|
||||||
|
bottom: parent.bottom
|
||||||
anchors
|
left: navigation.right
|
||||||
{
|
|
||||||
left: topBar.right
|
|
||||||
right: parent.right
|
right: parent.right
|
||||||
top: parent.top
|
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
|
property alias window: appWindow
|
||||||
|
|
||||||
|
anchors {
|
||||||
|
fill: contentBackground
|
||||||
|
margins: Dimensions.l
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dialog {
|
||||||
Dialog
|
|
||||||
{
|
|
||||||
id: importDialog
|
id: importDialog
|
||||||
modal: true
|
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
modal: true
|
||||||
standardButtons: Dialog.Yes | Dialog.No
|
standardButtons: Dialog.Yes | Dialog.No
|
||||||
|
title: qsTr("Einstellungen importieren")
|
||||||
|
|
||||||
onAccepted: settingsFiledialog.open()
|
onAccepted: settingsFiledialog.open()
|
||||||
onRejected: appLoader.source = "Firststart.qml"
|
onRejected: appLoader.source = "Firststart.qml"
|
||||||
title: qsTr("Einstellungen importieren")
|
|
||||||
}
|
}
|
||||||
|
FileDialog {
|
||||||
FileDialog
|
|
||||||
{
|
|
||||||
|
|
||||||
id: settingsFiledialog
|
id: settingsFiledialog
|
||||||
title: qsTr("PYQCRM Einstellungen")
|
|
||||||
currentFolder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0]
|
currentFolder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0]
|
||||||
modality: "ApplicationModal"
|
modality: "ApplicationModal"
|
||||||
nameFilters: [qsTr("PYQCRM Einstellungen (*.pyqrec)")]
|
nameFilters: [qsTr("PYQCRM Einstellungen (*.pyqrec)")]
|
||||||
onAccepted:
|
|
||||||
{
|
|
||||||
exportFilePassword.open()
|
|
||||||
confile = selectedFile
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Dialog
|
|
||||||
{
|
|
||||||
id: exportFilePassword
|
|
||||||
modal: true
|
|
||||||
title: qsTr("PYQCRM Einstellungen")
|
title: qsTr("PYQCRM Einstellungen")
|
||||||
|
|
||||||
|
onAccepted: {
|
||||||
|
exportFilePassword.open();
|
||||||
|
confile = selectedFile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Dialog {
|
||||||
|
id: exportFilePassword
|
||||||
|
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
modal: true
|
||||||
standardButtons: Dialog.Ok | Dialog.Cancel
|
standardButtons: Dialog.Ok | Dialog.Cancel
|
||||||
|
title: qsTr("PYQCRM Einstellungen")
|
||||||
|
|
||||||
onAccepted: config.importConfig(confile, exportPasswordInput.text)
|
onAccepted: config.importConfig(confile, exportPasswordInput.text)
|
||||||
ColumnLayout
|
|
||||||
{
|
ColumnLayout {
|
||||||
RowLayout
|
RowLayout {
|
||||||
{
|
Label {
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: qsTr("Passwort eingeben:")
|
text: qsTr("Passwort eingeben:")
|
||||||
}
|
}
|
||||||
|
TextField {
|
||||||
TextField
|
|
||||||
{
|
|
||||||
id: exportPasswordInput
|
id: exportPasswordInput
|
||||||
|
|
||||||
echoMode: TextInput.Password
|
echoMode: TextInput.Password
|
||||||
implicitWidth: 300
|
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
module gui
|
module gui
|
||||||
TopBar 1.0 TopBar.qml
|
TopBar 1.0 Navigation.qml
|
||||||
|
|||||||
@@ -6,82 +6,47 @@ import QtQuick.Templates as T
|
|||||||
T.ToolButton {
|
T.ToolButton {
|
||||||
id: control
|
id: control
|
||||||
|
|
||||||
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
|
|
||||||
implicitContentWidth + leftPadding + rightPadding)
|
|
||||||
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
|
|
||||||
implicitContentHeight + topPadding + bottomPadding)
|
|
||||||
checkable: true
|
checkable: true
|
||||||
icon.color: Colors.foreground
|
icon.color: Colors.foreground
|
||||||
icon.height: 36
|
icon.height: 36
|
||||||
icon.width: 36
|
icon.width: 36
|
||||||
|
implicitHeight: 90
|
||||||
|
implicitWidth: 100
|
||||||
topPadding: 20
|
topPadding: 20
|
||||||
// horizontalPadding: padding + 2
|
|
||||||
// spacing: 6
|
|
||||||
// display: AbstractButton.TextUnderIcon
|
|
||||||
|
|
||||||
// icon.color: control.checked || control.highlighted ? control.palette.brightText :
|
|
||||||
// control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
|
|
||||||
|
|
||||||
contentItem: Column
|
|
||||||
{
|
|
||||||
|
|
||||||
IconLabel
|
|
||||||
{
|
|
||||||
|
|
||||||
|
contentItem: Column {
|
||||||
|
readonly property color color: control.checked ? Colors.primaryShade : control.hovered ? Colors.primary : Colors.foreground
|
||||||
|
|
||||||
|
IconLabel {
|
||||||
|
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
|
x: parent.width * .5 - width * .5
|
||||||
// height: icon.height
|
|
||||||
// width: icon.width
|
|
||||||
icon: control.icon
|
|
||||||
|
|
||||||
// display: control.display
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Label
|
Label {
|
||||||
{
|
font: Typography.small
|
||||||
|
color: parent.color
|
||||||
text: control.text
|
text: control.text
|
||||||
font: Typography.dash
|
|
||||||
|
|
||||||
color: Colors.foreground
|
|
||||||
x: parent.width * .5 - width * .5
|
x: parent.width * .5 - width * .5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// spacing: control.spacing
|
Rectangle {
|
||||||
// mirrored: control.mirrored
|
anchors.bottom: parent.bottom
|
||||||
// display: control.TextUnderIcon
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
// icon: control.icon
|
color: control.checked ? Colors.primaryShade : Colors.primary
|
||||||
// text: control.text
|
|
||||||
// font: control.font
|
|
||||||
// color: control.checked || control.highlighted ? control.palette.brightText :
|
|
||||||
// control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
id: mainrect
|
|
||||||
implicitWidth: control.width
|
|
||||||
implicitHeight: control.height
|
|
||||||
visible: !control.flat || control.down || control.checked || control.highlighted
|
|
||||||
x: control.left
|
|
||||||
y: control.top
|
|
||||||
color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button,
|
|
||||||
control.palette.mid, control.down ? 0.5 : 0.0)
|
|
||||||
border.color: control.palette.highlight
|
|
||||||
border.width: control.visualFocus ? 2 : 0
|
|
||||||
Rectangle
|
|
||||||
{
|
|
||||||
implicitHeight: control.height
|
|
||||||
implicitWidth: 6
|
implicitWidth: 6
|
||||||
x: mainrect.left
|
visible: control.checked || control.hovered
|
||||||
y: mainrect.top
|
}
|
||||||
color: "yellow"
|
MouseArea {
|
||||||
|
id: mouseArea
|
||||||
|
|
||||||
}
|
anchors.fill: parent
|
||||||
}
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
|
||||||
|
onPressed: mouse => mouse.accepted = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,9 +11,10 @@ QtObject {
|
|||||||
readonly property color primary: "#b81a34"
|
readonly property color primary: "#b81a34"
|
||||||
readonly property color primaryContrast: "#fdfdfd"
|
readonly property color primaryContrast: "#fdfdfd"
|
||||||
readonly property color primaryLighter: Qt.lighter(primary, 1.5)
|
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 foreground: theme === dark ? "#fdfdfd" : "#110b0c"
|
||||||
readonly property color background: theme === dark ? "#303136" : "#eff1f5"
|
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 interactive: theme === dark ? "#878b97" : "#d9d9da"
|
||||||
readonly property color error: theme === dark ? "#ff2264" : "#ff004b"
|
readonly property color error: theme === dark ? "#ff2264" : "#ff004b"
|
||||||
readonly property color transparent: "transparent"
|
readonly property color transparent: "transparent"
|
||||||
|
|||||||
@@ -1,22 +1,59 @@
|
|||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls.impl
|
|
||||||
import QtQuick.Controls
|
|
||||||
import QtQuick.Templates as T
|
import QtQuick.Templates as T
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Controls.impl
|
||||||
|
|
||||||
T.ComboBox {
|
T.ComboBox {
|
||||||
id: control
|
id: control
|
||||||
|
|
||||||
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
|
font: Typography.body
|
||||||
implicitContentWidth + leftPadding + rightPadding)
|
|
||||||
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
|
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
|
||||||
implicitContentHeight + topPadding + bottomPadding,
|
implicitContentHeight + topPadding + bottomPadding,
|
||||||
implicitIndicatorHeight + topPadding + bottomPadding)
|
implicitIndicatorHeight + topPadding + bottomPadding)
|
||||||
|
|
||||||
leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
|
|
||||||
rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
|
|
||||||
|
|
||||||
|
contentItem: T.TextField {
|
||||||
|
id: test
|
||||||
|
autoScroll: control.editable
|
||||||
|
color: Colors.foreground
|
||||||
|
enabled: control.editable
|
||||||
|
|
||||||
|
font: Typography.body
|
||||||
|
implicitHeight: Typography.body.pixelSize + topPadding + bottomPadding
|
||||||
|
inputMethodHints: control.inputMethodHints
|
||||||
|
padding: Dimensions.m
|
||||||
|
readOnly: control.down
|
||||||
|
selectByMouse: control.selectTextByMouse
|
||||||
|
text: control.editable ? control.editText : control.displayText
|
||||||
|
validator: control.validator
|
||||||
|
width: control.width - indicator.width
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
}
|
||||||
|
background: Rectangle {
|
||||||
|
border.color: Colors.interactive
|
||||||
|
border.width: 1
|
||||||
|
color: Colors.mantle
|
||||||
|
// height: parent.height
|
||||||
|
radius: Dimensions.radius
|
||||||
|
width: parent.width
|
||||||
|
}
|
||||||
|
// delegate: MenuItem {
|
||||||
|
// id: menuItem
|
||||||
|
|
||||||
|
// required property int index
|
||||||
|
// required property var model
|
||||||
|
|
||||||
|
// highlighted: control.highlightedIndex === index
|
||||||
|
// hoverEnabled: control.hoverEnabled
|
||||||
|
// text: model[control.textRole]
|
||||||
|
// width: control.width
|
||||||
|
|
||||||
|
// background: Rectangle {
|
||||||
|
// color: menuItem.down || menuItem.highlighted ? Colors.primary : "transparent"
|
||||||
|
// height: menuItem.height
|
||||||
|
// width: menuItem.width
|
||||||
|
// }
|
||||||
|
// }
|
||||||
delegate: ItemDelegate {
|
delegate: ItemDelegate {
|
||||||
required property var model
|
required property var model
|
||||||
required property int index
|
required property int index
|
||||||
@@ -25,222 +62,71 @@ T.ComboBox {
|
|||||||
text: model[control.textRole]
|
text: model[control.textRole]
|
||||||
// palette.text: control.palette.text
|
// palette.text: control.palette.text
|
||||||
// palette.highlightedText: control.palette.highlightedText
|
// palette.highlightedText: control.palette.highlightedText
|
||||||
font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
|
// font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
|
||||||
highlighted: control.highlightedIndex === index
|
highlighted: control.highlightedIndex === index
|
||||||
hoverEnabled: control.hoverEnabled
|
hoverEnabled: control.hoverEnabled
|
||||||
}
|
}
|
||||||
|
indicator: Rectangle {
|
||||||
|
id: indicator
|
||||||
|
|
||||||
indicator: ColorImage {
|
|
||||||
x: control.mirrored ? control.padding : control.width - width - control.padding
|
|
||||||
y: control.topPadding + (control.availableHeight - height) / 2
|
|
||||||
|
|
||||||
source: "qrc:/images/ChevronDown.svg"
|
|
||||||
opacity: enabled ? 1 : 0.3
|
|
||||||
}
|
|
||||||
|
|
||||||
contentItem: T.TextField {
|
|
||||||
// leftPadding: !control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1
|
|
||||||
// rightPadding: control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1
|
|
||||||
// topPadding: 6 - control.padding
|
|
||||||
// bottomPadding: 6 - control.padding
|
|
||||||
implicitHeight: Typography.body.pixelSize + bottomPadding + topPadding
|
|
||||||
text: control.editable ? control.editText : control.displayText
|
|
||||||
padding: Dimensions.m
|
|
||||||
enabled: control.editable
|
|
||||||
autoScroll: control.editable
|
|
||||||
readOnly: control.down
|
|
||||||
inputMethodHints: control.inputMethodHints
|
|
||||||
validator: control.validator
|
|
||||||
selectByMouse: control.selectTextByMouse
|
|
||||||
|
|
||||||
color: Colors.foreground
|
|
||||||
// selectionColor: control.palette.highlight
|
|
||||||
// selectedTextColor: control.palette.highlightedText
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
visible: control.enabled && control.editable && !control.flat
|
|
||||||
border.width: parent && parent.activeFocus ? 2 : 1
|
|
||||||
border.color: Colors.interactive
|
border.color: Colors.interactive
|
||||||
radius: Dimensions.radius
|
bottomRightRadius: Dimensions.radius
|
||||||
color: Colors.mantle
|
color: Colors.primary
|
||||||
|
height: control.height
|
||||||
|
topRightRadius: Dimensions.radius
|
||||||
|
width: 20 + Dimensions.s * 2
|
||||||
|
x: control.width - width
|
||||||
|
y: 0
|
||||||
|
z: 2
|
||||||
|
|
||||||
|
IconLabel {
|
||||||
|
anchors.fill: parent
|
||||||
|
bottomPadding: Dimensions.s
|
||||||
|
icon.color: Colors.foreground
|
||||||
|
icon.source: "qrc:/images/ChevronDown.svg"
|
||||||
|
leftPadding: Dimensions.s
|
||||||
|
rightPadding: Dimensions.s
|
||||||
|
topPadding: Dimensions.s
|
||||||
|
}
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
|
||||||
|
onPressed: () => {
|
||||||
|
control.popup.visible = true;
|
||||||
|
control.popup.forceActiveFocus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
implicitWidth: 140
|
|
||||||
implicitHeight: 40
|
|
||||||
radius: Dimensions.radius
|
|
||||||
color: Colors.mantle
|
|
||||||
border.color: Colors.interactive
|
|
||||||
border.width: 1
|
|
||||||
visible: !control.flat || control.down
|
|
||||||
}
|
}
|
||||||
|
|
||||||
popup: T.Popup {
|
popup: T.Popup {
|
||||||
y: control.height
|
|
||||||
width: control.width
|
|
||||||
height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin)
|
|
||||||
topMargin: 6
|
|
||||||
bottomMargin: 6
|
bottomMargin: 6
|
||||||
palette: control.palette
|
height: Math.min(contentItem.implicitHeight + 2, control.Window.height - topMargin - bottomMargin)
|
||||||
|
padding: 1
|
||||||
|
topMargin: 6
|
||||||
|
width: control.width
|
||||||
|
y: control.height
|
||||||
|
|
||||||
|
background: Rectangle {
|
||||||
|
border.color: Colors.interactive
|
||||||
|
color: Colors.mantle
|
||||||
|
radius: Dimensions.radius
|
||||||
|
}
|
||||||
contentItem: ListView {
|
contentItem: ListView {
|
||||||
clip: true
|
clip: true
|
||||||
implicitHeight: contentHeight
|
|
||||||
model: control.delegateModel
|
|
||||||
currentIndex: control.highlightedIndex
|
currentIndex: control.highlightedIndex
|
||||||
highlightMoveDuration: 0
|
implicitHeight: contentHeight
|
||||||
|
model: control.popup.visible ? control.delegateModel : null
|
||||||
|
|
||||||
Rectangle {
|
T.ScrollBar.vertical: ScrollBar {
|
||||||
z: 10
|
|
||||||
width: parent.width
|
|
||||||
height: parent.height
|
|
||||||
color: "transparent"
|
|
||||||
border.color: control.palette.mid
|
|
||||||
}
|
}
|
||||||
|
highlight: Rectangle {
|
||||||
T.ScrollIndicator.vertical: ScrollIndicator { }
|
color: Colors.primary
|
||||||
}
|
opacity: Colors.highlightOpacity
|
||||||
|
}
|
||||||
background: Rectangle {
|
}
|
||||||
color: control.palette.window
|
}
|
||||||
}
|
Component.onCompleted:
|
||||||
|
{
|
||||||
|
console.log(control.implicitContentHeight)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// import QtQuick
|
|
||||||
// import QtQuick.Templates as T
|
|
||||||
// import QtQuick.Controls
|
|
||||||
// import QtQuick.Controls.impl
|
|
||||||
|
|
||||||
// T.ComboBox {
|
|
||||||
// id: control
|
|
||||||
|
|
||||||
// font: Typography.body
|
|
||||||
// implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
|
|
||||||
// implicitContentHeight + topPadding + bottomPadding,
|
|
||||||
// implicitIndicatorHeight + topPadding + bottomPadding)
|
|
||||||
|
|
||||||
|
|
||||||
// contentItem: T.TextField {
|
|
||||||
// id: test
|
|
||||||
// autoScroll: control.editable
|
|
||||||
// color: Colors.foreground
|
|
||||||
// enabled: control.editable
|
|
||||||
|
|
||||||
// font: Typography.body
|
|
||||||
// implicitHeight: Typography.body.pixelSize + topPadding + bottomPadding
|
|
||||||
// inputMethodHints: control.inputMethodHints
|
|
||||||
// padding: Dimensions.m
|
|
||||||
// readOnly: control.down
|
|
||||||
// selectByMouse: control.selectTextByMouse
|
|
||||||
// text: control.editable ? control.editText : control.displayText
|
|
||||||
// validator: control.validator
|
|
||||||
// width: control.width - indicator.width
|
|
||||||
// verticalAlignment: Text.AlignVCenter
|
|
||||||
// }
|
|
||||||
// background: Rectangle {
|
|
||||||
// border.color: Colors.interactive
|
|
||||||
// border.width: 1
|
|
||||||
// color: Colors.mantle
|
|
||||||
// // height: parent.height
|
|
||||||
// radius: Dimensions.radius
|
|
||||||
// width: parent.width
|
|
||||||
// }
|
|
||||||
// // delegate: MenuItem {
|
|
||||||
// // id: menuItem
|
|
||||||
|
|
||||||
// // required property int index
|
|
||||||
// // required property var model
|
|
||||||
|
|
||||||
// // highlighted: control.highlightedIndex === index
|
|
||||||
// // hoverEnabled: control.hoverEnabled
|
|
||||||
// // text: model[control.textRole]
|
|
||||||
// // width: control.width
|
|
||||||
|
|
||||||
// // background: Rectangle {
|
|
||||||
// // color: menuItem.down || menuItem.highlighted ? Colors.primary : "transparent"
|
|
||||||
// // height: menuItem.height
|
|
||||||
// // width: menuItem.width
|
|
||||||
// // }
|
|
||||||
// // }
|
|
||||||
// delegate: ItemDelegate {
|
|
||||||
// required property var model
|
|
||||||
// required property int index
|
|
||||||
|
|
||||||
// width: ListView.view.width
|
|
||||||
// text: model[control.textRole]
|
|
||||||
// // palette.text: control.palette.text
|
|
||||||
// // palette.highlightedText: control.palette.highlightedText
|
|
||||||
// // font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
|
|
||||||
// highlighted: control.highlightedIndex === index
|
|
||||||
// hoverEnabled: control.hoverEnabled
|
|
||||||
// }
|
|
||||||
// indicator: Rectangle {
|
|
||||||
// id: indicator
|
|
||||||
|
|
||||||
// border.color: Colors.interactive
|
|
||||||
// bottomRightRadius: Dimensions.radius
|
|
||||||
// color: Colors.primary
|
|
||||||
// height: control.height
|
|
||||||
// topRightRadius: Dimensions.radius
|
|
||||||
// width: 20 + Dimensions.s * 2
|
|
||||||
// x: control.width - width
|
|
||||||
// y: 0
|
|
||||||
// z: 2
|
|
||||||
|
|
||||||
// IconLabel {
|
|
||||||
// anchors.fill: parent
|
|
||||||
// bottomPadding: Dimensions.s
|
|
||||||
// icon.color: Colors.foreground
|
|
||||||
// icon.source: "qrc:/images/ChevronDown.svg"
|
|
||||||
// leftPadding: Dimensions.s
|
|
||||||
// rightPadding: Dimensions.s
|
|
||||||
// topPadding: Dimensions.s
|
|
||||||
// }
|
|
||||||
// MouseArea {
|
|
||||||
// anchors.fill: parent
|
|
||||||
// cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
// onPressed: () => {
|
|
||||||
// control.popup.visible = true;
|
|
||||||
// control.popup.forceActiveFocus()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// popup: T.Popup {
|
|
||||||
// bottomMargin: 6
|
|
||||||
// height: Math.min(contentItem.implicitHeight + 2, control.Window.height - topMargin - bottomMargin)
|
|
||||||
// padding: 1
|
|
||||||
// topMargin: 6
|
|
||||||
// width: control.width
|
|
||||||
// y: control.height
|
|
||||||
|
|
||||||
// background: Rectangle {
|
|
||||||
// border.color: Colors.interactive
|
|
||||||
// color: Colors.mantle
|
|
||||||
// radius: Dimensions.radius
|
|
||||||
// }
|
|
||||||
// contentItem: ListView {
|
|
||||||
// clip: true
|
|
||||||
// currentIndex: control.highlightedIndex
|
|
||||||
// implicitHeight: contentHeight
|
|
||||||
// model: control.popup.visible ? control.delegateModel : null
|
|
||||||
|
|
||||||
// T.ScrollBar.vertical: ScrollBar {
|
|
||||||
// }
|
|
||||||
// highlight: Rectangle {
|
|
||||||
// color: Colors.primary
|
|
||||||
// opacity: Colors.highlightOpacity
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// Component.onCompleted:
|
|
||||||
// {
|
|
||||||
// console.log(control.implicitContentHeight)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|||||||
@@ -3,38 +3,37 @@ pragma Singleton
|
|||||||
import QtCore
|
import QtCore
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
|
||||||
Item
|
Item {
|
||||||
{
|
readonly property font body: ({
|
||||||
readonly property FontLoader robotoCondensed: FontLoader
|
|
||||||
{
|
|
||||||
source: "qrc:/fonts/RobotoCondensed.otf"
|
|
||||||
}
|
|
||||||
|
|
||||||
readonly property font body:
|
|
||||||
({
|
|
||||||
family: robotoCondensed.font,
|
family: robotoCondensed.font,
|
||||||
pointSize: 16,
|
pointSize: 16,
|
||||||
weight: Font.Medium,
|
weight: Font.Medium,
|
||||||
letterSpacing: 0,
|
letterSpacing: 0,
|
||||||
kerning: true,
|
kerning: true
|
||||||
})
|
})
|
||||||
|
readonly property font small: ({
|
||||||
readonly property font h1:
|
family: body.family,
|
||||||
({
|
pointSize: 11,
|
||||||
|
weight: Font.DemiBold,
|
||||||
|
letterSpacing: body.letterSpacing,
|
||||||
|
kerning: body.kerning
|
||||||
|
})
|
||||||
|
readonly property font h1: ({
|
||||||
family: body.family,
|
family: body.family,
|
||||||
pointSize: 38,
|
pointSize: 38,
|
||||||
weight: body.weight,
|
weight: body.weight,
|
||||||
letterSpacing: body.letterSpacing,
|
letterSpacing: body.letterSpacing,
|
||||||
kerning: body.kerning,
|
kerning: body.kerning
|
||||||
})
|
})
|
||||||
|
readonly property font h2:
|
||||||
readonly property font dash:
|
|
||||||
({
|
({
|
||||||
family: body.family,
|
family: body.family,
|
||||||
pointSize: 10,
|
pointSize: 20,
|
||||||
weight: body.weight,
|
weight: body.weight,
|
||||||
letterSpacing: body.letterSpacing,
|
letterSpacing: body.letterSpacing,
|
||||||
kerning: body.kerning,
|
kerning: body.kerning,
|
||||||
})
|
})
|
||||||
|
readonly property FontLoader robotoCondensed: FontLoader {
|
||||||
|
source: "qrc:/fonts/RobotoCondensed.otf"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
doc/design/TERO CRM.penpot
Normal file
BIN
doc/design/TERO CRM.penpot
Normal file
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 142 KiB |
1
main.py
1
main.py
@@ -22,6 +22,7 @@ from lib.Printers import Printers
|
|||||||
|
|
||||||
os.environ['QML_XHR_ALLOW_FILE_READ'] = '1'
|
os.environ['QML_XHR_ALLOW_FILE_READ'] = '1'
|
||||||
|
|
||||||
|
|
||||||
# [pyqcrm]
|
# [pyqcrm]
|
||||||
# program-name=""
|
# program-name=""
|
||||||
# version=
|
# version=
|
||||||
|
|||||||
4
qml.qrc
4
qml.qrc
@@ -1,6 +1,6 @@
|
|||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file>Gui/TopBar.qml</file>
|
<file>Gui/Navigation.qml</file>
|
||||||
<file>Gui/AdminUserConfig.qml</file>
|
<file>Gui/AdminUserConfig.qml</file>
|
||||||
<file>Gui/EncryptionKey.qml</file>
|
<file>Gui/EncryptionKey.qml</file>
|
||||||
<file>Gui/DbConfiguration.qml</file>
|
<file>Gui/DbConfiguration.qml</file>
|
||||||
@@ -60,6 +60,8 @@
|
|||||||
<file>TeroStyle/TextField.qml</file>
|
<file>TeroStyle/TextField.qml</file>
|
||||||
<file>TeroStyle/Typography.qml</file>
|
<file>TeroStyle/Typography.qml</file>
|
||||||
<file>TeroStyle/BarButton.qml</file>
|
<file>TeroStyle/BarButton.qml</file>
|
||||||
|
<file>Gui/AddOffer.qml</file>
|
||||||
|
<file>Gui/AddNewOffer.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/TeroStyle"/>
|
<qresource prefix="/TeroStyle"/>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
Reference in New Issue
Block a user