def __init__(self, item, name, val, app):
super().__init__(item, [name + ' '])
self.name = name
self.app = app
self.required = '{%s}' % name in self.app.base_url
if not self.required:
self.setCheckState(0, Qt.Checked)
self.last_check_state = Qt.Checked
self.widget = QLineEdit()
self.widget.setFrame(False)
self.widget.setStyleSheet('padding: 1px 0')
self.widget.textEdited.connect(self.value_changed)
self.app.fuzzer.getTree.setItemWidget(self, 1, self.widget)
self.widget.setText(val)
self.value = val
self.widget.setMouseTracking(True)
self.widget.enterEvent = self.edit
python类Checked()的实例源码
def make_entry(self,root,text,true_false):
depth=0
pointer=root
for depth in range(0,len(text)):
found=False
for i in range(0,pointer.childCount()):
if pointer.child(i).text(0)==text[depth]:
found=True
pointer=pointer.child(i)
break
if found==False:
pointer=QTreeWidgetItem(pointer, [text[depth]])
pointer.setFlags(pointer.flags() | Qt.ItemIsUserCheckable)
#if depth==0:
# pointer.setIcon(0,QIcon_load("folder"))
if true_false==True:
pointer.setCheckState(0, Qt.Checked )
else:
pointer.setCheckState(0, Qt.Unchecked )
def setData(self, index, value, role):
"""Set the role data for the item at index to value."""
if not index.isValid():
return False
node = self.getNode(index)
column = index.column()
if role == Qt.DisplayRole or role == Qt.EditRole:
if column > 0 and not node.childCount():
try:
node.setItemData(column, float(value))
except ValueError:
return False
else:
node.setItemData(column, value)
elif role == Qt.CheckStateRole:
node.setCheckState(value)
if value == Qt.Checked:
self.nodeCheckStateChanged.emit(index)
self.dataChanged.emit(index, index)
return True
def _update_selection_label(self):
selected_file_count = 0
selected_size = 0
for node, item in self._file_items:
if item.checkState(0) == Qt.Checked:
selected_file_count += 1
selected_size += node.length
ok_button = self._button_box.button(QDialogButtonBox.Ok)
if not selected_file_count:
ok_button.setEnabled(False)
self._selection_label.setText('Nothing to download')
else:
ok_button.setEnabled(True)
self._selection_label.setText(TorrentAddingDialog.SELECTION_LABEL_FORMAT.format(
selected_file_count, humanize_size(selected_size)))
def data(self, index: QModelIndex, role=None):
row = index.row()
if role == Qt.DisplayRole:
if row == 0:
return "not assigned"
else:
try:
return self.participants[row-1].name + " ("+ self.participants[row-1].shortname + ")"
except IndexError:
return None
elif role == Qt.CheckStateRole:
if row == 0:
return Qt.Checked if self.show_unassigned else Qt.Unchecked
else:
try:
return Qt.Checked if self.participants[row-1].show else Qt.Unchecked
except IndexError:
return None
def __init__(self, name: str, start: int, end: int, color_index: int, fuzz_created=False,
auto_created=False, field_type: FieldType = None):
self.__name = name
self.start = start
self.end = end + 1
self.apply_decoding = True
self.color_index = color_index
self.show = Qt.Checked
self.fuzz_me = Qt.Checked
self.fuzz_values = []
self.fuzz_created = fuzz_created
self.__field_type = field_type # type: FieldType
self.display_format_index = 0 if field_type is None else field_type.display_format_index
self.auto_created = auto_created
self.copied = False # keep track if label was already copied for COW in generation to avoid needless recopy
def unvoid(self, recur=True):
if self.void or self.is_msg:
if not self.required:
self.setCheckState(0, Qt.Checked)
self.last_check_state = Qt.Checked
if recur and self.parent():
self.parent().unvoid(True)
self.void = False
def get_self_pb(self):
if self.self_pb is None:
self.self_pb = getattr(self.get_parent_pb(), self.ds.name)
if self.repeated:
self.index = len(self.self_pb)
item_indices[id(self.self_pb)].append(self)
if self.is_msg:
self.self_pb.add()
if self.is_msg:
for i in range(self.childCount()):
if self.child(i).required:
self.child(i).parent_pb = None
self.child(i).self_pb = None
self.child(i).update(self.child(i).value)
if hasattr(self.self_pb, 'SetInParent'):
self.self_pb.SetInParent()
if not self.required:
self.setCheckState(0, Qt.Checked)
self.last_check_state = Qt.Checked
# Return value is for get_parent_pb recursion
if self.is_msg:
if not self.repeated:
return self.self_pb
else:
return self.self_pb[self.index]
def update_check(self, recursive=False, col=None):
if not self.required and self.last_check_state != self.checkState(0):
self.last_check_state = self.checkState(0)
if not self.is_msg:
if self.last_check_state == Qt.Checked:
self.update(self.value)
else:
self.update(None)
elif not self.self_pb: # We have just checked the message !
assert self.last_check_state == Qt.Checked
self.get_self_pb() # Recreates parent
for i in range(self.childCount()):
if self.child(i).required:
self.child(i).parent_pb = None
self.child(i).self_pb = None
self.child(i).update(self.child(i).value)
else: # We have just unchecked the message !
assert self.last_check_state != Qt.Checked
for i in range(self.childCount()):
if not self.child(i).required:
self.child(i).setCheckState(0, Qt.Unchecked)
self.child(i).update_check(True)
self.child(i).parent_pb = None
self.child(i).self_pb = None
self.get_self_pb().Clear()
self.update(None)
if not recursive:
self.app.update_fuzzer()
elif col == 0:
self.prompt_rename()
def update_check(self, col):
if not self.required and self.last_check_state != self.checkState(0):
self.last_check_state = self.checkState(0)
if self.last_check_state != Qt.Checked:
del self.app.get_params[self.name]
else:
self.app.get_params[self.name] = self.value
self.app.update_fuzzer()
def __init__(self, parent, info, title="Channel Properties"):
super().__init__(parent)
self.setWindowTitle(title)
self.model = QStandardItemModel(info["nchan"], 4)
self.model.setHorizontalHeaderLabels(["#", "Label", "Type", "Bad"])
for index, ch in enumerate(info["chs"]):
item = QStandardItem()
item.setData(index, Qt.DisplayRole)
item.setFlags(item.flags() & ~Qt.ItemIsEditable)
self.model.setItem(index, 0, item)
self.model.setItem(index, 1, QStandardItem(ch["ch_name"]))
kind = channel_type(info, index).upper()
self.model.setItem(index, 2, QStandardItem(str(kind)))
bad = QStandardItem()
bad.setData(ch["ch_name"] in info["bads"], Qt.UserRole)
bad.setCheckable(True)
bad.setEditable(False)
checked = ch["ch_name"] in info["bads"]
bad.setCheckState(Qt.Checked if checked else Qt.Unchecked)
self.model.setItem(index, 3, bad)
self.model.itemChanged.connect(bad_changed)
self.proxymodel = MySortFilterProxyModel()
self.proxymodel.setSourceModel(self.model)
self.view = QTableView()
self.view.setModel(self.proxymodel)
self.view.setItemDelegateForColumn(2, ComboBoxDelegate(self.view))
self.view.setEditTriggers(QAbstractItemView.AllEditTriggers)
self.view.verticalHeader().setVisible(False)
self.view.horizontalHeader().setStretchLastSection(True)
self.view.setShowGrid(False)
self.view.setSelectionMode(QAbstractItemView.NoSelection)
self.view.setSortingEnabled(True)
self.view.sortByColumn(0, Qt.AscendingOrder)
self.view.resizeColumnsToContents()
# for i in range(self.model.rowCount()):
# self.view.openPersistentEditor(self.model.index(i, 2))
vbox = QVBoxLayout(self)
vbox.addWidget(self.view)
self.buttonbox = QDialogButtonBox(QDialogButtonBox.Ok |
QDialogButtonBox.Cancel)
vbox.addWidget(self.buttonbox)
self.buttonbox.accepted.connect(self.accept)
self.buttonbox.rejected.connect(self.reject)
self.resize(400, 650)
def bad_changed(item):
if item.checkState() == Qt.Checked:
item.setData(True, Qt.UserRole)
else:
item.setData(False, Qt.UserRole)
def setVerboseLogs(self, state: int) -> None:
self.parent.parent.saveSetting('verboseLogs', state == Qt.Checked)
self.parent.parent.parent.verboseLogs = (state == Qt.Checked)
def setNativeDialogs(self, state: int) -> None:
self.parent.parent.saveSetting('nativeDialogs', state == Qt.Checked)
self.parent.parent.nativeDialogs = (state == Qt.Checked)
def switchDecoding(self, state: int) -> None:
self.parent.parent.mpvWidget.mpv.set_property('hwdec', 'auto' if state == Qt.Checked else 'no')
self.parent.parent.saveSetting('hwdec', state == Qt.Checked)
self.parent.parent.hardwareDecoding = (state == Qt.Checked)
def keepAspectRatio(self, state: int) -> None:
self.parent.parent.mpvWidget.mpv.set_option('keepaspect', state == Qt.Checked)
self.parent.settings.setValue('aspectRatio', 'keep' if state == Qt.Checked else 'stretch')
self.parent.parent.keepRatio = (state == Qt.Checked)
def setSmartCut(self, state: int) -> None:
self.parent.parent.toggleSmartCut(state == Qt.Checked)
def keepClips(self, state: int) -> None:
self.parent.parent.saveSetting('keepClips', state == Qt.Checked)
self.parent.parent.keepClips = (state == Qt.Checked)
def handle_response(self, idx, txt):
root = self.comtree.invisibleRootItem()
item = root.child(idx)
item.setText(0, time.strftime("%Y.%m.%d. %H:%M:%S", time.localtime()))
if not txt:
txt = 'ok'
item.setText(2, txt)
item.setCheckState(0, Qt.Checked)
self.comtree.scrollToItem(item)
cmd = item.text(1)
proc_events()
if 'G0' in cmd or 'G1' in cmd:
x, y, z = parse.xyz(cmd[2:])
# should probably emit signals
self.current_x = x
self.current_y = y
self.current_z = z
if 'G38.2' in cmd:
try:
# e.g. Probe not tripped from LinuxCNC
# (we get error message from backend)
if 'error' in txt:
z = -999.0
else:
z = parse.probe(txt)
except:
self.err('Unable to parse probe: {}'.format(txt))
self.err('Is your flavor ({}) correct?'.format(self.flavor))
z = -999.0
self.gl.result.data.append((self.current_x, self.current_y, z))
self.update_result()
self['probe result.lowest'] = min(self['probe result.lowest'], z)
self['probe result.highest'] = max(self['probe result.highest'], z)
self['probe result.last'] = z
def changeIcon(self):
icon = QIcon()
for row in range(self.imagesTable.rowCount()):
item0 = self.imagesTable.item(row, 0)
item1 = self.imagesTable.item(row, 1)
item2 = self.imagesTable.item(row, 2)
if item0.checkState() == Qt.Checked:
if item1.text() == "Normal":
mode = QIcon.Normal
elif item1.text() == "Active":
mode = QIcon.Active
elif item1.text() == "Disabled":
mode = QIcon.Disabled
else:
mode = QIcon.Selected
if item2.text() == "On":
state = QIcon.On
else:
state = QIcon.Off
fileName = item0.data(Qt.UserRole)
image = QImage(fileName)
if not image.isNull():
icon.addPixmap(QPixmap.fromImage(image), mode, state)
self.previewArea.setIcon(icon)
def addImage(self):
fileNames, _ = QFileDialog.getOpenFileNames(self, "Open Images", '',
"Images (*.png *.xpm *.jpg);;All Files (*)")
for fileName in fileNames:
row = self.imagesTable.rowCount()
self.imagesTable.setRowCount(row + 1)
imageName = QFileInfo(fileName).baseName()
item0 = QTableWidgetItem(imageName)
item0.setData(Qt.UserRole, fileName)
item0.setFlags(item0.flags() & ~Qt.ItemIsEditable)
item1 = QTableWidgetItem("Normal")
item2 = QTableWidgetItem("Off")
if self.guessModeStateAct.isChecked():
if '_act' in fileName:
item1.setText("Active")
elif '_dis' in fileName:
item1.setText("Disabled")
elif '_sel' in fileName:
item1.setText("Selected")
if '_on' in fileName:
item2.setText("On")
self.imagesTable.setItem(row, 0, item0)
self.imagesTable.setItem(row, 1, item1)
self.imagesTable.setItem(row, 2, item2)
self.imagesTable.openPersistentEditor(item1)
self.imagesTable.openPersistentEditor(item2)
item0.setCheckState(Qt.Checked)
def changeIcon(self):
icon = QIcon()
for row in range(self.imagesTable.rowCount()):
item0 = self.imagesTable.item(row, 0)
item1 = self.imagesTable.item(row, 1)
item2 = self.imagesTable.item(row, 2)
if item0.checkState() == Qt.Checked:
if item1.text() == "Normal":
mode = QIcon.Normal
elif item1.text() == "Active":
mode = QIcon.Active
elif item1.text() == "Disabled":
mode = QIcon.Disabled
else:
mode = QIcon.Selected
if item2.text() == "On":
state = QIcon.On
else:
state = QIcon.Off
fileName = item0.data(Qt.UserRole)
image = QImage(fileName)
if not image.isNull():
icon.addPixmap(QPixmap.fromImage(image), mode, state)
self.previewArea.setIcon(icon)
def addImage(self):
fileNames, _ = QFileDialog.getOpenFileNames(self, "Open Images", '',
"Images (*.png *.xpm *.jpg);;All Files (*)")
for fileName in fileNames:
row = self.imagesTable.rowCount()
self.imagesTable.setRowCount(row + 1)
imageName = QFileInfo(fileName).baseName()
item0 = QTableWidgetItem(imageName)
item0.setData(Qt.UserRole, fileName)
item0.setFlags(item0.flags() & ~Qt.ItemIsEditable)
item1 = QTableWidgetItem("Normal")
item2 = QTableWidgetItem("Off")
if self.guessModeStateAct.isChecked():
if '_act' in fileName:
item1.setText("Active")
elif '_dis' in fileName:
item1.setText("Disabled")
elif '_sel' in fileName:
item1.setText("Selected")
if '_on' in fileName:
item2.setText("On")
self.imagesTable.setItem(row, 0, item0)
self.imagesTable.setItem(row, 1, item1)
self.imagesTable.setItem(row, 2, item2)
self.imagesTable.openPersistentEditor(item1)
self.imagesTable.openPersistentEditor(item2)
item0.setCheckState(Qt.Checked)
def on_autoscroll_state_changed(self, state):
if state == Qt.Checked:
self.is_auto_scrolling = True
elif state == Qt.Unchecked:
self.is_auto_scrolling = False
def _toggle_sync(self, state):
self.pw.set_sync_state(state == Qt.Checked)
def _traverse_file_tree(self, name: str, node: FileTreeNode, parent: QWidget):
item = QTreeWidgetItem(parent)
item.setCheckState(0, Qt.Checked)
item.setText(0, name)
if isinstance(node, FileInfo):
item.setText(1, humanize_size(node.length))
item.setIcon(0, file_icon)
self._file_items.append((node, item))
return
item.setIcon(0, directory_icon)
for name, child in node.items():
self._traverse_file_tree(name, child, item)
def _update_checkboxes(self, item: QTreeWidgetItem, column: int):
if column != 0:
return
new_check_state = item.checkState(0)
self._set_check_state_to_tree(item, new_check_state)
while True:
item = item.parent()
if item is None:
break
has_checked_children = False
has_partially_checked_children = False
has_unchecked_children = False
for i in range(item.childCount()):
state = item.child(i).checkState(0)
if state == Qt.Checked:
has_checked_children = True
elif state == Qt.PartiallyChecked:
has_partially_checked_children = True
else:
has_unchecked_children = True
if not has_partially_checked_children and not has_unchecked_children:
new_state = Qt.Checked
elif has_checked_children or has_partially_checked_children:
new_state = Qt.PartiallyChecked
else:
new_state = Qt.Unchecked
item.setCheckState(0, new_state)
self._update_selection_label()
def submit_torrent(self):
self._torrent_info.download_dir = self._download_dir
self._control.last_download_dir = os.path.abspath(self._download_dir)
file_paths = []
for node, item in self._file_items:
if item.checkState(0) == Qt.Checked:
file_paths.append(node.path)
if not self._torrent_info.download_info.single_file_mode:
self._torrent_info.download_info.select_files(file_paths, 'whitelist')
self._control_thread.loop.call_soon_threadsafe(self._control.add, self._torrent_info)
self.close()
def show(self, value: bool):
value = Qt.Checked if value else Qt.Unchecked
if not self.is_group:
self.protocol.show = value
self.protocol.qt_signals.show_state_changed.emit()
else:
for child in self.__childItems:
child.__itemData.show = value
if self.childCount() > 0:
self.__childItems[0].__itemData.qt_signals.show_state_changed.emit()
def group_check_state(self):
if not self.is_group:
return None
if self.childCount() == 0:
return Qt.Unchecked
if all(child.show for child in self.children):
return Qt.Checked
elif any(child.show for child in self.children):
return Qt.PartiallyChecked
else:
return Qt.Unchecked