Source code for mdt.gui.maps_visualizer.config_tabs.tab_textual

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QWidget

from mdt.gui.maps_visualizer.actions import NewConfigAction
from mdt.gui.maps_visualizer.base import DataConfigModel
from mdt.gui.maps_visualizer.design.ui_TabTextual import Ui_TabTextual
from mdt.gui.utils import blocked_signals
from mdt.visualization.maps.base import MapPlotConfig

__author__ = 'Robbert Harms'
__date__ = "2016-09-03"
__maintainer__ = "Robbert Harms"
__email__ = "robbert@xkls.nl"


[docs]class TabTextual(QWidget, Ui_TabTextual): def __init__(self, controller, parent=None): super().__init__(parent) self.setupUi(self) self._controller = controller self._controller.model_updated.connect(self.set_new_model) self.textConfigEdit.new_config.connect(self._config_from_string) self._update_status_indication(True) self.viewSelectedOptions.clicked.connect(self._toggle_viewed_options) self._flags = {'updating_config_from_string': False, 'toggling_view_selection': False}
[docs] @pyqtSlot(DataConfigModel) def set_new_model(self, model): with blocked_signals(self.textConfigEdit): if not self._flags['updating_config_from_string']: non_default_only = self.viewSelectedOptions.isChecked() self.textConfigEdit.setPlainText(model.get_config().to_yaml(non_default_only=non_default_only)) self._update_status_indication(True)
@pyqtSlot() def _toggle_viewed_options(self): self._flags['toggling_view_selection'] = True non_default_only = self.viewSelectedOptions.isChecked() current_model = self._controller.get_model() self.textConfigEdit.setPlainText(current_model.get_config().to_yaml(non_default_only=non_default_only)) self._update_status_indication(True) @pyqtSlot(str) def _config_from_string(self, text): if self._flags['toggling_view_selection']: self._flags['toggling_view_selection'] = False return self._flags['updating_config_from_string'] = True text = text.replace('\t', ' '*4) try: if text.strip() != '': current_model = self._controller.get_model() new_config = MapPlotConfig.from_yaml(text) new_config.validate(current_model.get_data()) self._controller.apply_action(NewConfigAction(new_config)) self._update_status_indication(True) except Exception as exc: self._update_status_indication(False, str(exc)) pass finally: self._flags['updating_config_from_string'] = False def _update_status_indication(self, is_valid, status_message=''): border_color = 'red' if is_valid: border_color = 'green' self.textConfigEdit.setStyleSheet('border: 1px solid {}'.format(border_color)) self.correctness_label.setText(status_message)