nmreval/src/gui_qt/lib/configurations.py

157 lines
5.7 KiB
Python
Raw Normal View History

2022-03-08 09:27:40 +00:00
import os
2022-10-20 15:23:15 +00:00
from nmreval.configs import *
from nmreval.io.graceeditor import GraceEditor
2022-03-08 09:27:40 +00:00
from ..Qt import QtWidgets, QtGui
from .._py.agroptiondialog import Ui_Dialog
class QGraceSettings(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, parent=None):
super().__init__(parent=parent)
self.setupUi(self)
self._default_path = config_paths().joinpath('Default.agr')
self._default = GraceEditor(self._default_path)
self.setup_ui()
def setup_ui(self):
page = self._default.size
self.widthDoubleSpinBox.setValue(page[0])
self.heightDoubleSpinBox.setValue(page[1])
view = self._default.get_property(0, 'view')
self.leftMarginDoubleSpinBox.setValue(self._default.convert(view[0], direction='abs'))
self.bottomMarginDoubleSpinBox.setValue(self._default.convert(view[1], direction='abs'))
self.rightMarginDoubleSpinBox.setValue(page[0]-self._default.convert(view[2], direction='abs'))
self.topMarginDoubleSpinBox.setValue(page[1]-self._default.convert(view[3], direction='abs'))
class GraceMsgBox(QtWidgets.QDialog):
def __init__(self, fname, parent=None):
super(GraceMsgBox, self).__init__(parent=parent)
agr = GraceEditor()
agr.parse(fname)
layout = QtWidgets.QGridLayout()
layout.setContentsMargins(13, 13, 13, 13)
self.setLayout(layout)
label = QtWidgets.QLabel('%s already exists. Select one of the options or cancel:' % os.path.split(fname)[1])
layout.addWidget(label, 1, 1, 1, 2)
self.button_grp = QtWidgets.QButtonGroup(self)
self.overwrite_radiobutton = QtWidgets.QRadioButton('Overwrite file', parent=self)
self.overwrite_radiobutton.setChecked(True)
self.button_grp.addButton(self.overwrite_radiobutton, id=0)
layout.addWidget(self.overwrite_radiobutton, 2, 1, 1, 2)
self.new_graph_button = QtWidgets.QRadioButton('Create new graph', parent=self)
self.button_grp.addButton(self.new_graph_button, id=1)
layout.addWidget(self.new_graph_button, 3, 1, 1, 2)
self.addgraph_button = QtWidgets.QRadioButton('Add sets to graph', parent=self)
self.button_grp.addButton(self.addgraph_button, id=3)
layout.addWidget(self.addgraph_button, 4, 1, 1, 1)
self.graph_combobox = QtWidgets.QComboBox(self)
self.graph_combobox.addItems(['G' + str(g.idx) for g in agr.graphs])
layout.addWidget(self.graph_combobox, 4, 2, 1, 1)
self.buttonbox = QtWidgets.QDialogButtonBox(self)
self.buttonbox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok)
layout.addWidget(self.buttonbox, 5, 1, 1, 2)
self.buttonbox.rejected.connect(self.reject)
self.buttonbox.accepted.connect(self.accept)
def accept(self) -> None:
super().accept()
self.setResult(self.button_grp.checkedId())
if self.button_grp.checkedId() == 3:
self.setResult(int(self.graph_combobox.currentText()[1:]) + 2)
def reject(self) -> None:
super().reject()
self.setResult(-1)
class GeneralConfiguration(QtWidgets.QDialog):
def __init__(self, parent=None):
super().__init__(parent=parent)
layout = QtWidgets.QVBoxLayout()
layout.setContentsMargins(3, 3, 3, 3)
intro = QtWidgets.QLabel('Changes become active after restart.')
layout.addWidget(intro)
parser = read_configuration()
for sec in parser.sections():
group = QtWidgets.QGroupBox(sec, self)
layout2 = QtWidgets.QGridLayout()
layout2.setContentsMargins(3, 3, 3, 3)
row = 0
for key, value in parser.items(sec):
label = QtWidgets.QLabel(key.capitalize(), self)
layout2.addWidget(label, row, 0)
if (sec, key) in allowed_values:
edit = QtWidgets.QComboBox(self)
edit.addItems(allowed_values[(sec, key)])
edit.setCurrentIndex(edit.findText(value))
else:
edit = QtWidgets.QLineEdit(self)
edit.setText(value)
try:
_ = float(value)
edit.setValidator(QtGui.QDoubleValidator())
except ValueError:
pass
layout2.addWidget(edit, row, 1)
row += 1
group.setLayout(layout2)
layout.addWidget(group)
self.buttonbox = QtWidgets.QDialogButtonBox(self)
self.buttonbox.setStandardButtons(self.buttonbox.Ok|self.buttonbox.Cancel)
self.buttonbox.rejected.connect(self.close)
self.buttonbox.accepted.connect(self.accept)
layout.addWidget(self.buttonbox)
self.setLayout(layout)
def accept(self):
options = {}
for section in self.findChildren(QtWidgets.QGroupBox):
args = {}
layout = section.layout()
for row in range(layout.rowCount()):
key = layout.itemAtPosition(row, 0).widget().text()
value_widget = layout.itemAtPosition(row, 1).widget()
if isinstance(value_widget, QtWidgets.QComboBox):
value = value_widget.currentText()
elif isinstance(value_widget, QtWidgets.QLineEdit):
value = value_widget.text()
elif isinstance(value_widget, QtWidgets.QDoubleSpinBox):
value = value_widget.text()
else:
raise TypeError('Config key %s has unknown type %s' % (key, repr(value_widget)))
args[key] = value
options[section.title()] = args
write_configuration(options)
super().accept()