Loading ui/scenetext_manager.py +5 −4 Original line number Diff line number Diff line Loading @@ -313,6 +313,7 @@ class TextPanel(Widget): layout.setSpacing(7) layout.setAlignment(Qt.AlignmentFlag.AlignCenter) class SceneTextManager(QObject): new_textblk = Signal(int) def __init__(self, Loading Loading @@ -1013,18 +1014,18 @@ class SceneTextManager(QObject): blkitem = self.textblk_item_list[edit.idx] if is_trans else None self.canvas.push_undo_command(TextEditCommand(edit, num_steps, blkitem), update_pushed_step=not is_trans) def on_propagate_textitem_edit(self, pos: int, added_text: str, input_method_used: bool): def on_propagate_textitem_edit(self, pos: int, added_text: str, joint_previous: bool): blk_item: TextBlkItem = self.sender() edit = self.pairwidget_list[blk_item.idx].e_trans propagate_user_edit(blk_item, edit, pos, added_text, input_method_used) propagate_user_edit(blk_item, edit, pos, added_text, joint_previous) self.canvas.push_text_command(command=None, update_pushed_step=True) def on_propagate_transwidget_edit(self, pos: int, added_text: str, input_method_used: bool): def on_propagate_transwidget_edit(self, pos: int, added_text: str, joint_previous: bool): edit: TransTextEdit = self.sender() blk_item = self.textblk_item_list[edit.idx] if blk_item.isEditing(): blk_item.setTextInteractionFlags(Qt.TextInteractionFlag.NoTextInteraction) propagate_user_edit(edit, blk_item, pos, added_text, input_method_used) propagate_user_edit(edit, blk_item, pos, added_text, joint_previous) self.canvas.push_text_command(command=None, update_pushed_step=True) def apply_fontformat(self, fontformat: FontFormat): Loading ui/textedit_area.py +5 −4 Original line number Diff line number Diff line Loading @@ -156,7 +156,7 @@ class SourceTextEdit(QTextEdit): self.text_content_changed = True if self.hasFocus(): self.change_from = from_ self.change_added = added - removed self.change_added = added def adjustSize(self): h = self.document().documentLayout().documentSize().toSize().height() Loading @@ -176,7 +176,6 @@ class SourceTextEdit(QTextEdit): change_from = self.change_from added_text = '' input_method_used = False if self.paste_flag: self.paste_flag = False Loading @@ -189,7 +188,6 @@ class SourceTextEdit(QTextEdit): if self.input_method_from != -1: added_text = self.input_method_text change_from = self.input_method_from input_method_used = True self.input_method_from = -1 elif self.change_added > 0: cursor = self.textCursor() Loading @@ -197,9 +195,12 @@ class SourceTextEdit(QTextEdit): cursor.setPosition(change_from + self.change_added, QTextCursor.MoveMode.KeepAnchor) added_text = cursor.selectedText() self.propagate_user_edited.emit(change_from, added_text, input_method_used) undo_steps = self.document().availableUndoSteps() new_steps = undo_steps - self.old_undo_steps joint_previous = new_steps == 0 self.propagate_user_edited.emit(change_from, added_text, joint_previous) self.change_added = 0 if new_steps > 0: self.old_undo_steps = undo_steps self.push_undo_stack.emit(new_steps) Loading ui/textedit_commands.py +14 −32 Original line number Diff line number Diff line Loading @@ -18,34 +18,21 @@ from .config_proj import ProjImgTrans from .scene_textlayout import PUNSET_HALF def propagate_user_edit(src_edit: Union[TransTextEdit, TextBlkItem], target_edit: Union[TransTextEdit, TextBlkItem], pos: int, added_text: str, input_method_used: bool): def propagate_user_edit(src_edit: Union[TransTextEdit, TextBlkItem], target_edit: Union[TransTextEdit, TextBlkItem], pos: int, added_text: str, joint_previous: bool = False): ori_count = target_edit.document().characterCount() new_count = src_edit.document().characterCount() removed = ori_count + len(added_text) - new_count new_editblock = False if input_method_used or added_text not in PUNSET_HALF: new_editblock = True cursor = target_edit.textCursor() if len(added_text) > 0: cursor.setPosition(pos) if joint_previous: cursor.joinPreviousEditBlock() else: cursor.beginEditBlock() if removed > 0: cursor.setPosition(pos + removed, QTextCursor.MoveMode.KeepAnchor) if new_editblock: cursor.beginEditBlock() cursor.insertText(added_text) if new_editblock: cursor.endEditBlock() elif removed > 0: if removed == 1: cursor.setPosition(pos + removed - 1) cursor.deleteChar() else: cursor.setPosition(pos) cursor.setPosition(pos + removed, QTextCursor.MoveMode.KeepAnchor) cursor.removeSelectedText() target_edit.old_undo_steps = target_edit.document().availableUndoSteps() Loading Loading @@ -277,7 +264,6 @@ class TextItemEditCommand(QUndoCommand): return self.blkitem.repaint_on_changed = False for _ in range(self.num_steps): self.blkitem.redo() self.blkitem.repaint_on_changed = True if self.num_steps > 0: Loading @@ -292,7 +278,6 @@ class TextItemEditCommand(QUndoCommand): def undo(self): self.blkitem.repaint_on_changed = False for _ in range(self.num_steps): self.blkitem.undo() self.blkitem.repaint_on_changed = True if self.num_steps > 0: Loading @@ -319,14 +304,11 @@ class TextEditCommand(QUndoCommand): if self.op_counter == 0: self.op_counter += 1 return for _ in range(self.num_steps): self.edit.redo() if self.blkitem is not None: self.blkitem.redo() def undo(self): for _ in range(self.num_steps): self.edit.undo() if self.blkitem is not None: self.blkitem.undo() Loading ui/textitem.py +9 −10 Original line number Diff line number Diff line Loading @@ -91,30 +91,27 @@ class TextBlkItem(QGraphicsTextItem): if (self.hasFocus() or self.is_formatting) and not self.pre_editing and not self.block_change_signal: # self.content_changed.emit(self) if not self.in_redo_undo: undo_steps = self.document().availableUndoSteps() new_steps = undo_steps - self.old_undo_steps joint_previous = new_steps == 0 if not self.is_formatting: change_from = self.change_from added_text = '' input_method_used = False if self.input_method_from != -1: added_text = self.input_method_text change_from = self.input_method_from input_method_used = True self.input_method_from = -1 elif self.change_added > 0: cursor = self.textCursor() cursor.setPosition(change_from) cursor.setPosition(change_from + self.change_added, QTextCursor.MoveMode.KeepAnchor) added_text = cursor.selectedText() # print(change_from, added_text, input_method_used, self.change_from, self.change_added) self.propagate_user_edited.emit(change_from, added_text, input_method_used) self.propagate_user_edited.emit(change_from, added_text, joint_previous) self.change_added = 0 undo_steps = self.document().availableUndoSteps() new_steps = undo_steps - self.old_undo_steps if new_steps > 0: self.old_undo_steps = undo_steps self.push_undo_stack.emit(new_steps, self.is_formatting) Loading Loading @@ -399,7 +396,7 @@ class TextBlkItem(QGraphicsTextItem): if not self.pre_editing: if self.hasFocus(): self.change_from = from_ self.change_added = added - removed self.change_added = added def keyPressEvent(self, e: QKeyEvent) -> None: Loading Loading @@ -716,6 +713,7 @@ class TextBlkItem(QGraphicsTextItem): cursor = QTextCursor(self.document()) cursor.select(QTextCursor.SelectionType.Document) cursor.beginEditBlock() return cursor, dict(cursor_pos=cursor_pos, has_set_all=has_set_all) def _after_set_ffmt(self, cursor: QTextCursor, repaint_background: bool, restore_cursor: bool, cursor_pos: Tuple, has_set_all: bool): Loading @@ -733,6 +731,7 @@ class TextBlkItem(QGraphicsTextItem): if repaint_background: self.repaint_background() cursor.endEditBlock() self.is_formatting = False def setFontFamily(self, value: str, repaint_background: bool = True, set_selected: bool = False, restore_cursor: bool = False): Loading Loading
ui/scenetext_manager.py +5 −4 Original line number Diff line number Diff line Loading @@ -313,6 +313,7 @@ class TextPanel(Widget): layout.setSpacing(7) layout.setAlignment(Qt.AlignmentFlag.AlignCenter) class SceneTextManager(QObject): new_textblk = Signal(int) def __init__(self, Loading Loading @@ -1013,18 +1014,18 @@ class SceneTextManager(QObject): blkitem = self.textblk_item_list[edit.idx] if is_trans else None self.canvas.push_undo_command(TextEditCommand(edit, num_steps, blkitem), update_pushed_step=not is_trans) def on_propagate_textitem_edit(self, pos: int, added_text: str, input_method_used: bool): def on_propagate_textitem_edit(self, pos: int, added_text: str, joint_previous: bool): blk_item: TextBlkItem = self.sender() edit = self.pairwidget_list[blk_item.idx].e_trans propagate_user_edit(blk_item, edit, pos, added_text, input_method_used) propagate_user_edit(blk_item, edit, pos, added_text, joint_previous) self.canvas.push_text_command(command=None, update_pushed_step=True) def on_propagate_transwidget_edit(self, pos: int, added_text: str, input_method_used: bool): def on_propagate_transwidget_edit(self, pos: int, added_text: str, joint_previous: bool): edit: TransTextEdit = self.sender() blk_item = self.textblk_item_list[edit.idx] if blk_item.isEditing(): blk_item.setTextInteractionFlags(Qt.TextInteractionFlag.NoTextInteraction) propagate_user_edit(edit, blk_item, pos, added_text, input_method_used) propagate_user_edit(edit, blk_item, pos, added_text, joint_previous) self.canvas.push_text_command(command=None, update_pushed_step=True) def apply_fontformat(self, fontformat: FontFormat): Loading
ui/textedit_area.py +5 −4 Original line number Diff line number Diff line Loading @@ -156,7 +156,7 @@ class SourceTextEdit(QTextEdit): self.text_content_changed = True if self.hasFocus(): self.change_from = from_ self.change_added = added - removed self.change_added = added def adjustSize(self): h = self.document().documentLayout().documentSize().toSize().height() Loading @@ -176,7 +176,6 @@ class SourceTextEdit(QTextEdit): change_from = self.change_from added_text = '' input_method_used = False if self.paste_flag: self.paste_flag = False Loading @@ -189,7 +188,6 @@ class SourceTextEdit(QTextEdit): if self.input_method_from != -1: added_text = self.input_method_text change_from = self.input_method_from input_method_used = True self.input_method_from = -1 elif self.change_added > 0: cursor = self.textCursor() Loading @@ -197,9 +195,12 @@ class SourceTextEdit(QTextEdit): cursor.setPosition(change_from + self.change_added, QTextCursor.MoveMode.KeepAnchor) added_text = cursor.selectedText() self.propagate_user_edited.emit(change_from, added_text, input_method_used) undo_steps = self.document().availableUndoSteps() new_steps = undo_steps - self.old_undo_steps joint_previous = new_steps == 0 self.propagate_user_edited.emit(change_from, added_text, joint_previous) self.change_added = 0 if new_steps > 0: self.old_undo_steps = undo_steps self.push_undo_stack.emit(new_steps) Loading
ui/textedit_commands.py +14 −32 Original line number Diff line number Diff line Loading @@ -18,34 +18,21 @@ from .config_proj import ProjImgTrans from .scene_textlayout import PUNSET_HALF def propagate_user_edit(src_edit: Union[TransTextEdit, TextBlkItem], target_edit: Union[TransTextEdit, TextBlkItem], pos: int, added_text: str, input_method_used: bool): def propagate_user_edit(src_edit: Union[TransTextEdit, TextBlkItem], target_edit: Union[TransTextEdit, TextBlkItem], pos: int, added_text: str, joint_previous: bool = False): ori_count = target_edit.document().characterCount() new_count = src_edit.document().characterCount() removed = ori_count + len(added_text) - new_count new_editblock = False if input_method_used or added_text not in PUNSET_HALF: new_editblock = True cursor = target_edit.textCursor() if len(added_text) > 0: cursor.setPosition(pos) if joint_previous: cursor.joinPreviousEditBlock() else: cursor.beginEditBlock() if removed > 0: cursor.setPosition(pos + removed, QTextCursor.MoveMode.KeepAnchor) if new_editblock: cursor.beginEditBlock() cursor.insertText(added_text) if new_editblock: cursor.endEditBlock() elif removed > 0: if removed == 1: cursor.setPosition(pos + removed - 1) cursor.deleteChar() else: cursor.setPosition(pos) cursor.setPosition(pos + removed, QTextCursor.MoveMode.KeepAnchor) cursor.removeSelectedText() target_edit.old_undo_steps = target_edit.document().availableUndoSteps() Loading Loading @@ -277,7 +264,6 @@ class TextItemEditCommand(QUndoCommand): return self.blkitem.repaint_on_changed = False for _ in range(self.num_steps): self.blkitem.redo() self.blkitem.repaint_on_changed = True if self.num_steps > 0: Loading @@ -292,7 +278,6 @@ class TextItemEditCommand(QUndoCommand): def undo(self): self.blkitem.repaint_on_changed = False for _ in range(self.num_steps): self.blkitem.undo() self.blkitem.repaint_on_changed = True if self.num_steps > 0: Loading @@ -319,14 +304,11 @@ class TextEditCommand(QUndoCommand): if self.op_counter == 0: self.op_counter += 1 return for _ in range(self.num_steps): self.edit.redo() if self.blkitem is not None: self.blkitem.redo() def undo(self): for _ in range(self.num_steps): self.edit.undo() if self.blkitem is not None: self.blkitem.undo() Loading
ui/textitem.py +9 −10 Original line number Diff line number Diff line Loading @@ -91,30 +91,27 @@ class TextBlkItem(QGraphicsTextItem): if (self.hasFocus() or self.is_formatting) and not self.pre_editing and not self.block_change_signal: # self.content_changed.emit(self) if not self.in_redo_undo: undo_steps = self.document().availableUndoSteps() new_steps = undo_steps - self.old_undo_steps joint_previous = new_steps == 0 if not self.is_formatting: change_from = self.change_from added_text = '' input_method_used = False if self.input_method_from != -1: added_text = self.input_method_text change_from = self.input_method_from input_method_used = True self.input_method_from = -1 elif self.change_added > 0: cursor = self.textCursor() cursor.setPosition(change_from) cursor.setPosition(change_from + self.change_added, QTextCursor.MoveMode.KeepAnchor) added_text = cursor.selectedText() # print(change_from, added_text, input_method_used, self.change_from, self.change_added) self.propagate_user_edited.emit(change_from, added_text, input_method_used) self.propagate_user_edited.emit(change_from, added_text, joint_previous) self.change_added = 0 undo_steps = self.document().availableUndoSteps() new_steps = undo_steps - self.old_undo_steps if new_steps > 0: self.old_undo_steps = undo_steps self.push_undo_stack.emit(new_steps, self.is_formatting) Loading Loading @@ -399,7 +396,7 @@ class TextBlkItem(QGraphicsTextItem): if not self.pre_editing: if self.hasFocus(): self.change_from = from_ self.change_added = added - removed self.change_added = added def keyPressEvent(self, e: QKeyEvent) -> None: Loading Loading @@ -716,6 +713,7 @@ class TextBlkItem(QGraphicsTextItem): cursor = QTextCursor(self.document()) cursor.select(QTextCursor.SelectionType.Document) cursor.beginEditBlock() return cursor, dict(cursor_pos=cursor_pos, has_set_all=has_set_all) def _after_set_ffmt(self, cursor: QTextCursor, repaint_background: bool, restore_cursor: bool, cursor_pos: Tuple, has_set_all: bool): Loading @@ -733,6 +731,7 @@ class TextBlkItem(QGraphicsTextItem): if repaint_background: self.repaint_background() cursor.endEditBlock() self.is_formatting = False def setFontFamily(self, value: str, repaint_background: bool = True, set_selected: bool = False, restore_cursor: bool = False): Loading