StoryCheckTools/frame/ReferView.py

83 lines
2.3 KiB
Python

from PyQt5.QtWidgets import QTextEdit, QWidget, QSplitter, QVBoxLayout, QApplication
from PyQt5.Qt import Qt
from abc import abstractmethod
from typing import List, Protocol
import sys
class MemoryNode:
@abstractmethod
def get_from_memory(self) -> str:
raise NotImplementedError("get_from_memory")
@abstractmethod
def set_to_memory(self, content: str):
raise NotImplementedError("set_to_memmory")
class MemorySkin:
@abstractmethod
def load_from_mem(self) -> None:
raise NotImplementedError("load_from_mem")
@abstractmethod
def save_to_mem(self):
raise NotImplementedError("save_to_mem")
class RelateReferView(QWidget, MemorySkin):
def __init__(self, prev_frefs: MemoryNode, curr_frefs: MemoryNode, parent):
"""
构建引用关系视图
:param prev_frefs: 上游节点
:param curr_frefs: 当前引用节点
"""
QWidget.__init__(self, parent)
self.prev_fragment = prev_frefs
self.curr_fragment = curr_frefs
layout = QVBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
splitter_container = QSplitter(Qt.Orientation.Vertical, self)
layout.addWidget(splitter_container)
self.immut_view: QTextEdit = QTextEdit(self)
self.immut_view.setReadOnly(True)
self.mut_refers: QTextEdit = QTextEdit(self)
splitter_container.addWidget(self.immut_view)
splitter_container.addWidget(self.mut_refers)
pass
def load_from_mem(self):
"""
载入内存内容到视图
"""
self.immut_view.setText(self.prev_fragment.get_from_memory())
self.mut_refers.setText(self.curr_fragment.get_from_memory())
pass
def save_to_mem(self):
"""
保存视图内容到内存
"""
self.prev_fragment.set_to_memory(self.immut_view.toPlainText())
self.curr_fragment.set_to_memory(self.mut_refers.toPlainText())
pass
class EmptyNode(MemoryNode):
def get_from_memory(self) -> str:
return "站位视图内容"
def set_to_memory(self, content: str):
pass
if __name__ == "__main__":
app = QApplication(sys.argv)
view = RelateReferView(EmptyNode(), EmptyNode(), None)
view.show()
app.exec()