COnfiguration and systray
This commit is contained in:
@@ -2,16 +2,113 @@ import QtQuick
|
|||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
|
|
||||||
Item
|
ColumnLayout
|
||||||
{
|
{
|
||||||
property string name: "company"
|
property alias name: companyName
|
||||||
|
property alias street: street
|
||||||
|
property alias house: houseno
|
||||||
|
property alias zipcode: zipcode
|
||||||
|
property alias city: city
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
anchors.topMargin: 50
|
||||||
|
|
||||||
|
RowLayout
|
||||||
|
{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Namen")
|
||||||
|
// font.pixelSize: 57
|
||||||
|
// font.bold: true
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
id: companyName
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout
|
||||||
|
{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Straße")
|
||||||
|
// font.pixelSize: 57
|
||||||
|
// font.bold: true
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
id: street
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Das Unternehmen")
|
text: qsTr("Haus-Nr.")
|
||||||
anchors.centerIn: parent
|
// font.pixelSize: 57
|
||||||
font.pixelSize: 57
|
// font.bold: true
|
||||||
font.bold: true
|
}
|
||||||
|
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
id: houseno
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RowLayout
|
||||||
|
{
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("PLZ")
|
||||||
|
// font.pixelSize: 57
|
||||||
|
// font.bold: true
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox
|
||||||
|
{
|
||||||
|
id: zipcode
|
||||||
|
Layout.fillWidth: true
|
||||||
|
editable: true
|
||||||
|
model: address_model
|
||||||
|
textRole: "display"
|
||||||
|
popup.height: 300
|
||||||
|
popup.y: zipcode.y + 5 - (zipcode.height * 2)
|
||||||
|
//currentIndex: -1
|
||||||
|
onCurrentIndexChanged: city.currentIndex = zipcode.currentIndex
|
||||||
|
validator: RegularExpressionValidator
|
||||||
|
{
|
||||||
|
regularExpression: /([0-9]{1,5})/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Stadt")
|
||||||
|
// font.pixelSize: 57
|
||||||
|
// font.bold: true
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox
|
||||||
|
{
|
||||||
|
id: city
|
||||||
|
Layout.fillWidth: true
|
||||||
|
editable: true
|
||||||
|
model: address_model
|
||||||
|
textRole: "city"
|
||||||
|
popup.height: 300
|
||||||
|
popup.y: zipcode.y + 5 - (zipcode.height * 2)
|
||||||
|
currentIndex: -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
Layout.fillHeight: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
22
Gui/MiscConf.qml
Executable file
22
Gui/MiscConf.qml
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
|
||||||
|
ColumnLayout
|
||||||
|
{
|
||||||
|
property alias sysTray: sysTray
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.topMargin: 35
|
||||||
|
|
||||||
|
Switch
|
||||||
|
{
|
||||||
|
id: sysTray
|
||||||
|
text: qsTr("Beim minimieren, in der Taskleiste anzeigen")
|
||||||
|
checked: config.systray()
|
||||||
|
}
|
||||||
|
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
Layout.fillHeight: true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,7 +15,7 @@ GridLayout
|
|||||||
|
|
||||||
ComboBox
|
ComboBox
|
||||||
{
|
{
|
||||||
property string name: "contacttype"
|
//property string name: "contacttype"
|
||||||
id: contacttype
|
id: contacttype
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
editable: false
|
editable: false
|
||||||
@@ -150,6 +150,7 @@ GridLayout
|
|||||||
{
|
{
|
||||||
contacts[num_contacts] = {}
|
contacts[num_contacts] = {}
|
||||||
contacts[num_contacts]["title"] = title.currentText
|
contacts[num_contacts]["title"] = title.currentText
|
||||||
|
contacts[num_contacts]["ctype"] = contacttype.currentText
|
||||||
contacts[num_contacts]["fname"] = firstname.text.trim()
|
contacts[num_contacts]["fname"] = firstname.text.trim()
|
||||||
contacts[num_contacts]["lname"] = lastname.text.trim()
|
contacts[num_contacts]["lname"] = lastname.text.trim()
|
||||||
contacts[num_contacts]["phone"] = phonenumber.text.trim()
|
contacts[num_contacts]["phone"] = phonenumber.text.trim()
|
||||||
@@ -261,7 +262,7 @@ GridLayout
|
|||||||
id: mainRect
|
id: mainRect
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
implicitHeight: 100
|
implicitHeight: 100
|
||||||
color: "salmon" // firstname.palette.base
|
color: firstname.palette.base
|
||||||
border.color: firstname.activeFocus? firstname.palette.highlight: firstname.palette.base
|
border.color: firstname.activeFocus? firstname.palette.highlight: firstname.palette.base
|
||||||
clip: true
|
clip: true
|
||||||
|
|
||||||
@@ -310,32 +311,32 @@ GridLayout
|
|||||||
//spacing: 3
|
//spacing: 3
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
text: qsTr('Name: ') + model.name
|
text: '<b>' + qsTr('Name: ') + '</b>' + model.name
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
color: "white"
|
color: "white"
|
||||||
}
|
}
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
text: qsTr('Telefon: ') + model.phone
|
text: '<b>' + qsTr('Telefon: ') + '</b>' + model.phone
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
color: "white"
|
color: "white"
|
||||||
}
|
}
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
text: qsTr('Handy: ') + model.mobile
|
text: '<b>' + qsTr('Handy: ') + '</b>' + model.mobile
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
color: "white"
|
color: "white"
|
||||||
}
|
}
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
text: qsTr('Position: ') + model.posizion
|
text: '<b>' + qsTr('Position: ') + '</b>' + model.posizion
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
color: "white"
|
color: "white"
|
||||||
}
|
}
|
||||||
|
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
text: qsTr('Typ: ') + model.cdata
|
text: '<b>' + qsTr('Typ: ') + '</b>' + model.cdata
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
color: "white"
|
color: "white"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import QtQuick.Layouts
|
|||||||
|
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
|
property alias companyConf: companyConf
|
||||||
|
property alias miscConf: miscConf
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
TabBar
|
TabBar
|
||||||
{
|
{
|
||||||
@@ -27,6 +29,10 @@ Item
|
|||||||
text: qsTr("Sicherung")
|
text: qsTr("Sicherung")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TabButton
|
||||||
|
{
|
||||||
|
text: qsTr("Sonstiges")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StackLayout
|
StackLayout
|
||||||
@@ -72,6 +78,15 @@ Item
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
id: miscelanea
|
||||||
|
MiscConf
|
||||||
|
{
|
||||||
|
id: miscConf
|
||||||
|
anchors.fill: parent
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout
|
RowLayout
|
||||||
@@ -101,7 +116,10 @@ Item
|
|||||||
break
|
break
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
console.log("Need to update company's info.")
|
updateCompanyInfo()
|
||||||
|
break
|
||||||
|
case 4:
|
||||||
|
updateMiscConf()
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
console.log("Need to handle users")
|
console.log("Need to handle users")
|
||||||
@@ -109,4 +127,28 @@ Item
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateCompanyInfo()
|
||||||
|
{
|
||||||
|
var company = {}
|
||||||
|
company['company'] = {}
|
||||||
|
company['company']['NAME'] = companyConf.name.text.trim()
|
||||||
|
company['company']['STREET'] = companyConf.street.text.trim()
|
||||||
|
company['company']['HOUSE'] = companyConf.house.text.trim()
|
||||||
|
company['company']['ZIPCODE'] = companyConf.zipcode.editText? companyConf.zipcode.editText.trim(): companyConf.zipcode.currentText
|
||||||
|
company['company']['CITY'] = companyConf.city.editText? companyConf.city.editText.trim(): companyConf.city.currentText
|
||||||
|
|
||||||
|
if (company['company']['NAME'] === '' || company['company']['STREET'] === '' ||
|
||||||
|
company['company']['HOUSE'] === '' || company['company']['ZIPCODE'] === '' ||
|
||||||
|
company['company']['CITY'] === '');
|
||||||
|
else config.saveCompanyInfo(company)
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateMiscConf()
|
||||||
|
{
|
||||||
|
var misc = {}
|
||||||
|
misc['misc'] = {}
|
||||||
|
misc['misc']['SYSTRAY'] = miscConf.sysTray.checked
|
||||||
|
config.saveMiscConf(misc)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
52
Gui/main.qml
52
Gui/main.qml
@@ -62,19 +62,6 @@ ApplicationWindow
|
|||||||
property alias window: appWindow
|
property alias window: appWindow
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted:
|
|
||||||
{
|
|
||||||
if(bad_config)
|
|
||||||
{
|
|
||||||
importDialog.open()
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (db_con) appLoader.source= "LoginScreen.qml"
|
|
||||||
else appLoader.source= "NoDbConnection.qml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Dialog
|
Dialog
|
||||||
{
|
{
|
||||||
id: importDialog
|
id: importDialog
|
||||||
@@ -127,4 +114,43 @@ ApplicationWindow
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component.onCompleted:
|
||||||
|
{
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onClosing: (close) =>
|
||||||
|
{
|
||||||
|
if (false)
|
||||||
|
{
|
||||||
|
console.log("Main window closed!! Was soll ich tun? kann ich mich beenden?!")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
images/tero.jpg
Normal file
BIN
images/tero.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.2 KiB |
@@ -245,3 +245,21 @@ class ConfigLoader(QObject):
|
|||||||
self.__encrypt_key = toml.dumps(self.getConfig())
|
self.__encrypt_key = toml.dumps(self.getConfig())
|
||||||
self.saveRecoveryKey(filename, password)
|
self.saveRecoveryKey(filename, password)
|
||||||
|
|
||||||
|
@Slot(dict)
|
||||||
|
def saveCompanyInfo(self, company = None):
|
||||||
|
self.__config.update(company)
|
||||||
|
self.__saveConfig()
|
||||||
|
|
||||||
|
@Slot(result = dict)
|
||||||
|
def getCompanyInfo():
|
||||||
|
return self.__config['company']
|
||||||
|
|
||||||
|
@Slot(dict)
|
||||||
|
def saveMiscConf(self, misc_conf = None):
|
||||||
|
self.__config.update(misc_conf)
|
||||||
|
self.__saveConfig()
|
||||||
|
|
||||||
|
@Slot(result = bool)
|
||||||
|
def systray(self):
|
||||||
|
return self.__config['misc']['SYSTRAY']
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class ObjectModel(QAbstractTableModel):
|
|||||||
|
|
||||||
print(new_objcontact)
|
print(new_objcontact)
|
||||||
|
|
||||||
self.__object_dao.addObject(new_object, new_objcontact, self.__key)
|
#self.__object_dao.addObject(new_object, new_objcontact, self.__key)
|
||||||
|
|
||||||
# @Slot(str)
|
# @Slot(str)
|
||||||
# def viewCriterion(self, criterion, processed = False, fired = False):
|
# def viewCriterion(self, criterion, processed = False, fired = False):
|
||||||
|
|||||||
11
main.py
11
main.py
@@ -2,7 +2,8 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import logging
|
import logging
|
||||||
from PySide6.QtGui import QGuiApplication
|
from PySide6.QtWidgets import QSystemTrayIcon
|
||||||
|
from PySide6.QtGui import QGuiApplication, QIcon
|
||||||
from PySide6.QtQml import QQmlApplicationEngine
|
from PySide6.QtQml import QQmlApplicationEngine
|
||||||
#from PySide6.QtCore import QResource
|
#from PySide6.QtCore import QResource
|
||||||
from lib.ConfigLoader import ConfigLoader
|
from lib.ConfigLoader import ConfigLoader
|
||||||
@@ -86,6 +87,13 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
qml_file = "qrc:/Gui/main.qml"
|
qml_file = "qrc:/Gui/main.qml"
|
||||||
|
|
||||||
|
icon = QIcon(":/images/tero.jpg")
|
||||||
|
app.setWindowIcon(QIcon(icon))
|
||||||
|
|
||||||
|
tray = QSystemTrayIcon()
|
||||||
|
tray.setIcon(icon)
|
||||||
|
tray.setToolTip("PYQCRM")
|
||||||
|
|
||||||
config = ConfigLoader()
|
config = ConfigLoader()
|
||||||
|
|
||||||
if not config.getConfig():
|
if not config.getConfig():
|
||||||
@@ -98,6 +106,7 @@ if __name__ == "__main__":
|
|||||||
engine.rootContext().setContextProperty("bad_config", bad_config) # print(f"Fehler: {i}")
|
engine.rootContext().setContextProperty("bad_config", bad_config) # print(f"Fehler: {i}")
|
||||||
engine.rootContext().setContextProperty("db_con", db_con)
|
engine.rootContext().setContextProperty("db_con", db_con)
|
||||||
engine.rootContext().setContextProperty("config", config)
|
engine.rootContext().setContextProperty("config", config)
|
||||||
|
engine.rootContext().setContextProperty("systray", tray)
|
||||||
|
|
||||||
engine.load(qml_file)
|
engine.load(qml_file)
|
||||||
|
|
||||||
|
|||||||
@@ -20,5 +20,7 @@
|
|||||||
<file>images/account.svg</file>
|
<file>images/account.svg</file>
|
||||||
<file>README</file>
|
<file>README</file>
|
||||||
<file>LICENSE</file>
|
<file>LICENSE</file>
|
||||||
|
<file>../tero.jpg</file>
|
||||||
|
<file>images/tero.jpg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
1
qml.qrc
1
qml.qrc
@@ -45,5 +45,6 @@
|
|||||||
<file>Gui/CompanyConf.qml</file>
|
<file>Gui/CompanyConf.qml</file>
|
||||||
<file>Gui/Firststart.qml</file>
|
<file>Gui/Firststart.qml</file>
|
||||||
<file>Gui/BackupSettings.qml</file>
|
<file>Gui/BackupSettings.qml</file>
|
||||||
|
<file>Gui/MiscConf.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
Reference in New Issue
Block a user