MCPcopy Create free account
hub / github.com/SLiCAP/SLiCAP_python / closeEvent

Method closeEvent

SLiCAP/schematic/window.py:925–979  ·  view source on GitHub ↗
(self, event)

Source from the content-addressed store, hash-verified

923 # ── close / quit ─────────────────────────────────────────────────────────
924
925 def closeEvent(self, event):
926 if not self._dirty:
927 event.accept()
928 return
929
930 dlg = QDialog(self)
931 dlg.setWindowTitle("Unsaved changes")
932 layout = QVBoxLayout(dlg)
933
934 layout.addWidget(QLabel("Save changes to:"))
935 fname = str(self._current_path) if self._current_path else ""
936 name_edit = QLineEdit(fname)
937 name_edit.setMinimumWidth(360)
938 name_edit.setPlaceholderText("(choose a filename)")
939 layout.addWidget(name_edit)
940
941 btn_row = QHBoxLayout()
942 btn_row.addStretch(1)
943 discard_btn = QPushButton("Close without saving")
944 cancel_btn = QPushButton("Cancel")
945 ok_btn = QPushButton("OK")
946 ok_btn.setDefault(True)
947 btn_row.addWidget(discard_btn)
948 btn_row.addStretch(1)
949 btn_row.addWidget(cancel_btn)
950 btn_row.addWidget(ok_btn)
951 layout.addLayout(btn_row)
952
953 _action = {"v": None} # "discard", "save", or None (cancel)
954 discard_btn.clicked.connect(lambda: (_action.update({"v": "discard"}), dlg.accept()))
955 cancel_btn.clicked.connect(dlg.reject)
956 ok_btn.clicked.connect(lambda: (_action.update({"v": "save"}), dlg.accept()))
957
958 if not dlg.exec(): # Cancel or window-close → stay in app
959 event.ignore()
960 return
961
962 if _action["v"] == "discard":
963 event.accept()
964 return
965
966 # "save" — save to the given path (or open Save As if blank)
967 typed = name_edit.text().strip()
968 if typed:
969 p = Path(typed)
970 if p.suffix.lower() != ".slicap_sch":
971 p = p.with_suffix(".slicap_sch")
972 self._save_to(p)
973 else:
974 self._on_save_as()
975
976 if self._dirty:
977 event.ignore() # save was cancelled or failed
978 else:
979 event.accept()

Callers

nothing calls this directly

Calls 3

_save_toMethod · 0.95
_on_save_asMethod · 0.95
textMethod · 0.80

Tested by

no test coverage detected