Commit ef0e4c88 authored by dmMaze's avatar dmMaze
Browse files

unify local/global text formatting interfaces

parent 78488eb7
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -6,10 +6,11 @@ from typing import List

class SizeComboBox(QComboBox):
    
    apply_change = Signal(float)
    def __init__(self, val_range: List = None, *args, **kwargs) -> None:
    param_changed = Signal(str, float)
    def __init__(self, val_range: List = None, param_name: str = '', *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)
        self.text_changed_by_user = False
        self.param_name = param_name
        self.editTextChanged.connect(self.on_text_changed)
        self.currentIndexChanged.connect(self.on_current_index_changed)
        self.setEditable(True)
@@ -59,4 +60,4 @@ class SizeComboBox(QComboBox):
    def check_change(self):
        if self.text_changed_by_user:
            self.text_changed_by_user = False
            self.apply_change.emit(self.value())
 No newline at end of file
            self.param_changed.emit(self.param_name, self.value())
 No newline at end of file
+105 −0
Original line number Diff line number Diff line
from typing import List
from qtpy.QtGui import QFont

from . import shared_widget as SW
from .misc import FontFormat
from .textitem import TextBlkItem

global_default_set_kwargs = dict(set_selected=False, restore_cursor=False)
local_default_set_kwargs = dict(set_selected=True, restore_cursor=True)

def font_formating(push_undostack: bool = False):

    """
    let's hope it will make it easier to implement redo/undo behavior for these formatting op
    """

    def func_wrapper(formatting_func):

        def wrapper(param_name: str, value: str, act_ffmt: FontFormat, is_global: bool, blkitems: TextBlkItem = None, *args, **kwargs):
            act_ffmt[param_name] = value
            if is_global:
                blkitems = SW.canvas.selected_text_items()
            else:
                blkitems = blkitems if isinstance(blkitems, List) else [blkitems]
            if len(blkitems) > 0:
                formatting_func(param_name, value, act_ffmt, is_global, blkitems, *args, **kwargs)
        return wrapper
    
    return func_wrapper

@font_formating()
def ffmt_change_family(param_name: str, value: str, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setFontFamily(value, **set_kwargs)

@font_formating()
def ffmt_change_italic(param_name: str, value: str, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setFontItalic(value, **set_kwargs)

@font_formating()
def ffmt_change_underline(param_name: str, value: str, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setFontUnderline(value, **set_kwargs)

@font_formating()
def ffmt_change_weight(param_name: str, value: str, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setFontWeight(value, **set_kwargs)

def ffmt_change_bold(param_name: str, value: bool, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem] = None, **kwargs):
    weight = QFont.Bold if value else QFont.Normal
    ffmt_change_weight('weight', weight, act_ffmt, is_global, blkitems, **kwargs)

@font_formating()
def ffmt_change_letter_spacing(param_name: str, value: str, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setLetterSpacing(value, **set_kwargs)

@font_formating()
def ffmt_change_line_spacing(param_name: str, value: str, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setLineSpacing(value, **set_kwargs)

@font_formating()
def ffmt_change_vertical(param_name: str, value: bool, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    # set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setVertical(value)

@font_formating()
def ffmt_change_frgb(param_name: str, value: tuple, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setFontColor(value, **set_kwargs)

@font_formating()
def ffmt_change_srgb(param_name: str, value: tuple, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setStrokeColor(value, **set_kwargs)

@font_formating()
def ffmt_change_stroke_width(param_name: str, value: float, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setStrokeWidth(value, **set_kwargs)

@font_formating()
def ffmt_change_size(param_name: str, value: float, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    set_kwargs = global_default_set_kwargs if is_global else local_default_set_kwargs
    for blkitem in blkitems:
        blkitem.setFontSize(value, **set_kwargs)

@font_formating()
def ffmt_change_alignment(param_name: str, value: float, act_ffmt: FontFormat, is_global: bool, blkitems: List[TextBlkItem], **kwargs):
    restore_cursor = not is_global
    for blkitem in blkitems:
        blkitem.setAlignment(value, restore_cursor=restore_cursor)
 No newline at end of file
+61 −277

File changed.

Preview size limit exceeded, changes collapsed.

ui/funcmaps.py

0 → 100644
+7 −0
Original line number Diff line number Diff line
from utils.io_utils import build_funcmap
from .misc import FontFormat


handle_ffmt_change = build_funcmap('ui.fontformat_commands', 
                                     list(FontFormat.params().keys()), 
                                     'ffmt_change_', verbose=False)
 No newline at end of file
+7 −5
Original line number Diff line number Diff line
@@ -17,9 +17,9 @@ from .canvas import Canvas
from .configpanel import ConfigPanel
from .module_manager import ModuleManager
from .pagesources import SourceDownload
from .textedit_area import TextPanel, SourceTextEdit, SelectTextMiniMenu
from .textedit_area import SourceTextEdit, SelectTextMiniMenu
from .drawingpanel import DrawingPanel
from .scenetext_manager import SceneTextManager
from .scenetext_manager import SceneTextManager, TextPanel
from .mainwindowbars import TitleBar, LeftBar, BottomBar
from .io_thread import ImgSaveThread, ImportDocThread, ExportDocThread
from .stylewidgets import FrameLessMessageBox, ImgtransProgressMessageBox, SourceDownloadProgressMessageBox
@@ -32,6 +32,8 @@ from .framelesswindow import FramelessWindow
from .drawing_commands import RunBlkTransCommand
from .keywordsubwidget import KeywordSubWidget

from . import shared_widget as SW

class PageListView(QListWidget):    
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)
@@ -145,8 +147,8 @@ class MainWindow(FramelessWindow):
        mainHLayout.setContentsMargins(0, 0, 0, 0)
        mainHLayout.setSpacing(0)

        # set up comic canvas
        self.canvas = Canvas()
        # set up canvas
        SW.canvas = self.canvas = Canvas()
        self.canvas.imgtrans_proj = self.imgtrans_proj
        self.canvas.gv.hide_canvas.connect(self.onHideCanvas)
        self.canvas.proj_savestate_changed.connect(self.on_savestate_changed)
@@ -180,7 +182,7 @@ class MainWindow(FramelessWindow):
        self.mtSubWidget.setWindowFlags(Qt.WindowType.Window)
        self.mtSubWidget.hide()

        self.st_manager = SceneTextManager(self.app, self, self.canvas, self.textPanel)
        SW.st_manager = self.st_manager = SceneTextManager(self.app, self, self.canvas, self.textPanel)
        self.st_manager.new_textblk.connect(self.canvas.search_widget.on_new_textblk)
        self.canvas.search_widget.pairwidget_list = self.st_manager.pairwidget_list
        self.canvas.search_widget.textblk_item_list = self.st_manager.textblk_item_list
Loading