import sys from typing import Dict, List from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout from graph.DataType import Arrow, Point from graph.directed_acyclic_graph.DAGPresent import DAGActiveView, Direction from parse.StoryMap import StoryMap, XAST_ParseTool from parse.ast_load import global_ast_path class FragmentPoint(Point): def __init__(self, name: str, start_mark: bool): Point.__init__(self, name, start_mark) pass class ContentWindow(QWidget): def __init__(self, parent): QWidget.__init__(self, parent) layout = QVBoxLayout(self) self.fragment_view = DAGActiveView(Direction.RankLR, self) layout.addWidget(self.fragment_view) pass pass def present_stories_graph(self, graph: Dict[str, StoryMap]) -> None: arrows: List[Arrow] = [] for story_name in graph: fragments = graph[story_name].slice_list for fragi in range(1, len(fragments)): start_frag = fragments[fragi - 1] start_node_label = f"{start_frag.parent_story}&{start_frag.is_define_node[1]}" if not start_frag.is_define_node[0]: start_node_label = f"{start_frag.story_refer}&{start_frag.fragm_refer}" if fragi == 1: start_node_label = story_name end_frag = fragments[fragi] end_node_label = f"{end_frag.parent_story}&{end_frag.is_define_node[1]}" if not end_frag.is_define_node[0]: end_node_label = f"{end_frag.story_refer}&{end_frag.fragm_refer}" arrows.append(Arrow( FragmentPoint(start_node_label, fragi == 1), FragmentPoint(end_node_label, False)) ) pass pass self.fragment_view.update_with_edges(arrows) pass if __name__ == "__main__": app = QApplication(sys.argv) view = ContentWindow(None) view.show() tool = XAST_ParseTool(global_ast_path) view.present_stories_graph(tool.get_story_graph()) app.exec()