Source code for stdcomqt5qtree

from PyQt5.QtCore import Qt, QObject, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QWidget, QApplication, QTreeWidgetItem, QTreeWidget
from stdcomqt5 import *
from stdcomqt5treeewidget import *

import re, sys


[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)
if __name__ == "__main__": if "--version" in sys.argv: print("1.0.6") sys.exit() def callBack(selected): print("Selected ", selected) L = "//Ball/oo", "One.ttt", "One.123", "Two.ccc", "Three.uuu", "Four.ggg", "Five.123", "Five.444" app = QApplication(sys.argv) w = stdcomqt5qtree(None, callBack) w.AddNames(L) w.show() sys.exit(app.exec_())