GUI: Add command line parameters (URL, ZeroMQ sample camera and default image)
Build and Publish / build (push) Failing after 22s
Build and Publish / build (push) Failing after 22s
This commit is contained in:
1 parent
001a2d5b71
commit
7fa68225f6
3 files changed
+79
-17
No files matched your search
+56
-2
@@ -1,18 +1,72 @@
|
||||
import sys
|
||||
|
||||
from PySide6.QtCore import QCommandLineParser, QCommandLineOption
|
||||
from PySide6.QtWidgets import QApplication, QDialog
|
||||
|
||||
from aaregui.main_window import MainWindow
|
||||
from aaregui.widgets.login import LoginDialog
|
||||
from aaredaqlib.beamline import MXBeamline, mx_beamline
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
|
||||
base_url = "http://0.0.0.0:5210"
|
||||
app.setApplicationName("AareGUI")
|
||||
app.setApplicationVersion("0.1.0")
|
||||
app.setOrganizationName("PSI")
|
||||
app.setOrganizationDomain("psi.ch")
|
||||
|
||||
# Create the parser
|
||||
parser = QCommandLineParser()
|
||||
parser.setApplicationDescription("PSI AareGUI")
|
||||
parser.addHelpOption() # Adds --help option
|
||||
parser.addVersionOption() # Adds --version option
|
||||
|
||||
match mx_beamline():
|
||||
case MXBeamline.X06DA:
|
||||
default_url = "http://x06da-queue-01.psi.ch:5210"
|
||||
zmq_addr = "tcp://129.129.110.12:9089"
|
||||
case MXBeamline.X10SA:
|
||||
default_url = "http://x10aa-queue-01.psi.ch:5210"
|
||||
zmq_addr = None
|
||||
case MXBeamline.X06SA:
|
||||
default_url = "http://x06sa-queue-01.psi.ch:5210"
|
||||
zmq_addr = None
|
||||
case _:
|
||||
default_url = "http://localhost:5210"
|
||||
zmq_addr = None
|
||||
|
||||
# Add custom options as needed
|
||||
urlOption = QCommandLineOption(["u", "aaredaq-url"],
|
||||
"Base AareDAQ URL",
|
||||
"url", default_url)
|
||||
parser.addOption(urlOption)
|
||||
|
||||
defaultImage = QCommandLineOption(["i", "image"],
|
||||
"Default image to display in absence of the ZMQ stream",
|
||||
"image")
|
||||
parser.addOption(defaultImage)
|
||||
|
||||
cameraZeroMQ = QCommandLineOption(["s", "sample-camera-zmq"],
|
||||
"Sample camera ZeroMQ URL",
|
||||
"sample-camera-zmq")
|
||||
parser.addOption(cameraZeroMQ)
|
||||
|
||||
parser.process(app)
|
||||
|
||||
base_url = parser.value(urlOption)
|
||||
|
||||
if parser.isSet(defaultImage):
|
||||
default_image = parser.value(defaultImage)
|
||||
else:
|
||||
default_image = None
|
||||
|
||||
dialog = LoginDialog(base_url=base_url)
|
||||
|
||||
if dialog.exec() == QDialog.DialogCode.Accepted and dialog.token:
|
||||
win = MainWindow(base_url=base_url, token=dialog.token)
|
||||
win = MainWindow(base_url=base_url,
|
||||
token=dialog.token,
|
||||
default_image=default_image,
|
||||
zmq_addr=zmq_addr)
|
||||
win.show()
|
||||
sys.exit(app.exec())
|
||||
else:
|
||||
|
||||
@@ -29,7 +29,9 @@ from aaregui.widgets.status_bar import StatusBar
|
||||
class MainWindow(QMainWindow):
|
||||
sample_geometry = Signal(SampleGeometryModel)
|
||||
|
||||
def __init__(self, base_url: str, token: str):
|
||||
def __init__(self, base_url: str, token: str,
|
||||
default_image: str | None,
|
||||
zmq_addr: str | None):
|
||||
super().__init__()
|
||||
self.__base_url = base_url
|
||||
self.__token = token
|
||||
@@ -58,7 +60,7 @@ class MainWindow(QMainWindow):
|
||||
top_widget_layout.addWidget(self.data_collection)
|
||||
|
||||
self.camera_image = SampleCameraImageLabel(
|
||||
geom=geom, rasters=rasters, parent=top_widget
|
||||
geom=geom, rasters=rasters, parent=top_widget, default_image=default_image
|
||||
)
|
||||
|
||||
top_widget_layout.addWidget(self.camera_image)
|
||||
@@ -94,7 +96,7 @@ class MainWindow(QMainWindow):
|
||||
|
||||
self.setCentralWidget(splitter)
|
||||
|
||||
self.setWindowTitle("Aare macromolecular crystallography GUI")
|
||||
self.setWindowTitle("AareGUI")
|
||||
self.create_menu_bar()
|
||||
|
||||
self.status_bar = StatusBar(self.__decoded_token, parent=self)
|
||||
@@ -129,9 +131,13 @@ class MainWindow(QMainWindow):
|
||||
self.beamline.beam_center.beam_center_clear.connect(self.daq.beam_center_clear)
|
||||
self.camera_image.update_beam_center.connect(self.daq.beam_center_mark)
|
||||
|
||||
self.camera_thread = SampleCameraThread(zmq_url="tcp://129.129.110.12:9089")
|
||||
self.camera_thread.camera_image.connect(self.camera_image.update_pixmap)
|
||||
self.camera_thread.start()
|
||||
if zmq_addr is not None:
|
||||
self.camera_thread = SampleCameraThread(zmq_url=zmq_addr)
|
||||
self.camera_thread.camera_image.connect(self.camera_image.update_pixmap)
|
||||
self.camera_thread.start()
|
||||
else:
|
||||
self.camera_thread = None
|
||||
|
||||
QApplication.instance().aboutToQuit.connect(self.cleanup)
|
||||
|
||||
#
|
||||
@@ -198,4 +204,5 @@ class MainWindow(QMainWindow):
|
||||
self.status_bar.showMessage(f'<span style="color: red; "> {msg} </span>', 10000)
|
||||
|
||||
def cleanup(self):
|
||||
self.camera_thread.stop()
|
||||
if self.camera_thread is not None:
|
||||
self.camera_thread.stop()
|
||||
@@ -38,10 +38,11 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
update_beam_center = Signal(float, float)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
geom: SampleGeometryModel,
|
||||
rasters: List[RasterGridRequest],
|
||||
parent=None,
|
||||
self,
|
||||
geom: SampleGeometryModel,
|
||||
rasters: List[RasterGridRequest],
|
||||
default_image: str | None,
|
||||
parent=None,
|
||||
):
|
||||
super().__init__(parent)
|
||||
|
||||
@@ -50,7 +51,6 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
else:
|
||||
self.__raster = rasters
|
||||
|
||||
self.__pixmap = QPixmap("/home/leonarski_f/loop200.jpg")
|
||||
self.__geom = geom
|
||||
self.__bookmarks: SmargonBookmarkList = SmargonBookmarkList()
|
||||
self.__autoscale = True
|
||||
@@ -73,9 +73,10 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
|
||||
self.setMouseTracking(True)
|
||||
|
||||
pixmap = QPixmap("/home/leonarski_f/loop200.jpg")
|
||||
self.pixmap_item = QGraphicsPixmapItem(pixmap)
|
||||
self.scene.addItem(self.pixmap_item)
|
||||
if default_image is not None:
|
||||
pixmap = QPixmap("/home/leonarski_f/loop200.jpg")
|
||||
self.pixmap_item = QGraphicsPixmapItem(pixmap)
|
||||
self.scene.addItem(self.pixmap_item)
|
||||
|
||||
self.setFrameShape(QFrame.Shape.NoFrame)
|
||||
self.setRenderHints(QPainter.RenderHint.Antialiasing)
|
||||
|
||||
Reference in new issue
Block a user