wip
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user