| 20 | |
| 21 | |
| 22 | class MainWindow(QMainWindow): |
| 23 | def __init__(self, config: str = "full", file: str | None = None): |
| 24 | super().__init__() |
| 25 | self._config = config |
| 26 | self.setWindowTitle("SLiCAP Schematic Capture") |
| 27 | self.resize(1200, 800) |
| 28 | |
| 29 | self._scene = SchematicScene() |
| 30 | self._build_library() # system symbols only at startup |
| 31 | self._view = SchematicView(self._scene) |
| 32 | self._current_path: Path | None = None |
| 33 | self._doc_props = DocumentProperties.new() |
| 34 | self._symbol_loop_name: str | None = None |
| 35 | self._dirty: bool = False |
| 36 | self._scene.data_changed.connect(lambda: setattr(self, '_dirty', True)) |
| 37 | |
| 38 | self.setCentralWidget(self._view) |
| 39 | |
| 40 | self._build_menu() |
| 41 | |
| 42 | if file is not None: |
| 43 | self._load_file(Path(file)) |
| 44 | |
| 45 | # ── menu ───────────────────────────────────────────────────────────────── |
| 46 | |
| 47 | def _build_menu(self): |
| 48 | bar = self.menuBar() |
| 49 | file_menu = bar.addMenu("&File") |
| 50 | |
| 51 | act_new = QAction("&New", self) |
| 52 | act_new.setShortcut(QKeySequence.New) |
| 53 | act_new.triggered.connect(self._on_new) |
| 54 | file_menu.addAction(act_new) |
| 55 | |
| 56 | act_open = QAction("&Open…", self) |
| 57 | act_open.setShortcut(QKeySequence.Open) |
| 58 | act_open.triggered.connect(self._on_open) |
| 59 | file_menu.addAction(act_open) |
| 60 | |
| 61 | act_save = QAction("&Save", self) |
| 62 | act_save.setShortcut(QKeySequence.Save) |
| 63 | act_save.triggered.connect(self._on_save) |
| 64 | file_menu.addAction(act_save) |
| 65 | |
| 66 | act_saveas = QAction("Save &As…", self) |
| 67 | act_saveas.setShortcut(QKeySequence.SaveAs) |
| 68 | act_saveas.triggered.connect(self._on_save_as) |
| 69 | file_menu.addAction(act_saveas) |
| 70 | |
| 71 | file_menu.addSeparator() |
| 72 | |
| 73 | act_docprops = QAction("Document &Properties…", self) |
| 74 | act_docprops.triggered.connect(self._on_doc_properties) |
| 75 | file_menu.addAction(act_docprops) |
| 76 | |
| 77 | file_menu.addSeparator() |
| 78 | |
| 79 | act_export = QAction("&Export Netlist…", self) |
no outgoing calls
no test coverage detected