diff --git a/debye_bec/bec_widgets/widgets/scheduler/scheduler.py b/debye_bec/bec_widgets/widgets/scheduler/scheduler.py index bc4d826..f89926f 100644 --- a/debye_bec/bec_widgets/widgets/scheduler/scheduler.py +++ b/debye_bec/bec_widgets/widgets/scheduler/scheduler.py @@ -36,6 +36,7 @@ from qtpy.QtWidgets import ( QGroupBox, QHBoxLayout, QLabel, + QLineEdit, QListWidget, QListWidgetItem, QMessageBox, @@ -249,6 +250,16 @@ class Scheduler(BECWidget, QWidget): schedule_group = QGroupBox("Schedule") schedule_layout = QVBoxLayout(schedule_group) + schedule_name_layout = QHBoxLayout() + name_label = QLabel("Name") + self.schedule_name_input = QLineEdit() + schedule_name_layout.addWidget(name_label) + schedule_name_layout.addWidget(self.schedule_name_input) + schedule_name_layout.addStretch() + schedule_layout.addLayout(schedule_name_layout) + + self.schedule_name_input.editingFinished.connect(self._on_schedule_name_change) + edit_row = QHBoxLayout() self.add_btn = MyButton("Add", "default") self.edit_btn = MyButton("Edit", "default") @@ -270,8 +281,6 @@ class Scheduler(BECWidget, QWidget): edit_row.addStretch() schedule_layout.addLayout(edit_row) - schedule_layout.addWidget(QLabel(f"Schedule: {self.schedule_name}")) - self.list_widget = MyListWidget() self.list_widget.currentRowChanged.connect(self._on_selection_changed) self.list_widget.deletePressed.connect(self._on_delete_clicked) @@ -486,9 +495,12 @@ class Scheduler(BECWidget, QWidget): @SafeSlot() def _refresh_ui(self): with self._lock: + schedule_name = self.schedule.schedule_name items = list(self.schedule.items) notes = self.schedule.notes + self.schedule_name_input.setText(schedule_name) + self.list_widget.blockSignals(True) self.list_widget.clear() selected_row = None @@ -574,6 +586,13 @@ class Scheduler(BECWidget, QWidget): list_item = self.list_widget.item(row) list_item.setIcon(icon) + @SafeSlot() + def _on_schedule_name_change(self): + name = self.schedule_name_input.text() + with self._lock: + self.schedule.schedule_name = name + self._persist_locked() + @SafeSlot() def _on_selection_changed(self, row: int): item = self.list_widget.item(row) if row >= 0 else None @@ -606,7 +625,15 @@ class Scheduler(BECWidget, QWidget): def _on_save_to_file_clicked(self): with self._lock: data = self.schedule.model_dump(mode="json") - default_name = f"{self.schedule_name}.json" + default_name = "schedule.json" + + hostname = self.client._hostname + start = hostname.find("x") + if start != -1: + beamline = hostname[start : start + 5] + active_account = self.client.active_account + default_name = f"/sls/{beamline}/data/{active_account}/raw/{default_name}" + path, _ = QFileDialog.getSaveFileName( self, "Save schedule to file", default_name, "JSON files (*.json);;All files (*)" ) @@ -631,8 +658,16 @@ class Scheduler(BECWidget, QWidget): ) return + start_folder = "" + hostname = self.client._hostname + start = hostname.find("x") + if start != -1: + beamline = hostname[start : start + 5] + active_account = self.client.active_account + start_folder = f"/sls/{beamline}/data/{active_account}/raw" + path, _ = QFileDialog.getOpenFileName( - self, "Load schedule from file", "", "JSON files (*.json);;All files (*)" + self, "Load schedule from file", start_folder, "JSON files (*.json);;All files (*)" ) if not path: return @@ -688,6 +723,7 @@ class Scheduler(BECWidget, QWidget): self, "Cannot load", "The schedule started running while the dialog was open." ) return + self.schedule.schedule_name = loaded.schedule_name self.schedule.items = new_items self.schedule.notes = loaded.notes self.schedule.guard = loaded.guard