Source code for madgui.online.dialogs

"""
Dialog for selecting ACS parameters to be synchronized.
"""

__all__ = [
    'SyncParamItem',
    'SyncParamWidget',
    'ImportParamWidget',
    'ExportParamWidget',
]

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QLabel, QWidget

from madgui.util.unit import change_unit, get_raw_label
from madgui.util.layout import VBoxLayout
from madgui.util.qt import bold
from madgui.widget.tableview import TableView, TableItem
from madgui.widget.params import export_params


[docs]class SyncParamItem: def __init__(self, param, acs_value, mad_value): self.param = param self.name = param.name self.unit = get_raw_label(param.ui_unit) self.acs_value = change_unit(acs_value, param.unit, param.ui_unit) self.mad_value = change_unit(mad_value, param.unit, param.ui_unit)
[docs]class SyncParamWidget(QWidget): """ Dialog for selecting ACS parameters to be synchronized. """ # TODO: use CheckedStringValue to let user select which items to # import/export.
[docs] def get_row(self, i, p) -> ("Param", "ACS value", "MAD-X value", "Unit"): style = [{}, { 'font': bold(), 'backgroundColor': QColor(Qt.gray), } if p.acs_value != p.mad_value else {}] return [ TableItem(p.name), TableItem(p.acs_value, **style['acs' in self.highlight]), TableItem(p.mad_value, **style['mad' in self.highlight]), TableItem(p.unit), ]
def __init__(self, title, headline, highlight=''): """Create sizer with content area, i.e. input fields.""" super().__init__() self.grid = TableView() self.grid.set_viewmodel(self.get_row) self.highlight = highlight self.title = title label = QLabel(headline) self.setLayout(VBoxLayout([label, self.grid])) @property def data(self): return list(self.grid.rows) @data.setter def data(self, data): self.grid.rows = data @property def exporter(self): return self
[docs] def exportTo(self, filename): export_params(filename, self.data, data_key='globals')
exportFilters = [ ("YAML file", "*.yml", "*.yaml"), ("STR file", "*.str"), ]
[docs]def ImportParamWidget(): return SyncParamWidget( 'Import parameters from ACS', 'Import selected ACS parameters.', 'acs')
[docs]def ExportParamWidget(): return SyncParamWidget( 'Set values in ACS from current sequence', 'Overwrite selected ACS parameters.', 'mad')