Commit fc1ae361 authored by dmMaze's avatar dmMaze
Browse files

better text selection scheme

parent bdbbc016
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -189,6 +189,7 @@ class Canvas(QGraphicsScene):
    drop_open_folder = Signal(str)

    context_menu_requested = Signal(QPoint, bool)
    incanvas_selection_changed = Signal()

    def __init__(self, parent=None):
        super().__init__(parent)
@@ -421,6 +422,8 @@ class Canvas(QGraphicsScene):
            blk_item = self.txtblkShapeControl.blk_item
            if blk_item is not None and blk_item.isEditing():
                blk_item.endEdit()
        if self.hasFocus():
            self.incanvas_selection_changed.emit()

    def keyPressEvent(self, event: QKeyEvent) -> None:
        key = event.key()
+18 −6
Original line number Diff line number Diff line
@@ -307,10 +307,11 @@ class SceneTextManager(QObject):
        self.canvas.format_textblks.connect(self.onFormatTextblks)
        self.canvas.layout_textblks.connect(self.onAutoLayoutTextblks)
        self.canvas.reset_angle.connect(self.onResetAngle)
        self.canvas.incanvas_selection_changed.connect(self.on_incanvas_selection_changed)
        self.txtblkShapeControl = canvas.txtblkShapeControl
        self.textpanel = textpanel
        self.textEditList = textpanel.textEditList
        self.textEditList.focus_out.connect(self.on_textedit_focusout)
        self.textEditList.focus_out.connect(self.on_textedit_list_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)
@@ -384,6 +385,7 @@ class SceneTextManager(QObject):
        self.pairwidget_list.append(pair_widget)
        self.textEditList.addPairWidget(pair_widget)
        pair_widget.e_source.setPlainText(blk_item.blk.get_text())
        pair_widget.e_source.focus_in.connect(self.onTransWidgetHoverEnter)
        pair_widget.e_source.ensure_scene_visible.connect(self.on_ensure_textitem_svisible)
        pair_widget.e_source.push_undo_stack.connect(self.on_push_edit_stack)
        pair_widget.e_source.redo_signal.connect(self.on_textedit_redo)
@@ -488,10 +490,12 @@ class SceneTextManager(QObject):
            self.hovering_transwidget.setHoverEffect(False)
        self.hovering_transwidget = edit
        if edit is not None:
            pw = self.pairwidget_list[edit.idx]
            h = pw.height()
            if C.USE_PYSIDE6:
                self.textEditList.ensureWidgetVisible(edit, ymargin=edit.geometry().height())
                self.textEditList.ensureWidgetVisible(pw, ymargin=h)
            else:
                self.textEditList.ensureWidgetVisible(edit, yMargin=edit.geometry().height())
                self.textEditList.ensureWidgetVisible(pw, yMargin=h)
            edit.setHoverEffect(True)

    def onLeftbuttonPressed(self, blk_id: int):
@@ -628,6 +632,13 @@ class SceneTextManager(QObject):
        if len(selected_blks) > 0:
            self.canvas.push_undo_command(ResetAngleCommand(selected_blks, self.txtblkShapeControl))

    def on_incanvas_selection_changed(self):
        if self.canvas.textEditMode():
            self.textEditList.clearDrag()
            self.textEditList.clearAllSelected(emit_signal=False)
            textitems = self.canvas.selected_text_items()
            self.textEditList.set_selected_list([t.idx for t in textitems])

    def layout_textblk(self, blkitem: TextBlkItem, text: str = None, mask: np.ndarray = None, bounding_rect: List = None, region_rect: List = None):
        old_br = blkitem.absBoundingRect()
        img = self.imgtrans_proj.img_array
@@ -932,15 +943,16 @@ class SceneTextManager(QObject):
        for idx in selset:
            self.textblk_item_list[idx].setSelected(True)

    def on_textedit_focusout(self):
    def on_textedit_list_focusout(self):
        fw = self.app.focusWidget()
        if fw == self.canvas.gv or isinstance(fw, (SourceTextEdit, TransTextEdit)):
        focusing_edit = isinstance(fw, (SourceTextEdit, TransTextEdit))
        if fw == self.canvas.gv or focusing_edit:
            self.textEditList.clearDrag()
        if focusing_edit:
            self.textEditList.clearAllSelected()

    def on_rearrange_blks(self, mv_map: Tuple[np.ndarray]):
        self.canvas.push_undo_command(RearrangeBlksCommand(mv_map, self))
        pass

    def on_apply_effect(self):
        format = self.formatpanel.active_format
+1 −1
Original line number Diff line number Diff line
@@ -295,7 +295,7 @@ class PaintQSlider(QSlider):

            painter.setPen(QColor(*C.SLIDERHANDLE_COLOR,255))
            font = painter.font()
            font.setPointSize(8)
            font.setPointSizeF(10)
            fm = QFontMetrics(font)
            painter.setFont(font)

+20 −5
Original line number Diff line number Diff line
@@ -324,16 +324,17 @@ class TransPairWidget(Widget):
        vlayout.addWidget(self.e_source)
        vlayout.addWidget(self.e_trans)
        vlayout.addWidget(SeparatorWidget(self))
        vlayout.setSpacing(5)
        spacing = 7
        vlayout.setSpacing(spacing)
        self.setCursor(Qt.CursorShape.PointingHandCursor)
        self.setContentsMargins(0, 0, 0, 0)
        vlayout.setContentsMargins(0, 5, 5, 5)
        vlayout.setContentsMargins(0, spacing, spacing, spacing)

        hlayout = QHBoxLayout(self)
        hlayout.addWidget(self.idx_label)
        hlayout.addLayout(vlayout)
        hlayout.setContentsMargins(0, 0, 0, 0)
        hlayout.setSpacing(5)
        hlayout.setSpacing(spacing)

        self.setAcceptDrops(True)

@@ -582,13 +583,27 @@ class TextEditListScrollArea(QScrollArea):
            self.sel_anchor_widget = self.checked_list[0]
        if check_changed:
            self.selection_changed.emit()
            if pwc.checked:
                pwc.e_trans.focus_in.emit(pwc.idx)

    def set_selected_list(self, selection_indices: List):
        self.clearAllSelected(emit_signal=False)
        self.clearDrag()
        for idx in selection_indices:
            pw = self.pairwidget_list[idx]
            pw._set_checked_state(True)
            self.checked_list.append(pw)
            if idx == 0:
                self.sel_anchor_widget = pw


    def clearAllSelected(self):
    def clearAllSelected(self, emit_signal=True):
        self.sel_anchor_widget = None
        if len(self.checked_list) > 0:
            for w in self.checked_list:
                w._set_checked_state(False)
            self.checked_list.clear()
            if emit_signal:
                self.selection_changed.emit()

    def removeWidget(self, widget: TransPairWidget, remove_checked: bool = True):