Loading modules/base.py +1 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ class BaseModule: def updateParam(self, param_key: str, param_content): self_param_content = self.params[param_key] if isinstance(self_param_content, str) or isinstance(self_param_content, float) or isinstance(self_param_content, int): if isinstance(self_param_content, (str, float, int)): self.params[param_key] = param_content else: param_dict = self.params[param_key] Loading ui/canvas.py +5 −4 Original line number Diff line number Diff line Loading @@ -170,7 +170,7 @@ class Canvas(QGraphicsScene): textstack_changed = Signal() drop_open_folder = Signal(str) context_menu_requested = Signal(QPoint) context_menu_requested = Signal(QPoint, bool) def __init__(self, parent=None): super().__init__(parent) Loading @@ -194,7 +194,7 @@ class Canvas(QGraphicsScene): self.gv.setAcceptDrops(True) self.gv.setContextMenuPolicy(Qt.ContextMenuPolicy.NoContextMenu) self.context_menu_requested.connect(self.createCustomContextMenu) self.context_menu_requested.connect(self.on_create_contextmenu) if not C.FLAG_QT6: # mitigate https://bugreports.qt.io/browse/QTBUG-93417 Loading Loading @@ -576,7 +576,7 @@ class Canvas(QGraphicsScene): if self.stroke_img_item is not None: self.finish_erasing.emit(self.stroke_img_item) if self.textEditMode(): self.context_menu_requested.emit(event.screenPos()) self.context_menu_requested.emit(event.screenPos(), False) elif btn == Qt.MouseButton.LeftButton: if self.stroke_img_item is not None: self.finish_painting.emit(self.stroke_img_item) Loading Loading @@ -651,7 +651,7 @@ class Canvas(QGraphicsScene): def setTextBlockMode(self, mode: bool): self.textblock_mode = mode def createCustomContextMenu(self, pos: QPoint): def on_create_contextmenu(self, pos: QPoint, is_textpanel: bool): if self.textEditMode() and not self.creating_textblock: menu = QMenu(self.gv) copy_act = menu.addAction(self.tr("Copy")) Loading @@ -666,6 +666,7 @@ class Canvas(QGraphicsScene): paste_src_act.setShortcut(QKeySequence("Ctrl+Shift+V")) delete_recover_act = menu.addAction(self.tr("Delete and Recover removed text")) delete_recover_act.setShortcut(QKeySequence("Ctrl+Shift+D")) menu.addSeparator() format_act = menu.addAction(self.tr("Apply font formatting")) Loading ui/scenetext_manager.py +15 −5 Original line number Diff line number Diff line Loading @@ -76,6 +76,8 @@ class DeleteBlkItemsCommand(QUndoCommand): self.old_counter_sum = self.sw.counter_sum self.sw_changed = False blk_list.sort(key=lambda blk: blk.idx) for blkitem in blk_list: if not isinstance(blkitem, TextBlkItem): continue Loading Loading @@ -252,6 +254,7 @@ class PasteBlkItemsCommand(QUndoCommand): super().__init__(parent) self.op_counter = 0 self.blk_list = blk_list blk_list.sort(key=lambda blk: blk.idx) for blkitem in blk_list: blkitem.setSelected(True) self.pwidget_list = pwidget_list Loading Loading @@ -354,8 +357,9 @@ class SceneTextManager(QObject): self.canvas.reset_angle.connect(self.onResetAngle) self.txtblkShapeControl = canvas.txtblkShapeControl self.textpanel = textpanel self.textEditList = textpanel.textEditList self.textEditList.focus_out.connect(self.on_textedit_focusout) self.textEditList.textpanel_contextmenu_requested.connect(canvas.on_create_contextmenu) self.textEditList.selection_changed.connect(self.on_transwidget_selection_changed) self.textEditList.rearrange_blks.connect(self.on_rearrange_blks) self.formatpanel = textpanel.formatpanel Loading Loading @@ -486,17 +490,17 @@ class SceneTextManager(QObject): self.txtblkShapeControl.setBlkItem(None) def recoverTextblkItem(self, blkitem: TextBlkItem, p_widget: TransPairWidget): self.textblk_item_list.append(blkitem) self.textblk_item_list.insert(blkitem.idx, blkitem) blkitem.setParentItem(self.canvas.textLayer) self.pairwidget_list.append(p_widget) self.pairwidget_list.insert(p_widget.idx, p_widget) self.textEditList.insertPairWidget(p_widget, p_widget.idx) self.updateTextBlkItemIdx() def recoverTextblkItemList(self, blkitem_list: List[TextBlkItem], p_widget_list: List[TransPairWidget]): for blkitem, p_widget in zip(blkitem_list, p_widget_list): self.textblk_item_list.append(blkitem) self.textblk_item_list.insert(blkitem.idx, blkitem) blkitem.setParentItem(self.canvas.textLayer) self.pairwidget_list.append(p_widget) self.pairwidget_list.insert(p_widget.idx, p_widget) self.textEditList.insertPairWidget(p_widget, p_widget.idx) if self.txtblkShapeControl.blk_item is not None and blkitem.isSelected(): blkitem.setSelected(False) Loading Loading @@ -984,6 +988,12 @@ class SceneTextManager(QObject): for idx in selset: self.textblk_item_list[idx].setSelected(True) def on_textedit_focusout(self): fw = self.app.focusWidget() if fw == self.canvas.gv or isinstance(fw, (SourceTextEdit, TransTextEdit)): self.textEditList.clearDrag() self.textEditList.clearAllSelected() def on_rearrange_blks(self, mv_map: Tuple[np.ndarray]): self.canvas.push_undo_command(RearrangeBlksCommand(mv_map, self)) pass Loading ui/textedit_area.py +21 −9 Original line number Diff line number Diff line from typing import List, Union from PyQt6 import QtGui from qtpy.QtWidgets import QTextEdit, QScrollArea, QGraphicsDropShadowEffect, QVBoxLayout, QApplication, QHBoxLayout from qtpy.QtWidgets import QMenu, QTextEdit, QScrollArea, QGraphicsDropShadowEffect, QVBoxLayout, QApplication, QHBoxLayout from qtpy.QtCore import Signal, Qt, QMimeData, QEvent, QPoint from qtpy.QtGui import QColor, QFocusEvent, QInputMethodEvent, QDragEnterEvent, QDragMoveEvent, QDropEvent, QKeyEvent, QTextCursor, QMouseEvent, QDrag, QPixmap from qtpy.QtGui import QColor, QFocusEvent, QInputMethodEvent, QDragEnterEvent, QDragMoveEvent, QDropEvent, QKeyEvent, QTextCursor, QMouseEvent, QDrag, QPixmap, QKeySequence import keyboard from .stylewidgets import Widget, SeparatorWidget, ClickableLabel, IgnoreMouseLabel Loading @@ -12,6 +11,12 @@ from .config import pcfg import webbrowser import numpy as np STYLE_TRANSPAIR_CHECKED = "background-color: rgba(30, 147, 229, 20%);" STYLE_TRANSPAIR_BOTTOM = "border-width: 5px; border-bottom-style: solid; border-color: rgb(30, 147, 229);" STYLE_TRANSPAIR_TOP = "border-width: 5px; border-top-style: solid; border-color: rgb(30, 147, 229);" class SelectTextMiniMenu(Widget): block_current_editor = Signal(bool) Loading Loading @@ -297,9 +302,6 @@ class SourceTextEdit(QTextEdit): class TransTextEdit(SourceTextEdit): pass STYLE_TRANSPAIR_CHECKED = "background-color: rgba(30, 147, 229, 20%);" STYLE_TRANSPAIR_BOTTOM = "border-width: 5px; border-bottom-style: solid; border-color: rgb(30, 147, 229);" STYLE_TRANSPAIR_TOP = "border-width: 5px; border-top-style: solid; border-color: rgb(30, 147, 229);" Loading Loading @@ -383,6 +385,7 @@ class TransPairWidget(Widget): self.e_source.idx = idx self.e_trans.idx = idx class TextEditListScrollArea(QScrollArea): textblock_list: List[TextBlock] = [] Loading @@ -390,6 +393,8 @@ class TextEditListScrollArea(QScrollArea): remove_textblock = Signal() selection_changed = Signal() # this signal could only emit in on_widget_checkstate_changed, i.e. via user op rearrange_blks = Signal(object) textpanel_contextmenu_requested = Signal(QPoint, bool) focus_out = Signal() def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) Loading @@ -413,6 +418,14 @@ class TextEditListScrollArea(QScrollArea): self.drag_to_pos: int = -1 self.setAcceptDrops(True) self.setContextMenuPolicy(Qt.ContextMenuPolicy.NoContextMenu) def mouseReleaseEvent(self, e: QMouseEvent): if e.button() == Qt.MouseButton.RightButton: pos = self.mapToGlobal(e.position()).toPoint() self.textpanel_contextmenu_requested.emit(pos, True) super().mouseReleaseEvent(e) def mouseMoveEvent(self, e: QMouseEvent) -> None: if self.drag is None and self.sel_anchor_widget is not None: w = self.sel_anchor_widget Loading Loading @@ -589,9 +602,8 @@ class TextEditListScrollArea(QScrollArea): self.vlayout.removeWidget(widget) def focusOutEvent(self, e: QFocusEvent) -> None: self.clearDrag() self.clearAllSelected() return super().focusOutEvent(e) self.focus_out.emit() super().focusOutEvent(e) def setFoldTextarea(self, fold: bool): for pw in self.pairwidget_list: Loading Loading
modules/base.py +1 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ class BaseModule: def updateParam(self, param_key: str, param_content): self_param_content = self.params[param_key] if isinstance(self_param_content, str) or isinstance(self_param_content, float) or isinstance(self_param_content, int): if isinstance(self_param_content, (str, float, int)): self.params[param_key] = param_content else: param_dict = self.params[param_key] Loading
ui/canvas.py +5 −4 Original line number Diff line number Diff line Loading @@ -170,7 +170,7 @@ class Canvas(QGraphicsScene): textstack_changed = Signal() drop_open_folder = Signal(str) context_menu_requested = Signal(QPoint) context_menu_requested = Signal(QPoint, bool) def __init__(self, parent=None): super().__init__(parent) Loading @@ -194,7 +194,7 @@ class Canvas(QGraphicsScene): self.gv.setAcceptDrops(True) self.gv.setContextMenuPolicy(Qt.ContextMenuPolicy.NoContextMenu) self.context_menu_requested.connect(self.createCustomContextMenu) self.context_menu_requested.connect(self.on_create_contextmenu) if not C.FLAG_QT6: # mitigate https://bugreports.qt.io/browse/QTBUG-93417 Loading Loading @@ -576,7 +576,7 @@ class Canvas(QGraphicsScene): if self.stroke_img_item is not None: self.finish_erasing.emit(self.stroke_img_item) if self.textEditMode(): self.context_menu_requested.emit(event.screenPos()) self.context_menu_requested.emit(event.screenPos(), False) elif btn == Qt.MouseButton.LeftButton: if self.stroke_img_item is not None: self.finish_painting.emit(self.stroke_img_item) Loading Loading @@ -651,7 +651,7 @@ class Canvas(QGraphicsScene): def setTextBlockMode(self, mode: bool): self.textblock_mode = mode def createCustomContextMenu(self, pos: QPoint): def on_create_contextmenu(self, pos: QPoint, is_textpanel: bool): if self.textEditMode() and not self.creating_textblock: menu = QMenu(self.gv) copy_act = menu.addAction(self.tr("Copy")) Loading @@ -666,6 +666,7 @@ class Canvas(QGraphicsScene): paste_src_act.setShortcut(QKeySequence("Ctrl+Shift+V")) delete_recover_act = menu.addAction(self.tr("Delete and Recover removed text")) delete_recover_act.setShortcut(QKeySequence("Ctrl+Shift+D")) menu.addSeparator() format_act = menu.addAction(self.tr("Apply font formatting")) Loading
ui/scenetext_manager.py +15 −5 Original line number Diff line number Diff line Loading @@ -76,6 +76,8 @@ class DeleteBlkItemsCommand(QUndoCommand): self.old_counter_sum = self.sw.counter_sum self.sw_changed = False blk_list.sort(key=lambda blk: blk.idx) for blkitem in blk_list: if not isinstance(blkitem, TextBlkItem): continue Loading Loading @@ -252,6 +254,7 @@ class PasteBlkItemsCommand(QUndoCommand): super().__init__(parent) self.op_counter = 0 self.blk_list = blk_list blk_list.sort(key=lambda blk: blk.idx) for blkitem in blk_list: blkitem.setSelected(True) self.pwidget_list = pwidget_list Loading Loading @@ -354,8 +357,9 @@ class SceneTextManager(QObject): self.canvas.reset_angle.connect(self.onResetAngle) self.txtblkShapeControl = canvas.txtblkShapeControl self.textpanel = textpanel self.textEditList = textpanel.textEditList self.textEditList.focus_out.connect(self.on_textedit_focusout) self.textEditList.textpanel_contextmenu_requested.connect(canvas.on_create_contextmenu) self.textEditList.selection_changed.connect(self.on_transwidget_selection_changed) self.textEditList.rearrange_blks.connect(self.on_rearrange_blks) self.formatpanel = textpanel.formatpanel Loading Loading @@ -486,17 +490,17 @@ class SceneTextManager(QObject): self.txtblkShapeControl.setBlkItem(None) def recoverTextblkItem(self, blkitem: TextBlkItem, p_widget: TransPairWidget): self.textblk_item_list.append(blkitem) self.textblk_item_list.insert(blkitem.idx, blkitem) blkitem.setParentItem(self.canvas.textLayer) self.pairwidget_list.append(p_widget) self.pairwidget_list.insert(p_widget.idx, p_widget) self.textEditList.insertPairWidget(p_widget, p_widget.idx) self.updateTextBlkItemIdx() def recoverTextblkItemList(self, blkitem_list: List[TextBlkItem], p_widget_list: List[TransPairWidget]): for blkitem, p_widget in zip(blkitem_list, p_widget_list): self.textblk_item_list.append(blkitem) self.textblk_item_list.insert(blkitem.idx, blkitem) blkitem.setParentItem(self.canvas.textLayer) self.pairwidget_list.append(p_widget) self.pairwidget_list.insert(p_widget.idx, p_widget) self.textEditList.insertPairWidget(p_widget, p_widget.idx) if self.txtblkShapeControl.blk_item is not None and blkitem.isSelected(): blkitem.setSelected(False) Loading Loading @@ -984,6 +988,12 @@ class SceneTextManager(QObject): for idx in selset: self.textblk_item_list[idx].setSelected(True) def on_textedit_focusout(self): fw = self.app.focusWidget() if fw == self.canvas.gv or isinstance(fw, (SourceTextEdit, TransTextEdit)): self.textEditList.clearDrag() self.textEditList.clearAllSelected() def on_rearrange_blks(self, mv_map: Tuple[np.ndarray]): self.canvas.push_undo_command(RearrangeBlksCommand(mv_map, self)) pass Loading
ui/textedit_area.py +21 −9 Original line number Diff line number Diff line from typing import List, Union from PyQt6 import QtGui from qtpy.QtWidgets import QTextEdit, QScrollArea, QGraphicsDropShadowEffect, QVBoxLayout, QApplication, QHBoxLayout from qtpy.QtWidgets import QMenu, QTextEdit, QScrollArea, QGraphicsDropShadowEffect, QVBoxLayout, QApplication, QHBoxLayout from qtpy.QtCore import Signal, Qt, QMimeData, QEvent, QPoint from qtpy.QtGui import QColor, QFocusEvent, QInputMethodEvent, QDragEnterEvent, QDragMoveEvent, QDropEvent, QKeyEvent, QTextCursor, QMouseEvent, QDrag, QPixmap from qtpy.QtGui import QColor, QFocusEvent, QInputMethodEvent, QDragEnterEvent, QDragMoveEvent, QDropEvent, QKeyEvent, QTextCursor, QMouseEvent, QDrag, QPixmap, QKeySequence import keyboard from .stylewidgets import Widget, SeparatorWidget, ClickableLabel, IgnoreMouseLabel Loading @@ -12,6 +11,12 @@ from .config import pcfg import webbrowser import numpy as np STYLE_TRANSPAIR_CHECKED = "background-color: rgba(30, 147, 229, 20%);" STYLE_TRANSPAIR_BOTTOM = "border-width: 5px; border-bottom-style: solid; border-color: rgb(30, 147, 229);" STYLE_TRANSPAIR_TOP = "border-width: 5px; border-top-style: solid; border-color: rgb(30, 147, 229);" class SelectTextMiniMenu(Widget): block_current_editor = Signal(bool) Loading Loading @@ -297,9 +302,6 @@ class SourceTextEdit(QTextEdit): class TransTextEdit(SourceTextEdit): pass STYLE_TRANSPAIR_CHECKED = "background-color: rgba(30, 147, 229, 20%);" STYLE_TRANSPAIR_BOTTOM = "border-width: 5px; border-bottom-style: solid; border-color: rgb(30, 147, 229);" STYLE_TRANSPAIR_TOP = "border-width: 5px; border-top-style: solid; border-color: rgb(30, 147, 229);" Loading Loading @@ -383,6 +385,7 @@ class TransPairWidget(Widget): self.e_source.idx = idx self.e_trans.idx = idx class TextEditListScrollArea(QScrollArea): textblock_list: List[TextBlock] = [] Loading @@ -390,6 +393,8 @@ class TextEditListScrollArea(QScrollArea): remove_textblock = Signal() selection_changed = Signal() # this signal could only emit in on_widget_checkstate_changed, i.e. via user op rearrange_blks = Signal(object) textpanel_contextmenu_requested = Signal(QPoint, bool) focus_out = Signal() def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) Loading @@ -413,6 +418,14 @@ class TextEditListScrollArea(QScrollArea): self.drag_to_pos: int = -1 self.setAcceptDrops(True) self.setContextMenuPolicy(Qt.ContextMenuPolicy.NoContextMenu) def mouseReleaseEvent(self, e: QMouseEvent): if e.button() == Qt.MouseButton.RightButton: pos = self.mapToGlobal(e.position()).toPoint() self.textpanel_contextmenu_requested.emit(pos, True) super().mouseReleaseEvent(e) def mouseMoveEvent(self, e: QMouseEvent) -> None: if self.drag is None and self.sel_anchor_widget is not None: w = self.sel_anchor_widget Loading Loading @@ -589,9 +602,8 @@ class TextEditListScrollArea(QScrollArea): self.vlayout.removeWidget(widget) def focusOutEvent(self, e: QFocusEvent) -> None: self.clearDrag() self.clearAllSelected() return super().focusOutEvent(e) self.focus_out.emit() super().focusOutEvent(e) def setFoldTextarea(self, fold: bool): for pw in self.pairwidget_list: Loading