Source code for stdcomqt5widget
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5.QtCore import pyqtSlot, pyqtSignal
from ipportdialog import *
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QTreeWidgetItem, QTreeWidget
from stdcomqt5 import *
from stdcomqt5treeewidget import *
import re, sys
"""
Common Stec PyQt5 Widgets are being kept
"""
[docs]class ipconfigDialog(QDialog):
"""
IP Form, it is a IP and Port Configuation Dialog
User can attach to sigNewIPPort to get IP and Port Changes
"""
sigNewIPPort = pyqtSignal( str,str)
def __init__(self, callBack = None, ip = "localhost", port = "4897") :
"""
:param callBack: func( str(ip), str(port)) user function or None
:param ip:
:param port:
"""
super().__init__()
self.callBack = callBack
self.ui = Ui_IPConfgDialog()
self.ui.setupUi(self)
self.ui.buttonBox.accepted.connect(self._OK)
self.ui.lineEditIP.setText(str(ip))
self.ui.lineEditPort.setText(str(port))
self.show()
@pyqtSlot()
def _OK(self) :
ip = self.ui.lineEditIP.text()
port = self.ui.lineEditPort.text()
if self.callBack != None :
self.callBack(ip,port)
self.sigNewIPPort.emit(str(ip),str(port))
def _Cancel(self) :
print ("Cancel")
[docs]class stdcomqt5qtree(QTreeWidget):
"""
Used to create a communication tree of names based on NextStep names
"""
newTextSignal = pyqtSignal(str)
newTextFolder = pyqtSignal(str)
newTextFolderText = pyqtSignal(str)
callback = None
callbackgetdata = None
def __init__(self, listOf, callback=None, callbackgetdata = None, onclick=True, label="not defined", parent=None):
super().__init__(parent)
self.callback = callback
self.callbackgetdata = callbackgetdata
self.ui = Ui_stdcomqt5treeewidget()
self.ui.setupUi(self)
sortedList = []
if listOf is not None:
sortedList = sorted(listOf)
keys = list()
self.KeyMap = {"": QTreeWidgetItem}
for i in range(0, len(sortedList)):
keyLine = str(sortedList[i])
key = re.split(r'[.;:,\s]\s*', keyLine)
if len(key) >= 0:
word = key[0]
try:
idx = word.index('//')
if idx == 0:
rdx = word.rindex('/')
word = word[idx:rdx]
keys.append(word)
except:
keys.append(word)
keys = dict.fromkeys(keys).keys()
keys = tuple(keys)
self.headerItem = QTreeWidgetItem()
item = QTreeWidgetItem()
for i in range(0, len(keys)):
parent = QTreeWidgetItem(self.ui.TreeWidget)
parent.setText(0, str(keys[i]))
key = str(keys[i])
self.KeyMap.update({word: parent})
for x in range(0, len(sortedList)):
word = str(sortedList[x])
try:
result = word.index(key)
if result == 0:
child = QTreeWidgetItem(parent, 10001)
child.setText(0, word)
except:
print("Index Key", key)
self.ui.lineEditLabel.setText(str(label))
if onclick == True:
self.ui.TreeWidget.clicked.connect(self._Selected)
else:
self.ui.buttonBox.accepted.connect(self._Selected)
def getData(self, item : QTreeWidgetItem):
if self.callbackgetdata is not None :
item.setData(0,Qt.UserRole, self.callbackgetdata(item.text()))
[docs] def SetLineEditText(self, text):
"""
Internal use
:param text:
:return:
"""
v = str(text)
self.ui.lineEditInput.setText(v)
[docs] @pyqtSlot(str)
def AddName(self, name: str):
"""
Connection from Multiverse, for one name at a time
:param name:
:return:
"""
print("New Name:", name)
key = re.split(r'[.;:,\s]\s*', name)
if len(key) >= 0:
word = key[0]
parent = None
try:
idx = word.index('//')
if idx == 0:
rdx = word.rindex('/')
word = word[idx:rdx]
if word not in self.KeyMap.keys():
parent = QTreeWidgetItem(self.ui.TreeWidget)
parent.setText(0, str(word))
self.KeyMap.update({word: parent})
except:
if word not in self.KeyMap.keys():
parent = QTreeWidgetItem(self.ui.TreeWidget)
parent.setText(0, str(word))
self.KeyMap.update({word: parent})
if parent == None:
parent = self.KeyMap.get(word)
self.ui.TreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
parent.setForeground(0, QtGui.QBrush(QtGui.QColor("red")))
child = QTreeWidgetItem(parent, 10001)
child.setForeground(0, QtGui.QBrush(QtGui.QColor("red")))
child.setText(0, name)
[docs] @pyqtSlot(list)
def AddNames(self, names: list):
"""
adds a list of names
"""
sortedList = []
if names is not None:
sortedList = sorted(names)
for name in sortedList :
self.AddName(str(name))
def _Selected(self):
"""
internal use
:return:
"""
l = []
for ix in self.ui.TreeWidget.selectedItems():
type = ix.type()
if type == 10001:
text = ix.text(0)
l.append(text)
self.newTextSignal.emit(text)
self.ui.lineEditLabel.setText(text)
if self.callback != None and len(l) > 0:
self.callback(l)
[docs] @pyqtSlot()
def newTextEnter(self):
"""
Not used
:return:
"""
text = self.ui.lineEditInput.text()
self.newTextSignal.emit(text)
print("Just Entered", text)
if self.callback != None and text != None and text != "":
l = [text]
self.callback(l)