# -*- coding:utf-8 -*-
# Date : 2020/5/4 14:22
# Author : xyun

import os
import yaml

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIntValidator
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QColorDialog, QFileSystemModel


# comment [xyun] 配置文件类，保存之前用户的配置。
class InitConfig:
    # todo  参数检查
    def __init__(self):
        if os.path.exists('bigcar.yaml'):
            # 读取配置文件
            with open('bigcar.yaml', 'rb') as r:
                yaml_config_ = yaml.load(r, Loader=yaml.FullLoader)
                option = yaml_config_.get('option')
                self.interface = option.get('interface')
                self.channel_colours = option.get('channel_colours')
                self.injury = option.get('injury')
                self.deviation = option.get('deviation')
                self.save_option = option.get('save_option')
                self.work_option = option.get('work_option')
                self.model = yaml_config_.get('model')
                self.upload_config = yaml_config_.get('upload_config')
        else:
            self.interface = {'font_size': 18, 'style': 0}
            self.channel_colours = {'预设模板1': ['#000000', '#000000', '#000000', '#000000', '#000000', '#000000']}

            self.injury = {'轨头核伤': {'colours': '#000000', 'thickness': 0, 'type': 0}}
            self.deviation = {'forward': '0', 'backward': '0', 'correction_method': 0}

            self.save_option = {'interval': 0,
                                'path': '',
                                'default': 0}  # default为0：工作路径+auto_save保存。
            self.work_option = {'path': os.path.join(os.path.dirname(os.path.abspath(__file__)), 'work\\'),
                                'backups': 0}

            self.model = ''

            self.upload_config = {'address': '192.168.10.20', 'user': 'administrator', 'password': '1234-zxcv'}

            # 生成配置文件
            self.write()

    def write(self):
        option = {'interface': self.interface, 'channel_colours': self.channel_colours, 'injury': self.injury,
                  'deviation': self.deviation, 'save_option': self.save_option, 'work_option': self.work_option}
        yaml_config_ = {'option': option, 'model': self.model, 'upload_config': self.upload_config}
        with open('bigcar.yaml', 'wb') as w:
            w.write(yaml.dump(yaml_config_, encoding='utf-8', default_flow_style=False))


yaml_config = InitConfig()


# comment [xyun] 用户界面设置
class InterfaceStyle(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        # Form.resize(446, 315)
        self.setMinimumSize(446, 315)
        self.setMaximumSize(446, 315)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(20, 60, 161, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(20, 130, 161, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.comboBox = QtWidgets.QComboBox(Form)
        self.comboBox.setEnabled(True)
        self.comboBox.setGeometry(QtCore.QRect(190, 65, 201, 21))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(190, 133, 201, 21))
        self.lineEdit.setValidator(QIntValidator(0, 99))
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(160, 200, 91, 41))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(300, 200, 91, 41))
        self.pushButton_2.setObjectName("pushButton_2")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "界面风格设置"))
        self.label.setText(_translate("Form", "界面风格设置"))
        self.label_2.setText(_translate("Form", "字体大小"))
        self.comboBox.setItemText(0, _translate("Form", "明亮"))
        self.comboBox.setItemText(1, _translate("Form", "黑暗"))
        self.comboBox.setItemText(2, _translate("Form", "护眼"))
        self.pushButton.setText(_translate("Form", "保存"))
        self.pushButton_2.setText(_translate("Form", "退出"))


class ChannelColor(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        self.setMinimumSize(548, 537)
        self.setMaximumSize(548, 537)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(50, 70, 63, 24))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(50, 110, 63, 24))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(50, 150, 63, 24))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(50, 190, 63, 24))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(Form)
        self.label_5.setGeometry(QtCore.QRect(50, 230, 63, 24))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(Form)
        self.label_6.setGeometry(QtCore.QRect(50, 270, 63, 24))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(160, 70, 201, 25))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(Form)
        self.lineEdit_2.setGeometry(QtCore.QRect(160, 110, 201, 25))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_3 = QtWidgets.QLineEdit(Form)
        self.lineEdit_3.setGeometry(QtCore.QRect(160, 150, 201, 25))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.lineEdit_4 = QtWidgets.QLineEdit(Form)
        self.lineEdit_4.setGeometry(QtCore.QRect(160, 190, 201, 25))
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.lineEdit_5 = QtWidgets.QLineEdit(Form)
        self.lineEdit_5.setGeometry(QtCore.QRect(160, 230, 201, 25))
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.lineEdit_6 = QtWidgets.QLineEdit(Form)
        self.lineEdit_6.setGeometry(QtCore.QRect(160, 270, 201, 25))
        self.lineEdit_6.setObjectName("lineEdit_6")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(400, 70, 81, 30))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(400, 110, 81, 30))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(Form)
        self.pushButton_3.setGeometry(QtCore.QRect(400, 150, 81, 30))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(Form)
        self.pushButton_4.setGeometry(QtCore.QRect(400, 190, 81, 30))
        self.pushButton_4.setObjectName("pushButton_4")
        self.pushButton_5 = QtWidgets.QPushButton(Form)
        self.pushButton_5.setGeometry(QtCore.QRect(400, 230, 81, 30))
        self.pushButton_5.setObjectName("pushButton_5")
        self.pushButton_6 = QtWidgets.QPushButton(Form)
        self.pushButton_6.setGeometry(QtCore.QRect(400, 270, 81, 30))
        self.pushButton_6.setObjectName("pushButton_6")
        self.label_8 = QtWidgets.QLabel(Form)
        self.label_8.setGeometry(QtCore.QRect(50, 350, 91, 24))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")
        self.save_temp = QtWidgets.QPushButton(Form)
        self.save_temp.setGeometry(QtCore.QRect(400, 350, 101, 25))
        self.save_temp.setObjectName("save_temp")
        self.save_button = QtWidgets.QPushButton(Form)
        self.save_button.setGeometry(QtCore.QRect(230, 410, 101, 51))
        self.save_button.setObjectName("save_button")
        self.exit_button = QtWidgets.QPushButton(Form)
        self.exit_button.setGeometry(QtCore.QRect(380, 410, 101, 51))
        self.exit_button.setObjectName("exit_button")
        self.comboBox = QtWidgets.QComboBox(Form)
        self.comboBox.setGeometry(QtCore.QRect(160, 350, 201, 25))
        self.comboBox.setObjectName("comboBox")
        self.temp_name = QtWidgets.QLineEdit(Form)
        self.temp_name.setGeometry(QtCore.QRect(200, 30, 113, 20))
        self.temp_name.setObjectName("temp_name")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "通道颜色设置"))
        self.label.setText(_translate("Form", "通道名"))
        self.label_2.setText(_translate("Form", "通道名"))
        self.label_3.setText(_translate("Form", "通道名"))
        self.label_4.setText(_translate("Form", "通道名"))
        self.label_5.setText(_translate("Form", "通道名"))
        self.label_6.setText(_translate("Form", "通道名"))
        self.lineEdit.setText(_translate("Form", "#000000"))
        self.lineEdit_2.setText(_translate("Form", "#000000"))
        self.lineEdit_3.setText(_translate("Form", "#000000"))
        self.lineEdit_4.setText(_translate("Form", "#000000"))
        self.lineEdit_5.setText(_translate("Form", "#000000"))
        self.lineEdit_6.setText(_translate("Form", "#000000"))
        self.pushButton.setText(_translate("Form", "选取颜色"))
        self.pushButton_2.setText(_translate("Form", "选取颜色"))
        self.pushButton_3.setText(_translate("Form", "选取颜色"))
        self.pushButton_4.setText(_translate("Form", "选取颜色"))
        self.pushButton_5.setText(_translate("Form", "选取颜色"))
        self.pushButton_6.setText(_translate("Form", "选取颜色"))
        self.label_8.setText(_translate("Form", "模板设置"))
        self.save_temp.setText(_translate("Form", "保存为新的模板"))
        self.save_button.setText(_translate("Form", "保存"))
        self.exit_button.setText(_translate("Form", "退出"))
        self.temp_name.setPlaceholderText(_translate("Form", "模板名"))


class InjuryCategory(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        self.setMinimumSize(540, 545)
        self.setMaximumSize(540, 545)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(40, 50, 91, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(90, 110, 91, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(90, 160, 91, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(90, 210, 91, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(260, 280, 221, 41))
        self.pushButton.setObjectName("pushButton")
        self.comboBox = QtWidgets.QComboBox(Form)
        self.comboBox.setGeometry(QtCore.QRect(150, 55, 321, 25))
        self.comboBox.setObjectName("comboBox")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(200, 115, 161, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.getColourButton = QtWidgets.QPushButton(Form)
        self.getColourButton.setGeometry(QtCore.QRect(380, 110, 91, 31))
        self.getColourButton.setObjectName("getColourButton")
        self.comboBox_2 = QtWidgets.QComboBox(Form)
        self.comboBox_2.setGeometry(QtCore.QRect(200, 160, 161, 22))
        self.comboBox_2.setObjectName("comboBox_2")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.comboBox_3 = QtWidgets.QComboBox(Form)
        self.comboBox_3.setGeometry(QtCore.QRect(200, 210, 161, 22))
        self.comboBox_3.setObjectName("comboBox_3")
        self.comboBox_3.addItem("")
        self.comboBox_3.addItem("")
        self.label_6 = QtWidgets.QLabel(Form)
        self.label_6.setGeometry(QtCore.QRect(40, 370, 161, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.lineEdit_2 = QtWidgets.QLineEdit(Form)
        self.lineEdit_2.setGeometry(QtCore.QRect(210, 375, 171, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.newTypeButton = QtWidgets.QPushButton(Form)
        self.newTypeButton.setGeometry(QtCore.QRect(400, 370, 81, 31))
        self.newTypeButton.setObjectName("newTypeButton")
        self.save_button = QtWidgets.QPushButton(Form)
        self.save_button.setGeometry(QtCore.QRect(240, 440, 101, 51))
        self.save_button.setObjectName("save_button")
        self.exit_button = QtWidgets.QPushButton(Form)
        self.exit_button.setGeometry(QtCore.QRect(390, 440, 101, 51))
        self.exit_button.setObjectName("exit_button")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "伤损分类设置"))
        self.label.setText(_translate("Form", "选择伤损"))
        self.label_2.setText(_translate("Form", "边框颜色"))
        self.label_3.setText(_translate("Form", "边框粗细"))
        self.label_4.setText(_translate("Form", "类型"))
        self.pushButton.setText(_translate("Form", "删除本伤损类型(算法预设不可删除)"))
        self.getColourButton.setText(_translate("Form", "选取颜色"))
        self.comboBox_2.setItemText(0, _translate("Form", "1"))
        self.comboBox_2.setItemText(1, _translate("Form", "2"))
        self.comboBox_2.setItemText(2, _translate("Form", "3"))
        self.comboBox_2.setItemText(3, _translate("Form", "4"))
        self.comboBox_2.setItemText(4, _translate("Form", "5"))
        self.comboBox_3.setItemText(0, _translate("Form", "伤损"))
        self.comboBox_3.setItemText(1, _translate("Form", "正常"))
        self.label_6.setText(_translate("Form", "新增自定义伤损"))
        self.lineEdit_2.setPlaceholderText(_translate("Form", "伤损名"))
        self.newTypeButton.setText(_translate("Form", "新增"))
        self.save_button.setText(_translate("Form", "保存"))
        self.exit_button.setText(_translate("Form", "退出"))


class RelativeDviation(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        self.setMinimumSize(474, 414)
        self.setMaximumSize(474, 414)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(100, 60, 51, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(320, 60, 21, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(100, 130, 51, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(320, 130, 21, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        # self.label_5 = QtWidgets.QLabel(Form)
        # self.label_5.setGeometry(QtCore.QRect(50, 200, 91, 31))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        # self.label_5.setFont(font)
        # self.label_5.setObjectName("label_5")
        self.save_button = QtWidgets.QPushButton(Form)
        self.save_button.setGeometry(QtCore.QRect(170, 290, 101, 51))
        self.save_button.setObjectName("save_button")
        self.exit_button = QtWidgets.QPushButton(Form)
        self.exit_button.setGeometry(QtCore.QRect(320, 290, 101, 51))
        self.exit_button.setObjectName("exit_button")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(170, 60, 131, 31))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(Form)
        self.lineEdit_2.setGeometry(QtCore.QRect(170, 130, 131, 31))
        self.lineEdit_2.setObjectName("lineEdit_2")
        # self.comboBox = QtWidgets.QComboBox(Form)
        # self.comboBox.setGeometry(QtCore.QRect(170, 200, 171, 31))
        # self.comboBox.setObjectName("comboBox")
        # self.comboBox.addItem("")
        # self.comboBox.addItem("")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "相对偏差设置"))
        self.label.setText(_translate("Form", "前向"))
        self.label_2.setText(_translate("Form", "米"))
        self.label_3.setText(_translate("Form", "后向"))
        self.label_4.setText(_translate("Form", "米"))
        # self.label_5.setText(_translate("Form", "修正方式"))
        self.save_button.setText(_translate("Form", "保存"))
        self.exit_button.setText(_translate("Form", "退出"))
        # self.comboBox.setItemText(0, _translate("Form", "在B显图中修正"))
        # self.comboBox.setItemText(1, _translate("Form", "导出文件中修正"))


class AutoSave(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        self.setMinimumSize(559, 303)
        self.setMaximumSize(559, 303)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(90, 60, 71, 41))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(390, 60, 91, 41))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(90, 110, 91, 41))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.comboBox = QtWidgets.QComboBox(Form)
        self.comboBox.setGeometry(QtCore.QRect(170, 70, 201, 22))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(90, 160, 391, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.comboBox_2 = QtWidgets.QComboBox(Form)
        self.comboBox_2.setGeometry(QtCore.QRect(190, 120, 181, 22))
        self.comboBox_2.setObjectName("comboBox_2")
        self.comboBox_2.addItem("")
        self.comboBox_2.addItem("")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(240, 210, 91, 41))
        self.pushButton.setObjectName("pushButton_2")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(390, 210, 91, 41))
        self.pushButton_2.setObjectName("pushButton_3")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "自动保存设置"))
        self.label.setText(_translate("Form", "每隔"))
        self.label_2.setText(_translate("Form", "自动保存"))
        self.label_3.setText(_translate("Form", "路径选择"))
        self.comboBox.setItemText(0, _translate("Form", "1分钟"))
        self.comboBox.setItemText(1, _translate("Form", "5分钟"))
        self.comboBox.setItemText(2, _translate("Form", "10分钟"))
        self.comboBox.setItemText(3, _translate("Form", "60分钟"))
        self.comboBox.setItemText(4, _translate("Form", "永不"))
        self.comboBox_2.setItemText(0, _translate("Form", "默认路径"))
        self.comboBox_2.setItemText(1, _translate("Form", "自定义路径"))
        self.pushButton.setText(_translate("Form", "保存"))
        self.pushButton_2.setText(_translate("Form", "退出"))


class WorkDir(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        self.setMinimumSize(594, 310)
        self.setMaximumSize(594, 310)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(30, 60, 141, 41))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(30, 120, 351, 41))
        font = QtGui.QFont()
        font.setFamily("Algerian")
        font.setPointSize(16)
        font.setBold(False)
        font.setWeight(50)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(180, 70, 371, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.comboBox = QtWidgets.QComboBox(Form)
        self.comboBox.setGeometry(QtCore.QRect(420, 130, 131, 22))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(310, 210, 91, 41))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(460, 210, 91, 41))
        self.pushButton_2.setObjectName("pushButton_2")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "工作目录设置"))
        self.label.setText(_translate("Form", "工作路径设置"))
        self.label_2.setText(_translate("Form", "自动在工作路径备份加载的t1k文件"))
        self.comboBox.setItemText(0, _translate("Form", "是"))
        self.comboBox.setItemText(1, _translate("Form", "否"))
        self.pushButton.setText(_translate("Form", "保存"))
        self.pushButton_2.setText(_translate("Form", "退出"))


class JumpPost(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(507, 265)
        self.comboBox = QtWidgets.QComboBox(Form)
        self.comboBox.setGeometry(QtCore.QRect(210, 60, 161, 22))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(120, 60, 54, 22))
        self.label.setObjectName("label")
        self.exit_button = QtWidgets.QPushButton(Form)
        self.exit_button.setGeometry(QtCore.QRect(320, 220, 65, 32))
        self.exit_button.setObjectName("exit_button")
        self.confirm_button = QtWidgets.QPushButton(Form)
        self.confirm_button.setGeometry(QtCore.QRect(230, 220, 65, 32))
        self.confirm_button.setObjectName("confirm_button")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(120, 110, 251, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.checkBox = QtWidgets.QCheckBox(Form)
        self.checkBox.setGeometry(QtCore.QRect(120, 160, 121, 16))
        self.checkBox.setObjectName("checkBox")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "跳转公里标"))
        self.comboBox.setItemText(0, _translate("Form", "总线位置"))
        self.comboBox.setItemText(1, _translate("Form", "公里标"))
        self.label.setText(_translate("Form", "选择类型"))
        self.exit_button.setText(_translate("Form", "取消"))
        self.confirm_button.setText(_translate("Form", "确定"))
        self.checkBox.setText(_translate("Form", "添加相对偏移量"))


# comment [xyun] 执行用户界面
class RunInterfaceStyle(QMainWindow, InterfaceStyle):
    def show(self):
        print(1)
        super(RunInterfaceStyle, self).show()
        print(2)

    def __init__(self):
        super(RunInterfaceStyle, self).__init__()
        self.setupUi(self)
        self.setWindowModality(Qt.ApplicationModal)

        CONFIG_FONT_SIZE = yaml_config.interface.get('font_size')
        CONFIG_STYLE = yaml_config.interface.get('style')
        try:
            assert 0 < CONFIG_FONT_SIZE < 100 and CONFIG_STYLE <= self.comboBox.count()
        except AssertionError:
            CONFIG_FONT_SIZE = 18
            CONFIG_STYLE = 0
        self.lineEdit.setText(str(CONFIG_FONT_SIZE))
        self.comboBox.setCurrentIndex(CONFIG_STYLE)

        self.pushButton_2.clicked.connect(self.close)
        self.pushButton.clicked.connect(self.save_settings)

    def save_settings(self):
        try:
            font_size = int(self.lineEdit.text())
            style = self.comboBox.currentIndex()
        except:
            QMessageBox.about(self, u'提示', u"请输入正确的参数。")
            return
        config.interface = {'font_size': font_size, 'style': style}
        config.write()
        self.close()


class RunChannelColor(QMainWindow, ChannelColor):
    def __init__(self):
        super(RunChannelColor, self).__init__()
        self.setupUi(self)
        self.setWindowModality(Qt.ApplicationModal)

        self.exit_button.clicked.connect(self.close)
        self.save_button.clicked.connect(self.save_settings)
        self.save_temp.clicked.connect(self.save_temp_)
        self.comboBox.currentIndexChanged.connect(self.change_item)

        self.CONFIG_CHANNEL_COLOURS = yaml_config.channel_colours

        self.pushButton.clicked.connect(lambda l: self.lineEdit.setText(QColorDialog.getColor().name()))
        self.pushButton_2.clicked.connect(lambda l: self.lineEdit_2.setText(QColorDialog.getColor().name()))
        self.pushButton_3.clicked.connect(lambda l: self.lineEdit_3.setText(QColorDialog.getColor().name()))
        self.pushButton_4.clicked.connect(lambda l: self.lineEdit_4.setText(QColorDialog.getColor().name()))
        self.pushButton_5.clicked.connect(lambda l: self.lineEdit_5.setText(QColorDialog.getColor().name()))
        self.pushButton_6.clicked.connect(lambda l: self.lineEdit_6.setText(QColorDialog.getColor().name()))

        try:
            assert isinstance(self.CONFIG_CHANNEL_COLOURS, dict) and all(
                map(lambda l: len(l) == 6, self.CONFIG_CHANNEL_COLOURS.values()))
        except AssertionError:
            self.CONFIG_CHANNEL_COLOURS = {'预设模板1': ['#000000', '#000000', '#000000', '#000000', '#000000', '#000000']}

        for k in self.CONFIG_CHANNEL_COLOURS.keys():
            self.comboBox.addItem(k)

    def save_temp_(self):
        if not self.CONFIG_CHANNEL_COLOURS.get(self.temp_name.text()):
            self.comboBox.addItem(self.temp_name.text())
        self.CONFIG_CHANNEL_COLOURS.update({self.temp_name.text(): [self.lineEdit.text(), self.lineEdit_2.text(),
                                                                    self.lineEdit_3.text(), self.lineEdit_4.text(),
                                                                    self.lineEdit_5.text(),
                                                                    self.lineEdit_6.text()]})
        self.comboBox.setCurrentIndex(self.comboBox.count() - 1)

    def change_item(self):
        colour_list = self.CONFIG_CHANNEL_COLOURS.get(self.comboBox.currentText(), ['', '', '', '', '', ''])
        self.lineEdit.setText(colour_list[0])
        self.lineEdit_2.setText(colour_list[1])
        self.lineEdit_3.setText(colour_list[2])
        self.lineEdit_4.setText(colour_list[3])
        self.lineEdit_5.setText(colour_list[4])
        self.lineEdit_6.setText(colour_list[5])

    def save_settings(self):
        config.channel_colours = self.CONFIG_CHANNEL_COLOURS
        config.write()
        self.close()


class RunInjuryCategory(QMainWindow, InjuryCategory):
    def __init__(self):
        super(RunInjuryCategory, self).__init__()
        self.setupUi(self)
        self.setWindowModality(Qt.ApplicationModal)

        self.INJURY = yaml_config.injury

        for injury_name in self.INJURY.keys():
            self.comboBox.addItem(injury_name)

        self.comboBox.currentIndexChanged.connect(self.change_injury_category)
        self.getColourButton.clicked.connect(lambda l: self.lineEdit.setText(QColorDialog.getColor().name()))
        self.newTypeButton.clicked.connect(self.add_category)
        self.pushButton.clicked.connect(self.del_category)
        self.exit_button.clicked.connect(self.close)
        self.save_button.clicked.connect(self.save_settings)

    def change_injury_category(self):

        colours = self.INJURY.get(self.comboBox.currentText(), {}).get('colours')
        thickness = self.INJURY.get(self.comboBox.currentText(), {}).get('thickness')
        type_ = self.INJURY.get(self.comboBox.currentText(), {}).get('type')

        self.lineEdit.setText(colours)
        self.comboBox_2.setCurrentIndex(thickness)
        self.comboBox_3.setCurrentIndex(type_)

    def del_category(self):
        if self.comboBox.currentText() in ['轨头核伤']:
            QtGui.QMessageBox.about(self, u'提示', u"预设伤损类型不允许删除。")
            return
        self.INJURY.pop(self.comboBox.currentText())
        self.comboBox.removeItem(self.comboBox.currentIndex())

    def add_category(self):
        if self.lineEdit_2.text() in ['轨头核伤'] or self.lineEdit_2.text() in self.INJURY.keys():
            QtGui.QMessageBox.about(self, u'提示', u"已存在该类型。")
            return
        self.comboBox.addItem(self.lineEdit_2.text())
        self.INJURY.update({self.lineEdit_2.text(): {'colours': self.lineEdit.text(),
                                                     'thickness': self.comboBox_2.currentIndex(),
                                                     'type': self.comboBox_3.currentIndex()}})
        self.comboBox.setCurrentIndex(self.comboBox.count() - 1)

    def save_settings(self):
        yaml_config.injury = self.INJURY
        yaml_config.write()
        self.close()


class RunRelativeDviation(QMainWindow, RelativeDviation):
    relate_change_sig = QtCore.pyqtSignal(object)

    def __init__(self):
        super(RunRelativeDviation, self).__init__()
        self.setupUi(self)
        self.setWindowModality(Qt.ApplicationModal)

        self.FORWARD = yaml_config.deviation.get('forward')
        self.BACKWARD = yaml_config.deviation.get('backward')
        self.CORRECTION_METHOD = yaml_config.deviation.get('correction_method')

        self.lineEdit.setText(self.FORWARD)
        self.lineEdit_2.setText(self.BACKWARD)
        # self.comboBox.setCurrentIndex(self.CORRECTION_METHOD)

        self.save_button.clicked.connect(self.save_settings)
        self.exit_button.clicked.connect(self.close)

    def save_settings(self):
        yaml_config.deviation = {'forward': self.lineEdit.text(), 'backward': self.lineEdit_2.text(),
                            # 'correction_method': self.comboBox.currentIndex()
                                 }
        yaml_config.write()
        self.relate_change_sig.emit(yaml_config.deviation) # 发射参数
        self.close()


class RunAutoSave(QMainWindow, AutoSave):
    def __init__(self):
        super(RunAutoSave, self).__init__()
        self.setupUi(self)
        self.setWindowModality(Qt.ApplicationModal)
        # comment [xyun] 若保存目录不存在则以工作目录加auto_save为保存目录。
        # comment [xyun] yaml_config.work_option.get('path')为工作目录，有可能在别的子窗口中更改，因此不在初始化的时候读取。
        self.INTERVAL = yaml_config.save_option.get('interval')
        # 保存目录
        self.SAVEPATH = yaml_config.save_option.get('path')
        self.DEFAULT = yaml_config.save_option.get('default')

        self.comboBox.currentIndexChanged.connect(self.change_interval)
        self.comboBox_2.currentIndexChanged.connect(self.change_save_path)
        self.pushButton.clicked.connect(self.save_settings)
        self.pushButton_2.clicked.connect(self.close)

        # 从配置文件中加载配置。
        self.comboBox.setCurrentIndex(self.INTERVAL)
        self.comboBox_2.setCurrentIndex(self.DEFAULT)
        if self.comboBox_2.currentIndex() == 0:
            self.lineEdit.setEnabled(False)
            self.lineEdit.setText(os.path.join(yaml_config.work_option.get('path'), 'auto_save\\'))
        else:
            self.lineEdit.setText(self.SAVEPATH)

    def show(self):
        if self.comboBox_2.currentIndex() == 0:
            self.lineEdit.setEnabled(False)
            self.lineEdit.setText(os.path.join(yaml_config.work_option.get('path'), 'auto_save\\'))
        super(RunAutoSave, self).show()

    def change_interval(self):
        self.INTERVAL = self.comboBox.currentIndex()

    def change_save_path(self):
        if self.comboBox_2.currentIndex() == 0:
            self.lineEdit.setEnabled(False)
            self.lineEdit.setText(os.path.join(yaml_config.work_option.get('path'), 'auto_save\\'))
        else:
            self.lineEdit.setEnabled(True)
        self.DEFAULT = self.comboBox_2.currentIndex()

    def save_settings(self):
        yaml_config.save_option = {'interval': self.INTERVAL,
                              'path': self.lineEdit.text() if self.DEFAULT == 1 else '',
                              'default': self.DEFAULT}
        yaml_config.write()
        self.close()


class RunWorkDir(QMainWindow, WorkDir):
    def __init__(self, parent):
        super(RunWorkDir, self).__init__()
        self.setupUi(self)
        self.setWindowModality(Qt.ApplicationModal)

        self.parent = parent

        self.PATH = yaml_config.work_option.get('path')
        # 0的时候备份，1的时候不备份
        self.BACKUPS = yaml_config.work_option.get('backups')

        self.comboBox.currentIndexChanged.connect(self.change_backups_status)
        self.pushButton.clicked.connect(self.save_settings)
        self.pushButton_2.clicked.connect(self.close)

        self.lineEdit.setText(self.PATH)
        self.comboBox.setCurrentIndex(self.BACKUPS)

    def change_backups_status(self):
        self.BACKUPS = self.comboBox.currentIndex()

    def save_settings(self):
        # todo 检测路径是否正确
        work_path = self.lineEdit.text()
        if not os.path.exists(work_path):
            try:
                os.makedirs(work_path)
            except FileNotFoundError:
                QtGui.QMessageBox.about(self, u'提示', u"请检查路径是否正确。")
                return
        yaml_config.work_option = {'path': work_path,
                              'backups': self.BACKUPS}
        yaml_config.write()
        self.close()

        model = QFileSystemModel()
        model.setRootPath(work_path)
        model.setNameFilterDisables(False)
        model.setNameFilters(['*.t1k'])
        self.parent.dir_treeView.setModel(model)
        self.parent.dir_treeView.setRootIndex(model.index(work_path))


class RunJumpPost(QMainWindow, JumpPost):
    _signal = QtCore.pyqtSignal(object)

    def __init__(self):
        super(RunJumpPost, self).__init__()
        self.setupUi(self)
        self.setWindowModality(Qt.ApplicationModal)

        self.exit_button.clicked.connect(self.close)
        self.confirm_button.clicked.connect(self.jump_post_bus)

    def jump_post_bus(self):
        if self.lineEdit.text():
            try:
                input_num = float(self.lineEdit.text())
                add_post_delta = True if self.checkBox.isChecked() else False
                self._signal.emit({'input_num': input_num, 'input_type': self.comboBox.currentIndex(),
                                   'add_post_delta':add_post_delta})
            except:
                QMessageBox.about(self, u'提示', u"请输入正确的值。")
                return
            else:
                self.close()

class DrawBox(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(376, 160)
        self.checkBox = QtWidgets.QCheckBox(Form)
        self.checkBox.setGeometry(QtCore.QRect(130, 40, 101, 71))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        self.checkBox.setFont(font)
        self.checkBox.setObjectName("checkBox")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "画框选项"))
        self.checkBox.setText(_translate("Form", "是否画框"))


class DrawBoxWin(QMainWindow, DrawBox):
    draw_box_sig = QtCore.pyqtSignal(object)
    def __init__(self):
        super(DrawBoxWin, self).__init__()
        self.setupUi(self)
        # self.setWindowModality(Qt.ApplicationModal)
        self.checkBox.stateChanged.connect(self.get_checkbox_status)

    def get_checkbox_status(self):
        status= True if self.checkBox.isChecked() else False
        self.draw_box_sig.emit({'status':status})



if __name__ == '__main__':
    pass
