diff --git a/sohstationviewer/view/db_config/value_color_helper/edit_value_color_dialog/tri_color_lines_dialog.py b/sohstationviewer/view/db_config/value_color_helper/edit_value_color_dialog/tri_color_lines_dialog.py new file mode 100644 index 0000000000000000000000000000000000000000..f84a7db4cd056944d8bebe37dbe0fc8dfaebf8d8 --- /dev/null +++ b/sohstationviewer/view/db_config/value_color_helper/edit_value_color_dialog/tri_color_lines_dialog.py @@ -0,0 +1,109 @@ +import sys +import platform +import os + +from PySide2 import QtWidgets +from PySide2.QtWidgets import QWidget + +from sohstationviewer.view.db_config.value_color_helper.\ + edit_value_color_dialog.edit_value_color_dialog_super_class import \ + EditValueColorDialog, display_color + + +class TriColorLinesDialog(EditValueColorDialog): + def __init__(self, parent: QWidget, value_color_str: str): + """ + Dialog to edit color for Up/Down Plot + + :param parent: the parent widget + :param value_color_str: string for value color to be saved in DB + """ + # Widget that allow user to add/edit value positive one's color + self.select_pos_one_color_btn = QtWidgets.QPushButton("Select Color") + # Widget to display positive one's color + self.pos_one_color_label = QtWidgets.QLabel() + self.pos_one_color_label.setFixedWidth(30) + self.pos_one_color_label.setAutoFillBackground(True) + + # Widget that allow user to add/edit value zero's color + self.select_zero_color_btn = QtWidgets.QPushButton("Select Color") + # Widget to display down's color + self.zero_color_label = QtWidgets.QLabel() + self.zero_color_label.setFixedWidth(30) + self.zero_color_label.setAutoFillBackground(True) + + # Widget that allow user to add/edit value positive one's color + self.select_neg_one_color_btn = QtWidgets.QPushButton("Select Color") + # Widget to display positive one's color + self.neg_one_color_label = QtWidgets.QLabel() + self.neg_one_color_label.setFixedWidth(30) + self.neg_one_color_label.setAutoFillBackground(True) + + super(TriColorLinesDialog, self).__init__(parent, value_color_str) + self.setWindowTitle("Edit TriColor Plotting's Colors") + + def setup_ui(self) -> None: + self.main_layout.addWidget(QtWidgets.QLabel('" 1" Color'), 0, 0, 1, 1) + self.main_layout.addWidget(self.pos_one_color_label, 0, 1, 1, 1) + self.main_layout.addWidget(self.select_pos_one_color_btn, 0, 2, 1, 1) + + self.main_layout.addWidget(QtWidgets.QLabel('" 0" Color'), 1, 0, 1, 1) + self.main_layout.addWidget(self.zero_color_label, 1, 1, 1, 1) + self.main_layout.addWidget(self.select_zero_color_btn, 1, 2, 1, 1) + + self.main_layout.addWidget(QtWidgets.QLabel('"-1" Color'), 2, 0, 1, 1) + self.main_layout.addWidget(self.neg_one_color_label, 2, 1, 1, 1) + self.main_layout.addWidget(self.select_neg_one_color_btn, 2, 2, 1, 1) + + self.setup_complete_buttons(3) + + def connect_signals(self) -> None: + self.select_pos_one_color_btn.clicked.connect( + lambda: self.on_select_color(self.pos_one_color_label)) + self.select_zero_color_btn.clicked.connect( + lambda: self.on_select_color(self.zero_color_label)) + self.select_neg_one_color_btn.clicked.connect( + lambda: self.on_select_color(self.neg_one_color_label)) + super().connect_signals() + + def set_value(self): + """ + Change the corresponding color_labels's color according to the color + from value_color_str. + """ + if self.value_color_str == "": + return + vc_parts = self.value_color_str.split('|') + for vc_str in vc_parts: + val, color = vc_str.split(':') + if val == '1': + display_color(self.pos_one_color_label, color) + if val == '0': + display_color(self.zero_color_label, color) + if val == '-1': + display_color(self.neg_one_color_label, color) + + def on_save_color(self): + """ + Create value_color_str from GUI's info and close the GUI with color + is the hex color got from color_labels' color + """ + pos_one_color = self.pos_one_color_label.palette()\ + .window().color().name() + zero_color = self.zero_color_label.palette().window().color().name() + neg_one_color = self.neg_one_color_label.palette() \ + .window().color().name() + + self.value_color_str = (f"-1:{neg_one_color}|0:{zero_color}" + f"|1:{pos_one_color}") + self.close() + + +if __name__ == '__main__': + os_name, version, *_ = platform.platform().split('-') + if os_name == 'macOS': + os.environ['QT_MAC_WANTS_LAYER'] = '1' + app = QtWidgets.QApplication(sys.argv) + test = TriColorLinesDialog(None, '-1:#FF00FF|0:#FF0000|1:#00FF00') + test.exec_() + sys.exit(app.exec_())