Merge main
@@ -16,7 +16,7 @@ GridLayout
|
|||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Straße")
|
text: qsTr("Straße*")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,13 +27,11 @@ GridLayout
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.alignment: Qt.AlignVCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Nr.")
|
text: qsTr("Nr.*")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,8 +42,6 @@ GridLayout
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.alignment: Qt.AlignVCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// New grid row
|
// New grid row
|
||||||
@@ -197,7 +193,7 @@ GridLayout
|
|||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Reinigungsmittel wo?")
|
text: qsTr("Reinigungsmittel wo?*")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,8 +202,6 @@ GridLayout
|
|||||||
property string name: "cleaningproducts"
|
property string name: "cleaningproducts"
|
||||||
id: cleaningproducts
|
id: cleaningproducts
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
}
|
}
|
||||||
Item
|
Item
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ GridLayout
|
|||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Vorname")
|
text: qsTr("Vorname*")
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
}
|
}
|
||||||
TextField
|
TextField
|
||||||
@@ -45,14 +45,12 @@ GridLayout
|
|||||||
property string name: "firstname"
|
property string name: "firstname"
|
||||||
id: firstname
|
id: firstname
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
Layout.columnSpan: 3
|
Layout.columnSpan: 3
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Nachname")
|
text: qsTr("Nachname*")
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
}
|
}
|
||||||
TextField
|
TextField
|
||||||
@@ -60,8 +58,6 @@ GridLayout
|
|||||||
property string name: "lastname"
|
property string name: "lastname"
|
||||||
id: lastname
|
id: lastname
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
Layout.columnSpan: 3
|
Layout.columnSpan: 3
|
||||||
}
|
}
|
||||||
@@ -164,7 +160,7 @@ GridLayout
|
|||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Geburtsdatum")
|
text: qsTr("Geburtsdatum*")
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
visible: radio.children[1].checked
|
visible: radio.children[1].checked
|
||||||
}
|
}
|
||||||
@@ -173,8 +169,6 @@ GridLayout
|
|||||||
property string name: "birthday"
|
property string name: "birthday"
|
||||||
id: birthday
|
id: birthday
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
Layout.columnSpan: 3
|
Layout.columnSpan: 3
|
||||||
visible: radio.children[1].checked
|
visible: radio.children[1].checked
|
||||||
@@ -195,7 +189,7 @@ GridLayout
|
|||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Geburtsort")
|
text: qsTr("Geburtsort*")
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
visible: radio.children[1].checked
|
visible: radio.children[1].checked
|
||||||
}
|
}
|
||||||
@@ -204,8 +198,6 @@ GridLayout
|
|||||||
property string name: "placeofbirth"
|
property string name: "placeofbirth"
|
||||||
id: placeofbirth
|
id: placeofbirth
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
Layout.columnSpan: 3
|
Layout.columnSpan: 3
|
||||||
visible: radio.children[1].checked
|
visible: radio.children[1].checked
|
||||||
|
|||||||
@@ -16,11 +16,10 @@ GridLayout
|
|||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: lblFirmenName
|
id: lblFirmenName
|
||||||
text: qsTr("Firmenname")
|
text: qsTr("Firmenname*")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TextField
|
TextField
|
||||||
{
|
{
|
||||||
property string name: "business"
|
property string name: "business"
|
||||||
@@ -29,34 +28,26 @@ GridLayout
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.alignment: Qt.AlignVCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
Layout.columnSpan: 3
|
Layout.columnSpan: 3
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Straße")
|
text: qsTr("Straße*")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TextField
|
TextField
|
||||||
{
|
{
|
||||||
property string name: "street"
|
property string name: "street"
|
||||||
id: streetid
|
id: streetid
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Nr.")
|
text: qsTr("Nr.*")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,8 +57,6 @@ GridLayout
|
|||||||
id: housenoid
|
id: housenoid
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
validator: RegularExpressionValidator
|
validator: RegularExpressionValidator
|
||||||
{
|
{
|
||||||
regularExpression: /([0-9a-zA-Z\-]{1,6})/
|
regularExpression: /([0-9a-zA-Z\-]{1,6})/
|
||||||
|
|||||||
@@ -3,175 +3,159 @@ import QtQuick.Layouts
|
|||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import Qt.labs.qmlmodels
|
import Qt.labs.qmlmodels
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
Item
|
function viewCriterion(criterion) {
|
||||||
{
|
business_model.viewCriterion(criterion.text);
|
||||||
SearchBar
|
|
||||||
{
|
|
||||||
id:searchBar
|
|
||||||
anchors.margins: 9
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Button
|
anchors.fill: parent
|
||||||
{
|
|
||||||
id: addBusinessBtn
|
Component.onCompleted: customersStack.pop()
|
||||||
icon.source: "qrc:/images/addbusiness.svg"
|
|
||||||
icon.color: "olive"
|
RowLayout {
|
||||||
anchors.right: parent.right
|
Layout.fillWidth: true
|
||||||
flat: true
|
Layout.horizontalStretchFactor: 1
|
||||||
|
spacing: Dimensions.l
|
||||||
|
|
||||||
|
SearchBar {
|
||||||
|
}
|
||||||
|
|
||||||
|
QuickFilter {
|
||||||
|
onSelectedChanged: (name) => {
|
||||||
|
business_model.viewCriterion(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
model: ListModel {
|
||||||
|
ListElement {
|
||||||
|
name: "Alle"
|
||||||
|
text: qsTr("Alle")
|
||||||
|
selected: true
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
name: "showProvider"
|
||||||
|
text: qsTr("Interessent")
|
||||||
|
selected: false
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
name: "showClientele"
|
||||||
|
text: qsTr("Kunde")
|
||||||
|
selected: false
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
name: "showProvider"
|
||||||
|
text: qsTr("Lieferant")
|
||||||
|
selected: false
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
name: "showFinished"
|
||||||
|
text: qsTr("Erledigt")
|
||||||
|
selected: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Button {
|
||||||
|
id: addCustomer
|
||||||
|
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
icon.source: "qrc:/images/PlusCircle.svg"
|
||||||
|
text: qsTr("Kunde Hinzufügen")
|
||||||
|
|
||||||
onClicked: appLoader.source = "AddCustomer.qml"
|
onClicked: appLoader.source = "AddCustomer.qml"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ColumnLayout
|
ColumnLayout {
|
||||||
{
|
|
||||||
id: tableColumn
|
|
||||||
clip: true
|
clip: true
|
||||||
anchors
|
|
||||||
{
|
|
||||||
top: searchBar.bottom
|
|
||||||
bottom: parent.bottom
|
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout
|
HorizontalHeaderView {
|
||||||
{
|
|
||||||
id: sortView
|
|
||||||
RadioButton
|
|
||||||
{
|
|
||||||
id: showAll
|
|
||||||
checked: true
|
|
||||||
text: qsTr("Alle")
|
|
||||||
onClicked: viewCriterion(showAll)
|
|
||||||
}
|
|
||||||
RadioButton
|
|
||||||
{
|
|
||||||
id: showInterested
|
|
||||||
text: qsTr("Interessent")
|
|
||||||
onClicked: viewCriterion(showInterested)
|
|
||||||
}
|
|
||||||
RadioButton
|
|
||||||
{
|
|
||||||
id: showClientele
|
|
||||||
text: qsTr("Kunden")
|
|
||||||
onClicked: viewCriterion(showClientele)
|
|
||||||
}
|
|
||||||
RadioButton
|
|
||||||
{
|
|
||||||
id: showProvider
|
|
||||||
text: qsTr("Lieferant")
|
|
||||||
onClicked: viewCriterion(showProvider)
|
|
||||||
}
|
|
||||||
RadioButton
|
|
||||||
{
|
|
||||||
id: showFinished
|
|
||||||
text: qsTr("Erledigt")
|
|
||||||
onClicked: viewCriterion(showFinished)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HorizontalHeaderView
|
|
||||||
{
|
|
||||||
id: horizontalHeader
|
id: horizontalHeader
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
implicitHeight: 40
|
implicitHeight: 40
|
||||||
movableColumns: true //@disable-check M16
|
movableColumns: true //@disable-check M16
|
||||||
syncView: customerTable
|
syncView: customerTable
|
||||||
delegate: Rectangle
|
|
||||||
{
|
delegate: Rectangle {
|
||||||
color: addBusinessBtn.palette.alternateBase
|
|
||||||
border.color: addBusinessBtn.palette.base
|
|
||||||
implicitHeight: 40
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
border.color: addCustomer.palette.base
|
||||||
|
color: addCustomer.palette.alternateBase
|
||||||
|
implicitHeight: 40
|
||||||
implicitWidth: 1
|
implicitWidth: 1
|
||||||
Text
|
|
||||||
{
|
Text {
|
||||||
text: model.display
|
color: addCustomer.palette.text
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
width: parent.width
|
|
||||||
height: parent.height
|
height: parent.height
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
text: model.display
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
color: addBusinessBtn.palette.text
|
width: parent.width
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
TableView {
|
||||||
TableView
|
|
||||||
{
|
|
||||||
property real newWidth: 0
|
|
||||||
id: customerTable
|
id: customerTable
|
||||||
z: 1
|
|
||||||
|
property real newWidth: 0
|
||||||
|
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
//height: tableColumn.height - (sortView.height + horizontalHeader.height)
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
columnSpacing: 1
|
|
||||||
rowSpacing: 2
|
|
||||||
model: business_model
|
|
||||||
alternatingRows: true
|
alternatingRows: true
|
||||||
|
columnSpacing: 1
|
||||||
|
model: business_model
|
||||||
resizableColumns: true
|
resizableColumns: true
|
||||||
|
rowSpacing: 2
|
||||||
selectionBehavior: TableView.SelectRows
|
selectionBehavior: TableView.SelectRows
|
||||||
ScrollBar.vertical: ScrollBar
|
z: 1
|
||||||
{
|
|
||||||
|
ScrollBar.vertical: ScrollBar {
|
||||||
policy: customerTable.contentHeight > customerTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
|
policy: customerTable.contentHeight > customerTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
|
||||||
}
|
}
|
||||||
|
delegate: Rectangle {
|
||||||
selectionModel: ItemSelectionModel
|
|
||||||
{
|
|
||||||
id: selModel
|
|
||||||
model: customerTable.model
|
|
||||||
}
|
|
||||||
delegate:Rectangle
|
|
||||||
{
|
|
||||||
required property bool selected
|
|
||||||
required property bool current
|
required property bool current
|
||||||
implicitWidth: customerTable.width / customerTable.columns
|
required property bool selected
|
||||||
|
|
||||||
|
color: selected ? addCustomer.palette.highlight //palette.highlight
|
||||||
|
: (customerTable.alternatingRows && row % 2 !== 0 ? addCustomer.palette.base // palette.base
|
||||||
|
: addCustomer.palette.alternateBase) //palette.alternateBase)
|
||||||
implicitHeight: 25
|
implicitHeight: 25
|
||||||
color: selected
|
implicitWidth: customerTable.width / customerTable.columns
|
||||||
? addBusinessBtn.palette.highlight //palette.highlight
|
|
||||||
: (customerTable.alternatingRows && row % 2 !== 0
|
Text {
|
||||||
? addBusinessBtn.palette.base // palette.base
|
color: addCustomer.palette.text
|
||||||
: addBusinessBtn.palette.alternateBase) //palette.alternateBase)
|
|
||||||
Text
|
|
||||||
{
|
|
||||||
text: model.display == null? "": model.display // @disable-check M126
|
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
width: parent.width
|
|
||||||
height: parent.height
|
height: parent.height
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
leftPadding: 9
|
leftPadding: 9
|
||||||
color: addBusinessBtn.palette.text
|
text: model.display == null ? "" : model.display // @disable-check M126
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
width: parent.width
|
||||||
}
|
}
|
||||||
MouseArea
|
MouseArea {
|
||||||
{
|
|
||||||
property bool hovered: false
|
|
||||||
id: mouseArea
|
id: mouseArea
|
||||||
|
|
||||||
|
property bool hovered: false
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
onDoubleClicked:
|
|
||||||
{
|
|
||||||
business_model.onRowClicked(row)
|
|
||||||
customersStack.push("CustomerDetails.qml", {selectedClient: row});
|
|
||||||
}
|
|
||||||
|
|
||||||
onEntered:
|
onDoubleClicked: {
|
||||||
{
|
business_model.onRowClicked(row);
|
||||||
customerTable.selectionModel.select(customerTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows)
|
customersStack.push("CustomerDetails.qml", {
|
||||||
}
|
selectedClient: row
|
||||||
|
});
|
||||||
|
}
|
||||||
|
onEntered: {
|
||||||
|
customerTable.selectionModel.select(customerTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
selectionModel: ItemSelectionModel {
|
||||||
|
id: selModel
|
||||||
|
|
||||||
Item
|
model: customerTable.model
|
||||||
{
|
}
|
||||||
|
}
|
||||||
|
Item {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function viewCriterion(criterion)
|
|
||||||
{
|
|
||||||
business_model.viewCriterion(criterion.text)
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: customersStack.pop()
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ Item
|
|||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
id: addEmployeeBtn
|
id: addEmployeeBtn
|
||||||
icon.source: "qrc:/images/addbusiness.svg"
|
text: qsTr("Mitarbeiter Hinzufügen")
|
||||||
icon.color: "olive"
|
icon.source: "qrc:/images/PlusCircle.svg"
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
flat: true
|
flat: true
|
||||||
onClicked: appLoader.source = "AddApplicant.qml"
|
onClicked: appLoader.source = "AddApplicant.qml"
|
||||||
|
|||||||
@@ -32,16 +32,15 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
spacing: Dimensions.m
|
|
||||||
anchors.centerIn: parent
|
anchors.centerIn: parent
|
||||||
|
spacing: Dimensions.m
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
font: Typography.h1
|
|
||||||
text: qsTr("Login")
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
Layout.alignment: Qt.AlignHCenter
|
||||||
Layout.bottomMargin: Dimensions.l
|
Layout.bottomMargin: Dimensions.l
|
||||||
|
font: Typography.h1
|
||||||
|
text: qsTr("Login")
|
||||||
}
|
}
|
||||||
|
|
||||||
Field {
|
Field {
|
||||||
label: qsTr("Benutzername")
|
label: qsTr("Benutzername")
|
||||||
|
|
||||||
@@ -78,11 +77,11 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
Layout.topMargin: Dimensions.m
|
Layout.topMargin: Dimensions.m
|
||||||
|
implicitWidth: parent.width
|
||||||
|
icon.source: "qrc:/images/ArrowRightEndOnRectangle.svg"
|
||||||
text: qsTr("Login")
|
text: qsTr("Login")
|
||||||
width: parent.width
|
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (benutzerName.text.trim() && passwort.text.trim())
|
if (benutzerName.text.trim() && passwort.text.trim())
|
||||||
|
|||||||
@@ -35,71 +35,45 @@ GridLayout
|
|||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Vorname")
|
text: qsTr("Vorname*")
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
}
|
}
|
||||||
TextField
|
TextField
|
||||||
{
|
{
|
||||||
id: firstname
|
id: firstname
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
// onTextChanged: checkContactFields()
|
// onTextChanged: checkContactFields()
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Nachname")
|
text: qsTr("Nachname*")
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
}
|
}
|
||||||
TextField
|
TextField
|
||||||
{
|
{
|
||||||
id: lastname
|
id: lastname
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Telefonnummer")
|
text: mobile.text ? qsTr("Telefonnummer") : qsTr("Telefonnummer*")
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
}
|
}
|
||||||
TextField
|
TextField
|
||||||
{
|
{
|
||||||
id: phonenumber
|
id: phonenumber
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: mobile.text ? "" : "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Mobil")
|
text: phonenumber.text ? qsTr("Mobil") : qsTr("Mobil*")
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
}
|
}
|
||||||
TextField
|
TextField
|
||||||
{
|
{
|
||||||
id: mobile
|
id: mobile
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: phonenumber.text ? "" : "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// Label
|
|
||||||
// {
|
|
||||||
// text: qsTr("Position")
|
|
||||||
// Layout.alignment: Qt.AlignRight
|
|
||||||
// }
|
|
||||||
// TextField
|
|
||||||
// {
|
|
||||||
// id: posizion
|
|
||||||
// Layout.fillWidth: true
|
|
||||||
// placeholderText: "Pflichtfeld"
|
|
||||||
// placeholderTextColor: "red"
|
|
||||||
// }
|
|
||||||
|
|
||||||
RowLayout
|
RowLayout
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ GridLayout
|
|||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Straße")
|
text: qsTr("Straße*")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,12 +38,10 @@ GridLayout
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.alignment: Qt.AlignVCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Nr.")
|
text: qsTr("Nr.*")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,13 +52,11 @@ GridLayout
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.alignment: Qt.AlignVCenter
|
Layout.alignment: Qt.AlignVCenter
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("PLZ")
|
text: qsTr("PLZ*")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,8 +66,6 @@ GridLayout
|
|||||||
id: postcode
|
id: postcode
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
onTextChanged: checkFields()
|
onTextChanged: checkFields()
|
||||||
placeholderText: "Pflichtfeld"
|
|
||||||
placeholderTextColor: "red"
|
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import QtQuick
|
|||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import Qt.labs.qmlmodels
|
import Qt.labs.qmlmodels
|
||||||
|
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -13,10 +14,9 @@ Item
|
|||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
id: addObjectBtn
|
id: addObjectBtn
|
||||||
icon.source: "qrc:/images/addbusiness.svg"
|
icon.source: "qrc:/images/PlusCircle.svg"
|
||||||
icon.color: "olive"
|
text: qsTr("Objekt Hinzufügen")
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
flat: true
|
|
||||||
onClicked: appLoader.source = "AddObject.qml"
|
onClicked: appLoader.source = "AddObject.qml"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,5 @@ RowLayout
|
|||||||
{
|
{
|
||||||
console.log(filter)
|
console.log(filter)
|
||||||
console.log(activated)
|
console.log(activated)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -225,12 +225,10 @@ ColumnLayout
|
|||||||
BarButton
|
BarButton
|
||||||
{
|
{
|
||||||
id: atajos
|
id: atajos
|
||||||
icon.source: "qrc:/images/menu.svg"
|
|
||||||
|
|
||||||
implicitWidth: 90
|
|
||||||
implicitHeight: 90
|
|
||||||
|
|
||||||
checkable: false
|
checkable: false
|
||||||
|
icon.source: "qrc:/images/Bars3.svg"
|
||||||
|
|
||||||
flat: true
|
flat: true
|
||||||
Layout.bottomMargin: Dimensions.s
|
Layout.bottomMargin: Dimensions.s
|
||||||
onClicked: mainMenu.open()
|
onClicked: mainMenu.open()
|
||||||
|
|||||||
14
Gui/main.qml
@@ -16,6 +16,8 @@ ApplicationWindow
|
|||||||
property string confile: ""
|
property string confile: ""
|
||||||
property alias settingsFileDialog: settingsFiledialog
|
property alias settingsFileDialog: settingsFiledialog
|
||||||
|
|
||||||
|
palette.text: Colors.foreground
|
||||||
|
|
||||||
|
|
||||||
TopBar
|
TopBar
|
||||||
{
|
{
|
||||||
@@ -45,11 +47,13 @@ ApplicationWindow
|
|||||||
|
|
||||||
anchors
|
anchors
|
||||||
{
|
{
|
||||||
left: topBar.right
|
|
||||||
right: parent.right
|
fill: parent
|
||||||
top: parent.top
|
topMargin: Dimensions.l
|
||||||
bottom: parent.bottom
|
bottomMargin: Dimensions.l
|
||||||
margins: Dimensions.s
|
rightMargin: Dimensions.l
|
||||||
|
leftMargin: Dimensions.l
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
property alias window: appWindow
|
property alias window: appWindow
|
||||||
|
|||||||
@@ -1,30 +1,68 @@
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Controls.impl as I
|
||||||
import QtQuick.Templates as T
|
import QtQuick.Templates as T
|
||||||
|
|
||||||
T.Button {
|
T.Button {
|
||||||
id: control
|
id: control
|
||||||
|
|
||||||
implicitHeight: implicitContentHeight
|
/**
|
||||||
implicitWidth: contentItem.width
|
* Set true when the button is supposed to be displayed in e.g. a TextField.
|
||||||
|
* You want to do this when this button is directly related to the TextField
|
||||||
|
* and the primary and only action for the TextField.
|
||||||
|
* Usually, you'd only want to display an icon in this button.
|
||||||
|
* If true, automatically sets height, width and position.
|
||||||
|
*
|
||||||
|
* ```qml
|
||||||
|
* TextField {
|
||||||
|
* placeholderText: "Search..."
|
||||||
|
* Button {
|
||||||
|
* icon.source: "qrc:/images/MagnifyingGlass.svg"
|
||||||
|
* isFieldButton: true
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
property bool isFieldButton: false
|
||||||
|
|
||||||
|
height: isFieldButton ? parent.height : null
|
||||||
|
icon.color: Colors.primaryContrast
|
||||||
|
icon.height: 21
|
||||||
|
icon.width: 21
|
||||||
|
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, implicitContentHeight + topPadding + bottomPadding)
|
||||||
|
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, implicitContentWidth + leftPadding + rightPadding)
|
||||||
|
/**
|
||||||
|
* Icon is slightly larger than Text, so we need to reduce the padding a
|
||||||
|
* tiny bit to make sure all Buttons are still the same height.
|
||||||
|
*/
|
||||||
|
padding: Dimensions.m - (icon.source.toString() === "" ? 0 : 1)
|
||||||
|
x: isFieldButton ? parent.x + parent.width - width : null
|
||||||
|
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
border.color: Colors.interactive
|
||||||
|
border.width: isFieldButton ? 1 : 0
|
||||||
|
bottomLeftRadius: topLeftRadius
|
||||||
color: Colors.primary
|
color: Colors.primary
|
||||||
radius: Dimensions.radius
|
radius: Dimensions.radius
|
||||||
|
topLeftRadius: isFieldButton ? 0 : radius
|
||||||
}
|
}
|
||||||
contentItem: Text {
|
contentItem: I.IconLabel {
|
||||||
color: Colors.foreground
|
color: Colors.primaryContrast
|
||||||
|
display: control.display
|
||||||
font: control.font
|
font: control.font
|
||||||
padding: Dimensions.s + 2
|
icon: control.icon
|
||||||
|
mirrored: control.mirrored
|
||||||
|
spacing: Dimensions.s
|
||||||
text: control.text
|
text: control.text
|
||||||
// Make sure the button is at least wide enough to be comfortably clickable
|
|
||||||
width: Math.max(implicitWidth, 120)
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: mouseArea
|
id: mouseArea
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
cursorShape: Qt.PointingHandCursor
|
cursorShape: Qt.PointingHandCursor
|
||||||
onPressed: (mouse) => mouse.accepted = false
|
|
||||||
|
onPressed: mouse => mouse.accepted = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,14 +6,16 @@ QtObject {
|
|||||||
readonly property int dark: 0
|
readonly property int dark: 0
|
||||||
readonly property int light: 1
|
readonly property int light: 1
|
||||||
|
|
||||||
property int theme: dark
|
property int theme: Application.styleHints.colorScheme === Qt.ColorScheme.Light ? light : dark
|
||||||
|
|
||||||
readonly property color primary: "#b81a34"
|
property color primary: "#b81a34"
|
||||||
readonly property color foreground: theme === dark ? "#fdfdfd" : "#110b0c"
|
property color primaryContrast: "#fdfdfd"
|
||||||
|
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 ? "#1e1f22" : "#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 double highlightOpacity: .3
|
readonly property double highlightOpacity: .3
|
||||||
}
|
}
|
||||||
5
TeroStyle/Label.qml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import QtQuick.Controls
|
||||||
|
|
||||||
|
Label {
|
||||||
|
color: Colors.foreground
|
||||||
|
}
|
||||||
60
TeroStyle/QuickFilter.qml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtCore
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
required property ListModel model
|
||||||
|
|
||||||
|
signal selectedChanged(string name)
|
||||||
|
|
||||||
|
spacing: Dimensions.m
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: root.model
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: item
|
||||||
|
|
||||||
|
required property int index
|
||||||
|
required property var modelData
|
||||||
|
property real padding: Dimensions.m
|
||||||
|
|
||||||
|
height: text.height + padding * 2
|
||||||
|
width: text.width + padding * 2
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
border.color: modelData.selected ? Colors.transparent : Colors.foreground
|
||||||
|
border.width: 2
|
||||||
|
color: modelData.selected ? Colors.primary : Colors.transparent
|
||||||
|
radius: parent.height
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
id: text
|
||||||
|
|
||||||
|
color: Colors.foreground
|
||||||
|
font: Typography.body
|
||||||
|
text: modelData.text
|
||||||
|
x: parent.padding
|
||||||
|
y: parent.padding
|
||||||
|
}
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
cursorShape: Qt.PointingHandCursor
|
||||||
|
|
||||||
|
onPressed: {
|
||||||
|
if (item.modelData.selected)
|
||||||
|
return;
|
||||||
|
const model = root.model;
|
||||||
|
for (let i = 0; i < model.count; i++) {
|
||||||
|
model.setProperty(i, "selected", false);
|
||||||
|
}
|
||||||
|
model.setProperty(item.index, "selected", true);
|
||||||
|
selectedChanged(item.modelData.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,7 +19,28 @@ T.TextField
|
|||||||
placeholderTextColor: Colors.interactive
|
placeholderTextColor: Colors.interactive
|
||||||
font: Typography.body
|
font: Typography.body
|
||||||
padding: Dimensions.m
|
padding: Dimensions.m
|
||||||
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Placeholder
|
||||||
|
*/
|
||||||
|
Text {
|
||||||
|
x: control.leftPadding
|
||||||
|
y: control.topPadding
|
||||||
|
width: control.width - (control.leftPadding + control.rightPadding)
|
||||||
|
height: control.height - (control.topPadding + control.bottomPadding)
|
||||||
|
|
||||||
|
font: control.font
|
||||||
|
text: control.placeholderText
|
||||||
|
color: control.placeholderTextColor
|
||||||
|
verticalAlignment: control.verticalAlignment
|
||||||
|
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
|
||||||
|
elide: Text.ElideRight
|
||||||
|
renderType: control.renderType
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,3 +7,7 @@ ComboBox ComboBox.qml
|
|||||||
Field Field.qml
|
Field Field.qml
|
||||||
TextField TextField.qml
|
TextField TextField.qml
|
||||||
BarButton BarButton.qml
|
BarButton BarButton.qml
|
||||||
|
Label Label.qml
|
||||||
|
QuickFilter QuickFilter.qml
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
4
images/ArrowRightEndOnRectangle.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-slot="icon" data-darkreader-inline-fill="">
|
||||||
|
<path clip-rule="evenodd" fill-rule="evenodd" d="M17 4.25A2.25 2.25 0 0 0 14.75 2h-5.5A2.25 2.25 0 0 0 7 4.25v2a.75.75 0 0 0 1.5 0v-2a.75.75 0 0 1 .75-.75h5.5a.75.75 0 0 1 .75.75v11.5a.75.75 0 0 1-.75.75h-5.5a.75.75 0 0 1-.75-.75v-2a.75.75 0 0 0-1.5 0v2A2.25 2.25 0 0 0 9.25 18h5.5A2.25 2.25 0 0 0 17 15.75V4.25Z"></path>
|
||||||
|
<path clip-rule="evenodd" fill-rule="evenodd" d="M1 10a.75.75 0 0 1 .75-.75h9.546l-1.048-.943a.75.75 0 1 1 1.004-1.114l2.5 2.25a.75.75 0 0 1 0 1.114l-2.5 2.25a.75.75 0 1 1-1.004-1.114l1.048-.943H1.75A.75.75 0 0 1 1 10Z"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 708 B |
3
images/Bars3.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-slot="icon">
|
||||||
|
<path clip-rule="evenodd" fill-rule="evenodd" d="M2 4.75A.75.75 0 0 1 2.75 4h14.5a.75.75 0 0 1 0 1.5H2.75A.75.75 0 0 1 2 4.75ZM2 10a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H2.75A.75.75 0 0 1 2 10Zm0 5.25a.75.75 0 0 1 .75-.75h14.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Z"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 414 B |
@@ -1,3 +1,3 @@
|
|||||||
<svg fill="none" stroke-width="1.5" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-slot="icon" data-darkreader-inline-stroke="">
|
<svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-slot="icon">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="m19.5 8.25-7.5 7.5-7.5-7.5"></path>
|
<path clip-rule="evenodd" fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z"></path>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 283 B After Width: | Height: | Size: 318 B |
3
images/Funnel.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-slot="icon">
|
||||||
|
<path clip-rule="evenodd" fill-rule="evenodd" d="M2.628 1.601C5.028 1.206 7.49 1 10 1s4.973.206 7.372.601a.75.75 0 0 1 .628.74v2.288a2.25 2.25 0 0 1-.659 1.59l-4.682 4.683a2.25 2.25 0 0 0-.659 1.59v3.037c0 .684-.31 1.33-.844 1.757l-1.937 1.55A.75.75 0 0 1 8 18.25v-5.757a2.25 2.25 0 0 0-.659-1.591L2.659 6.22A2.25 2.25 0 0 1 2 4.629V2.34a.75.75 0 0 1 .628-.74Z"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 495 B |
3
images/MagnifyingGlass.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-slot="icon">
|
||||||
|
<path clip-rule="evenodd" fill-rule="evenodd" d="M9 3.5a5.5 5.5 0 1 0 0 11 5.5 5.5 0 0 0 0-11ZM2 9a7 7 0 1 1 12.452 4.391l3.328 3.329a.75.75 0 1 1-1.06 1.06l-3.329-3.328A7 7 0 0 1 2 9Z"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 319 B |
3
images/PlusCircle.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" data-slot="icon">
|
||||||
|
<path clip-rule="evenodd" fill-rule="evenodd" d="M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm.75-11.25a.75.75 0 0 0-1.5 0v2.5h-2.5a.75.75 0 0 0 0 1.5h2.5v2.5a.75.75 0 0 0 1.5 0v-2.5h2.5a.75.75 0 0 0 0-1.5h-2.5v-2.5Z"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 344 B |
6
images/README.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Icons are sourced from [heroicons.dev](https://heroicons.dev/?iconset=v2-20-solid&size=21) and licensed under the terms of the MIT license.
|
||||||
|
|
||||||
|
## Solid or Outline?
|
||||||
|
Get the 20px Solid icon for most cases, since solid icons are the easiest for users to scan.
|
||||||
|
|
||||||
|
You might need an Outline icon in some cases, e.g. because the icon renders so big that a solid icon looks "boring". Suffix outline icon files with `-Outline`) and change the `stroke-width` attribute in the .svg to 2.
|
||||||
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M234-276q51-39 114-61.5T480-360q69 0 132 22.5T726-276q35-41 54.5-93T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 59 19.5 111t54.5 93Zm246-164q-59 0-99.5-40.5T340-580q0-59 40.5-99.5T480-720q59 0 99.5 40.5T620-580q0 59-40.5 99.5T480-440Zm0 360q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q53 0 100-15.5t86-44.5q-39-29-86-44.5T480-280q-53 0-100 15.5T294-220q39 29 86 44.5T480-160Zm0-360q26 0 43-17t17-43q0-26-17-43t-43-17q-26 0-43 17t-17 43q0 26 17 43t43 17Zm0-60Zm0 360Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 751 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 182 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M720-40v-120H600v-80h120v-120h80v120h120v80H800v120h-80ZM80-160v-240H40v-80l40-200h600l40 200v80h-40v120h-80v-120H440v240H80Zm80-80h200v-160H160v160Zm-38-240h516-516ZM80-720v-80h600v80H80Zm42 240h516l-24-120H146l-24 120Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 345 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5F6368"><path d="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h360v80H200v560h560v-360h80v360q0 33-23.5 56.5T760-120H200Zm120-160v-80h320v80H320Zm0-120v-80h320v80H320Zm0-120v-80h320v80H320Zm360-80v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 362 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M720-400v-120H600v-80h120v-120h80v120h120v80H800v120h-80Zm-360-80q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47ZM40-160v-112q0-34 17.5-62.5T104-378q62-31 126-46.5T360-440q66 0 130 15.5T616-378q29 15 46.5 43.5T680-272v112H40Zm80-80h480v-32q0-11-5.5-20T580-306q-54-27-109-40.5T360-360q-56 0-111 13.5T140-306q-9 5-14.5 14t-5.5 20v32Zm240-320q33 0 56.5-23.5T440-640q0-33-23.5-56.5T360-720q-33 0-56.5 23.5T280-640q0 33 23.5 56.5T360-560Zm0-80Zm0 400Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 603 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M440-160q-17 0-28.5-11.5T400-200v-240L168-736q-15-20-4.5-42t36.5-22h560q26 0 36.5 22t-4.5 42L560-440v240q0 17-11.5 28.5T520-160h-80Zm40-308 198-252H282l198 252Zm0 0Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 290 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M120-240v-80h720v80H120Zm0-200v-80h720v80H120Zm0-200v-80h720v80H120Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 193 B |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 376 B |
@@ -11,7 +11,6 @@ class BusinessDAO(QObject):
|
|||||||
__all_cols = None
|
__all_cols = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
#print(f"*** File: {__file__}, init()")
|
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.__con = DbManager().getConnection()
|
self.__con = DbManager().getConnection()
|
||||||
if self.__con:
|
if self.__con:
|
||||||
|
|||||||
16
pyqcrm.qrc
@@ -1,22 +1,22 @@
|
|||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file>qtquickcontrols2.conf</file>
|
<file>qtquickcontrols2.conf</file>
|
||||||
<file>images/add.svg</file>
|
<file>images/ArrowRightEndOnRectangle.svg</file>
|
||||||
<file>images/addbusiness.svg</file>
|
<file>images/Bars3.svg</file>
|
||||||
<file>images/addperson.svg</file>
|
|
||||||
<file>images/filter.svg</file>
|
|
||||||
<file>images/menu.svg</file>
|
|
||||||
<file>images/search.svg</file>
|
|
||||||
<file>images/ChevronDown.svg</file>
|
<file>images/ChevronDown.svg</file>
|
||||||
|
<file>images/Funnel.svg</file>
|
||||||
|
<file>images/MagnifyingGlass.svg</file>
|
||||||
|
<file>images/PlusCircle.svg</file>
|
||||||
|
<file>images/tero.jpg</file>
|
||||||
<file>sounds/error.ogg</file>
|
<file>sounds/error.ogg</file>
|
||||||
<file>sounds/fail2c.ogg</file>
|
<file>sounds/fail2c.ogg</file>
|
||||||
<file>sounds/puzzerr.ogg</file>
|
<file>sounds/puzzerr.ogg</file>
|
||||||
<file>sounds/sysnotify.ogg</file>
|
<file>sounds/sysnotify.ogg</file>
|
||||||
<file>sounds/wrong.ogg</file>
|
<file>sounds/wrong.ogg</file>
|
||||||
<file>fonts/RobotoCondensed.otf</file>
|
<file>fonts/RobotoCondensed.otf</file>
|
||||||
<file>images/account.svg</file>
|
|
||||||
<file>README</file>
|
<file>README</file>
|
||||||
<file>LICENSE</file>
|
<file>LICENSE</file>
|
||||||
|
<<<<<<< HEAD
|
||||||
<file>images/tero.jpg</file>
|
<file>images/tero.jpg</file>
|
||||||
<file>images/dash.svg</file>
|
<file>images/dash.svg</file>
|
||||||
<file>images/invoice.svg</file>
|
<file>images/invoice.svg</file>
|
||||||
@@ -25,5 +25,7 @@
|
|||||||
<file>images/customer.svg</file>
|
<file>images/customer.svg</file>
|
||||||
<file>images/contract.svg</file>
|
<file>images/contract.svg</file>
|
||||||
<file>images/object.svg</file>
|
<file>images/object.svg</file>
|
||||||
|
=======
|
||||||
|
>>>>>>> main
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
4
qml.qrc
@@ -52,9 +52,11 @@
|
|||||||
<file>TeroStyle/Button.qml</file>
|
<file>TeroStyle/Button.qml</file>
|
||||||
<file>TeroStyle/Colors.qml</file>
|
<file>TeroStyle/Colors.qml</file>
|
||||||
<file>TeroStyle/ComboBox.qml</file>
|
<file>TeroStyle/ComboBox.qml</file>
|
||||||
<file>TeroStyle/Field.qml</file>
|
|
||||||
<file>TeroStyle/Dimensions.qml</file>
|
<file>TeroStyle/Dimensions.qml</file>
|
||||||
|
<file>TeroStyle/Field.qml</file>
|
||||||
|
<file>TeroStyle/Label.qml</file>
|
||||||
<file>TeroStyle/qmldir</file>
|
<file>TeroStyle/qmldir</file>
|
||||||
|
<file>TeroStyle/QuickFilter.qml</file>
|
||||||
<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>
|
||||||
|
|||||||
@@ -7,7 +7,3 @@ mariadb
|
|||||||
soundfile
|
soundfile
|
||||||
sounddevice
|
sounddevice
|
||||||
reportlab
|
reportlab
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||