Browse Source

dialog crash test

master
Nils 3 years ago
parent
commit
203bf1678f
  1. BIN
      bug01/__pycache__/settings.cpython-38.pyc
  2. BIN
      bug01/designer/__pycache__/settings.cpython-38.pyc
  3. 82
      bug01/designer/settings.py
  4. 69
      bug01/main.py
  5. 94
      bug01/settings.py

BIN
bug01/__pycache__/settings.cpython-38.pyc

Binary file not shown.

BIN
bug01/designer/__pycache__/settings.cpython-38.pyc

Binary file not shown.

82
bug01/designer/settings.py

@ -0,0 +1,82 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'settings.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(626, 387)
self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName("verticalLayout")
self.SettingsTab = QtWidgets.QTabWidget(Dialog)
self.SettingsTab.setTabPosition(QtWidgets.QTabWidget.North)
self.SettingsTab.setTabShape(QtWidgets.QTabWidget.Rounded)
self.SettingsTab.setObjectName("SettingsTab")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tab_2)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.label_help_launcher_whitelist = QtWidgets.QLabel(self.tab_2)
self.label_help_launcher_whitelist.setWordWrap(True)
self.label_help_launcher_whitelist.setObjectName("label_help_launcher_whitelist")
self.verticalLayout_3.addWidget(self.label_help_launcher_whitelist)
self.launcherWhitelistPlainTextEdit = QtWidgets.QPlainTextEdit(self.tab_2)
self.launcherWhitelistPlainTextEdit.setObjectName("launcherWhitelistPlainTextEdit")
self.verticalLayout_3.addWidget(self.launcherWhitelistPlainTextEdit)
self.label_help_launcher_blacklist = QtWidgets.QLabel(self.tab_2)
self.label_help_launcher_blacklist.setWordWrap(True)
self.label_help_launcher_blacklist.setObjectName("label_help_launcher_blacklist")
self.verticalLayout_3.addWidget(self.label_help_launcher_blacklist)
self.launcherBlacklistPlainTextEdit = QtWidgets.QPlainTextEdit(self.tab_2)
self.launcherBlacklistPlainTextEdit.setObjectName("launcherBlacklistPlainTextEdit")
self.verticalLayout_3.addWidget(self.launcherBlacklistPlainTextEdit)
self.SettingsTab.addTab(self.tab_2, "")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.label_help_programstart = QtWidgets.QLabel(self.tab)
self.label_help_programstart.setWordWrap(True)
self.label_help_programstart.setObjectName("label_help_programstart")
self.verticalLayout_2.addWidget(self.label_help_programstart)
self.label_help_path_rules = QtWidgets.QLabel(self.tab)
self.label_help_path_rules.setWordWrap(True)
self.label_help_path_rules.setObjectName("label_help_path_rules")
self.verticalLayout_2.addWidget(self.label_help_path_rules)
self.programPathsPlainTextEdit = QtWidgets.QPlainTextEdit(self.tab)
self.programPathsPlainTextEdit.setObjectName("programPathsPlainTextEdit")
self.verticalLayout_2.addWidget(self.programPathsPlainTextEdit)
self.SettingsTab.addTab(self.tab, "")
self.verticalLayout.addWidget(self.SettingsTab)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.verticalLayout.addWidget(self.buttonBox)
self.buttonBox.raise_()
self.SettingsTab.raise_()
self.retranslateUi(Dialog)
self.SettingsTab.setCurrentIndex(0)
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Settings"))
self.label_help_launcher_whitelist.setText(_translate("Dialog", "Whitelist - Add executable names (not paths) to the program launcher. One executable per line."))
self.label_help_launcher_blacklist.setText(_translate("Dialog", "Blacklist - Exclude executable names (not paths) from the program launcher. One executable per line."))
self.SettingsTab.setTabText(self.SettingsTab.indexOf(self.tab_2), _translate("Dialog", "Launcher"))
self.label_help_programstart.setText(_translate("Dialog", "For advanced users only! Add executable paths to the environment, just for Argodejo and NSM. Changes need a program restart afterwards. If you want your programs in the application launcher use the launcher tab."))
self.label_help_path_rules.setText(_translate("Dialog", "Add one absolute path to a directory (e.g. /home/user/audio-bin) per line. No wildcards. Trailing slashes/ don\'t matter."))
self.SettingsTab.setTabText(self.SettingsTab.indexOf(self.tab), _translate("Dialog", "$PATH"))

69
bug01/main.py

@ -0,0 +1,69 @@
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from settings import SettingsDialog
import sys
from PyQt5 import QtWidgets, QtGui, QtCore
qtApp = QtWidgets.QApplication(sys.argv)
scene = QtWidgets.QGraphicsScene()
view = QtWidgets.QGraphicsView()
view.scaleFactor = 1
view.setDragMode(QtWidgets.QGraphicsView.ScrollHandDrag)
view.setScene(scene)
def _wheelEvent(ev):
modifiers = QtWidgets.QApplication.keyboardModifiers()
if modifiers == QtCore.Qt.ControlModifier:
ev.accept()
if ev.angleDelta().y() > 0:
view.scaleFactor += 0.25
else:
if view.scaleFactor >= 0.5:
view.scaleFactor -= 0.25
view.resetTransform()
view.scale(view.scaleFactor, view.scaleFactor)
view.viewport().update()
def _pressEvent(ev):
ev.accept()
widget = SettingsDialog(mainWindow=view) #blocks until closed
if widget.success:
print ("success")
view.wheelEvent = _wheelEvent
view.mousePressEvent = _pressEvent
gridSize = 20
cosmeticPen = QtGui.QPen()
cosmeticPen.setCosmetic(True)
def _drawBackground(painter:QtGui.QPainter, rect:QtCore.QRectF):
"""Draw a grid that always fits at least the visible rect"""
painter.setPen(cosmeticPen)
r = rect.toRect() # int version
xcount = r.width() // gridSize
ycount = r.height() // gridSize
#draw vertical
for x in range(xcount):
painter.drawLine(x*gridSize, r.top(), x*gridSize, r.bottom()) #x1, y1, x2, y2
#draw horizontal
for y in range(ycount):
painter.drawLine(r.left(), y*gridSize, r.right(), y*gridSize) #x1, y1, x2, y2
scene.drawBackground = _drawBackground
scene.addEllipse(-5,-5,10,10) #automatically at 0,0
scene.setSceneRect(0,0,1000,1000)
print("Press mouse button to open dialog")
view.show()
sys.exit(qtApp.exec_())

94
bug01/settings.py

@ -0,0 +1,94 @@
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import logging; logger = logging.getLogger(__name__); logger.info("import")
#Standard Library
import pathlib
import os
#Third Party
from PyQt5 import QtCore, QtWidgets
#QtGui
from designer.settings import Ui_Dialog
class SettingsDialog(QtWidgets.QDialog):
def __init__(self, mainWindow):
super().__init__()
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.mainWindow = mainWindow
self.success = False
logger.info("Init settings dialog")
settings = QtCore.QSettings("LaborejoSoftwareSuite", "bug01")
if settings.contains("launcherBlacklistPlainTextEdit"):
self.ui.launcherBlacklistPlainTextEdit.setPlainText(settings.value("launcherBlacklistPlainTextEdit", type=str))
else:
self.ui.launcherBlacklistPlainTextEdit.setPlainText("")
if settings.contains("launcherWhitelistPlainTextEdit"):
self.ui.launcherWhitelistPlainTextEdit.setPlainText(settings.value("launcherWhitelistPlainTextEdit", type=str))
else:
self.ui.launcherWhitelistPlainTextEdit.setPlainText("")
if settings.contains("programPathsPlainTextEdit"):
self.ui.programPathsPlainTextEdit.setPlainText(settings.value("programPathsPlainTextEdit", type=str))
else:
self.ui.programPathsPlainTextEdit.setPlainText("")
#self.ui.name.textEdited.connect(self.check) #not called when text is changed programatically
self.ui.buttonBox.accepted.connect(self.process)
self.ui.buttonBox.rejected.connect(self.reject)
self.setWindowFlag(QtCore.Qt.Popup, True)
self.setModal(True)
self.setFocus(True)
logger.info("Show settings dialog")
self.exec_()
@staticmethod
def loadFromSettingsAndSendToEngine():
"""Called on program start and in self.process, which has a bit overhead because
it is saving to file and then reloading from file (qsettings)"""
settings = QtCore.QSettings("LaborejoSoftwareSuite", "bug01")
if settings.contains("launcherBlacklistPlainTextEdit"):
bl = settings.value("launcherBlacklistPlainTextEdit", type=str)
else:
bl = None
if settings.contains("launcherWhitelistPlainTextEdit"):
wl = settings.value("launcherWhitelistPlainTextEdit", type=str)
else:
wl = None
if settings.contains("programPathsPlainTextEdit"):
pth = settings.value("programPathsPlainTextEdit", type=str)
else:
pth = None
blacklist = bl.split("\n") if bl else []
whitelist = wl.split("\n") if wl else []
#Depends on SettingsDialog: More executable paths for the engine. We do this in mainwindow because it has access to the qsettings safe file and is started before engine, program-database or nsmd.
additionalExecutablePaths = pth.split("\n") if pth else []
if additionalExecutablePaths:
os.environ["PATH"] = os.pathsep.join(additionalExecutablePaths) + os.pathsep + os.environ["PATH"]
def process(self):
settings = QtCore.QSettings("LaborejoSoftwareSuite", "bug01")
settings.setValue("launcherBlacklistPlainTextEdit", self.ui.launcherBlacklistPlainTextEdit.toPlainText())
settings.setValue("launcherWhitelistPlainTextEdit", self.ui.launcherWhitelistPlainTextEdit.toPlainText())
settings.setValue("programPathsPlainTextEdit", self.ui.programPathsPlainTextEdit.toPlainText())
SettingsDialog.loadFromSettingsAndSendToEngine()
self.success = True
self.done(True)
Loading…
Cancel
Save