def update(self): items = [] playerx, playery = 0, 0 for objid, obj in self.worldviewer.world_objects.items(): if "Object.ScriptedObject.Character" in obj['_types']: playerx = obj['loc']['x'] playery = obj['loc']['y'] break for objid, obj in self.worldviewer.world_objects.items(): name = obj['name'] try: locx = obj['loc']['x'] except KeyError: continue locy = obj['loc']['y'] locz = obj['loc']['z'] resource = obj['resource'] last_modified = datetime.datetime.fromtimestamp(int(str(obj['last_modified']['$date'])[:-3])) row = self.objects_tree.findItems(objid, Qt.MatchExactly, column=0) if row: # Update it if it exists already item = row[0] if not row: # If Item does not exist in the tree widget already, make a new one. item = QTreeWidgetItem(self.objects_tree) items.append(item) for i, param in enumerate((objid, name, (locx, locy, locz), resource, last_modified, "%04d" % euclidian(locx, locy, playerx, playery))): item.setText(i, str(param)) if items: self.objects_tree.insertTopLevelItems(0, items)
def addItemForExpense(self, topLevelItem, ex): ex_str = "%-5d %s\n(%s -> %s)" % (ex.value, ex.desc, self.__envMgr.envNameForId(ex.fromId), self.__envMgr.envNameForId(ex.toId)) ex_item = QTreeWidgetItem([ex_str]) ex_item.setText(0, ex_str) ex_item.setData(0, Qt.UserRole, ex) topLevelItem.insertChild(0, ex_item)
def __make_item(self, name, type_name): item = QTreeWidgetItem(None, [name, type_name]) item.setChildIndicatorPolicy(QTreeWidgetItem.ShowIndicator) if type_name == UI.ACTION_GROUP: item.setIcon( 0, QtGui.QIcon(Options.assets_path + "folder_16x16.png")) return item
def _showBannedFunctions(self): """ Points to functions banned by Microsoft being used. """ self._console_output("Looking for banned functions...") deep_search_f = self.config.deep_dangerous_functions if deep_search_f: self._console_output("Performing a deep search (based on function name)") banned_refs_dict = self.vd.find_banned_functions(deep_search_f) if not banned_refs_dict: self._console_output("[!] No banned functions found", err = True) return self.tree_label.setText("Functions banned by Microsoft") self.tree.clear() self.tree.setHeaderLabels(("Banned function", "References", "Name")) for f_name, refs in banned_refs_dict.iteritems(): bf_item = QTreeWidgetItem(self.tree) bf_item.setText(0, f_name) for ref_addr in refs: ref_item = QTreeWidgetItem(bf_item) ref_item.setText(1, "%x" %ref_addr) ref_name = misc.get_function_name(ref_addr) ref_item.setText(2, ref_name) # Display all items expanded initially self.tree.expandAll()
def _init_widgets(self): self.clear() if self._simgr is None: return for stash_name, stash in self._simgr.stashes.iteritems(): if not stash and stash_name not in ('active', 'deadended', 'avoided'): continue item = QTreeWidgetItem(self, ["%s (%d)" % (stash_name, len(stash))]) for state in stash: subitem = QTreeWidgetItem(item, [str(state)]) item.addChild(subitem) self.addTopLevelItem(item) # errored states if self._simgr.errored: item = QTreeWidgetItem( self, ["%s (%d)" % ('errored', len(self._simgr.errored))]) for state in self._simgr.errored: subitem = QTreeWidgetItem(item, [str(state)]) item.addChild(subitem) self.addTopLevelItem(item)
def OnCreate(self, form): self.setupUi(self) self.connect(self.add_trace_button, QtCore.SIGNAL("clicked()"), self.load_trace) self.connect(self.disassemble_button, QtCore.SIGNAL("clicked()"), self.disassemble_from_trace) self.connect(self.colorize_button, QtCore.SIGNAL("clicked()"), self.colorize_trace) self.connect(self.heatmap_button, QtCore.SIGNAL("clicked()"), self.heatmap_trace) self.connect(self.dump_button, QtCore.SIGNAL("clicked()"), self.dump_trace) self.connect(self.refresh_button, QtCore.SIGNAL("clicked()"), self.refresh_trace_view) self.connect(self.traces_tab, QtCore.SIGNAL('currentChanged(int)'), self.trace_switch) self.connect(self.traces_tab, QtCore.SIGNAL('tabCloseRequested(int)'), self.unload_trace) self.loading_stat.setVisible(False) self.progressbar_loading.setVisible(False) self.traces_tab.setTabsClosable(True) #self.reads_view.headerItem().setHidden(True) #self.writes_view.headerItem().setHidden(True) self.reads_view.setHeaderItem(QTreeWidgetItem(["name", "value"])) self.writes_view.setHeaderItem(QTreeWidgetItem(["name", "value"]))
def _showDwordCompares(self): """ Inspects the *whole* binary looking for comparisons between global dwords and immediate values. These usually contain error codes or alike and appear constantly through the code. """ self._console_output("Looking for Dword compares...") self.tree_label.setText("Dword immediate compares") dw_dict = self.ba.get_dword_compares() # Fill the tree with items self.tree.setHeaderLabels(("Dword", "Values", "Address")) for dw, values in dw_dict.iteritems(): dw_item = QTreeWidgetItem(self.tree) dw_item.setText(0, dw) for value, addr in values: value_item = QTreeWidgetItem(dw_item) value_item.setText(1, value) value_item.setText(2, "0x%x" % addr) # Display all items expanded initially self.tree.expandAll()
def update_instruction_informations(self, new_item, old_item): index = self.traces_tab.currentIndex() try: table = self.index_map[index] trace = self.core.traces[self.id_map[index]] offset = int(table.item(new_item.row(), 0).text()) inst = trace.instrs[offset] #=== Gui stuff self.reads_view.clear() self.writes_view.clear() self.additional_infos.clear() for r_w, name, value in inst.registers: val_s = hex(value)[:-1] if hex(value).endswith('L') else hex( value) infos = [name, val_s] widget = QTreeWidgetItem(infos) if r_w == "R": self.reads_view.addTopLevelItem(widget) else: self.writes_view.addTopLevelItem(widget) for r_w, addr, value in inst.memories: infos = [ "@[%x]" % addr, "".join("{:02x}".format(ord(c)) for c in value) ] widget = QTreeWidgetItem(infos) if r_w == "R": self.reads_view.addTopLevelItem(widget) else: self.writes_view.addTopLevelItem(widget) for i in range(self.reads_view.topLevelItemCount()): self.reads_view.resizeColumnToContents(i) for i in range(self.writes_view.topLevelItemCount()): self.writes_view.resizeColumnToContents(i) if inst.nextaddr is not None: self.additional_infos.setHtml("Next addr:<bold>" + hex(inst.nextaddr)[:-1] + "</bold>") if inst.wave is not None: self.additional_infos.append("Wave: " + str(inst.wave)) if inst.syscall is not None: self.additional_infos.append("Syscall:" + str(inst.syscall.id)) if inst.libcall is not None: c = inst.libcall s = "Libcall:<span style='color:blue;'>" + str( c.func_name) + "</span>" s += "<ul><li>at:" + hex(c.func_addr)[:-1] + "</li>" s += "<li>traced: <span style='color:" + ( "blue" if c.is_traced else "red") + ";'>" + str( c.is_traced) + "</span></li></ul>" self.additional_infos.append(s) if inst.comment is not None: self.additional_infos.append("Comment:" + inst.comment) except ValueError: pass except KeyError: pass
def add_children(self, node, item): for child in node.children: childItem = QTreeWidgetItem() childItem.setText(0, child.label) childItem.setData(1,Qt.ItemDataRole.EditRole, child) item.addChild(childItem) self.add_children(child, childItem)
def add_child(self): item = self.tree.currentItem() print item.data(1, Qt.ItemDataRole.EditRole).getFullPath() newItem = add_child(item.data(1, Qt.ItemDataRole.EditRole)) newChildNode = QTreeWidgetItem() newChildNode.setText(0, newItem.label) newChildNode.setData(1, Qt.ItemDataRole.EditRole, newItem) item.addChild(newChildNode)
def set_favorites(self, favoritesRoot): self.tree.clear() item = QTreeWidgetItem() item.setText(0, favoritesRoot.label) item.setData(1,Qt.ItemDataRole.EditRole, favoritesRoot) self.tree.addTopLevelItem(item) self.add_children(favoritesRoot, item)
def _showBannedFunctions(self): """ Points to functions banned by Microsoft being used. """ self._console_output("Looking for banned functions...") deep_search_f = self.config.deep_dangerous_functions if deep_search_f: self._console_output("Performing a deep search \ (based on function name)") banned_refs_dict = self.vd.find_banned_functions(deep_search_f) if not banned_refs_dict: self._console_output("[!] No banned functions found", err = True) return self.tree_label.setText("Functions banned by Microsoft") self.tree.clear() self.tree.setHeaderLabels(("Banned function", "References", "Name")) for f_name, refs in banned_refs_dict.iteritems(): bf_item = QTreeWidgetItem(self.tree) bf_item.setText(0, f_name) for ref_addr in refs: ref_item = QTreeWidgetItem(bf_item) ref_item.setText(1, "%x" % ref_addr) ref_name = misc.get_function_name(ref_addr) ref_item.setText(2, ref_name) # Display all items expanded initially self.tree.expandAll()
def updateTree(self, name): ''' adds DataItem to tree view ''' dataItem = QTreeWidgetItem(self.ui.dataView) dataItem.setText(0, name) dataItem.setFlags(Qt.ItemIsEnabled|Qt.ItemIsEditable) for i in range(len(self.datas[-1].data)/4): x = DataItem(dataItem) x.setText(0, self.datas[-1].name[i*4]) x.setFlags(Qt.ItemIsEnabled|Qt.ItemIsSelectable) x.setNumData(self.datas[-1].data[i*4]) if hasattr(self.datas[-1], 'triggers'): x.triggers = self.datas[-1].triggers if hasattr(self.datas[-1], 'frames'): x.depth = self.datas[-1].seekFrame
def _addMachineToDeployedList(self, ip_address, comment, host): '''Adds the given machine to the list of the user deployed ones''' itm = QTreeWidgetItem() itm.setText(0, ip_address) itm.setText(1, comment) itm.setText(2, host) self._mywindow.tw_deployed.addTopLevelItem(itm)
def _showDwordCompares(self): """ Inspects the *whole* binary looking for comparisons between global dwords and immediate values. These usually contain error codes or alike and appear constantly through the code. """ self._console_output("Looking for Dword compares...") self.tree_label.setText("Dword immediate compares") dw_dict = self.ba.get_dword_compares() # Fill the tree with items self.tree.setHeaderLabels(("Dword", "Values", "Address")) for dw, values in dw_dict.iteritems(): dw_item = QTreeWidgetItem(self.tree) dw_item.setText(0, dw) for value, addr in values: value_item = QTreeWidgetItem(dw_item) value_item.setText(1, value) value_item.setText(2, "%x" %addr) # Display all items expanded initially self.tree.expandAll()
def renderCorpEvent(self, corporateEventPositionDictAsset): self.clearTables() self.treeCorporateEvent.setColumnCount(3) self.treeCorporateEvent.setHeaderLabels(self.columnListCorporateEvent) for key, cep in corporateEventPositionDictAsset.items(): l1 = QTreeWidgetItem( [key, str(cep.accGrossAmount), str(cep.accNetAmount)]) for ce in cep.corporateEventList: l1_child = QTreeWidgetItem([ None, str(ce.grossAmount), str(ce.netAmount), str(ce.paymentDate) ]) l1.addChild(l1_child) self.treeCorporateEvent.addTopLevelItem(l1)
def loadControllers(self): self.treeWidget.clear() sels = pymel.core.ls( sl=1 ) currentParent = self.treeWidget self.items = [] for sel in sels: widgetItem = QTreeWidgetItem( currentParent ) widgetItem.realObject = sel widgetItem.setText( 0, sel.name() ) if isinstance( currentParent, QTreeWidgetItem ): currentParent.setExpanded( True ) currentParent = widgetItem self.items.append( sel.name() ) self.saveInfo()
def getTopLevelItemForDate(self, tw, date): """ @type tw: QListWidget """ for i in range(tw.topLevelItemCount()): item = tw.topLevelItem(i) if item is None: continue item_date = item.data(0, Qt.UserRole) if date == item_date: return item item = QTreeWidgetItem([str(date)]) item.setData(0, Qt.UserRole, date) item.setText(0, date.strftime("%A, ") + str(date)) # FIXME: do we always need to insert at zero idx? tw.insertTopLevelItem(0, item) return item
def __init__(self, widget, thing): super(LoadThings, self).__init__() self.widget = widget self.createdThing = thing self.item = QTreeWidgetItem() self.item.setText(0, thing.name) typeName = type(thing).__name__ for i in range(self.widget.ui.treeWidget.topLevelItemCount()): group = self.widget.ui.treeWidget.topLevelItem(i) if group.text(0) == typeName: self.group = group break else: # group not found self.group = QTreeWidgetItem() self.group.setText(0, typeName)
def _addRunningVmToList(self, lst): '''adds a vm to the running vm list from a list of strings''' #FIXME: use a dict itm = QTreeWidgetItem() itm.setText(0, lst[0]) itm.setText(1, lst[1]) itm.setText(2, lst[2]) itm.setText(3, lst[3]) itm.setText(4, lst[4]) itm.setText(5, lst[5]) self._mywindow.tw_running_vms.addTopLevelItem(itm)
def _init_widgets(self): self.clear() if self._pathgroup is None: return for stash_name, stash in self._pathgroup.stashes.iteritems(): if not stash and stash_name not in ('active', 'deadended', 'avoided'): continue item = QTreeWidgetItem(self, [ "%s (%d)" % (stash_name, len(stash)) ]) for path in stash: subitem = QTreeWidgetItem(item, [ str(path) ]) item.addChild(subitem) self.addTopLevelItem(item)
def add_set(self, iterable, title=None): """ Adding the given iterable to the list with a first Separator object with given title :param iterable: list of item's attributes :param title: Separator's name """ if len(iterable): # if title is given we first add a Separator item to indicate coming list title if title: self.WL_attributes.addTopLevelItem(QTreeWidget_Separator(title)) items = [] for attr in sorted(iterable): item = QTreeWidgetItem([attr]) # assigning the attribute itself inside a custom parameter item.attribute = attr items.append(item) # finally adding all the items to the list self.WL_attributes.addTopLevelItems(items)
def add_set(self, iterable, title=None): """ Adding the given iterable to the list with a first Separator object with given title :param iterable: list of item's attributes :param title: Separator's name """ if len(iterable): # if title is given we first add a Separator item to indicate coming list title if title: self.WL_attributes.addTopLevelItem( QTreeWidget_Separator(title)) items = [] for attr in sorted(iterable): item = QTreeWidgetItem([attr]) # assigning the attribute itself inside a custom parameter item.attribute = attr items.append(item) # finally adding all the items to the list self.WL_attributes.addTopLevelItems(items)
def testWidgetIterator(self): treeWidget = QTreeWidget() treeWidget.setColumnCount(1) items = [] for i in range(10): items.append(QTreeWidgetItem(None, ['item: %d' % i])) treeWidget.insertTopLevelItems(0, items) index = 0 for it in QTreeWidgetItemIterator(treeWidget): self.assertEqual(it.value().text(0), 'item: %d' % index) index += 1
def __make_item(self, name, type_name): item = QTreeWidgetItem(None, [name, type_name]) item.setChildIndicatorPolicy(QTreeWidgetItem.ShowIndicator) if type_name == UI.ACTION_GROUP: item.setIcon(0, QtGui.QIcon(Options.assets_path + "folder_16x16.png")) return item
def addGroup(self, name, title): """ Add a new group. ``name`` and ``title`` are unicode strings. ``name`` is used to identify this group, ``title`` is displayed to the user. """ if name in self._groups: raise ValueError('Duplicate group') self._groups[name] = QTreeWidgetItem([title]) self.addTopLevelItem(self._groups[name]) # expand groups initially self.setGroupExpanded(name, True)
class ToolBox(QTreeWidget): """A toolbox that contains logic gates and user circuits, for use in the main designer window. """ def __init__(self): super(ToolBox, self).__init__() self.setDragEnabled(True) self.setColumnCount(2) self.header().setVisible(False) gatesheader = QTreeWidgetItem(self, [self.str_basicGates]) gatesheader.setFlags( ~Qt.ItemFlag.ItemIsDragEnabled & ~Qt.ItemFlag.ItemIsSelectable) gatesheader.setExpanded(True) imgDir = filePath('icons/') for name, class_ in inspect.getmembers( gates, lambda m: ( inspect.isclass(m) and m.__module__ == 'engine.gates')): item = QTreeWidgetItem(gatesheader, [name[:-4]]) item.setIcon(0, QIcon(imgDir + name + '.png')) item = QTreeWidgetItem(gatesheader, ['JKFlipFlop']) item.setIcon(0, QIcon(imgDir + 'JKFlipFlop.png')) item = QTreeWidgetItem(gatesheader, ['RSFlipFlop']) item.setIcon(0, QIcon(imgDir + 'RSFlipFlop.png')) ioheader = QTreeWidgetItem(self, [self.str_IO]) ioheader.setFlags( ~Qt.ItemFlag.ItemIsDragEnabled & ~Qt.ItemFlag.ItemIsSelectable) ioheader.setExpanded(True) [ QTreeWidgetItem(ioheader, [name]) for name in [self.str_I, self.str_O, self.str_Clock]] self.userheader = QTreeWidgetItem(self, [self.str_userCircuits]) [QTreeWidgetItem(self.userheader, [name[:-4], 'user']) for name in sorted(listdir(filePath('user/')))] self.userheader.setFlags( ~Qt.ItemFlag.ItemIsDragEnabled & ~Qt.ItemFlag.ItemIsSelectable) self.userheader.setExpanded(True) self.setColumnWidth(0, 300) def addUserCircuit(self, name): """When the user saves a circuit, add it at the correct alphabetical spot, if it is not already present.""" for i in range(self.userheader.childCount()): if self.userheader.child(i).text(0) == name: return QTreeWidgetItem(self.userheader, [name, 'user']) self.userheader.sortChildren(0, Qt.AscendingOrder)
def loadInfo(self): data = BaseCommands.readData( self.uiInfoPath ) if not data.has_key( 'controllers' ): return None controllerList = data[ 'controllers' ] controllers = [] for controller in controllerList: if not pymel.core.ls( controller ): continue controllers.append( pymel.core.ls( controller )[0] ) self.treeWidget.clear() currentParent = self.treeWidget self.items = [] for sel in controllers: widgetItem = QTreeWidgetItem( currentParent ) widgetItem.realObject = sel widgetItem.setText( 0, sel.name() ) if isinstance( currentParent, QTreeWidgetItem ): currentParent.setExpanded( True ) currentParent = widgetItem self.items.append( sel.name() )
def addOption(self, group_name, name, title): """ Add an option to a group. All arguments are unicode strings. ``group_name`` is the name of the group this option is added to. ``name`` is the name of the option itself, ``title`` is displayed to the user. """ if name in self._options: raise ValueError('Duplicate option') group_item = self._groups[group_name] self._options[name] = QTreeWidgetItem(group_item, [title]) # uncheck options initially self.setOptionChecked(name, False)
def update(self): items = [] playerx, playery = 0, 0 for objid, obj in self.worldviewer.world_objects.items(): if "Object.ScriptedObject.Character" in obj['_types']: playerx = obj['loc']['x'] playery = obj['loc']['y'] break for objid, obj in self.worldviewer.world_objects.items(): name = obj['name'] try: locx = obj['loc']['x'] except KeyError: continue locy = obj['loc']['y'] locz = obj['loc']['z'] resource = obj['resource'] last_modified = datetime.datetime.fromtimestamp( int(str(obj['last_modified']['$date'])[:-3])) row = self.objects_tree.findItems(objid, Qt.MatchExactly, column=0) if row: # Update it if it exists already item = row[0] if not row: # If Item does not exist in the tree widget already, make a new one. item = QTreeWidgetItem(self.objects_tree) items.append(item) for i, param in enumerate( (objid, name, (locx, locy, locz), resource, last_modified, "%04d" % euclidian(locx, locy, playerx, playery))): item.setText(i, str(param)) if items: self.objects_tree.insertTopLevelItems(0, items)
def testCase(self): treeWidget = QTreeWidget() treeWidget.setColumnCount(1) items = [] for i in range(10): items.append(QTreeWidgetItem(None, ["item: %i" % i])) treeWidget.insertTopLevelItems(0, items); _iter = QTreeWidgetItemIterator(treeWidget) index = 0 while(_iter.value()): item = _iter.value() self.assert_(item is items[index]) index += 1 _iter += 1
def _refresh_value_tree(self, directory_info): info = sorted(directory_info, key=lambda x: x.total_size, reverse=True) # Clear for _ in range(self.value_tree.topLevelItemCount()): self.value_tree.takeTopLevelItem(0) # Add for item in info: tree_widget = QTreeWidgetItem() tree_widget.setText(0, item.part_path) tree_widget.setText(1, self._get_size(item.total_size)) self.value_tree.addTopLevelItem(tree_widget)
def readData(self, *args): data = super(Widget_objectList, self).readData(Widget_objectList.path_uiInfo) if not type(data) == dict: return self.treeWidget.clear() keys = data.keys() keys.sort() for key in keys: try: nodeName, attrName = data[key] except: return widgetItem = QTreeWidgetItem(self.treeWidget) widgetItem.setText(0, nodeName) widgetItem.setText(1, attrName) widgetItem.setFlags(widgetItem.flags() | QtCore.Qt.ItemIsEditable)
def updateStorage(self): self.storageTreeWidget.clear() vols = self.sti.logicalDrives() for volName in vols: volType = self.sti.typeForDrive(volName) if volType == QSystemStorageInfo.InternalDrive: typeName = "Internal" elif volType == QSystemStorageInfo.RemovableDrive: typeName = "Removable" elif volType == QSystemStorageInfo.CdromDrive: typeName = "Cdrom" elif volType == QSystemStorageInfo.RemoteDrive: typeName = "Network" items = [] items.append(volName) items.append(typeName) items.append(str(self.sti.totalDiskSpace(volName))) items.append(str(self.sti.availableDiskSpace(volName))) item = QTreeWidgetItem(items) self.storageTreeWidget.addTopLevelItem(item)
def _refresh_key_tree(self, directory_info, ignore_list=None): info = LabelInfo(make_dictionary_by_classification(directory_info, ignore_list)) # Clear for _ in range(self.key_tree.topLevelItemCount()): self.key_tree.takeTopLevelItem(0) # Add for k, v in info.sort_dictionary: tree_widget = QTreeWidgetItem() tree_widget.setText(0, k) total_size = 0 for child in v['children']: total_size += child.total_size tree_widget.setText(1, self._get_size(v[constant.sort_size_name])) self.key_tree.addTopLevelItem(tree_widget) self._last_info = info
def __init__(self): super(TreeView, self).__init__() self.setIndentation(10) self.setContextMenuPolicy(Qt.CustomContextMenu) # noinspection PyUnresolvedReferences self.customContextMenuRequested.connect(self.show_menu) self.setHeaderItem(QTreeWidgetItem(None, ["Name", "TYPE_NAME"])) self.setColumnCount(3) self.setColumnWidth(0, 200) self.setAcceptDrops(True) self.setDragEnabled(True) self.setDragDropMode(QAbstractItemView.InternalMove) self.setSelectionMode(QAbstractItemView.ExtendedSelection) self.installEventFilter(self) self.__drag_item = "None" # noinspection PyUnresolvedReferences self.itemExpanded.connect(self.on_item_expanded) # noinspection PyUnresolvedReferences self.itemCollapsed.connect(self.on_item_collapsed)
def import_from_text_file(self): arquivo_Caminho = QFileDialog.getOpenFileName( None, "Select txt file", '/', "(*.txt);; All Files (*.*)", None)[0] filename = arquivo_Caminho self.f = open(filename) reader = csv.reader(self.f, delimiter='\t') linhas = [linha for linha in reader] for i in linhas: if len(i) == 0: continue else: print i a = QTreeWidgetItem(self.ui.treeWidget) a.setText(0, str(i[0])) a.setText(1, str(i[1])) a.setText(2, str(i[2])) a.setText(3, str(i[3]))
def add_to_tree(self): if self.mysql.do: self.nDataBase = self.mysql.getDataBase() for i in self.nDataBase: item_m = QTreeWidgetItem(self) item_m.setStatusTip(0, 'main') item_m.setText(0, "%s" % i) if i in self.li: item_m.setExpanded(True) self.table = self.mysql.getTables(i) for j in self.table: item_c = QTreeWidgetItem(item_m) item_c.setStatusTip(0, i) item_c.setText(0, "%s" % j)
class LoadThings(QUndoCommand): def __init__(self, widget, thing): super(LoadThings, self).__init__() self.widget = widget self.createdThing = thing self.item = QTreeWidgetItem() self.item.setText(0, thing.name) typeName = type(thing).__name__ for i in range(self.widget.ui.treeWidget.topLevelItemCount()): group = self.widget.ui.treeWidget.topLevelItem(i) if group.text(0) == typeName: self.group = group break else: # group not found self.group = QTreeWidgetItem() self.group.setText(0, typeName) def redo(self): if self.widget.ui.treeWidget.indexOfTopLevelItem(self.group) == -1: self.widget.ui.treeWidget.addTopLevelItem(self.group) self.group.addChild(self.item) self.group.setExpanded(True) self.widget.ui.treeWidget.setCurrentItem(self.item) def undo(self): self.group.takeChild(self.group.childCount()-1) if self.group.childCount() == 0: parentIndex = self.widget.ui.treeWidget.indexOfTopLevelItem(self.group) self.widget.ui.treeWidget.takeTopLevelItem(parentIndex)
def fill_item(item, value, level): item.setExpanded(True) if type(value) is dict: for key, val in sorted(value.items()): child = QTreeWidgetItem() child.setText(level, str(key)) item.addChild(child) fill_item(child, val, level+1) elif type(value) is list: for val in value: child = QTreeWidgetItem() item.addChild(child) if type(val) is dict: child.setText(level, '[dict]') fill_item(child, val, level+1) elif type(val) is list: child.setText(level, '[list]') fill_item(child, val, level+1) else: child.setText(level, str(val)) child.setExpanded(True) else: child = QTreeWidgetItem() child.setText(level, str(value)) item.addChild(child)
def __init__(self): super(ToolBox, self).__init__() self.setDragEnabled(True) self.setColumnCount(2) self.header().setVisible(False) gatesheader = QTreeWidgetItem(self, [self.str_basicGates]) gatesheader.setFlags( ~Qt.ItemFlag.ItemIsDragEnabled & ~Qt.ItemFlag.ItemIsSelectable) gatesheader.setExpanded(True) imgDir = filePath('icons/') for name, class_ in inspect.getmembers( gates, lambda m: ( inspect.isclass(m) and m.__module__ == 'engine.gates')): item = QTreeWidgetItem(gatesheader, [name[:-4]]) item.setIcon(0, QIcon(imgDir + name + '.png')) item = QTreeWidgetItem(gatesheader, ['JKFlipFlop']) item.setIcon(0, QIcon(imgDir + 'JKFlipFlop.png')) item = QTreeWidgetItem(gatesheader, ['RSFlipFlop']) item.setIcon(0, QIcon(imgDir + 'RSFlipFlop.png')) ioheader = QTreeWidgetItem(self, [self.str_IO]) ioheader.setFlags( ~Qt.ItemFlag.ItemIsDragEnabled & ~Qt.ItemFlag.ItemIsSelectable) ioheader.setExpanded(True) [ QTreeWidgetItem(ioheader, [name]) for name in [self.str_I, self.str_O, self.str_Clock]] self.userheader = QTreeWidgetItem(self, [self.str_userCircuits]) [QTreeWidgetItem(self.userheader, [name[:-4], 'user']) for name in sorted(listdir(filePath('user/')))] self.userheader.setFlags( ~Qt.ItemFlag.ItemIsDragEnabled & ~Qt.ItemFlag.ItemIsSelectable) self.userheader.setExpanded(True) self.setColumnWidth(0, 300)
def addStatus(self, text, err): subTreeItem = QTreeWidgetItem(self.status) subTreeItem.setText(0, text) self.activateWindow() if err == 1: font = QFont('Serif', 10, QFont.Bold) subTreeItem.setFont(0, font) subTreeItem.setForeground(0, QBrush(Qt.white)) subTreeItem.setBackground(0, QBrush(QColor(150,0,0))) elif err == 0: font = QFont('Serif', 10, QFont.Bold) subTreeItem.setFont(0, font) subTreeItem.setForeground(0, QBrush(Qt.black)) subTreeItem.setBackground(0, QBrush(Qt.white)) else: font = QFont('Serif', 10, QFont.Bold) subTreeItem.setFont(0, font) subTreeItem.setForeground(0, QBrush(Qt.white)) subTreeItem.setBackground(0, QBrush(QColor(0,150,0))) self.status.scrollToItem(subTreeItem, QAbstractItemView.PositionAtCenter)
def update(self): """ Updates listed publishers, newspapers and subscribers """ self.view.publishers.clear() self.view.subscribers.clear() for publisher in self.publishers.values(): p_widget = QTreeWidgetItem() p_widget.setText(0, publisher.name) for newspaper in publisher.newspapers: n_widget = QTreeWidgetItem(p_widget) n_widget.setText(0, newspaper) self.view.publishers.addTopLevelItem(p_widget) for subscriber in self.subscribers: s_widget = QTreeWidgetItem() s_widget.setText(0, subscriber) self.view.subscribers.addTopLevelItem(s_widget)
def fill_item(self, item, value): #recursively fills the tree item.setExpanded(True) for key, val in sorted(value.iteritems()): #tilts child = QTreeWidgetItem() child.setText(0, unicode(key)) child.setFlags(Qt.ItemIsEnabled) item.addChild(child) for keykey in sorted(val.keys()): #imgIDs childchild = QTreeWidgetItem() child.addChild(childchild) childchild.setText(0, str(keykey)) child.setExpanded(True) childchild.setExpanded(True)
def updateList(self): self.ui.categoryWidget.itemChanged.connect(self.updatePluginSettings) defaultCollection = None for pluginCollection in self.private.manager.pluginCollections().values(): if not pluginCollection.name: defaultCollection = pluginCollection continue collectionItem = QTreeWidgetItem([pluginCollection.name(), "", "", "", ""]) self.items.append(collectionItem) state, groupState = self.parsePluginSpecs(collectionItem, pluginCollection.plugins()) collectionItem.setIcon(0, self.iconForState(state)) collectionItem.setData(C_LOAD, Qt.CheckStateRole, groupState) collectionItem.setToolTip(C_LOAD, "Load on Startup") collectionItem.setData(0, Qt.UserRole, pluginCollection) # add all non-categorized plugins into utilities. could also be added as root items # but that makes the tree ugly defaultCollectionItem = QTreeWidgetItem(["Utilities", "", "", "", ""]) self.items.append(defaultCollectionItem) state, groupState = self.parsePluginSpecs(defaultCollectionItem, defaultCollection.plugins) defaultCollectionItem.setIcon(0, self.iconForState(state)) defaultCollectionItem.setData(C_LOAD, Qt.CheckStateRole, groupState) defaultCollectionItem.setToolTip(C_LOAD, "Load on Startup") defaultCollectionItem.setData(0, Qt.UserRole, defaultCollection) self.updatePluginDependencies() self.ui.categoryWidget.clear() if self.items: self.ui.categoryWidget.addTopLevelItems(self.items) self.ui.categoryWidget.expandAll() self.ui.categoryWidget.sortItems(0, Qt.AscendingOrder) if self.ui.categoryWidget.topLevelItemCount(): self.ui.categoryWidget.setCurrentItem(self.ui.categoryWidget.topLevelItem(0))
def _populateTree(self): self.pushupsListWidget.clear() self.pushupsListWidget.setColumnCount(4) self.pushupsListWidget.setHeaderLabels([ "Date", "TotalPushups", "Series", "Repetitions", "Average Heart Rate" ]) self.pushupsListWidget.setSortingEnabled(True) self.pushupsListWidget.setColumnWidth(0, 180) self.pushupsListWidget.setColumnWidth(4, 150) pushupDict = self._getPushupDictionary() for it, dayOfExercise in enumerate(sorted(pushupDict.keys())): dateItem = QTreeWidgetItem() dayLabel = dayOfExercise.strftime("%Y/%m/%d") dateItem.setText(0, "\n" + dayLabel + "\nDay : " + str(it)) self.pushupsListWidget.addTopLevelItem(dateItem) totalPushups = 0 for pushup in pushupDict[dayOfExercise]: pushupItem = QTreeWidgetItem() pushupItem.setText(2, "#" + str(pushup._series)) pushupItem.setText(3, str(pushup._repetitions)) pushupItem.setText(4, str(pushup._averageHeartRate)) pushupItem.setData(0, Qt.UserRole, pushup) totalPushups = totalPushups + pushup._repetitions dateItem.addChild(pushupItem) dateItem.setText(1, str(totalPushups))
def buildEdgeList(self): ''' populate the ui tree with the edges that can be extended''' self.edgeList = [] treeExists = False if self.edges_TW.topLevelItem(0): treeExists = True parentItem = self.edges_TW.topLevelItem(0) else: self.edges_TW.clear() parentItem = QTreeWidgetItem() faceName = self.face_LE.text() parentItem.setText(0, faceName) self.edges_TW.addTopLevelItem(parentItem) self.edges_TW.expandItem(parentItem) if not treeExists: for edgeNum in self.helperFace.ExtendableEdges: ###### populate the edge tree ###### edgeItem = QTreeWidgetItem() edgeItem.setText(0, str("Edge" + str(edgeNum))) checked = QtCore.Qt.Unchecked if edgeNum in self.helperFace.CheckedEdges: checked = QtCore.Qt.Checked edgeItem.setCheckState(0, checked) parentItem.addChild(edgeItem) self.loadTools()
def testQTreeWidgetItemHash(self): h = {} obj = QTreeWidgetItem() h[obj] = 2 self.assert_(h.get(obj), 2)
def __init__(self, mainwindow, config): super(SettingsDialog, self).__init__() self.setWindowTitle(self.str_title) # Reference kept to set settings in MainWindow self.mainwindow = mainwindow """A reference to the top window of the app.""" self.config = config """The settings of our app.""" # Setting log handlers logHandlers = QGroupBox(self.str_logHandlers) logHandlersLayout = QVBoxLayout() logHandlers.setLayout(logHandlersLayout) logToGui = QCheckBox(self.str_logToGui) logToGui.setChecked(self.config.getboolean('LogHandlers', 'gui')) logToGui.stateChanged.connect( lambda: self.chooseHandler(logToGui, 'gui')) logHandlersLayout.addWidget(logToGui) logtoStdout = QCheckBox(self.str_logToStdout) logtoStdout.setChecked(self.config.getboolean('LogHandlers', 'stdout')) logtoStdout.stateChanged.connect( lambda: self.chooseHandler(logtoStdout, 'stdout')) logHandlersLayout.addWidget(logtoStdout) logToFile = QCheckBox(self.str_logToFile) logToFile.setChecked(self.config.getboolean('LogHandlers', 'file')) logToFile.stateChanged.connect( lambda: self.chooseHandler(logToFile, 'file')) logHandlersLayout.addWidget(logToFile) # Setting log verbosity logVerbosity = QGroupBox(self.str_logVerbosity) logVerbosityLayout = QHBoxLayout() logVerbosity.setLayout(logVerbosityLayout) self.verbosityOptions = QTreeWidget() self.verbosityOptions.header().setVisible(False) for k, v in self.str_treeItems.items(): node = QTreeWidgetItem(self.verbosityOptions, [k]) if isinstance(v, str): node.setText(1, v) node.setCheckState( 0, boolToCheckState( self.config.getboolean('LogVerbosity', v))) else: count = 0 for key, val in v.items(): item = QTreeWidgetItem(node, [key, val]) checked = self.config.getboolean('LogVerbosity', val) item.setCheckState(0, boolToCheckState(checked)) if checked: count += 1 if count == node.childCount(): node.setCheckState(0, Qt.Checked) elif count == 0: node.setCheckState(0, Qt.Unchecked) else: node.setCheckState(0, Qt.PartiallyChecked) self.verbosityOptions.itemChanged.connect(self.chooseVerbosity) logVerbosityLayout.addWidget(self.verbosityOptions) # Setting clock speed clock = QGroupBox(self.str_clock) clockLayout = QHBoxLayout() clock.setLayout(clockLayout) clockLayout.addWidget(QLabel(self.str_clockSpeed)) spin = QDoubleSpinBox() spin.setValue(self.config.getfloat('Clock', 'speed')) clockLayout.addWidget(spin) # Setting appearance appearance = QGroupBox(self.str_appearance) appearanceLayout = QHBoxLayout() appearance.setLayout(appearanceLayout) appearanceLayout.addWidget(QLabel(self.str_circBgColor)) circBgBtn = QPushButton(self.str_choose) circBgBtn.setPalette(QPalette( QColor(self.config.get('Appearance', 'circ_bg_color')))) circBgBtn.clicked.connect( lambda: self.chooseColor(circBgBtn, 'circ_bg_color')) appearanceLayout.addWidget(circBgBtn) appearanceLayout.addWidget(QLabel(self.str_logBgColor)) logBgBtn = QPushButton(self.str_choose) logBgBtn.setPalette(QPalette( QColor(self.config.get('Appearance', 'log_bg_color')))) logBgBtn.clicked.connect( lambda: self.chooseColor(logBgBtn, 'log_bg_color')) appearanceLayout.addWidget(logBgBtn) # Saving settings to file and effectively setting them close = QPushButton(self.str_close) close.clicked.connect(self.closeAndApply) layout = QGridLayout(self) layout.addWidget(logHandlers, 0, 0, 1, 1) layout.addWidget(logVerbosity, 0, 1, 1, 1) layout.addWidget(clock, 1, 0, 1, 2) layout.addWidget(appearance, 2, 0, 1, 2) layout.addWidget(close, 3, 1, 1, 1) self.setLayout(layout)
def parsePluginSpecs(self, parentItem, plugins): ret = 0 loadCount = 0 for i in range(len(plugins)): spec = plugins[i] if spec.hasError(): ret |= ParsedState.ParsedWithErrors pluginItem = QTreeWidgetItem([spec.name(), "", "{0} ({1})".format(spec.version(), spec.compatVersion()), spec.vendor()]) pluginItem.setToolTip(0, QDir.toNativeSeparators(spec.filePath())) ok = not spec.hasError() icon = self.okIcon if ok else self.errorIcon if ok and spec.state() is not PluginState.Running: icon = self.notLoadedIcon pluginItem.setIcon(0, icon) pluginItem.setData(0, Qt.UserRole, spec) state = Qt.Unchecked if spec.isEnabled(): state = Qt.Checked loadCount += 1 if spec.name() not in self.whitelist: pluginItem.setData(C_LOAD, Qt.CheckStateRole, state) else: pluginItem.setData(C_LOAD, Qt.CheckStateRole, Qt.Checked) pluginItem.setFlags(Qt.ItemIsSelectable) pluginItem.setToolTip(C_LOAD, "Load on Startup") self.specToItem[spec] = pluginItem if parentItem: parentItem.addChild(pluginItem) else: self.items.append(pluginItem) if loadCount == len(plugins): groupState = Qt.Checked ret |= ParsedState.ParsedAll elif loadCount == 0: groupState = Qt.Unchecked ret |= ParsedState.ParsedNone else: groupState = Qt.PartiallyChecked ret |= ParsedState.ParsedPartial return ret, groupState
def _populateTree(self): self.pushupsListWidget.clear() self.pushupsListWidget.setColumnCount(4) self.pushupsListWidget.setHeaderLabels(["Date", "TotalPushups", "Series", "Repetitions", "Average Heart Rate"]) self.pushupsListWidget.setSortingEnabled(True) self.pushupsListWidget.setColumnWidth(0, 180) self.pushupsListWidget.setColumnWidth(4, 150) pushupDict = self._getPushupDictionary() for it, dayOfExercise in enumerate(sorted(pushupDict.keys())): dateItem = QTreeWidgetItem() dayLabel = dayOfExercise.strftime("%Y/%m/%d") dateItem.setText(0, "\n" + dayLabel + "\nDay : " + str(it)) self.pushupsListWidget.addTopLevelItem(dateItem) totalPushups = 0 for pushup in pushupDict[dayOfExercise]: pushupItem = QTreeWidgetItem() pushupItem.setText(2, "#" + str(pushup._series)) pushupItem.setText(3, str(pushup._repetitions)) pushupItem.setText(4, str(pushup._averageHeartRate)) pushupItem.setData(0, Qt.UserRole, pushup) totalPushups = totalPushups + pushup._repetitions dateItem.addChild(pushupItem) dateItem.setText(1, str(totalPushups))