def _open_position_dialog(self, item: FSTTreeItem): window = Ui_NodeFieldWindow() dialog = QDialog( self, Qt.WindowSystemMenuHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint) window.setupUi(dialog) dialog.setWindowTitle(item.text(0)) dialog.setModal(True) window.label.setText("Position:") if item.node._position: window.plainTextEdit.setPlainText(f"0x{item.node._position:X}") else: window.plainTextEdit.setPlainText("-1") dialog.show() if dialog.exec_() != QFileDialog.Accepted: return False, "" text = window.plainTextEdit.toPlainText() try: if text.startswith("0x"): position = int(text, 16) else: position = int(text) except ValueError: dialog = JobFailedDialog(self) dialog.setText( f"Invalid input \"{text}\" could not be converted to int") return False, dialog if position < 0: if item.node._position: item.node._position = None self.iso.pre_calc_metadata(self.iso.MaxSize - self.iso.get_auto_blob_size()) self.ui.fileSystemStartInfoTextBox.setPlainText( f"0x{item.node._fileoffset:X}") return True, "" else: newPos = min(position, self.iso.MaxSize - 4) & -4 if item.node._position != newPos: item.node._position = newPos self.iso.pre_calc_metadata(self.iso.MaxSize - self.iso.get_auto_blob_size()) self.ui.fileSystemStartInfoTextBox.setPlainText( f"0x{item.node._position:X}") return True, ""
def _open_alignment_dialog(self, item: FSTTreeItem): window = Ui_NodeFieldWindow() dialog = QDialog( self, Qt.WindowSystemMenuHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint) window.setupUi(dialog) dialog.setWindowTitle(item.text(0)) dialog.setModal(True) window.label.setText("Alignment:") if item.node._alignment: window.plainTextEdit.setPlainText(str(item.node._alignment)) else: window.plainTextEdit.setPlainText("4") dialog.show() if dialog.exec_() != QFileDialog.Accepted: return False, "" text = window.plainTextEdit.toPlainText() try: if text.startswith("0x"): alignment = int(text, 16) else: alignment = int(text) except ValueError: dialog = JobFailedDialog(self) dialog.setText( f"Invalid input \"{text}\" could not be converted to int") return False, dialog alignment = _round_up_to_power_of_2(max(4, min(alignment, 32768))) if item.node.is_file() and item.node._alignment != alignment: item.node._alignment = alignment self.iso.pre_calc_metadata(self.iso.MaxSize - self.iso.get_auto_blob_size()) self.ui.fileSystemStartInfoTextBox.setPlainText( f"0x{item.node._fileoffset:X}") if item.node.is_dir(): for child in item.node.rchildren(): child._alignment = _round_up_to_power_of_2(alignment) self.iso.pre_calc_metadata(self.iso.MaxSize - self.iso.get_auto_blob_size()) return True, ""