Coverage for paintmaskanimator/memo_window.py: 100%
27 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 04:50 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 04:50 +0000
1"""カット袋・シートのメモ欄にあたるポップアップ(Issue #25)。
3カットごとの申し送りを書き留めておくための小さな窓。書いた内容はプロジェクト
4(.pman)に入れて持ち歩き、カットフォルダーへ書き出すときはタイムシートの隣へ
5``_memo.txt`` として出す。
7窓はモードレスなので、開いたまま描き続けられる。
8"""
9from PySide6.QtCore import Qt, Signal
10from PySide6.QtWidgets import QDialog, QLabel, QPlainTextEdit, QVBoxLayout
12from .i18n import tr
14#: 書き出すメモのファイル名。
15MEMO_FILE_NAME = "_memo.txt"
18class MemoWindow(QDialog):
19 """メモを書く窓。打つたびに ``textChanged`` で中身を知らせる。"""
21 textChanged = Signal(str)
23 def __init__(self, parent=None):
24 super().__init__(parent)
25 self.setWindowTitle(tr("メモ"))
26 self.setWindowFlag(Qt.WindowType.Tool, True)
27 # モードレス。描きながら書き足せるようにする。
28 self.setModal(False)
29 self.resize(360, 280)
31 layout = QVBoxLayout(self)
32 note = QLabel(
33 tr("カット袋やシートのメモ欄として使えます。"
34 "プロジェクトに保存され、カットフォルダー書き出しでは"
35 "タイムシートの隣へ {name} として出ます。").format(
36 name=MEMO_FILE_NAME
37 )
38 )
39 note.setWordWrap(True)
40 layout.addWidget(note)
42 self.editor = QPlainTextEdit()
43 self.editor.setPlaceholderText(tr("例:3コマ目のタイミング要確認"))
44 self.editor.textChanged.connect(
45 lambda: self.textChanged.emit(self.text())
46 )
47 layout.addWidget(self.editor, 1)
49 def text(self):
50 return self.editor.toPlainText()
52 def set_text(self, value):
53 """中身を差し替える。読み込み時の復元で ``textChanged`` を出さない。"""
54 blocked = self.editor.blockSignals(True)
55 try:
56 self.editor.setPlainText(str(value or ""))
57 finally:
58 self.editor.blockSignals(blocked)