def selection_changed(self):
selected = [obj.text() for obj in self.note_list.selectedItems()]
to_del = []
if len(selected) > len(self.selected_notes): # Something was added
for note in selected:
if note not in self.selected_notes:
cb = QtWidgets.QComboBox()
cb.addItems(["1/4", "1/2"] + list(map(str, range(1, 11))))
cb.setCurrentIndex(2)
item = QtWidgets.QTreeWidgetItem(self.selected_notes_report, [note, "1"])
self.selected_notes_report.setItemWidget(item, 1, cb)
item.setFlags(QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled)
self.selected_notes[note] = item
else:
for note in self.selected_notes:
if note not in selected:
to_del.append(note)
for note in to_del:
item = self.selected_notes[note]
del self.selected_notes[note]
sip.delete(item)
self.note_list.search_input.clear()
self.note_list.search_input.setFocus(True)
python类QTreeWidgetItem()的实例源码
def add_product(self, name, category, percentage):
""" Add product to consumption list. If the products has no null price
only.
:param str name: Product name
:param str category: Category Name
"""
# Find category widget
cat_widget = None
for cat in self.categories:
if category == cat.text(0):
cat_widget = cat
if not cat_widget:
return
category = api.categories.get_unique(name=category)
product = api.products.get_unique(
category=category['id'],
name=name
)
if not product:
return
for price in api.prices.get(product=product['id']):
if float(price['value']) != 0:
break
else:
return
prod_widget = QtWidgets.QTreeWidgetItem([name])
cat_widget.addChild(prod_widget)
self.products.append(prod_widget)
def loadVorteile(self):
self.uiVor.treeWidget.blockSignals(True)
vortList = [[],[],[],[],[],[],[],[]]
for el in Wolke.DB.vorteile:
if Wolke.Char.voraussetzungenPrüfen(Wolke.DB.vorteile[el].voraussetzungen):
idx = Wolke.DB.vorteile[el].typ
vortList[idx].append(el)
for i in range(len(vortList)):
itm = self.uiVor.treeWidget.topLevelItem(i)
if type(itm) != QtWidgets.QTreeWidgetItem:
continue
if itm == 0:
continue
for j in range(itm.childCount()):
chi = itm.child(j)
if type(chi) != QtWidgets.QTreeWidgetItem:
continue
txt = chi.text(0)
if txt in Wolke.Char.vorteile or txt == Wolke.Char.minderpakt:
chi.setCheckState(0, QtCore.Qt.Checked)
else:
chi.setCheckState(0, QtCore.Qt.Unchecked)
if txt not in vortList[i] and txt != Wolke.Char.minderpakt:
chi.setHidden(True)
if txt in Wolke.Char.vorteile:
chi.setCheckState(0,QtCore.Qt.Unchecked)
Wolke.Char.vorteile.remove(txt)
else:
chi.setHidden(False)
if Wolke.DB.vorteile[el].variable!=0:
Wolke.Char.vorteileVariable[el] = self.itemWidgets[el].value()
self.updateInfo()
self.uiVor.treeWidget.blockSignals(False)
def initVorteile(self):
self.uiVor.treeWidget.blockSignals(True)
vortList = [[],[],[],[],[],[],[],[]]
for el in Wolke.DB.vorteile:
if Wolke.DB.vorteile[el].kosten > 20 and Wolke.DB.vorteile[el].variable == 0:
continue
if Wolke.DB.vorteile[el].kosten < 0:
continue
if el in Wolke.Char.vorteile:
continue
idx = Wolke.DB.vorteile[el].typ
vortList[idx].append(el)
for i in range(len(vortList)):
parent = QtWidgets.QTreeWidgetItem(self.uiVor.treeWidget)
parent.setText(0, VorteilTypen[i])
parent.setText(1,"")
parent.setExpanded(True)
for el in vortList[i]:
child = QtWidgets.QTreeWidgetItem(parent)
child.setText(0, Wolke.DB.vorteile[el].name)
if Wolke.DB.vorteile[el].variable!=0:
child.setText(1, "20 EP")
else:
child.setText(1, str(Wolke.DB.vorteile[el].kosten) + " EP")
self.updateInfo()
self.uiVor.treeWidget.blockSignals(False)
def run_cmd(self, cmd):
item = QTreeWidgetItem(self.comtree)
item.setText(0, time.strftime("%Y.%m.%d. %H:%M:%S", time.localtime()))
item.setText(1, cmd)
for i in range(3):
item.setTextAlignment(i, Qt.AlignTop)
item.setForeground(1, QtGui.QBrush(green))
item.setForeground(2, QtGui.QBrush(red))
self.comtree.scrollToItem(item)
self.conn.cmd(cmd)
proc_events()
def LoadTreeItems(self):
self.total_item = QtWidgets.QTreeWidgetItem(self.courseTree)
self.total_item.setFlags(self.total_item.flags() | QtCore.Qt.ItemIsTristate | QtCore.Qt.ItemIsUserCheckable)
self.total_item.setText(0, '????')
self.total_item.setCheckState(0, QtCore.Qt.Unchecked)
self.total_item.setExpanded(True)
for course in self.account.course_list:
item = QtWidgets.QTreeWidgetItem(self.total_item)
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setText(0, course.name)
item.setCheckState(0, QtCore.Qt.Unchecked)
def examineChildElements(self, parentElement, parentItem):
# Traverse the document.
element = parentElement.firstChild()
while not element.isNull():
item = QTreeWidgetItem()
item.setText(0, element.tagName())
parentItem.addChild(item)
self.examineChildElements(element, item)
element = element.nextSibling()
def build_tree(self, function_tree, root):
'''Build Qt Widget tree.'''
if not function_tree:
return
if isinstance(function_tree, FunctionData):
flags = int(function_tree.flags)
addr = function_tree.addr
self.cols.set_data(addr, flags)
for index in xrange(0, len(self.cols.names)):
if index > 0:
root.setText(index, self.cols.col(index))
if flags & idc.FUNC_THUNK:
root.setBackground(index, QtGui.QColor("violet"))
root.setBackground(index, QtGui.QColor("violet"))
if flags & idc.FUNC_LIB:
root.setBackground(index, QtGui.QColor("cyan"))
root.setBackground(index, QtGui.QColor("cyan"))
return
for name, tree in sorted(function_tree.iteritems()):
func_item = QtWidgets.QTreeWidgetItem(root)
if not isinstance(tree, FunctionData):
word = 'items'
tree_keys_len = len(tree.keys())
if tree_keys_len % 10 == 1:
word = 'item'
name = '{} ({} {})'.format(name, tree_keys_len, word)
func_item.setText(0, name)
self.build_tree(tree, func_item)
def examineChildElements(self, parentElement, parentItem):
# Traverse the document.
element = parentElement.firstChild()
while not element.isNull():
item = QTreeWidgetItem()
item.setText(0, element.tagName())
parentItem.addChild(item)
self.examineChildElements(element, item)
element = element.nextSibling()
def log(self, type, message, origin="IDASec"):
date = datetime.datetime.now().strftime("%H:%M:%S")
res = re.match("^(\[[A-Za-z]*\])",message)
if res:
type = res.groups()[0]
message = message[len(type):].lstrip()
message = message.rstrip()
self.log_widget.addTopLevelItem(QtWidgets.QTreeWidgetItem([date, origin, type, message]))
self.log_widget.scrollToBottom()
################################################################################
# Usage as plugin
################################################################################
def OnCreate(self, _):
self.setupUi(self)
self.add_trace_button.clicked.connect(self.load_trace)
self.disassemble_button.clicked.connect(self.disassemble_from_trace)
self.colorize_button.clicked.connect(self.colorize_trace)
self.heatmap_button.clicked.connect(self.heatmap_trace)
self.dump_button.clicked.connect(self.dump_trace)
self.refresh_button.clicked.connect(self.refresh_trace_view)
self.traces_tab.currentChanged.connect(self.trace_switch)
self.traces_tab.tabCloseRequested.connect(self.unload_trace)
self.loading_stat.setVisible(False)
self.progressbar_loading.setVisible(False)
self.traces_tab.setTabsClosable(True)
self.reads_view.setHeaderItem(QtWidgets.QTreeWidgetItem(["name", "value"]))
self.writes_view.setHeaderItem(QtWidgets.QTreeWidgetItem(["name", "value"]))
def tree_add_row(self, key, val, tree_widget):
text_list = []
if isinstance(val, dict) or isinstance(val, list):
text_list.append(key)
row_item = QtWidgets.QTreeWidgetItem([key])
self.recurse_jdata(val, row_item)
else:
text_list.append(key)
text_list.append(str(val))
row_item = QtWidgets.QTreeWidgetItem([key, str(val)])
tree_widget.addChild(row_item)
self.text_to_titem.append(text_list, row_item)
def QTreeWidgetItem(*args):
if qt_ver == 4:
for i in range(len(args)):
if type(args[i]) == str:
args[i] = self.QStringList(args[i])
return QTreeWidgetItem_class(*args)
def examineChildElements(self, parentElement, parentItem):
# Traverse the document.
element = parentElement.firstChild()
while not element.isNull():
item = QTreeWidgetItem()
item.setText(0, element.tagName())
parentItem.addChild(item)
self.examineChildElements(element, item)
element = element.nextSibling()
def tableAdd(self, student):
item = QtWidgets.QTreeWidgetItem(self.studentTable)
self.tableSet(student, item)
self.tableList.append(student)
self.tableIndex[student] = item
def initVorteile(self):
self.uiVor.treeWidget.blockSignals(True)
vortList = [[],[],[],[],[],[],[],[]]
for el in Wolke.DB.vorteile:
idx = Wolke.DB.vorteile[el].typ
vortList[idx].append(el)
for i in range(len(vortList)):
parent = QtWidgets.QTreeWidgetItem(self.uiVor.treeWidget)
parent.setText(0, VorteilTypen[i])
parent.setText(1,"")
parent.setExpanded(True)
for el in vortList[i]:
child = QtWidgets.QTreeWidgetItem(parent)
child.setText(0, Wolke.DB.vorteile[el].name)
if el in Wolke.Char.vorteile:
child.setCheckState(0, QtCore.Qt.Checked)
else:
child.setCheckState(0, QtCore.Qt.Unchecked)
if Wolke.DB.vorteile[el].variable!=0:
spin = QtWidgets.QSpinBox()
spin.setMinimum(0)
spin.setSuffix(" EP")
spin.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
spin.setMaximum(9999)
if el == Wolke.Char.minderpakt:
spin.setValue(20)
spin.setReadOnly(True)
else:
if el in Wolke.Char.vorteileVariable:
spin.setValue(Wolke.Char.vorteileVariable[el])
else:
spin.setValue(Wolke.DB.vorteile[el].kosten)
spin.setSingleStep(20)
self.itemWidgets[el] = spin
spin.valueChanged.connect(lambda state, name=el: self.spinnerChanged(name,state))
self.uiVor.treeWidget.setItemWidget(child,1,spin)
else:
child.setText(1, str(Wolke.DB.vorteile[el].kosten) + " EP")
if Wolke.Char.voraussetzungenPrüfen(Wolke.DB.vorteile[el].voraussetzungen):
child.setHidden(False)
else:
child.setHidden(True)
self.updateInfo()
self.uiVor.treeWidget.blockSignals(False)
def __init__(self,waffe=None):
super().__init__()
if Wolke.Debug:
print("Initializing WaffenPicker...")
self.waffe = None
if waffe is not None and waffe in Wolke.DB.waffen:
self.current = waffe
else:
self.current = ""
self.Form = QtWidgets.QDialog()
self.ui = CharakterWaffen.Ui_Dialog()
self.ui.setupUi(self.Form)
self.Form.setWindowFlags(
QtCore.Qt.Window |
QtCore.Qt.CustomizeWindowHint |
QtCore.Qt.WindowTitleHint |
QtCore.Qt.WindowCloseButtonHint)
if Wolke.Debug:
print("Ui is Setup...")
currSet = self.current != ""
for kind in Definitionen.Kampftalente:
parent = QtWidgets.QTreeWidgetItem(self.ui.treeWeapons)
parent.setText(0,kind)
parent.setText(1,"")
parent.setExpanded(True)
wafs = []
for waf in Wolke.DB.waffen:
if Wolke.DB.waffen[waf].fertigkeit == kind:
wafs.append(waf)
wafs.sort()
for el in wafs:
if not currSet:
self.current = el
currSet = True
child = QtWidgets.QTreeWidgetItem(parent)
child.setText(0,el)
child.setText(1,Wolke.DB.waffen[el].talent)
self.ui.treeWeapons.sortItems(1,QtCore.Qt.AscendingOrder)
if Wolke.Debug:
print("Tree Filled...")
self.ui.treeWeapons.itemSelectionChanged.connect(self.changeHandler)
self.ui.treeWeapons.header().setSectionResizeMode(0,1)
self.updateInfo()
if Wolke.Debug:
print("Info Updated...")
self.Form.setWindowModality(QtCore.Qt.ApplicationModal)
self.Form.show()
self.ret = self.Form.exec_()
if self.ret == QtWidgets.QDialog.Accepted and self.current != '':
self.waffe = Wolke.DB.waffen[self.current]
else:
self.waffe = None
def update(self):
self.tab.clear()
param_list=[]
tf_list=[]
files,true_false=self.from_file()
param_list.extend(files)
tf_list.extend(true_false)
files,true_false=self.scan_dir("snapshots")
param_list.extend(files)
tf_list.extend(true_false)
files,true_false=self.scan_dir("light_dump")
param_list.extend(files)
tf_list.extend(true_false)
files,true_false=self.scan_dir("dynamic")
param_list.extend(files)
tf_list.extend(true_false)
files,true_false=self.scan_dir("solver")
param_list.extend(files)
tf_list.extend(true_false)
files,true_false=self.scan_dir("equilibrium")
param_list.extend(files)
tf_list.extend(true_false)
files,true_false=self.scan_root_dir()
param_list.extend(files)
tf_list.extend(true_false)
root = QTreeWidgetItem(self.tab, [_("Output files")])
root.setExpanded(True)
#param_list=scan_items_get_list()
i=0
for item in range(0, len(param_list)):
div_str=param_list[item].replace("\\", "/")
div_str=div_str.split("/")
piter=None
self.make_entry(root,div_str,tf_list[item])
def handleCourseChange(self, item, column):
if item == self.total_item:
return
if item.checkState(column) == QtCore.Qt.Checked:
l = self.fileTree.findItems(item.text(0), QtCore.Qt.MatchExactly)
if l == []:
for _course in self.account.course_list:
if _course.name == item.text(0):
course = _course
break
course_item = QtWidgets.QTreeWidgetItem(self.fileTree)
course_item.setFlags(item.flags() | QtCore.Qt.ItemIsTristate | QtCore.Qt.ItemIsUserCheckable)
course_item.setText(0, course.name)
size = self.getSizeUnit(course.size)
course_item.setText(1, size)
course_item.setText(2, course.file_path)
course_item.setCheckState(0, QtCore.Qt.Checked)
course_item.setExpanded(True)
for menu in course:
menu_item = QtWidgets.QTreeWidgetItem(course_item)
menu_item.setFlags(menu_item.flags() | QtCore.Qt.ItemIsTristate | QtCore.Qt.ItemIsUserCheckable)
menu_item.setText(0, menu.name)
size = self.getSizeUnit(menu.size)
menu_item.setText(1, size)
menu_item.setText(2, menu.file_path)
menu_item.setCheckState(0, QtCore.Qt.Checked)
for myfile in menu:
if isinstance(myfile, myfunc.FileList):
filelist_item = QtWidgets.QTreeWidgetItem(menu_item)
filelist_item.setFlags(filelist_item.flags() | QtCore.Qt.ItemIsTristate | QtCore.Qt.ItemIsUserCheckable)
filelist_item.setText(0, myfile.name)
size = self.getSizeUnit(myfile.size)
filelist_item.setText(1, size)
filelist_item.setText(2, myfile.file_path)
filelist_item.setCheckState(0, QtCore.Qt.Checked)
self.addFileListItem(filelist_item, myfile)
continue
file_item = QtWidgets.QTreeWidgetItem(menu_item)
file_item.setFlags(file_item.flags() | QtCore.Qt.ItemIsUserCheckable)
file_item.setText(0, myfile.name)
size = self.getSizeUnit(myfile.size)
file_item.setText(1, size)
file_item.setText(2, myfile.file_path)
file_item.setCheckState(0, QtCore.Qt.Checked)
else:
l[0].setCheckState(0, QtCore.Qt.Checked)
elif item.checkState(column) == QtCore.Qt.Unchecked:
l = self.fileTree.findItems(item.text(0), QtCore.Qt.MatchExactly)
if l != []:
l[0].setCheckState(0, QtCore.Qt.Unchecked)
item.parent().removeChild(l[0])
def update_instruction_informations(self, new_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 = QtWidgets.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 = QtWidgets.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