class MapScalePanel(QWidget):
    def __init__(self, parent, mapScaleDropDownType):
        QWidget.__init__(self, parent)
        while not isinstance(parent, QDialog):
            parent = parent.parent()
        self.setObjectName("DistanceBoxPanel" +
                           str(len(parent.findChildren(MapScalePanel))))

        self.hLayoutBoxPanel = QHBoxLayout(self)
        self.hLayoutBoxPanel.setSpacing(0)
        self.hLayoutBoxPanel.setContentsMargins(0, 0, 0, 0)
        self.hLayoutBoxPanel.setObjectName(("hLayoutBoxPanel"))
        self.frameBoxPanel = QFrame(self)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.frameBoxPanel.sizePolicy().hasHeightForWidth())
        self.frameBoxPanel.setSizePolicy(sizePolicy)
        self.frameBoxPanel.setFrameShape(QFrame.NoFrame)
        self.frameBoxPanel.setFrameShadow(QFrame.Raised)
        self.frameBoxPanel.setObjectName(("frameBoxPanel"))
        self.hLayoutframeBoxPanel = QHBoxLayout(self.frameBoxPanel)
        self.hLayoutframeBoxPanel.setSpacing(0)
        self.hLayoutframeBoxPanel.setMargin(0)
        self.hLayoutframeBoxPanel.setObjectName(("hLayoutframeBoxPanel"))
        self.captionLabel = QLabel(self.frameBoxPanel)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.captionLabel.sizePolicy().hasHeightForWidth())
        self.captionLabel.setSizePolicy(sizePolicy)
        self.captionLabel.setMinimumSize(QSize(200, 0))
        self.captionLabel.setMaximumSize(QSize(200, 16777215))
        font = QFont()
        font.setBold(False)
        font.setWeight(50)
        self.captionLabel.setFont(font)
        self.captionLabel.setObjectName(("captionLabel"))
        self.hLayoutframeBoxPanel.addWidget(self.captionLabel)

        self.frameBoxPanelIn = QFrame(self.frameBoxPanel)
        self.frameBoxPanelIn.setFrameShape(QFrame.StyledPanel)
        self.frameBoxPanelIn.setFrameShadow(QFrame.Raised)
        self.frameBoxPanelIn.setObjectName(("frameBoxPanelIn"))
        self.hLayoutframeBoxPanelIn = QHBoxLayout(self.frameBoxPanelIn)
        self.hLayoutframeBoxPanelIn.setSpacing(0)
        self.hLayoutframeBoxPanelIn.setMargin(0)
        self.hLayoutframeBoxPanelIn.setObjectName(("hLayoutframeBoxPanelIn"))

        self.comboBox = ComboBoxPanel(self.frameBoxPanelIn)
        self.comboBox.Caption = "1"
        self.comboBox.LabelWidth = 20
        self.hLayoutframeBoxPanelIn.addWidget(self.comboBox)
        # self.txtDistance = QLineEdit(self.frameBoxPanelIn)
        # self.txtDistance.setEnabled(True)
        # font = QFont()
        # font.setBold(False)
        # font.setWeight(50)
        # self.txtDistance.setFont(font)
        # self.txtDistance.setObjectName(("txtDistance"))
        # self.txtDistance.setText("0.0")
        # self.txtDistance.setMinimumWidth(70)
        # self.txtDistance.setMaximumWidth(70)
        # self.hLayoutframeBoxPanelIn.addWidget(self.txtDistance)

        self.imageButton = QToolButton(self.frameBoxPanelIn)
        self.imageButton.setText((""))
        icon = QIcon()
        icon.addPixmap(QPixmap(("Resource/coordinate_capture.png")),
                       QIcon.Normal, QIcon.Off)
        self.imageButton.setIcon(icon)
        self.imageButton.setObjectName(("btnDegreeBoxPanel"))
        self.hLayoutframeBoxPanelIn.addWidget(self.imageButton)

        self.hLayoutframeBoxPanel.addWidget(self.frameBoxPanelIn)
        self.hLayoutBoxPanel.addWidget(self.frameBoxPanel)

        spacerItem = QSpacerItem(10, 10, QSizePolicy.Expanding,
                                 QSizePolicy.Minimum)
        self.hLayoutBoxPanel.addItem(spacerItem)

        self.imageButton.clicked.connect(self.imageButtonClicked)
        define._canvas.renderComplete.connect(self.canvas_renderComplete)
        self.connect(self.comboBox, SIGNAL("Event_0"), self.comboBox_Event_0)
        self.flag = 0
        self.dropDownType = mapScaleDropDownType
        self.method_5()
        self.imageButton.setVisible(False)

    def comboBox_Event_0(self):
        define._canvas.zoomScale(float(self.comboBox.SelectedItem))

    def canvas_renderComplete(self):
        self.comboBox.comboBox.setEditText(str(int(define._canvas.scale())))

    def method_4(self, mapScaleDropDownType_0):
        return (self.dropDownType
                & mapScaleDropDownType_0) == mapScaleDropDownType_0

    def method_5(self):
        self.comboBox.Clear()
        if (self.method_4(MapScaleDropDownType.Aerodrome)):
            for i in range(2, 7):
                num = i * 5000
                self.comboBox.Add(str(num))
        if (self.method_4(MapScaleDropDownType.Approach)):
            for j in range(4, 20):
                num1 = j * 50000
                self.comboBox.Add(str(num1))
        if (self.method_4(MapScaleDropDownType.Enroute)):
            for k in range(2, 21):
                num2 = k * 500000
                self.comboBox.Add(str(num2))

    # def method_6(self, string_0):
    #     value = None
    #     if self.distanceUnit == DistanceUnits.NM:
    #         value = self.txtDistance.text() + "nm"
    #     elif self.distanceUnit == DistanceUnits.M:
    #         value = self.txtDistance.text() + "m"
    #     elif self.distanceUnit == DistanceUnits.KM:
    #         value = self.txtDistance.text() + "km"
    #     elif self.distanceUnit == DistanceUnits.FT:
    #         value = self.txtDistance.text() + "ft"
    #     elif self.distanceUnit == DistanceUnits.MM:
    #         value = self.txtDistance.text() + "mm"
    #     else:
    #         value = ""
    #
    #
    #     return "%s%s\t%s"%(string_0, self.Caption, value);
    def txtDistanceChanged(self):
        try:
            test = float(self.txtDistance.text())
            self.emit(SIGNAL("Event_0"), self)
        except:
            str0 = "You must input the float type in \"%s\"." % (self.Caption)
            QMessageBox.warning(self, "Warning", str0)
            self.txtDistance.setText("0.0")

    def imageButtonClicked(self):
        measureDistanceTool = MeasureTool(define._canvas, self.txtDistance,
                                          self.distanceUnit)
        define._canvas.setMapTool(measureDistanceTool)
        self.emit(SIGNAL("Event_1"), self)

    def get_CaptionUnits(self):
        return self.distanceUnit

    def set_CaptionUnits(self, distanceUnit):
        self.distanceUnit = distanceUnit

    CaptionUnits = property(get_CaptionUnits, set_CaptionUnits, None, None)

    def get_Caption(self):
        caption = self.captionLabel.text()
        findIndex = caption.indexOf("(")
        if findIndex > 0:
            val = caption.left(findIndex)
            return val
        return caption

    def set_Caption(self, captionStr):
        # if self.distanceUnit == DistanceUnits.NM:
        #     value = captionStr + "(nm)"
        # elif self.distanceUnit == DistanceUnits.M:
        #     value = captionStr + "(m)"
        # elif self.distanceUnit == DistanceUnits.KM:
        #     value = captionStr + "(km)"
        # elif self.distanceUnit == DistanceUnits.FT:
        #     value = captionStr + "(ft)"
        # elif self.distanceUnit == DistanceUnits.MM:
        #     value = captionStr + "(mm)"
        # else:
        #     value = ""
        self.captionLabel.setText(captionStr + ":")

    Caption = property(get_Caption, set_Caption, None, None)

    def get_dropDownType(self):
        return self.dropDownType

    def set_dropDownType(self, val):
        self.dropDownType = val

    DropDownType = property(get_dropDownType, set_dropDownType, None, None)

    def get_Value(self):
        try:
            return self.comboBox.SelectedItem
        except:
            return ""

    # def set_Value(self, value):

    Value = property(get_Value, None, None, None)

    # def get_IsEmpty(self):
    #     return self.txtDistance.text() == "" or self.txtDistance.text() == None
    # IsEmpty = property(get_IsEmpty, None, None, None)

    def set_LabelWidth(self, width):
        self.captionLabel.setMinimumSize(QSize(width, 0))
        self.captionLabel.setMaximumSize(QSize(width, 16777215))

    LabelWidth = property(None, set_LabelWidth, None, None)

    def get_ReadOnly(self):
        return self.comboBox.isReadOnly()

    def set_ReadOnly(self, bool):
        self.comboBox.setReadOnly(bool)

    ReadOnly = property(get_ReadOnly, set_ReadOnly, None, None)

    def get_Enabled(self):
        return self.comboBox.Enabled

    def set_Enabled(self, bool):
        self.comboBox.Enabled = bool
        self.imageButton.setEnabled(bool)

    Enabled = property(get_Enabled, set_Enabled, None, None)

    def get_Visible(self):
        return self.isVisible()

    def set_Visible(self, bool):
        self.setVisible(bool)

    Visible = property(get_Visible, set_Visible, None, None)

    def set_Button(self, imageName):
        if imageName == None or imageName == "":
            self.imageButton.setVisible(False)
            return
        icon = QIcon()
        icon.addPixmap(QPixmap(("Resource/" + imageName)), QIcon.Normal,
                       QIcon.Off)
        self.imageButton.setIcon(icon)
        self.imageButton.setVisible(True)

    Button = property(None, set_Button, None, None)
Example #2
0
class DlgAixmProcLegsEx(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self, parent)

        self.resize(290, 136)
        self.setWindowTitle("Procedure Legs (AIXM 4.5+)")
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
        self.setSizePolicy(sizePolicy)
        verticalLayoutDlg = QVBoxLayout(self)
        verticalLayoutDlg.setObjectName(("verticalLayoutDlg"))

        self.gbAll = GroupBox(self, "HL")
        self.gbAll.Caption = "Legs"
        verticalLayoutDlg.addWidget(self.gbAll)

        self.trvLegs = QTreeView(self.gbAll)
        self.trvLegsStdModel = StandardItemModel()
        self.trvLegs.setModel(self.trvLegsStdModel)
        self.gbAll.Add = self.trvLegs

        self.flowLayoutPanel1 = Frame(self.gbAll)
        self.gbAll.Add = self.flowLayoutPanel1

        self.btnAdd = QPushButton(self.flowLayoutPanel1)
        icon = QIcon()
        icon.addPixmap(QPixmap("Resource/add.png"), QIcon.Normal, QIcon.Off)
        self.btnAdd.setIcon(icon)
        self.flowLayoutPanel1.Add = self.btnAdd

        self.btnRemove = QPushButton(self.flowLayoutPanel1)
        icon = QIcon()
        icon.addPixmap(QPixmap("Resource/remove.png"), QIcon.Normal, QIcon.Off)
        self.btnRemove.setIcon(icon)
        self.flowLayoutPanel1.Add = self.btnRemove

        self.btnMoveUp = QPushButton(self.flowLayoutPanel1)
        icon = QIcon()
        icon.addPixmap(QPixmap("Resource/up.png"), QIcon.Normal, QIcon.Off)
        self.btnMoveUp.setIcon(icon)
        self.flowLayoutPanel1.Add = self.btnMoveUp

        self.btnMoveDown = QPushButton(self.flowLayoutPanel1)
        icon = QIcon()
        icon.addPixmap(QPixmap("Resource/down.png"), QIcon.Normal, QIcon.Off)
        self.btnMoveDown.setIcon(icon)
        self.flowLayoutPanel1.Add = self.btnMoveDown

        self.scrollBox = Frame(self.gbAll)
        self.gbAll.Add = self.scrollBox

        self.gbPosition = GroupBox(self.scrollBox)
        self.gbPosition.Caption = "Fix"
        self.scrollBox.Add = self.gbPosition

        self.cmbPosUid = ComboBoxPanel(self.gbPosition)
        self.cmbPosUid.Caption = "Position"
        self.cmbPosUid.Button = "coordinate_capture.png"
        self.gbPosition.Add = self.cmbPosUid

        self.gbAttributes = GroupBox(self.scrollBox)
        self.gbAttributes.Caption = "Attributes"
        self.scrollBox.Add = self.gbAttributes

        self.pnlPathType = ComboBoxPanel(self.gbAttributes)
        self.pnlPathType.Caption = "Path Type"
        self.gbAttributes.Add = self.pnlPathType

        self.pnlLegType = ComboBoxPanel(self.gbAttributes)
        self.pnlLegType.Caption = "Leg Type"
        self.gbAttributes.Add = self.pnlLegType

        self.cmbCenUid = ComboBoxPanel(self.gbAttributes)
        self.cmbCenUid.Caption = "Center"
        self.cmbCenUid.Button = "coordinate_capture.png"
        self.gbAttributes.Add = self.cmbCenUid

        self.pnlFlyBy = ComboBoxPanel(self.gbAttributes)
        self.pnlFlyBy.Caption = "Fly-By"
        self.gbAttributes.Add = self.pnlFlyBy

        self.pnlMinAlt = AltitudeBoxPanel(self.gbAttributes)
        self.pnlMinAlt.CaptionUnits = "ft"
        self.pnlMinAlt.Caption = "Minimum Altitude"
        self.gbAttributes.Add = self.pnlMinAlt

        self.pnlSegLength = DistanceBoxPanel(self.gbAttributes,
                                             DistanceUnits.NM)
        self.pnlSegLength.Caption = "Segment Length"
        self.gbAttributes.Add = self.pnlSegLength

        self.pnlCourse = TrackRadialBoxPanel(self.gbAttributes)
        self.pnlCourse.Caption = "Course"
        self.gbAttributes.Add = self.pnlCourse

        self.pnlLegVOR = Frame(self.gbAttributes)
        self.gbAttributes.Add = self.pnlLegVOR

        f1 = Frame(self.pnlLegVOR, "HL")
        self.pnlLegVOR.Add = f1

        self.cmbLegVor = ComboBoxPanel(f1)
        self.cmbLegVor.Caption = "VOR / Radial (" + define._degreeStr + ")"
        f1.Add = self.cmbLegVor

        self.txtLegRadial = TrackRadialBoxPanel(f1)
        self.txtLegRadial.Caption = ""
        self.txtLegRadial.LabelWidth = 0
        f1.Add = self.txtLegRadial

        f2 = Frame(self.pnlLegVOR, "HL")
        self.pnlLegVOR.Add = f2

        self.cmbLegBackVor = ComboBoxPanel(f2)
        self.cmbLegBackVor.Caption = "Reverse VOR / Radial (" + define._degreeStr + ")"
        f2.Add = self.cmbLegBackVor

        self.txtLegBackRadial = TrackRadialBoxPanel(f2)
        self.txtLegBackRadial.Caption = ""
        self.txtLegBackRadial.LabelWidth = 0
        f2.Add = self.txtLegBackRadial

        self.pnlPointType = ComboBoxPanel(self.gbAttributes)
        self.pnlPointType.Caption = "Point Type"
        self.gbAttributes.Add = self.pnlPointType

        self.pnlRepPointType = ComboBoxPanel(self.gbAttributes)
        self.pnlRepPointType.Caption = "Reporting Point Type"
        self.gbAttributes.Add = self.pnlRepPointType

        self.pnlPointVor = Frame(self.gbAttributes)
        self.gbAttributes.Add = self.pnlPointVor

        frame1 = Frame(self.pnlPointVor, "HL")
        self.pnlPointVor.Add = frame1

        self.cmbPointVor = ComboBoxPanel(frame1)
        self.cmbPointVor.Caption = "Point VOR / Radial (" + define._degreeStr + ")"
        frame1.Add = self.cmbPointVor

        self.txtPointRadial = TrackRadialBoxPanel(frame1)
        self.txtPointRadial.Caption = ""
        self.txtPointRadial.LabelWidth = 0
        frame1.Add = self.txtPointRadial

        frame2 = Frame(self.pnlPointVor, "HL")
        self.pnlPointVor.Add = frame2

        self.cmbPointDme1 = ComboBoxPanel(frame2)
        self.cmbPointDme1.Caption = "Point 1. DME / Distance (nm)"
        frame2.Add = self.cmbPointDme1

        self.txtPointDme1 = DistanceBoxPanel(frame2, DistanceUnits.NM)
        self.txtPointDme1.Caption = ""
        self.txtPointDme1.LabelWidth = 0
        frame2.Add = self.txtPointDme1

        frame3 = Frame(self.pnlPointVor, "HL")
        self.pnlPointVor.Add = frame3

        self.cmbPointDme2 = ComboBoxPanel(frame3)
        self.cmbPointDme2.Caption = "Point 2. DME / Distance (nm)"
        frame3.Add = self.cmbPointDme2

        self.txtPointDme2 = DistanceBoxPanel(frame3, DistanceUnits.NM)
        self.txtPointDme2.Caption = ""
        self.txtPointDme2.LabelWidth = 0
        frame3.Add = self.txtPointDme2

        self.txtFlyDuration = TextBoxPanel(self.pnlPointVor, True)
        self.txtFlyDuration.Caption = "Flying Time Duration"
        self.pnlPointVor.Add = self.txtFlyDuration

        self.txtRemarks = TextBoxPanel(self.pnlPointVor, True)
        self.txtRemarks.Caption = "Remarks"
        self.pnlPointVor.Add = self.txtRemarks

        self.btnBoxOkCancel = QDialogButtonBox(self)
        self.btnBoxOkCancel.setObjectName(("btnBoxOkCancel"))
        self.btnBoxOkCancel.setStandardButtons(QDialogButtonBox.Cancel
                                               | QDialogButtonBox.Ok)
        self.connect(self.btnBoxOkCancel, SIGNAL("accepted()"), self.acceptDlg)
        self.connect(self.btnBoxOkCancel, SIGNAL("rejected()"), self.reject)

        self.btnAdd.clicked.connect(self.btnAdd_Click)
        self.btnMoveDown.clicked.connect(self.btnMoveDown_Click)
        self.btnMoveUp.clicked.connect(self.btnMoveUp_Click)
        self.btnRemove.clicked.connect(self.btnRemove_Click)

        verticalLayoutDlg.addWidget(self.btnBoxOkCancel)

        self.trvLegs.pressed.connect(self.trvLegs_pressed)

        self.data = None
        self.legs = None
        self.aerodrome = None
        self.magnVar = 0.0

        self.trvLegs.setHeaderHidden(True)

        self.pnlPointType.Items = ["IAF", "IF", "FAF", "FAP", "MAPt", "TP"]

        for value in CodeLegTypeAixm.Items:
            self.pnlLegType.Add(value)

        for value in CodePathTypeAixm.Items:
            self.pnlPathType.Add(value)

        for value in CodeRepAtcAixm.Items:
            self.pnlRepPointType.Add(value)

        for value in CodeTypeFlyByAixm.Items:
            self.pnlFlyBy.Add(value)
        self.method_6()

        self.connect(self.txtRemarks, SIGNAL("Event_0"),
                     self.txtRemarks_Event_0)
        self.connect(self.txtPointDme2, SIGNAL("Event_0"),
                     self.txtPointDme2_Event_0)
        self.connect(self.cmbPointDme2, SIGNAL("Event_0"),
                     self.cmbPointDme2_Event_0)
        self.connect(self.txtPointDme1, SIGNAL("Event_0"),
                     self.txtPointDme1_Event_0)
        self.connect(self.cmbPointDme1, SIGNAL("Event_0"),
                     self.cmbPointDme1_Event_0)
        self.connect(self.cmbPointVor, SIGNAL("Event_0"),
                     self.cmbPointVor_Event_0)
        self.connect(self.txtPointRadial, SIGNAL("Event_0"),
                     self.txtPointRadial_Event_0)
        self.connect(self.txtFlyDuration, SIGNAL("Event_0"),
                     self.txtFlyDuration_Event_0)
        self.connect(self.pnlRepPointType, SIGNAL("Event_0"),
                     self.pnlRepPointType_Event_0)

        self.connect(self.pnlPointType, SIGNAL("Event_0"),
                     self.pnlPointType_Event_0)

        self.connect(self.txtLegBackRadial, SIGNAL("Event_0"),
                     self.txtLegBackRadial_Event_0)

        self.connect(self.cmbLegBackVor, SIGNAL("Event_0"),
                     self.cmbLegBackVor_Event_0)

        self.connect(self.cmbLegVor, SIGNAL("Event_0"), self.cmbLegVor_Event_0)

        self.connect(self.txtLegRadial, SIGNAL("Event_0"),
                     self.txtLegRadial_Event_0)

        self.connect(self.pnlCourse, SIGNAL("Event_0"), self.pnlCourse_Event_0)

        self.connect(self.pnlSegLength, SIGNAL("Event_0"),
                     self.pnlSegLength_Event_0)

        self.connect(self.pnlMinAlt, SIGNAL("Event_0"), self.pnlMinAlt_Event_0)

        self.connect(self.pnlFlyBy, SIGNAL("Event_0"), self.pnlFlyBy_Event_0)

        self.connect(self.cmbCenUid, SIGNAL("Event_0"), self.cmbCenUid_Event_0)

        self.connect(self.pnlLegType, SIGNAL("Event_0"),
                     self.pnlLegType_Event_0)

        self.connect(self.pnlPathType, SIGNAL("Event_0"),
                     self.pnlPathType_Event_0)

        self.connect(self.cmbPosUid, SIGNAL("Event_0"), self.cmbPosUid_Event_0)
        self.connect(self.cmbCenUid, SIGNAL("Event_3"), self.method_14)
        self.connect(self.cmbPosUid, SIGNAL("Event_3"), self.method_13)

        # self.cmbCenter.imageButton.clicked.connect(self.method_14)
        # self.cmbFixPos.imageButton.clicked.connect(self.method_13)
    def btnAdd_Click(self):
        if (len(self.trvLegs.selectedIndexes()) == 0 and not self.method_5()):
            return
        listInsertPosition = ListInsertPosition.Append
        resultDlg, listInsertPosition = DlgAixmInsertLeg.smethod_0(
            listInsertPosition)
        if (self.trvLegsStdModel.rowCount() > 0 and not resultDlg):
            return
        count = self.trvLegsStdModel.rowCount()
        if (listInsertPosition == ListInsertPosition.Before):
            count = self.trvLegs.selectedIndexes()[0].row()
        elif (listInsertPosition == ListInsertPosition.After):
            count = self.trvLegs.selectedIndexes()[0].row() + 1
        self.trvLegsStdModel.setItem(
            self.trvLegsStdModel.rowCount(),
            QStandardItem(str(self.trvLegsStdModel.rowCount() + 1)))
        self.legs.insert(count, DataBaseProcedureLegEx())
        self.trvLegs.setCurrentIndex(self.trvLegsStdModel.index(count, 0))
        self.trvLegs_pressed()

    def btnMoveDown_Click(self):
        if (len(self.trvLegs.selectedIndexes()) == 0):
            return
        index = self.trvLegs.selectedIndexes()[0].row()
        item = self.legs[index]
        self.legs.pop(index)
        self.legs.insert(index + 1, item)
        self.trvLegs.setCurrentIndex(self.trvLegsStdModel.index(index + 1, 0))
        self.trvLegs_pressed()

    def btnMoveUp_Click(self):
        if (len(self.trvLegs.selectedIndexes()) == 0):
            return
        index = self.trvLegs.selectedIndexes()[0].row()
        item = self.legs[index]
        self.legs.pop(index)
        self.legs.insert(index - 1, item)
        self.trvLegs.setCurrentIndex(self.trvLegsStdModel.index(index - 1, 0))
        self.trvLegs_pressed()

    def btnRemove_Click(self):
        item = None
        if (len(self.trvLegs.selectedIndexes()) == 0):
            return
        if (QMessageBox.question(
                self, "Question",
                "Are you sure you want to delete the selected procedure leg?",
                QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes):
            index = self.trvLegs.selectedIndexes()[0].row()
            self.legs.pop(index)
            self.trvLegsStdModel.takeRow(self.trvLegsStdModel.rowCount() - 1)
            if (index >= self.trvLegsStdModel.rowCount() - 1):
                index -= 1
            # treeView = self.trvLegs;
            # if (index >= 0):
            if self.trvLegsStdModel.rowCount() > 0 and index < 0:
                index = 0
            self.trvLegs.setCurrentIndex(self.trvLegsStdModel.index(index, 0))

            self.trvLegs_pressed()

    def cmbPosUid_Event_0(self):
        self.txtFlyDuration_TextChanged(self.cmbPosUid)

    def txtRemarks_Event_0(self):
        self.txtFlyDuration_TextChanged(self.txtRemarks)

    def txtPointDme2_Event_0(self):
        self.txtFlyDuration_TextChanged(self.txtPointDme2)

    def cmbPointDme2_Event_0(self):
        self.txtFlyDuration_TextChanged(self.cmbPointDme2)

    def txtPointDme1_Event_0(self):
        self.txtFlyDuration_TextChanged(self.txtPointDme1)

    def cmbPointDme1_Event_0(self):
        self.txtFlyDuration_TextChanged(self.cmbPointDme1)

    def cmbPointVor_Event_0(self):
        self.txtFlyDuration_TextChanged(self.cmbPointVor)

    def txtPointRadial_Event_0(self):
        self.txtFlyDuration_TextChanged(self.txtPointRadial)

    def txtFlyDuration_Event_0(self):
        self.txtFlyDuration_TextChanged(self.txtFlyDuration)

    def pnlRepPointType_Event_0(self):
        self.txtFlyDuration_TextChanged(self.pnlRepPointType)

    def pnlPointType_Event_0(self):
        self.txtFlyDuration_TextChanged(self.pnlPointType)

    def txtLegBackRadial_Event_0(self):
        self.txtFlyDuration_TextChanged(self.txtLegBackRadial)

    def cmbLegBackVor_Event_0(self):
        self.txtFlyDuration_TextChanged(self.cmbLegBackVor)

    def cmbLegVor_Event_0(self):
        self.txtFlyDuration_TextChanged(self.cmbLegVor)

    def txtLegRadial_Event_0(self):
        self.txtFlyDuration_TextChanged(self.txtLegRadial)

    def pnlCourse_Event_0(self):
        self.txtFlyDuration_TextChanged(self.pnlCourse)

    def pnlSegLength_Event_0(self):
        self.txtFlyDuration_TextChanged(self.pnlSegLength)

    def pnlMinAlt_Event_0(self):
        self.txtFlyDuration_TextChanged(self.pnlMinAlt)

    def pnlFlyBy_Event_0(self):
        self.txtFlyDuration_TextChanged(self.pnlFlyBy)

    def cmbCenUid_Event_0(self):
        self.txtFlyDuration_TextChanged(self.cmbCenUid)

    def pnlLegType_Event_0(self):
        self.txtFlyDuration_TextChanged(self.pnlLegType)

    def pnlPathType_Event_0(self):
        self.txtFlyDuration_TextChanged(self.pnlPathType)

    def trvLegs_pressed(self):
        self.method_6()
        self.method_8()

    def acceptDlg(self):
        self.legs.refresh()
        QObject.emit(self, SIGNAL("DlgAixmProcLegs_Smethod_0_Event"),
                     self.legs, self.data)
        self.accept()

    def method_6(self):
        self.btnOK = self.btnBoxOkCancel.button(QDialogButtonBox.Ok)
        self.btnOK.setEnabled(len(self.trvLegs.selectedIndexes()) > 0)
        self.btnRemove.setEnabled(len(self.trvLegs.selectedIndexes()) > 0)
        self.btnMoveUp.setEnabled(
            (len(self.trvLegs.selectedIndexes()) > 0
             and self.trvLegs.selectedIndexes()[0].row() != 0) and True
            or False)
        self.btnMoveDown.setEnabled(
            (len(self.trvLegs.selectedIndexes()) <= 0
             or self.trvLegsStdModel.rowCount() <= 0) and False
            or ((len(self.trvLegs.selectedIndexes()) > 0)
                and self.trvLegs.selectedIndexes()[0].row() <
                self.trvLegsStdModel.rowCount() - 1))

    def method_7(self):
        for i in range(self.legs.Count):
            num = i + 1
            self.trvLegsStdModel.setItem(i, QStandardItem(str(num)))
        self.method_6()

    def method_8(self):
        if (self.trvLegs.selectedIndexes() == None
                or len(self.trvLegs.selectedIndexes()) == 0):
            self.scrollBox.Enabled = False
            self.cmbPosUid.SelectedIndex = -1
            self.pnlPathType.SelectedIndex = -1
            self.pnlLegType.SelectedIndex = -1
            self.cmbCenUid.SelectedIndex = -1
            self.pnlFlyBy.SelectedIndex = -1
            self.pnlMinAlt.Value = None
            self.pnlSegLength.Value = None
            self.pnlCourse.Value = None
            self.cmbLegVor.SelectedIndex = -1
            self.txtLegRadial.Value = 0
            self.cmbLegBackVor.SelectedIndex = -1
            self.txtLegBackRadial.Value = 0
            self.pnlPointType.Value = ""
            self.pnlRepPointType.SelectedIndex = -1
            self.cmbPointVor.SelectedIndex = -1
            self.txtPointRadial.Value = 0
            self.cmbPointDme1.SelectedIndex = -1
            self.txtPointDme1.Value = None
            self.cmbPointDme2.SelectedIndex = -1
            self.txtPointDme2.Value = None
            self.txtFlyDuration.Value = ""
            self.txtRemarks.Value = ""
            return
        self.scrollBox.Enabled = True
        item = self.legs[self.trvLegs.selectedIndexes()[0].row()]
        if (item.PointEnt == None):
            self.cmbPosUid.SelectedIndex = -1
        else:
            self.cmbPosUid.SelectedIndex = self.cmbPosUid.IndexOf(
                item.PointEnt)
        self.pnlPathType.SelectedIndex = self.method_10(
            self.pnlPathType.Items, item.CodePathType)
        self.pnlLegType.SelectedIndex = self.method_10(self.pnlLegType.Items,
                                                       item.CodeLegType)
        if (item.CodeLegType != CodeLegTypeAixm.CCA):
            if (item.CodeLegType == CodeLegTypeAixm.CWA):
                if (item.CenterEnt == None):
                    self.cmbCenUid.SelectedIndex = -1
                else:
                    self.cmbCenUid.SelectedIndex = self.cmbCenUid.IndexOf(
                        item.CenterEnt)
                self.cmbCenUid.Visible = True
            else:
                self.cmbCenUid.SelectedIndex = -1
                self.cmbCenUid.Visible = False
                # goto Label0;
        else:
            # Label2:
            if (item.CenterEnt == None):
                self.cmbCenUid.SelectedIndex = -1
            else:
                self.cmbCenUid.SelectedIndex = self.cmbCenUid.IndexOf(
                    item.CenterEnt)
            self.cmbCenUid.Visible = True

    # Label0:
        self.pnlFlyBy.SelectedIndex = self.method_10(self.pnlFlyBy.Items,
                                                     item.CodeFlyBy)
        self.pnlMinAlt.Value = item.ValMinAlt
        self.pnlSegLength.Value = item.ValDist
        self.pnlCourse.Value = item.ValCourse
        if (item.VorUidLeg == None):
            self.cmbLegVor.SelectedIndex = -1
        else:
            self.cmbLegVor.SelectedIndex = self.cmbLegVor.IndexOf(
                item.VorUidLeg)
        self.txtLegRadial.Value = item.ValLegRadial
        if (item.VorUidLegBack == None):
            self.cmbLegBackVor.SelectedIndex = -1
        else:
            self.cmbLegBackVor.SelectedIndex = self.cmbLegBackVor.IndexOf(
                item.VorUidLegBack)
        self.txtLegBackRadial.Value = item.ValLegRadialBack
        self.pnlPointType.Value = item.CodePointType
        self.pnlRepPointType.SelectedIndex = self.method_10(
            self.pnlRepPointType.Items, item.CodeRepAtc)
        if (item.VorUidPoint == None):
            self.cmbPointVor.SelectedIndex = -1
        else:
            self.cmbPointVor.SelectedIndex = self.cmbPointVor.IndexOf(
                item.VorUidPoint)
        self.txtPointRadial.Value = item.ValPointRadial
        if (item.UidPointDist1 == None):
            self.cmbPointDme1.SelectedIndex = -1
        else:
            self.cmbPointDme1.SelectedIndex = self.cmbPointDme1.IndexOf(
                item.UidPointDist1)
        self.txtPointDme1.Value = item.ValPointDist1
        if (item.UidPointDist2 == None):
            self.cmbPointDme2.SelectedIndex = -1
        else:
            self.cmbPointDme2.SelectedIndex = self.cmbPointDme2.IndexOf(
                item.UidPointDist2)
        self.txtPointDme2.Value = item.ValPointDist2
        self.txtFlyDuration.Value = item.ValDur
        self.txtRemarks.Value = item.TxtRmk

    def method_9(self, ilist_0, string_0):
        for i in range(len(ilist_0)):
            if (String.StartsWith(ilist_0[i], string_0)):
                return i
        return -1

    def method_10(self, ilist_0, string_0):
        for i in range(len(ilist_0)):
            if (String.Equals(ilist_0[i], string_0)):
                return i
        return -1

    def txtFlyDuration_TextChanged(self, sender):
        if (self.trvLegs.selectedIndexes() == None
                or len(self.trvLegs.selectedIndexes()) == 0):
            return
        item = self.legs[self.trvLegs.selectedIndexes()[0].row()]
        if (sender == self.cmbPosUid):
            item.PointEnt = self.cmbPosUid.SelectedItem
            return
        if (sender == self.pnlPathType):
            item.CodePathType = self.pnlPathType.SelectedItem
            return
        if (sender == self.pnlLegType):
            item.CodeLegType = self.pnlLegType.SelectedItem
            self.cmbCenUid.Visible = (
                item.CodeLegType == CodeLegTypeAixm.CCA
            ) and True or item.CodeLegType == CodeLegTypeAixm.CWA
            return
        if (sender == self.cmbCenUid):
            item.CenterEnt = self.cmbCenUid.SelectedItem
            return
        if (sender == self.pnlFlyBy):
            item.CodeFlyBy = self.pnlFlyBy.SelectedItem
            return
        if (sender == self.pnlMinAlt):
            item.ValMinAlt = self.pnlMinAlt.Value
            return
        if (sender == self.pnlSegLength):
            item.ValDist = self.pnlSegLength.Value
            return
        if (sender == self.pnlCourse):
            item.ValCourse = self.pnlCourse.Value
            return
        if (sender == self.cmbLegVor):
            item.VorUidLeg = self.cmbLegVor.SelectedItem
            return
        if (sender == self.txtLegRadial):
            item.ValLegRadial = self.txtLegRadial.Value
            return
        if (sender == self.cmbLegBackVor):
            item.VorUidLegBack = self.cmbLegBackVor.SelectedItem
            return
        if (sender == self.txtLegBackRadial):
            item.ValLegRadialBack = self.txtLegBackRadial.Value
            return
        if (sender == self.pnlPointType):
            item.CodePointType = self.pnlPointType.SelectedItem
            return
        if (sender == self.pnlRepPointType):
            item.CodeRepAtc = self.pnlRepPointType.SelectedItem
            return
        if (sender == self.cmbPointVor):
            item.VorUidPoint = self.cmbPointVor.SelectedItem
            return
        if (sender == self.txtPointRadial):
            item.ValPointRadial = self.txtPointRadial.Value
            return
        if (sender == self.cmbPointDme1):
            item.UidPointDist1 = self.cmbPointDme1.SelectedItem
            return
        if (sender == self.txtPointDme1):
            item.ValPointDist1 = self.txtPointDme1.Value
            return
        if (sender == self.cmbPointDme2):
            item.UidPointDist2 = self.cmbPointDme2.SelectedItem
            return
        if (sender == self.txtPointDme2):
            item.ValPointDist2 = self.txtPointDme2.Value
            return
        if (sender == self.txtFlyDuration):
            item.ValDur = self.txtFlyDuration.Value
            return
        if (sender == self.txtRemarks):
            item.TxtRmk = self.txtRemarks.Value

    def method_13(self):
        point3d = None
        procEntityBase = None
        selectTool = DlgAixmSelectPosition.smethod_0(
            self.data, point3d, ProcEntityListType.FixesEx)
        QObject.connect(selectTool,
                        SIGNAL("DlgAixmSelectPosition_Smethod_0_Event"),
                        self.method_13_Event)

    def method_13_Event(self, flag, procEntityBase):
        # flag, procEntityBase = DlgAixmSelectPosition.smethod_0(self.data, point3d, ProcEntityListType.Fixes)
        if (flag and procEntityBase != None):
            if (not self.cmbPosUid.Contains(procEntityBase)):
                self.cmbPosUid.Add(procEntityBase)
            self.cmbPosUid.SelectedIndex = self.cmbPosUid.IndexOf(
                procEntityBase)
            self.txtFlyDuration_TextChanged(self.cmbPosUid)

    def method_14(self):
        point3d = None
        procEntityBase = None
        selectTool = DlgAixmSelectPosition.smethod_0(
            self.data, point3d, ProcEntityListType.CentersEx)
        QObject.connect(selectTool,
                        SIGNAL("DlgAixmSelectPosition_Smethod_0_Event"),
                        self.method_14_Event)

    def method_14_Event(self, flag, procEntityBase):
        # flag, procEntityBase = DlgAixmSelectPosition.smethod_0(self.data, point3d, ProcEntityListType.Centers)
        if (flag and procEntityBase != None):
            if (not self.cmbCenUid.Contains(procEntityBase)):
                self.cmbCenUid.Add(procEntityBase)
            self.cmbCenUid.SelectedIndex = self.cmbCenUid.IndexOf(
                procEntityBase)
            self.txtFlyDuration_TextChanged(self.cmbCenUid)

    @staticmethod
    def smethod_0(parent, dataBaseProcedureLegsEx_0, dataBaseProcedureData_0,
                  procEntityAHP_0):
        flag = False
        dlgAixmProcLegsEx = DlgAixmProcLegsEx(parent)
        dlgAixmProcLegsEx.legs = dataBaseProcedureLegsEx_0
        dlgAixmProcLegsEx.data = dataBaseProcedureData_0
        if (procEntityAHP_0 != None):
            dlgAixmProcLegsEx.aerodrome = procEntityAHP_0
            dlgAixmProcLegsEx.magnVar = procEntityAHP_0.ValMagVar
        dataBaseProcedureData_0.method_59(dlgAixmProcLegsEx.cmbPosUid,
                                          ProcEntityListType.FixesEx)
        dataBaseProcedureData_0.method_59(dlgAixmProcLegsEx.cmbCenUid,
                                          ProcEntityListType.CentersEx)
        dataBaseProcedureData_0.method_59(dlgAixmProcLegsEx.cmbLegVor,
                                          ProcEntityListType.VORs)
        dataBaseProcedureData_0.method_59(dlgAixmProcLegsEx.cmbLegBackVor,
                                          ProcEntityListType.VORs)
        dataBaseProcedureData_0.method_59(dlgAixmProcLegsEx.cmbPointVor,
                                          ProcEntityListType.VORs)
        dataBaseProcedureData_0.method_59(dlgAixmProcLegsEx.cmbPointDme1,
                                          ProcEntityListType.DMEs)
        dataBaseProcedureData_0.method_59(dlgAixmProcLegsEx.cmbPointDme2,
                                          ProcEntityListType.DMEs)
        if (len(dlgAixmProcLegsEx.legs) == 0):
            dlgAixmProcLegsEx.legs.append(DataBaseProcedureLegEx())

        dlgAixmProcLegsEx.method_7()
        if dlgAixmProcLegsEx.trvLegsStdModel.rowCount() > 0:
            dlgAixmProcLegsEx.trvLegs.setCurrentIndex(
                dlgAixmProcLegsEx.trvLegsStdModel.index(0, 0))
            dlgAixmProcLegsEx.method_6()
        dlgAixmProcLegsEx.method_8()
        dlgAixmProcLegsEx.show()
        return dlgAixmProcLegsEx
class DlgAixmHolding(QDialog):
    def __init__(self, parent = None):
        QDialog.__init__(self, parent)
        
        self.resize(290, 136);
        self.setWindowTitle("Instrument Approach Procedure (IAP)")
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed);
        sizePolicy.setHorizontalStretch(0);
        sizePolicy.setVerticalStretch(0);
        sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth());
        self.setSizePolicy(sizePolicy);
        verticalLayoutDlg = QVBoxLayout(self)
        verticalLayoutDlg.setObjectName(("verticalLayoutDlg"));

        self.groupBox = GroupBox(self)
        verticalLayoutDlg.addWidget(self.groupBox)

        self.pnlBasedOn = ComboBoxPanel(self.groupBox)
        self.pnlBasedOn.Caption = "Based On"
        self.pnlBasedOn.Button = "coordinate_capture.png"
        self.groupBox.Add = self.pnlBasedOn

        self.pnlType = ComboBoxPanel(self.groupBox)
        self.pnlType.Caption = "Type"
        self.groupBox.Add = self.pnlType

        self.txtDescription = TextBoxPanel(self.groupBox, True)
        self.txtDescription.Caption = "Description"
        self.groupBox.Add = self.txtDescription

        self.txtRemarks = TextBoxPanel(self.groupBox, True)
        self.txtRemarks.Caption = "Remarks"
        self.groupBox.Add = self.txtRemarks

        self.btnBoxOkCancel = QDialogButtonBox(self)
        self.btnBoxOkCancel.setObjectName(("btnBoxOkCancel"));
        self.btnBoxOkCancel.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok);
        self.connect(self.btnBoxOkCancel, SIGNAL("accepted()"), self.acceptDlg)
        self.connect(self.btnBoxOkCancel, SIGNAL("rejected()"), self.reject)

        self.connect(self.pnlBasedOn, SIGNAL("Event_3"), self.pnlBasedOn_Event_3)

        verticalLayoutDlg.addWidget(self.btnBoxOkCancel)


        self.data = None
        self.table = None
        self.selected = None;

        self.CaptureCoordTool = CaptureCoordinateToolUpdate(define._canvas)
        self.connect(self.CaptureCoordTool, SIGNAL("resultPointValueList"), self.resultPointValueListMethod)

    def pnlBasedOn_Event_3(self):
        CaptureCoordTool = CaptureCoordinateToolUpdate(define._canvas)
        self.connect(CaptureCoordTool, SIGNAL("resultPointValueList"), self.resultPointValueListMethod)

        define._canvas.setMapTool(self.CaptureCoordTool)

    def resultPointValueListMethod(self, resultValueList):
        if len(resultValueList) > 0:
            point3d = Point3D(float(resultValueList[1]), float(resultValueList[2]), float(resultValueList[3]))
            resultDlg, procEntityBase = DlgAixmSelectPosition.smethod_0(self, self.data, point3d, ProcEntityListType.Holding)
            if (resultDlg and procEntityBase != None):
                if (not self.pnlBasedOn.Contains(procEntityBase)):
                    self.pnlBasedOn.Add(procEntityBase);
                self.pnlBasedOn.SelectedIndex = self.pnlBasedOn.IndexOf(procEntityBase);
    def acceptDlg(self):
        selectedItem = self.pnlBasedOn.SelectedItem;
        codeTypeHoldProcAixm = self.pnlType.SelectedItem
        for row in self.table:
            flag = True;
            if (self.selected != None and row == self.selected):
                flag = False;
            if (row["basedOnEnt"] != selectedItem):
                flag = False;
            if (row["codeType"] != codeTypeHoldProcAixm):
                flag = False;
            if (not flag):
                continue;
            strS = "Cannot create a duplicate procedure entry.\n\nBased on = {0}\nType = {1}".format(self.pnlBasedOn.SelectedItem, self.pnlType.SelectedItem);
            QMessageBox.warning(self, "Error", strS);
            return;
        self.accept()
    

    def method_6(self):
        pass

    @staticmethod
    def smethod_0(dataBaseHoldings_0, dataBaseProcedureData_0, dataRow_0):
        flag = False;
        dlgAixmHolding = DlgAixmHolding()
        dlgAixmHolding.data = dataBaseProcedureData_0;
        dlgAixmHolding.table = dataBaseHoldings_0;
        dlgAixmHolding.selected = dataRow_0;
        dataBaseProcedureData_0.method_59(dlgAixmHolding.pnlBasedOn, ProcEntityListType.Holding);
        dlgAixmHolding.pnlType.Items = CodeTypeHoldProcAixm.Items;
        if (dataRow_0 != None and len(dataRow_0) > 0):
            dlgAixmHolding.pnlBasedOn.SelectedIndex = dlgAixmHolding.pnlBasedOn.IndexOf(dataRow_0["basedOnEnt"]);
            dlgAixmHolding.pnlType.SelectedIndex = dlgAixmHolding.pnlType.method_3(dataRow_0["codeType"]);
            if (dataRow_0["txtDescr"] != None):
                dlgAixmHolding.txtDescription.Value = dataRow_0["txtDescr"];
            if (dataRow_0["txtRmk"] != None):
                dlgAixmHolding.txtRemarks.Value = dataRow_0["txtRmk"];
        resultDlg = dlgAixmHolding.exec_()
        if (resultDlg == 1):
            dataRow0 = dataRow_0 == None or len(dataRow_0) == 0;
            strS = [];
            if (not dataRow0):
                for a in dataBaseHoldings_0.nameList:
                    strS.append(None)
                # str = new string[dataBaseHoldings_0.Columns.Count];
                i = 0
                for name in dataBaseHoldings_0.nameList:
                    strS[i] = dataRow_0[name]
                    i += 1
            else:
                dataRow_0 = dataBaseHoldings_0.NewRow();
            dataRow_0["basedOnEnt"] = dlgAixmHolding.pnlBasedOn.SelectedItem;
            if (dataRow0):
                dataRow_0["oldBasedOnEnt"] = dataRow_0["basedOnEnt"];
            dataRow_0["codeType"] = dlgAixmHolding.pnlType.SelectedItem;
            if (dataRow0):
                dataRow_0["oldCodeType"] = dataRow_0["codeType"];
            if (not String.IsNullOrEmpty(dlgAixmHolding.txtDescription.Value)):
                dataRow_0["txtDescr"] = dlgAixmHolding.txtDescription.Value;
            else:
                dataRow_0["txtDescr"] = None;
            if (not String.IsNullOrEmpty(dlgAixmHolding.txtRemarks.Value)):
                dataRow_0["txtRmk"] = dlgAixmHolding.txtRemarks.Value;
            else:
                dataRow_0["txtRmk"] = None;
            if (dataRow0):
                dataRow_0["procLegs"] = DataBaseProcedureLegs();
                dataRow_0["procLegsEx"] = DataBaseProcedureLegsEx();
            if (not dataRow0):
                num = 1;
                while (num < len(strS)):
                    if (not strS[num] == dataRow_0[dataRow_0.nameList[num]]):
                        dataRow_0["changed"] = "True";
                        if (dataRow0):
                            dataBaseHoldings_0.RowsAdd(dataRow_0);
                        flag = True;
                        return flag;
                    else:
                        num += 1;
            else:
                dataRow_0["new"] = "True";
            if (dataRow0):
                dataBaseHoldings_0.RowsAdd(dataRow_0);
            flag = True;
            return flag;
        return flag
Example #4
0
class DlgChartingTemplate(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self, parent)

        self.resize(100, 70)
        self.setWindowTitle("Template Properties")
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
        self.setSizePolicy(sizePolicy)
        verticalLayoutDlg = QVBoxLayout(self)
        verticalLayoutDlg.setObjectName(("verticalLayoutDlg"))

        self.groupBox1 = GroupBox(self)
        self.groupBox1.Caption = ""
        verticalLayoutDlg.addWidget(self.groupBox1)

        self.pnlSpace = ComboBoxPanel(self.groupBox1)
        self.pnlSpace.Caption = "Target Space"
        self.pnlSpace.LabelWidth = 120
        self.groupBox1.Add = self.pnlSpace

        self.pnlDwg = TextBoxPanel(self.groupBox1)
        self.pnlDwg.Caption = "Drawing File"
        self.pnlDwg.LabelWidth = 120
        self.groupBox1.Add = self.pnlDwg

        self.pnlTitle = TextBoxPanel(self.groupBox1)
        self.pnlTitle.Caption = "Titlee"
        self.pnlTitle.LabelWidth = 120
        self.groupBox1.Add = self.pnlTitle

        self.btnBoxOkCancel = QDialogButtonBox(self)
        self.btnBoxOkCancel.setObjectName(("btnBoxOkCancel"))
        self.btnBoxOkCancel.setStandardButtons(QDialogButtonBox.Cancel
                                               | QDialogButtonBox.Ok)
        # btnOK = self.btnBoxOkCancel.button(QDialogButtonBox.Ok)
        # btnOK.setText("Create")
        self.connect(self.btnBoxOkCancel, SIGNAL("accepted()"), self.acceptDlg)
        self.connect(self.btnBoxOkCancel, SIGNAL("rejected()"), self.reject)

        verticalLayoutDlg.addWidget(self.btnBoxOkCancel)

        self.pnlSpace.Add(DrawingSpace.ModelSpace)
        self.pnlSpace.Add(DrawingSpace.PaperSpace)
        self.pnlSpace.SelectedIndex = 1

        # if (String.IsNullOrEmpty(self.pnlDwg.Value)):
        #     # DlgChartingTemplate height = self
        #     # height.Height = height.Height - self.pnlDwg.Height
        #     self.pnlDwg.Visible = False

        # self.pnlCodeType.Items = CodeTypeDesigPtAixm.Items

    def acceptDlg(self):

        self.accept()

    def get_TemplateDrawing(self):
        return self.pnlDwg.Value

    def set_TemplateDrawing(self, val):
        self.pnlDwg.Value = val

    TemplateDrawing = property(get_TemplateDrawing, set_TemplateDrawing, None,
                               None)

    def get_TemplateSpace(self):
        if (self.pnlSpace.SelectedIndex == 0):
            return DrawingSpace.ModelSpace
        return DrawingSpace.PaperSpace

    def set_TemplateSpace(self, val):
        if (val == DrawingSpace.ModelSpace):
            self.pnlSpace.SelectedIndex = 0
            return
        self.pnlSpace.SelectedIndex = 1

    TemplateSpace = property(get_TemplateSpace, set_TemplateSpace, None, None)

    def get_TemplateTitle(self):
        return self.pnlTitle.Value

    def set_TemplateTitle(self, val):
        self.pnlTitle.Value = val

    TemplateTitle = property(get_TemplateTitle, set_TemplateTitle, None, None)

    @staticmethod
    def smethod_0(parent, string_0, drawingSpace_0, string_1):
        flag = False
        dlgChartingTemplate = DlgChartingTemplate(parent)
        dlgChartingTemplate.TemplateTitle = string_0
        dlgChartingTemplate.TemplateDrawing = string_1
        dlgChartingTemplate.TemplateSpace = drawingSpace_0
        result = dlgChartingTemplate.exec_()
        if (not result):
            flag = False
        else:
            string_0 = dlgChartingTemplate.TemplateTitle
            drawingSpace_0 = dlgChartingTemplate.TemplateSpace
            flag = True
        return flag, string_0, drawingSpace_0

    @staticmethod
    def smethod_1(parent, string_0, drawingSpace_0):
        flag = False
        dlgChartingTemplate = DlgChartingTemplate(parent)
        dlgChartingTemplate.TemplateTitle = string_0
        dlgChartingTemplate.TemplateSpace = drawingSpace_0
        result = dlgChartingTemplate.exec_()
        if (not result):
            flag = False
        else:
            string_0 = dlgChartingTemplate.TemplateTitle
            drawingSpace_0 = dlgChartingTemplate.TemplateSpace
            flag = True
        return flag, string_0, drawingSpace_0
class SelectProcedureForm(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self)

        self.setObjectName(("ui_ProjectMngForm"))
        self.resize(200, 200)
        font = QFont()
        font.setFamily(("Arial"))
        font.setBold(False)
        font.setWeight(50)
        self.setFont(font)

        self.setWindowTitle("Open Procedure")

        self.vlForm = QVBoxLayout(self)
        self.vlForm.setObjectName(("vl_ProjectMngForm"))
        self.vlForm.setSpacing(9)
        self.vlForm.setMargin(9)

        self.basicFrame = Frame(self)
        self.vlForm.addWidget(self.basicFrame)

        self.comboUser = ComboBoxPanel(self.basicFrame)
        self.comboUser.Caption = "Select User"
        self.comboUser.LabelWidth = 120
        self.comboUser.Width = 200
        self.basicFrame.Add = self.comboUser

        self.comboAIP = ComboBoxPanel(self.basicFrame)
        self.comboAIP.Caption = "AIP Chart"
        self.comboAIP.LabelWidth = 120
        self.comboAIP.Width = 200
        self.basicFrame.Add = self.comboAIP

        self.comboProject = ComboBoxPanel(self.basicFrame)
        self.comboProject.Caption = "Project"
        self.comboProject.LabelWidth = 120
        self.comboProject.Width = 200
        self.basicFrame.Add = self.comboProject

        self.comboSubproject = ComboBoxPanel(self.basicFrame)
        self.comboSubproject.Caption = "Sub-Project"
        self.comboSubproject.LabelWidth = 120
        self.comboSubproject.Width = 200
        self.basicFrame.Add = self.comboSubproject

        self.comboWorkspace = ComboBoxPanel(self.basicFrame)
        self.comboWorkspace.Caption = "Workspace"
        self.comboWorkspace.LabelWidth = 120
        self.comboWorkspace.Width = 200
        self.basicFrame.Add = self.comboWorkspace

        self.comboProcedure = ComboBoxPanel(self.basicFrame)
        self.comboProcedure.Caption = "Procedure"
        self.comboProcedure.LabelWidth = 120
        self.comboProcedure.Width = 200
        self.basicFrame.Add = self.comboProcedure

        self.btnFrame = Frame(self.basicFrame, "HL")
        self.basicFrame.Add = self.btnFrame

        self.buttonStart = QPushButton(self.btnFrame)
        self.buttonStart.setObjectName("buttonStart")
        self.buttonStart.setText("Start")
        self.btnFrame.Add = self.buttonStart

        self.buttonCalcel = QPushButton(self.btnFrame)
        self.buttonCalcel.setObjectName("buttonCalcel")
        self.buttonCalcel.setText("Cancel")
        self.btnFrame.Add = self.buttonCalcel

        self.connect(self.comboProject, SIGNAL("Event_0"),
                     self.comboProject_SelectedIndexChanged)
        self.connect(self.comboSubproject, SIGNAL("Event_0"),
                     self.comboSubproject_SelectedIndexChanged)
        self.connect(self.comboWorkspace, SIGNAL("Event_0"),
                     self.comboWorkspace_SelectedIndexChanged)

        self.buttonStart.clicked.connect(self.buttonStart_Click)
        self.buttonCalcel.clicked.connect(self.buttonCalcel_Click)

        for ui in AirCraftOperation.g_userList.ListUserInfo:
            self.comboUser.Add(ui.Name)

        for pi in AirCraftOperation.g_projectList.ProjectsList:
            if (pi.Pt == enumProjectType.ptAipChart):
                self.comboAIP.Add(pi.Name)
            elif (pi.Pt == enumProjectType.ptProject):
                self.comboProject.Add(pi.Name)
        self.comboUser.SelectedIndex = 0
        self.comboAIP.SelectedIndex = 0
        self.comboProject.SelectedIndex = 0

    def comboUser_SelectedIndexChanged(self):
        pass

    def buttonCalcel_Click(self):
        self.reject()

    def buttonStart_Click(self):
        index = AirCraftOperation.g_projectList.FindByName(
            self.comboAIP.SelectedItem, enumProjectType.ptAipChart)
        if index != None:
            AirCraftOperation.g_currentAIP = AirCraftOperation.g_projectList.ProjectsList[
                index]
            if (not QFile.exists(AirCraftOperation.g_currentAIP.Path)):
                QMessageBox.warning(self, "Warning", "Invalid AIPChart!")
                return

        index = AirCraftOperation.g_projectList.GetIndexOfWsOrProcedure(
            enumProjectType.ptFile, self.comboProject.SelectedItem,
            self.comboSubproject.SelectedItem,
            self.comboWorkspace.SelectedItem, self.comboProcedure.SelectedItem)
        if index != None:
            AirCraftOperation.g_currentProcedure = AirCraftOperation.g_projectList.ProjectsList[
                index]
        else:
            QMessageBox.warning(
                self, "Warning",
                "Invalid Procedure!\nPlease create or modify a procedure!")
            self.reject()
        # IWorkspaceFactory ipWSF = new ShapefileWorkspaceFactoryClass()
        # IWorkspace ipWS = ipWSF.OpenFromFile(AirCraftOperation.g_currentProcedure.Path, 0)
        # if (ipWS == null)
        # {
        #     throw new Exception("Failed in opening the procedure path!")
        # }

        index = AirCraftOperation.g_projectList.Find(
            self.comboProject.SelectedItem, enumProjectType.ptProject)
        if index != None:
            AirCraftOperation.g_currentProject = AirCraftOperation.g_projectList.ProjectsList[
                index]
        else:
            QMessageBox.warning(
                self, "Warning",
                "Invalid Project!\nPlease create or modify a project!")
            self.reject()

        index = AirCraftOperation.g_projectList.GetIndexOfWsOrProcedure(
            enumProjectType.ptSubProject, self.comboProject.SelectedItem,
            self.comboSubproject.SelectedItem)
        if index != None:
            AirCraftOperation.g_currentSubproject = AirCraftOperation.g_projectList.ProjectsList[
                index]
        else:
            QMessageBox.warning(
                self, "Warning",
                "Invalid Sub-Project!\nPlease create or modify a sub-project!")
            self.reject()

        index = AirCraftOperation.g_projectList.GetIndexOfWsOrProcedure(
            enumProjectType.ptWorkspace, self.comboProject.SelectedItem,
            self.comboSubproject.SelectedItem,
            self.comboWorkspace.SelectedItem)
        if index != None:
            AirCraftOperation.g_currentWorkspace = AirCraftOperation.g_projectList.ProjectsList[
                index]
        else:
            QMessageBox.warning(
                self, "Warning",
                "Invalid Workspace!\nPlease create or modify a Workspace!")
            self.reject()

        self.accept()

    def comboProject_SelectedIndexChanged(self):
        listSubprojects = AirCraftOperation.g_projectList.GetLinkedProjects(
            self.comboProject.SelectedItem, enumProjectType.ptProject,
            enumProjectType.ptSubProject)
        self.comboSubproject.Clear()
        if (listSubprojects != None and len(listSubprojects) > 0):

            self.comboSubproject.Items = listSubprojects
            self.comboSubproject.SelectedIndex = 0

    def comboSubproject_SelectedIndexChanged(self):
        listWorkspace = AirCraftOperation.g_projectList.GetLinkedProjects(
            self.comboSubproject.SelectedItem, enumProjectType.ptSubProject,
            enumProjectType.ptWorkspace)
        self.comboWorkspace.Clear()
        if (listWorkspace != None and len(listWorkspace) > 0):

            self.comboWorkspace.Items = listWorkspace
            self.comboWorkspace.SelectedIndex = 0

    def comboWorkspace_SelectedIndexChanged(self):
        listProcedures = AirCraftOperation.g_projectList.GetLinkedProjects(
            self.comboWorkspace.SelectedItem, enumProjectType.ptWorkspace,
            enumProjectType.ptFile)
        self.comboProcedure.Clear()
        if (listProcedures != None and len(listProcedures) > 0):

            self.comboProcedure.Items = listProcedures
            self.comboProcedure.SelectedIndex = 0
class DlgAixmProcLegs(QDialog):
    def __init__(self, parent = None):
        QDialog.__init__(self, parent)
        
        self.resize(290, 136);
        self.setWindowTitle("Procedure Legs (AIXM 4.5)")
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed);
        sizePolicy.setHorizontalStretch(0);
        sizePolicy.setVerticalStretch(0);
        sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth());
        self.setSizePolicy(sizePolicy);
        verticalLayoutDlg = QVBoxLayout(self)
        verticalLayoutDlg.setObjectName(("verticalLayoutDlg"));

        self.gbAll = GroupBox(self, "HL")
        self.gbAll.Caption = "Legs"
        verticalLayoutDlg.addWidget(self.gbAll)

        self.trvLegs = QTreeView(self.gbAll)
        self.trvLegsStdModel = StandardItemModel()
        self.trvLegs.setModel(self.trvLegsStdModel)
        self.gbAll.Add = self.trvLegs

        self.flowLayoutPanel1 = Frame(self.gbAll)
        self.gbAll.Add = self.flowLayoutPanel1

        self.btnAdd = QPushButton(self.flowLayoutPanel1)
        icon = QIcon()
        icon.addPixmap(QPixmap("Resource/add.png"), QIcon.Normal, QIcon.Off)
        self.btnAdd.setIcon(icon)
        self.flowLayoutPanel1.Add = self.btnAdd

        self.btnRemove = QPushButton(self.flowLayoutPanel1)
        icon = QIcon()
        icon.addPixmap(QPixmap("Resource/remove.png"), QIcon.Normal, QIcon.Off)
        self.btnRemove.setIcon(icon)
        self.flowLayoutPanel1.Add = self.btnRemove

        self.btnMoveUp = QPushButton(self.flowLayoutPanel1)
        icon = QIcon()
        icon.addPixmap(QPixmap("Resource/up.png"), QIcon.Normal, QIcon.Off)
        self.btnMoveUp.setIcon(icon)
        self.flowLayoutPanel1.Add = self.btnMoveUp

        self.btnMoveDown = QPushButton(self.flowLayoutPanel1)
        icon = QIcon()
        icon.addPixmap(QPixmap("Resource/down.png"), QIcon.Normal, QIcon.Off)
        self.btnMoveDown.setIcon(icon)
        self.flowLayoutPanel1.Add = self.btnMoveDown

        self.scrollBox = Frame(self.gbAll)
        self.gbAll.Add = self.scrollBox

        self.gbFix = GroupBox(self.scrollBox)
        self.gbFix.Caption = "Fix"
        self.scrollBox.Add = self.gbFix

        self.cmbFixPos = ComboBoxPanel(self.gbFix)
        self.cmbFixPos.Caption = "Position"
        self.cmbFixPos.Button = "coordinate_capture.png"
        self.gbFix.Add = self.cmbFixPos

        self.pnlCodeRoleFix = ComboBoxPanel(self.gbFix)
        self.pnlCodeRoleFix.Caption = "Type"
        self.gbFix.Add = self.pnlCodeRoleFix

        self.gbAttributes = GroupBox(self.scrollBox)
        self.gbAttributes.Caption = "Attributes"
        self.scrollBox.Add = self.gbAttributes

        self.cmbRecommendedEnt = ComboBoxPanel(self.gbAttributes)
        self.cmbRecommendedEnt.Caption = "Recommended Navigational Aid"
        self.gbAttributes.Add = self.cmbRecommendedEnt

        self.pnlCodePhase = ComboBoxPanel(self.gbAttributes)
        self.pnlCodePhase.Caption = "Fligh Phase"
        self.gbAttributes.Add = self.pnlCodePhase

        self.pnlCodeType = ComboBoxPanel(self.gbAttributes)
        self.pnlCodeType.Caption = "Leg Type"
        self.gbAttributes.Add = self.pnlCodeType

        self.pnlLegVOR = Frame(self.gbAttributes, "HL")
        self.gbAttributes.Add = self.pnlLegVOR

        self.cmbCodeTypeCourse = ComboBoxPanel(self.pnlLegVOR)
        self.cmbCodeTypeCourse.Caption = "Course Angle (" + define._degreeStr + ")"
        self.pnlLegVOR.Add = self.cmbCodeTypeCourse

        self.txtValCourse = TrackRadialBoxPanel(self.pnlLegVOR)
        self.txtValCourse.LabelWidth = 0
        self.pnlLegVOR.Add = self.txtValCourse

        self.pnlCodeDirTurn = ComboBoxPanel(self.gbAttributes)
        self.pnlCodeDirTurn.Caption = "Turn Direction"
        self.gbAttributes.Add = self.pnlCodeDirTurn

        self.pnlTurnValid = ComboBoxPanel(self.gbAttributes)
        self.pnlTurnValid.Caption = "Fly-By"
        self.gbAttributes.Add = self.pnlTurnValid

        self.cmbCenter = ComboBoxPanel(self.gbAttributes)
        self.cmbCenter.Caption = "Center"
        self.cmbCenter.Button = "coordinate_capture.png"
        self.gbAttributes.Add = self.cmbCenter

        self.pnlValBankAngle = NumberBoxPanel(self.gbAttributes)
        self.pnlValBankAngle.Caption = "Bank Angle (" + define._degreeStr + ")"
        self.gbAttributes.Add = self.pnlValBankAngle

        self.pnlCodeDescrDistVer = ComboBoxPanel(self.gbAttributes)
        self.pnlCodeDescrDistVer.Caption = "Altitude Interpretation"
        self.gbAttributes.Add = self.pnlCodeDescrDistVer

        self.pnlVerDistLower = Frame(self.gbAttributes, "HL")
        self.gbAttributes.Add = self.pnlVerDistLower

        self.cmbDistVerLower = ComboBoxPanel(self.pnlVerDistLower)
        self.cmbDistVerLower.CaptionUnits = "ft"
        self.cmbDistVerLower.Caption = "Lower Altitude Limit"
        self.pnlVerDistLower.Add = self.cmbDistVerLower

        self.txtDistVerLower = AltitudeBoxPanel(self.pnlVerDistLower)
        self.txtDistVerLower.CaptionUnits = "ft"
        self.txtDistVerLower.LabelWidth = 0
        self.pnlVerDistLower.Add = self.txtDistVerLower

        self.pnlDistVerUpper = Frame(self.gbAttributes, "HL")
        self.gbAttributes.Add = self.pnlDistVerUpper

        self.cmbDistVerUpper = ComboBoxPanel(self.pnlDistVerUpper)
        self.cmbDistVerUpper.CaptionUnits = "ft"
        self.cmbDistVerUpper.Caption = "Upper Altitude Limit"
        self.pnlDistVerUpper.Add = self.cmbDistVerUpper

        self.txtDistVerUpper = AltitudeBoxPanel(self.pnlDistVerUpper)
        self.txtDistVerUpper.CaptionUnits = "ft"
        self.txtDistVerUpper.LabelWidth = 0
        self.pnlDistVerUpper.Add = self.txtDistVerUpper

        self.pnlValVerAngle = NumberBoxPanel(self.gbAttributes)
        self.pnlValVerAngle.Caption = "Climb / Descent Angle [+/-] (" + define._degreeStr + ")"
        self.gbAttributes.Add = self.pnlValVerAngle

        self.tableLayoutPanel2 = Frame(self.gbAttributes, "HL")
        self.gbAttributes.Add = self.tableLayoutPanel2

        self.cmbCodeSpeedRef = ComboBoxPanel(self.tableLayoutPanel2)
        self.cmbCodeSpeedRef.CaptionUnits = "kts"
        self.cmbCodeSpeedRef.Caption = "Speed Restriction"
        self.tableLayoutPanel2.Add = self.cmbCodeSpeedRef

        self.txtValSpeed = SpeedBoxPanel(self.tableLayoutPanel2)
        self.txtValSpeed.LabelWidth = 0
        self.tableLayoutPanel2.Add = self.txtValSpeed

        self.pnlValDist = DistanceBoxPanel(self.gbAttributes, DistanceUnits.NM)
        self.pnlValDist.Caption = "Segment Length"
        self.pnlValDist.Button = None
        self.gbAttributes.Add = self.pnlValDist

        self.pnlValDur = NumberBoxPanel(self.gbAttributes)
        self.pnlValDur.CaptionUnits = "min"
        self.pnlValDur.Caption = "Duration"
        self.gbAttributes.Add = self.pnlValDur

        self.pnlCodeRepAtc = ComboBoxPanel(self.gbAttributes)
        self.pnlCodeRepAtc.Caption = "ATC Reporting"
        self.gbAttributes.Add = self.pnlCodeRepAtc

        self.pnlValTheta = TrackRadialBoxPanel(self.gbAttributes)
        self.pnlValTheta.Caption = "Magnetic Bearing / Radial from Recommended Nav. Aid"
        self.pnlValTheta.LabelWidth = 350
        self.gbAttributes.Add = self.pnlValTheta

        self.pnlValRho = DistanceBoxPanel(self.gbAttributes, DistanceUnits.NM)
        self.pnlValRho.Caption = "Distance from Recommended Nav. Aid"
        self.pnlValRho.LabelWidth = 350
        self.gbAttributes.Add = self.pnlValRho

        self.txtRemarks = TextBoxPanel(self.gbAttributes, True)
        self.txtRemarks.Caption = "Remarks"
        self.gbAttributes.Add = self.txtRemarks

        self.btnBoxOkCancel = QDialogButtonBox(self)
        self.btnBoxOkCancel.setObjectName(("btnBoxOkCancel"));
        self.btnBoxOkCancel.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok);
        self.connect(self.btnBoxOkCancel, SIGNAL("accepted()"), self.acceptDlg)
        self.connect(self.btnBoxOkCancel, SIGNAL("rejected()"), self.reject)



        verticalLayoutDlg.addWidget(self.btnBoxOkCancel)

        self.trvLegs.pressed.connect(self.trvLegs_pressed)

        self.data = None
        self.legs = None
        self.aerodrome = None;
        self.magnVar = 0.0



        for value in CodeIapFixAixm.Items:
            self.pnlCodeRoleFix.Add(value);
        for codeTypeProcPathAixm in CodeTypeProcPathAixm.Items:
            self.pnlCodeType.Add(codeTypeProcPathAixm);
        for codePhaseProcAixm in CodePhaseProcAixm.Items:
            self.pnlCodePhase.Add(codePhaseProcAixm);
        for codeTypeCourseAixm in CodeTypeCourseAixm.Items:
            self.cmbCodeTypeCourse.Add(codeTypeCourseAixm);
        for codeDirTurnAixm in CodeDirTurnAixm.Items:
            self.pnlCodeDirTurn.Add(codeDirTurnAixm);
        for codeDescrDistVerAixm in CodeDescrDistVerAixm.Items:
            self.pnlCodeDescrDistVer.Add(codeDescrDistVerAixm);
        for codeDistVerAixm in CodeDistVerAixm.Items:
            self.cmbDistVerLower.Add(codeDistVerAixm);
        for value1 in CodeDistVerAixm.Items:
            self.cmbDistVerUpper.Add(value1);
        for codeSpeedRefAixm in CodeSpeedRefAixm.Items:
            self.cmbCodeSpeedRef.Add(codeSpeedRefAixm);
        for codeTypeFlyByAixm in CodeTypeFlyByAixm.Items:
            self.pnlTurnValid.Add(codeTypeFlyByAixm);
        for codeRepAtcAixm in CodeRepAtcAixm.Items:
            self.pnlCodeRepAtc.Add(codeRepAtcAixm);
        self.method_6()

        self.connect(self.pnlValRho, SIGNAL("Event_0"), self.pnlValRho_Event_0)
        self.connect(self.pnlValTheta, SIGNAL("Event_0"), self.pnlValTheta_Event_0)
        self.connect(self.pnlCodeRepAtc, SIGNAL("Event_0"), self.pnlCodeRepAtc_Event_0)
        self.connect(self.pnlValDur, SIGNAL("Event_0"), self.pnlValDur_Event_0)
        self.connect(self.pnlValDist, SIGNAL("Event_0"), self.pnlValDist_Event_0)
        self.connect(self.cmbCodeSpeedRef, SIGNAL("Event_0"), self.cmbCodeSpeedRef_Event_0)
        self.connect(self.txtValSpeed, SIGNAL("Event_0"), self.txtValSpeed_Event_0)
        self.connect(self.txtDistVerUpper, SIGNAL("Event_0"), self.txtDistVerUpper_Event_0)
        self.connect(self.cmbDistVerUpper, SIGNAL("Event_0"), self.cmbDistVerUpper_Event_0)
        self.connect(self.txtDistVerLower, SIGNAL("Event_0"), self.txtDistVerLower_Event_0)

        self.connect(self.cmbDistVerLower, SIGNAL("Event_0"), self.cmbDistVerLower_Event_0)
        self.connect(self.pnlValBankAngle, SIGNAL("Event_0"), self.pnlValBankAngle_Event_0)
        self.connect(self.cmbCenter, SIGNAL("Event_0"), self.cmbCenter_Event_0)
        self.connect(self.pnlTurnValid, SIGNAL("Event_0"), self.pnlTurnValid_Event_0)
        self.connect(self.pnlCodeDirTurn, SIGNAL("Event_0"), self.pnlCodeDirTurn_Event_0)
        self.connect(self.cmbCodeTypeCourse, SIGNAL("Event_0"), self.cmbCodeTypeCourse_Event_0)
        self.connect(self.txtValCourse, SIGNAL("Event_0"), self.txtValCourse_Event_0)
        self.connect(self.pnlCodeType, SIGNAL("Event_0"), self.pnlCodeType_Event_0)
        self.connect(self.pnlCodePhase, SIGNAL("Event_0"), self.pnlCodePhase_Event_0)
        self.connect(self.pnlCodeRoleFix, SIGNAL("Event_0"), self.pnlCodeRoleFix_Event_0)
        self.connect(self.txtRemarks, SIGNAL("Event_0"), self.txtRemarks_Event_0)
        self.connect(self.cmbRecommendedEnt, SIGNAL("Event_0"), self.cmbRecommendedEnt_Event_0)

        self.connect(self.cmbFixPos, SIGNAL("Event_0"), self.cmbFixPos_Event_0)
        self.connect(self.cmbCenter, SIGNAL("Event_3"), self.method_14)
        self.connect(self.cmbFixPos, SIGNAL("Event_3"), self.method_13)

        self.btnAdd.clicked.connect(self.btnAdd_Click)
        self.btnMoveDown.clicked.connect(self.btnMoveDown_Click)
        self.btnMoveUp.clicked.connect(self.btnMoveUp_Click)
        self.btnRemove.clicked.connect(self.btnRemove_Click)

        self.trvLegs.setHeaderHidden(True)

        if self.trvLegsStdModel.rowCount() > 0:
            self.trvLegs.setCurrentIndex(self.trvLegsStdModel.index(0,0))
            self.method_8()
        # rootModelIndex = self.trvLegs.rootIndex()
        # rootItem = self.trvLegsStdModel.itemFromIndex(rootModelIndex)
        # rootItem.setText("Legs")
    def btnAdd_Click(self):
        if (len(self.trvLegs.selectedIndexes()) == 0 and not self.method_5()):
            return;
        listInsertPosition = ListInsertPosition.Append;
        resultDlg, listInsertPosition = DlgAixmInsertLeg.smethod_0(listInsertPosition)
        if (self.trvLegsStdModel.rowCount() > 0 and not resultDlg):
            return;
        count = self.trvLegsStdModel.rowCount()
        if (listInsertPosition == ListInsertPosition.Before):
            count = self.trvLegs.selectedIndexes()[0].row();
        elif (listInsertPosition == ListInsertPosition.After):
            count = self.trvLegs.selectedIndexes()[0].row() + 1;
        self.trvLegsStdModel.setItem(self.trvLegsStdModel.rowCount(), QStandardItem(str(self.trvLegsStdModel.rowCount() + 1)));
        self.legs.insert(count, DataBaseProcedureLeg());
        self.trvLegs.setCurrentIndex(self.trvLegsStdModel.index(count, 0))
        self.trvLegs_pressed()
    def btnMoveDown_Click(self):
        if (len(self.trvLegs.selectedIndexes()) == 0):
            return;
        index = self.trvLegs.selectedIndexes()[0].row();
        item = self.legs[index];
        self.legs.pop(index);
        self.legs.insert(index + 1, item);
        self.trvLegs.setCurrentIndex(self.trvLegsStdModel.index(index + 1, 0))
        self.trvLegs_pressed()
    def btnMoveUp_Click(self):
        if (len(self.trvLegs.selectedIndexes()) == 0):
            return;
        index = self.trvLegs.selectedIndexes()[0].row();
        item = self.legs[index];
        self.legs.pop(index);
        self.legs.insert(index - 1, item);
        self.trvLegs.setCurrentIndex(self.trvLegsStdModel.index(index - 1, 0))
        self.trvLegs_pressed()
    def btnRemove_Click(self):
        item = None;
        if (len(self.trvLegs.selectedIndexes()) == 0):
            return;
        if (QMessageBox.question(self, "Question", "Are you sure you want to delete the selected procedure leg?", QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes):
            index = self.trvLegs.selectedIndexes()[0].row();
            self.legs.pop(index);
            self.trvLegsStdModel.takeRow(self.trvLegsStdModel.rowCount() - 1);
            if (index >= self.trvLegsStdModel.rowCount() - 1):
                index -= 1;
            # treeView = self.trvLegs;
            # if (index >= 0):
            if self.trvLegsStdModel.rowCount() > 0 and index < 0:
                index = 0
            self.trvLegs.setCurrentIndex(self.trvLegsStdModel.index(index, 0))

            self.trvLegs_pressed()
    def cmbRecommendedEnt_Event_0(self):
        self.method_10(self.cmbRecommendedEnt)
    def txtRemarks_Event_0(self):
        self.method_10(self.txtRemarks)
    def cmbFixPos_Event_0(self):
        self.method_10(self.cmbFixPos)
    def cmbDistVerLower_Event_0(self):
        self.method_10(self.cmbDistVerLower)
    def pnlValBankAngle_Event_0(self):
        self.method_10(self.pnlValBankAngle)
    def cmbCenter_Event_0(self):
        self.method_10(self.cmbCenter)
    def pnlTurnValid_Event_0(self):
        self.method_10(self.pnlTurnValid)
    def pnlCodeDirTurn_Event_0(self):
        self.method_10(self.pnlCodeDirTurn)
    def cmbCodeTypeCourse_Event_0(self):
        self.method_10(self.cmbCodeTypeCourse)
    def txtValCourse_Event_0(self):
        self.method_10(self.txtValCourse)
    def pnlCodeType_Event_0(self):
        self.method_10(self.pnlCodeType)
    def pnlCodePhase_Event_0(self):
        self.method_10(self.pnlCodePhase)
    def pnlCodeRoleFix_Event_0(self):
        self.method_10(self.pnlCodeRoleFix)
    def txtDistVerLower_Event_0(self):
        self.method_10(self.txtDistVerLower)
    def cmbDistVerUpper_Event_0(self):
        self.method_10(self.cmbDistVerUpper)
    def txtDistVerUpper_Event_0(self):
        self.method_10(self.txtDistVerUpper)
    def txtValSpeed_Event_0(self):
        self.method_10(self.txtValSpeed)
    def cmbCodeSpeedRef_Event_0(self):
        self.method_10(self.cmbCodeSpeedRef)
    def pnlValDist_Event_0(self):
        self.method_10(self.pnlValDist)
    def pnlValDur_Event_0(self):
        self.method_10(self.pnlValDur)
    def pnlCodeRepAtc_Event_0(self):
        self.method_10(self.pnlCodeRepAtc)
    def pnlValTheta_Event_0(self):
        self.method_10(self.pnlValTheta)
    def pnlValRho_Event_0(self):
        self.method_10(self.pnlValRho)
    def trvLegs_pressed(self):
        self.method_6()
        self.method_8()
    def acceptDlg(self):
        self.legs.refresh()
        QObject.emit(self, SIGNAL("DlgAixmProcLegs_Smethod_0_Event"), self.legs, self.data)
        self.accept()
    
    def method_5(self):
        pass
    def method_6(self):
        self.btnOK = self.btnBoxOkCancel.button(QDialogButtonBox.Ok)
        self.btnOK.setEnabled(len(self.trvLegs.selectedIndexes()) > 0)
        self.btnRemove.setEnabled(len(self.trvLegs.selectedIndexes()) > 0);
        self.btnMoveUp.setEnabled((len(self.trvLegs.selectedIndexes()) > 0 and self.trvLegs.selectedIndexes()[0].row() != 0) and True or False);
        self.btnMoveDown.setEnabled((len(self.trvLegs.selectedIndexes()) <=  0 or self.trvLegsStdModel.rowCount() <= 0) and False or ((len(self.trvLegs.selectedIndexes()) >  0) and self.trvLegs.selectedIndexes()[0].row() < self.trvLegsStdModel.rowCount() - 1));
	
    def method_7(self):
        for i in range(self.legs.Count):
            num = i + 1;
            self.trvLegsStdModel.setItem(i, QStandardItem(str(num)));
        self.method_6()
        # if (self.trvLegsStdModel.rowCount() > 0):
        #     self.trvLegs.setCurrentIndex() = self.trvLegs.Nodes[0];
    def method_8(self):
        if (len(self.trvLegs.selectedIndexes()) <= 0):
            self.scrollBox.Enabled = False;
            self.cmbFixPos.SelectedIndex = -1;
            self.pnlCodeRoleFix.SelectedIndex = -1;
            self.cmbRecommendedEnt.SelectedIndex = -1;
            self.pnlCodePhase.SelectedIndex = -1;
            self.pnlCodeType.SelectedIndex = -1;
            self.cmbCodeTypeCourse.SelectedIndex = -1;
            self.txtValCourse.Value = 0;
            self.pnlCodeDirTurn.SelectedIndex = -1;
            self.cmbCenter.SelectedIndex = -1;
            self.pnlTurnValid.SelectedIndex = -1;
            self.pnlValBankAngle.Value = 0;
            self.pnlCodeDescrDistVer.SelectedIndex = -1;
            self.cmbDistVerLower.SelectedIndex = -1;
            self.txtDistVerLower.Value = None;
            self.cmbDistVerUpper.SelectedIndex = -1;
            self.txtDistVerUpper.Value = None;
            self.pnlValVerAngle.Value = None;
            self.cmbCodeSpeedRef.SelectedIndex = -1;
            self.txtValSpeed.Value = None;
            self.pnlValDist.Value = None;
            self.pnlValDur.Value = 0;
            self.pnlCodeRepAtc.SelectedIndex = -1;
            self.pnlValTheta.Value = 0;
            self.pnlValRho.Value = None;
            self.txtRemarks.Value = ""
            return;
        self.scrollBox.Enabled = True;
        item = self.legs[self.trvLegs.selectedIndexes()[0].row()];
        if (item.PointEnt == None):
            self.cmbFixPos.SelectedIndex = -1;
        else:
            self.cmbFixPos.SelectedIndex = self.cmbFixPos.IndexOf(item.PointEnt);
        self.pnlCodeRoleFix.SelectedIndex = self.method_9(self.pnlCodeRoleFix.Items, item.CodeRoleFix);
        if (item.RecommendedEnt == None):
            self.cmbRecommendedEnt.SelectedIndex = -1;
        else:
            self.cmbRecommendedEnt.SelectedIndex = self.cmbRecommendedEnt.IndexOf(item.RecommendedEnt);
        self.pnlCodePhase.SelectedIndex = self.method_9(self.pnlCodePhase.Items, item.CodePhase);
        self.pnlCodeType.SelectedIndex = self.method_9(self.pnlCodeType.Items, item.CodeType);
        self.cmbCodeTypeCourse.SelectedIndex = self.method_9(self.cmbCodeTypeCourse.Items, item.CodeTypeCourse);
        self.txtValCourse.Value = item.ValCourse;
        self.pnlCodeDirTurn.SelectedIndex = self.method_9(self.pnlCodeDirTurn.Items, item.CodeDirTurn);
        if (item.CenterEnt == None):
            self.cmbCenter.SelectedIndex = -1;
        else:
            self.cmbCenter.SelectedIndex = self.cmbCenter.IndexOf(item.CenterEnt);
        self.pnlTurnValid.SelectedIndex = self.method_9(self.pnlTurnValid.Items, item.CodeTurnValid)
        self.pnlValBankAngle.Value = item.ValBankAngle;
        self.pnlCodeDescrDistVer.SelectedIndex = self.method_9(self.pnlCodeDescrDistVer.Items, item.CodeDescrDistVer)
        self.cmbDistVerLower.SelectedIndex = self.method_9(self.cmbDistVerLower.Items, item.CodeDistVerLower)
        self.txtDistVerLower.Value = item.ValDistVerLower;
        self.cmbDistVerUpper.SelectedIndex = self.method_9(self.cmbDistVerUpper.Items, item.CodeDistVerUpper)
        self.txtDistVerUpper.Value = item.ValDistVerUpper;
        self.pnlValVerAngle.Value = item.ValVerAngle;
        self.cmbCodeSpeedRef.SelectedIndex = self.method_9(self.cmbCodeSpeedRef.Items, item.CodeSpeedRef)
        self.txtValSpeed.Value = item.ValSpeedLimit;
        self.pnlValDist.Value = item.ValDist;
        self.pnlValDur.Value = item.ValDur;
        self.pnlCodeRepAtc.SelectedIndex = self.method_9(self.pnlCodeRepAtc.Items, item.CodeRepAtc)
        self.pnlValTheta.Value = item.ValTheta;
        self.pnlValRho.Value = item.ValRho;
        self.txtRemarks.Value = item.TxtRmk;
        self.method_6()

    def method_9(self, ilist_0, string_0):
        for i in range(len(ilist_0)):
            if (ilist_0[i] == string_0):
                return i;
        return -1;
    def method_10(self, sender):
        if (len(self.trvLegs.selectedIndexes()) == 0):
            return;
        item = self.legs[self.trvLegs.selectedIndexes()[0].row()];
        if (sender == self.cmbFixPos):
            item.PointEnt = self.cmbFixPos.SelectedItem;
        if (sender == self.pnlCodeRoleFix):
            item.CodeRoleFix = self.pnlCodeRoleFix.SelectedItem;
        if (sender == self.cmbRecommendedEnt):
            item.RecommendedEnt = self.cmbRecommendedEnt.SelectedItem
        if (sender == self.pnlCodePhase):
            item.CodePhase = self.pnlCodePhase.SelectedItem
        if (sender == self.pnlCodeType):
            item.CodeType = self.pnlCodeType.SelectedItem
        if (sender == self.cmbCodeTypeCourse):
            item.CodeTypeCourse = self.cmbCodeTypeCourse.SelectedItem
        if (sender == self.txtValCourse):
            item.ValCourse = self.txtValCourse.Value;
        if (sender == self.pnlCodeDirTurn):
            item.CodeDirTurn = self.pnlCodeDirTurn.SelectedItem
        if (sender == self.cmbCenter):
            item.CenterEnt = self.cmbCenter.SelectedItem;
            return;
        if (sender == self.pnlTurnValid):
            item.CodeTurnValid = self.pnlTurnValid.SelectedItem
            return;
        if (sender == self.pnlValBankAngle):
            item.ValBankAngle = self.pnlValBankAngle.Value;
            return;
        if (sender == self.pnlCodeDescrDistVer):
            item.CodeDescrDistVer = self.pnlTurnValid.SelectedItem
            return;
        if (sender == self.cmbDistVerLower):
            item.CodeDistVerLower = self.cmbDistVerLower.SelectedItem
            return;
        if (sender == self.txtDistVerLower):
            item.ValDistVerLower = self.txtDistVerLower.Value;
            return;
        if (sender == self.cmbDistVerUpper):
            item.CodeDistVerUpper = self.cmbDistVerUpper.SelectedItem
            return;
        if (sender == self.txtDistVerUpper):
            item.ValDistVerUpper = self.txtDistVerUpper.Value;
            return;
        if (sender == self.pnlValVerAngle):
            item.ValVerAngle = self.pnlValVerAngle.Value;
            return;
        if (sender == self.cmbCodeSpeedRef):
            item.CodeSpeedRef = self.cmbCodeSpeedRef.SelectedItem
            return;
        if (sender == self.txtValSpeed):
            item.ValSpeedLimit = self.txtValSpeed.Value;
            return;
        if (sender == self.pnlValDist):
            item.ValDist = self.pnlValDist.Value;
            return;
        if (sender == self.pnlValDur):
            item.ValDur = self.pnlValDur.Value;
            return;
        if (sender == self.pnlCodeRepAtc):
            item.CodeRepAtc = self.pnlCodeRepAtc.SelectedItem
            return;
        if (sender == self.pnlValTheta):
            item.ValTheta = self.pnlValTheta.Value;
            return;
        if (sender == self.pnlValRho):
            item.ValRho = self.pnlValRho.Value;
            return;
        if (sender == self.txtRemarks):
            item.TxtRmk = self.txtRemarks.Value;
    def method_13(self):
        point3d = None;
        procEntityBase = None;
        selectTool = DlgAixmSelectPosition.smethod_0(self.data, point3d, ProcEntityListType.Fixes)
        QObject.connect(selectTool, SIGNAL("DlgAixmSelectPosition_Smethod_0_Event"), self.method_13_Event)
    def method_13_Event(self, flag, procEntityBase):
        # flag, procEntityBase = DlgAixmSelectPosition.smethod_0(self.data, point3d, ProcEntityListType.Fixes)
        if (flag and procEntityBase != None):
            if (not self.cmbFixPos.Contains(procEntityBase)):
                self.cmbFixPos.Add(procEntityBase);
            self.cmbFixPos.SelectedIndex = self.cmbFixPos.IndexOf(procEntityBase);
            self.method_10(self.cmbFixPos);

    def method_14(self):
        point3d = None;
        procEntityBase = None;
        selectTool = DlgAixmSelectPosition.smethod_0(self.data, point3d, ProcEntityListType.Centers)
        QObject.connect(selectTool, SIGNAL("DlgAixmSelectPosition_Smethod_0_Event"), self.method_14_Event)
    def method_14_Event(self, flag, procEntityBase):
        # flag, procEntityBase = DlgAixmSelectPosition.smethod_0(self.data, point3d, ProcEntityListType.Centers)
        if (flag and procEntityBase != None):
            if (not self.cmbCenter.Contains(procEntityBase)):
                self.cmbCenter.Add(procEntityBase);
            self.cmbCenter.SelectedIndex = self.cmbCenter.IndexOf(procEntityBase);
            self.method_10(self.cmbCenter);
    @staticmethod
    def smethod_0(parent, dataBaseProcedureLegs_0, dataBaseProcedureData_0, procEntityAHP_0):
        flag = False
        dlgAixmProcLeg = DlgAixmProcLegs(parent)
        dlgAixmProcLeg.legs = dataBaseProcedureLegs_0;
        dlgAixmProcLeg.data = dataBaseProcedureData_0;
        if (procEntityAHP_0 != None):
            dlgAixmProcLeg.aerodrome = procEntityAHP_0;
            dlgAixmProcLeg.magnVar = procEntityAHP_0.ValMagVar;
        dataBaseProcedureData_0.method_59(dlgAixmProcLeg.cmbFixPos, ProcEntityListType.Fixes);
        dataBaseProcedureData_0.method_59(dlgAixmProcLeg.cmbCenter, ProcEntityListType.Centers);
        dataBaseProcedureData_0.method_59(dlgAixmProcLeg.cmbRecommendedEnt, ProcEntityListType.RecommendedNavAids);
        if (dlgAixmProcLeg.legs.Count == 0):
            dlgAixmProcLeg.legs.Add(DataBaseProcedureLeg());

        dlgAixmProcLeg.method_7()
        if dlgAixmProcLeg.trvLegsStdModel.rowCount() > 0:
            dlgAixmProcLeg.trvLegs.setCurrentIndex(dlgAixmProcLeg.trvLegsStdModel.index(0,0))
            dlgAixmProcLeg.method_6()

        dlgAixmProcLeg.method_8();
        dlgAixmProcLeg.show()
        return dlgAixmProcLeg
Example #7
0
class ProcedureMngForm(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self)

        self.setObjectName(("ui_ProcedureMngForm"))
        self.resize(200, 200)
        font = QFont()
        font.setFamily(("Arial"))
        font.setBold(False)
        font.setWeight(50)
        self.setFont(font)

        self.vlForm = QVBoxLayout(self)
        self.vlForm.setObjectName(("vl_ProceduretMngForm"))
        self.vlForm.setSpacing(9)
        self.vlForm.setMargin(9)

        self.basicFrame = Frame(self)
        self.vlForm.addWidget(self.basicFrame)

        self.frameName = Frame(self.basicFrame, "HL")
        self.basicFrame.Add = self.frameName

        self.frame = Frame(self.frameName)
        self.frameName.Add = self.frame

        self.comboProjectProcedure = ComboBoxPanel(self.frame)
        self.comboProjectProcedure.Caption = "Project"
        self.comboProjectProcedure.LabelWidth = 120
        self.frame.Add = self.comboProjectProcedure

        self.comboSubProjectProcedure = ComboBoxPanel(self.frame)
        self.comboSubProjectProcedure.Caption = "Sub-Project"
        self.comboSubProjectProcedure.LabelWidth = 120
        self.frame.Add = self.comboSubProjectProcedure

        self.comboWorkspaceProcedure = ComboBoxPanel(self.frame)
        self.comboWorkspaceProcedure.Caption = "Workspace"
        self.comboWorkspaceProcedure.LabelWidth = 120
        self.frame.Add = self.comboWorkspaceProcedure

        self.textNameProcedure = TextBoxPanel(self.frame)
        self.textNameProcedure.Caption = "Procedure Name"
        self.textNameProcedure.LabelWidth = 120
        self.textNameProcedure.Width = 120
        self.frame.Add = self.textNameProcedure

        self.groubox = GroupBox(self.frameName)
        self.groubox.Caption = "Procedures"
        self.frameName.Add = self.groubox

        self.listBoxProcedure = ListBox(self.groubox)
        self.groubox.Add = self.listBoxProcedure

        self.textPathProcedure = TextBoxPanel(self.basicFrame)
        self.textPathProcedure.Caption = "Procedure Path"
        self.textPathProcedure.imageButton.setIcon(QIcon())
        self.textPathProcedure.Button = "opens.png"
        self.textPathProcedure.LabelWidth = 120
        self.textPathProcedure.textBox.setMaximumWidth(10000)
        self.textPathProcedure.textBox.setMinimumWidth(100)
        self.basicFrame.Add = self.textPathProcedure

        self.btnFrame = Frame(self.basicFrame, "HL")
        self.basicFrame.Add = self.btnFrame

        self.buttonAddProcedure = QPushButton(self.btnFrame)
        self.buttonAddProcedure.setObjectName("buttonAddProcedure")
        self.buttonAddProcedure.setText("Add")
        self.btnFrame.Add = self.buttonAddProcedure

        self.buttonModifyProcedure = QPushButton(self.btnFrame)
        self.buttonModifyProcedure.setObjectName("buttonModifyProcedure")
        self.buttonModifyProcedure.setText("Modify")
        self.btnFrame.Add = self.buttonModifyProcedure

        self.buttonDeleteProcedure = QPushButton(self.btnFrame)
        self.buttonDeleteProcedure.setObjectName("buttonDeleteProcedure")
        self.buttonDeleteProcedure.setText("Delete")
        self.btnFrame.Add = self.buttonDeleteProcedure

        self.buttonSaveProcedure = QPushButton(self.btnFrame)
        self.buttonSaveProcedure.setObjectName("buttonSaveProcedure")
        self.buttonSaveProcedure.setText("Save")
        self.btnFrame.Add = self.buttonSaveProcedure

        self.buttonCloseProcedure = QPushButton(self.btnFrame)
        self.buttonCloseProcedure.setObjectName("buttonCloseProcedure")
        self.buttonCloseProcedure.setText("Close")
        self.btnFrame.Add = self.buttonCloseProcedure

        self.connect(self.listBoxProcedure, SIGNAL("Event_0"),
                     self.listBoxProcedure_SelectedIndexChanged)
        self.connect(self.comboProjectProcedure, SIGNAL("Event_0"),
                     self.comboProjectProcedure_SelectedIndexChanged)
        self.connect(self.comboSubProjectProcedure, SIGNAL("Event_0"),
                     self.comboSubProjectProcedure_SelectedIndexChanged)
        self.connect(self.textPathProcedure, SIGNAL("Event_1"),
                     self.buttonBrowseWorkspace_Click)

        self.buttonCloseProcedure.clicked.connect(
            self.buttonCloseProcedure_Click)
        self.buttonSaveProcedure.clicked.connect(
            self.buttonSaveProcedure_Click)
        self.buttonDeleteProcedure.clicked.connect(
            self.buttonDeleteProcedure_Click)
        self.buttonModifyProcedure.clicked.connect(
            self.buttonModifyProcedure_Click)
        self.buttonAddProcedure.clicked.connect(self.buttonAddProcedure_Click)

        for pi in AirCraftOperation.g_projectList.ProjectsList:
            if (pi.Pt == enumProjectType.ptFile):
                self.listBoxProcedure.Add(pi.Name)
            elif (pi.Pt == enumProjectType.ptProject):
                self.comboProjectProcedure.Add(pi.Name)
            elif (pi.Pt == enumProjectType.ptSubProject):
                self.comboSubProjectProcedure.Add(pi.Name)
            elif (pi.Pt == enumProjectType.ptWorkspace):
                self.comboWorkspaceProcedure.Add(pi.Name)
        self.comboProjectProcedure_SelectedIndexChanged()
        self.comboSubProjectProcedure_SelectedIndexChanged()

    def CheckInputValues(self):
        if (self.textNameProcedure.Text == None
                or self.textNameProcedure.Text == ""):
            QMessageBox.warning(self, "Warning", "Please input project name!")
            return False
        if (self.textPathProcedure.Text == None
                or self.textPathProcedure.Text == ""):
            QMessageBox.warning(self, "Warning", "Please input project path!")
            return False
        if (self.comboProjectProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning", "Please select an Project!")
            return False
        if (self.comboSubProjectProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning",
                                "Please select an Sub-Project!")
            return False
        if (self.comboWorkspaceProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning", "Please select an Workspace!")
            return
        directory = QDir(self.textPathProcedure.Text)
        if (not directory.exists()):
            if (QMessageBox.question(
                    self, "Question",
                    "Procedure path dose not exist! Do you create the directory?",
                    QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes):
                directory.mkpath(self.textPathProcedure.Text)
            else:
                return False
        return True

    # private void WorkspaceMngForm_Load(object sender, EventArgs e)
    # {
    #     try
    #     {
    #         foreach (ProjectInfo pi in AirCraftOperation.g_projectList.ProjectsList)
    #         {
    #             if (pi.Pt == enumProjectType.ptFile)
    #             {
    #                 self.listBoxProcedure.Items.Add(pi.Name)
    #             }
    #             else if (pi.Pt == enumProjectType.ptProject)
    #             {
    #                 self.comboProjectProcedure.Items.Add(pi.Name)
    #             }
    #             else if (pi.Pt == enumProjectType.ptSubProject)
    #             {
    #                 self.comboSubProjectProcedure.Items.Add(pi.Name)
    #             }
    #             else if (pi.Pt == enumProjectType.ptWorkspace)
    #             {
    #                 self.comboWorkspaceProcedure.Items.Add(pi.Name)
    #             }
    #         }
    #     }
    #     catch (System.Exception ex)
    #     {
    #         MessageBox.Show(ex.Message)
    #     }
    # }

    def listBoxProcedure_SelectedIndexChanged(self):
        if (self.listBoxProcedure.SelectedIndex < 0):
            return
        pi = AirCraftOperation.g_projectList.Find(
            self.listBoxProcedure.Items[self.listBoxProcedure.SelectedIndex])
        self.textNameProcedure.Text = AirCraftOperation.g_projectList.ProjectsList[
            pi].Name
        self.textPathProcedure.Text = AirCraftOperation.g_projectList.ProjectsList[
            pi].Path
        self.comboProjectProcedure.SelectedIndex = self.comboProjectProcedure.IndexOf(
            AirCraftOperation.g_projectList.ProjectsList[pi].ProjName)
        self.comboSubProjectProcedure.SelectedIndex = self.comboSubProjectProcedure.IndexOf(
            AirCraftOperation.g_projectList.ProjectsList[pi].SubProjName)
        self.comboWorkspaceProcedure.SelectedIndex = self.comboWorkspaceProcedure.IndexOf(
            AirCraftOperation.g_projectList.ProjectsList[pi].WorkspaceName)

    def buttonBrowseWorkspace_Click(self):
        folderPath = QFileDialog.getExistingDirectory(self,
                                                      "Open Project Path")
        if (folderPath != None and folderPath != ""):
            self.textPathProcedure.Value = folderPath

    def buttonSaveProcedure_Click(self):
        res = QMessageBox.question(self, "Question",
                                   "Save changes to project information?",
                                   QMessageBox.Yes | QMessageBox.No)
        if (res == QMessageBox.Yes):
            AirCraftOperation.g_projectList.WriteProjectInfoXml()
            self.buttonSaveProcedure.setEnabled(False)

    def buttonCloseProcedure_Click(self):
        # if (self.buttonSaveProcedure.isEnabled() == True):
        #     DialogResult res = MessageBox.Show("Save changes to project information?", "Alert", MessageBoxButtons.YesNoCancel)
        #     if (res == DialogResult.Yes)
        #     {
        #         self.buttonSaveWorkspace_Click(sender, e)
        #     }
        #     else if (res == DialogResult.No)
        #     {
        #     }
        #     else if (res == DialogResult.Cancel)
        #     {
        #         self.DialogResult = DialogResult.None
        #         return
        #     }
        # }
        self.accept()

    def buttonAddProcedure_Click(self):
        if (not self.CheckInputValues()):
            return

        if (AirCraftOperation.g_projectList.Find(self.textNameProcedure.Text)
                != None):
            QMessageBox.warning(self, "Warning", "The same name exist!")
            return
        pi = ProjectInfo()
        pi.Pt = enumProjectType.ptFile
        pi.Name = self.textNameProcedure.Text
        pi.Path = self.textPathProcedure.Text
        pi.ProjName = self.comboProjectProcedure.SelectedItem
        pi.SubProjName = self.comboSubProjectProcedure.SelectedItem
        pi.WorkspaceName = self.comboWorkspaceProcedure.SelectedItem
        pi.UserName = AirCraftOperation.g_loginedUser.Name

        AirCraftOperation.g_projectList.Add(pi)

        nIndex = self.listBoxProcedure.Add(pi.Name)
        self.listBoxProcedure.SelectedIndex = nIndex
        self.buttonSaveProcedure.setEnabled(True)

    def buttonModifyProcedure_Click(self):
        if (self.listBoxProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning",
                                "Please select project in the projects list!")
            return
        if (not self.CheckInputValues()):
            return
        index = AirCraftOperation.g_projectList.Find(
            self.listBoxProcedure.Items[self.listBoxProcedure.SelectedIndex])
        AirCraftOperation.g_projectList.ProjectsList[
            index].Pt = enumProjectType.ptFile
        AirCraftOperation.g_projectList.ProjectsList[
            index].Name = self.textNameProcedure.Text
        AirCraftOperation.g_projectList.ProjectsList[
            index].Path = self.textPathProcedure.Text
        AirCraftOperation.g_projectList.ProjectsList[
            index].ProjName = self.comboProjectProcedure.SelectedItem
        AirCraftOperation.g_projectList.ProjectsList[
            index].SubProjName = self.comboSubProjectProcedure.SelectedItem
        AirCraftOperation.g_projectList.ProjectsList[
            index].WorkspaceName = self.comboWorkspaceProcedure.SelectedItem
        AirCraftOperation.g_projectList.ProjectsList[
            index].UserName = AirCraftOperation.g_loginedUser.Name

        self.listBoxProcedure.Clear()
        for pi in AirCraftOperation.g_projectList.ProjectsList:
            if (pi.Pt == enumProjectType.ptFile):
                self.listBoxProcedure.Add(pi.Name)

        # AirCraftOperation.g_projectList.Remove(pi)
        #
        # AirCraftOperation.g_projectList.Add(pi)
        self.buttonSaveProcedure.setEnabled(True)

    def buttonDeleteProcedure_Click(self):
        if (self.listBoxProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning",
                                "Please select project in the projects list!")
            return

        if (QMessageBox.question(
                self, "Question",
                "Are you sure to delete " + self.listBoxProcedure.Items[
                    self.listBoxProcedure.SelectedIndex] + "?",
                QMessageBox.Yes | QMessageBox.No) == QMessageBox.No):
            return
        AirCraftOperation.g_projectList.Remove(
            self.listBoxProcedure.Items[self.listBoxProcedure.SelectedIndex],
            enumProjectType.ptFile)
        self.buttonSaveProcedure.setEnabled(True)
        self.listBoxProcedure.Clear()
        for pi in AirCraftOperation.g_projectList.ProjectsList:
            if (pi.Pt == enumProjectType.ptFile):
                self.listBoxProcedure.Add(pi.Name)

    def comboProjectProcedure_SelectedIndexChanged(self):
        listSubprojects = AirCraftOperation.g_projectList.GetLinkedProjects(
            self.comboProjectProcedure.SelectedItem, enumProjectType.ptProject,
            enumProjectType.ptSubProject)
        self.comboSubProjectProcedure.Clear()
        if (listSubprojects != None and len(listSubprojects) > 0):

            self.comboSubProjectProcedure.Items = listSubprojects
            self.comboSubProjectProcedure.SelectedIndex = 0
        self.comboSubProjectProcedure_SelectedIndexChanged()

    def comboSubProjectProcedure_SelectedIndexChanged(self):
        listWorkspace = AirCraftOperation.g_projectList.GetLinkedProjects(
            self.comboSubProjectProcedure.SelectedItem,
            enumProjectType.ptSubProject, enumProjectType.ptWorkspace)
        self.comboWorkspaceProcedure.Clear()
        if (listWorkspace != None and len(listWorkspace) > 0):

            self.comboWorkspaceProcedure.Items = listWorkspace
            self.comboWorkspaceProcedure.SelectedIndex = 0
class SubProjectMngForm(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self, parent)

        self.setObjectName("ui_SubProjectMngForm")
        self.resize(200, 200)
        font = QFont()
        font.setFamily("Arial")
        font.setBold(False)
        font.setWeight(50)
        self.setFont(font)

        self.vlForm = QVBoxLayout(self)
        self.vlForm.setObjectName("vl_ProjectMngForm")
        self.vlForm.setSpacing(9)
        self.vlForm.setMargin(9)

        self.setWindowTitle("SubProject Manage Dialog")

        self.basicFrame = Frame(self)
        self.vlForm.addWidget(self.basicFrame)

        self.frameName = Frame(self.basicFrame, "HL")
        self.basicFrame.Add = self.frameName

        self.frame = Frame(self.frameName)
        self.frameName.Add = self.frame

        self.comboProjectSubproject = ComboBoxPanel(self.frame)
        self.comboProjectSubproject.Caption = "Project"
        self.comboProjectSubproject.LabelWidth = 120
        self.frame.Add = self.comboProjectSubproject

        self.textNameSubproject = TextBoxPanel(self.frame)
        self.textNameSubproject.Caption = "Sub-Project Name"
        self.textNameSubproject.LabelWidth = 120
        self.textNameSubproject.Width = 120
        self.frame.Add = self.textNameSubproject

        self.textFullName = TextBoxPanel(self.frame)
        self.textFullName.Caption = "Full Name"
        self.textFullName.LabelWidth = 120
        self.textFullName.Width = 120
        self.textFullName.Visible = False
        self.frame.Add = self.textFullName

        self.groubox = GroupBox(self.frameName)
        self.groubox.Caption = "Sub-Projects"
        self.frameName.Add = self.groubox

        self.listBoxSubproject = ListBox(self.groubox)
        self.groubox.Add = self.listBoxSubproject

        self.textPathSubproject = TextBoxPanel(self.basicFrame)
        self.textPathSubproject.Caption = "Sub-Project Path"
        self.textPathSubproject.imageButton.setIcon(QIcon())
        self.textPathSubproject.Button = "opens.png"
        self.textPathSubproject.LabelWidth = 120

        self.textPathSubproject.textBox.setMaximumWidth(10000)
        self.textPathSubproject.textBox.setMinimumWidth(100)
        self.basicFrame.Add = self.textPathSubproject

        self.btnFrame = Frame(self.basicFrame, "HL")
        self.basicFrame.Add = self.btnFrame

        self.buttonAddSubproject = QPushButton(self.btnFrame)
        self.buttonAddSubproject.setObjectName("buttonAddSubproject")
        self.buttonAddSubproject.setText("Add")
        self.btnFrame.Add = self.buttonAddSubproject

        self.buttonModifySubproject = QPushButton(self.btnFrame)
        self.buttonModifySubproject.setObjectName("buttonModifySubproject")
        self.buttonModifySubproject.setText("Modify")
        self.btnFrame.Add = self.buttonModifySubproject

        self.buttonDeleteSubproject = QPushButton(self.btnFrame)
        self.buttonDeleteSubproject.setObjectName("buttonDeleteSubproject")
        self.buttonDeleteSubproject.setText("Delete")
        self.btnFrame.Add = self.buttonDeleteSubproject

        self.buttonCloseSubproject = QPushButton(self.btnFrame)
        self.buttonCloseSubproject.setObjectName("buttonCloseSubproject")
        self.buttonCloseSubproject.setText("Close")
        self.btnFrame.Add = self.buttonCloseSubproject

        self.connect(self.listBoxSubproject, SIGNAL("Event_0"),
                     self.listBoxSubproject_SelectedIndexChanged)
        self.connect(self.textPathSubproject, SIGNAL("Event_1"),
                     self.buttonBrowseSubproject_Click)

        self.connect(self.textNameSubproject, SIGNAL("Event_0"),
                     self.setFullName)
        self.connect(self.comboProjectSubproject, SIGNAL("Event_0"),
                     self.setFullNameProjectNameChanged)

        self.buttonCloseSubproject.clicked.connect(
            self.buttonCloseSubproject_Click)
        self.buttonDeleteSubproject.clicked.connect(
            self.buttonDeleteSubproject_Click)
        self.buttonModifySubproject.clicked.connect(
            self.buttonModifySubproject_Click)
        self.buttonAddSubproject.clicked.connect(
            self.buttonAddSubproject_Click)
        self.editFlag = True

        for pi in AirCraftOperation.g_projectList.ProjectsList:
            if pi.Pt == enumProjectType.ptSubProject:
                self.listBoxSubproject.Add(pi.Name)
            elif pi.Pt == enumProjectType.ptProject:
                self.comboProjectSubproject.Add(pi.Name)

        self.editFlag = False
        self.setFullNameProjectNameChanged()

    def setFullName(self):
        if self.editFlag:
            return

        if self.comboProjectSubproject.Count <= 0:
            return

        self.editFlag = True

        index = AirCraftOperation.g_projectList.Find(
            self.comboProjectSubproject.SelectedItem,
            enumProjectType.ptProject)
        projPath = AirCraftOperation.g_projectList.ProjectsList[index].Path
        self.textFullName.Value = self.comboProjectSubproject.SelectedItem + "_" + self.textNameSubproject.Value
        self.textPathSubproject.Value = projPath + "/" + self.textNameSubproject.Value

        self.editFlag = False

    def setFullNameProjectNameChanged(self):
        if self.editFlag:
            return

        self.editFlag = True

        index = AirCraftOperation.g_projectList.Find(
            self.comboProjectSubproject.SelectedItem,
            enumProjectType.ptProject)

        if index is None:
            self.editFlag = False
            return

        projPath = AirCraftOperation.g_projectList.ProjectsList[index].Path
        d = QDir(projPath)
        fileInfoList = d.entryInfoList()

        self.listBoxSubproject.Clear()
        self.textNameSubproject.Value = ""

        piList = AirCraftOperation.g_projectList.FindProjectListByPt(
            enumProjectType.ptSubProject)

        if len(piList) == 0:
            self.editFlag = False
            self.textPathSubproject.Value = projPath + "/" + self.textNameSubproject.Value
            self.textFullName.Value = self.comboProjectSubproject.SelectedItem + "_" + self.textNameSubproject.Value
            return

        subProjNameList = []
        i = 0

        for pi in piList:
            if pi.ProjName == self.comboProjectSubproject.SelectedItem:
                subProjNameList.append(pi.SubProjName)
                self.listBoxSubproject.Add(pi.SubProjName)
            i += 1

        if len(subProjNameList) > 0:
            self.textNameSubproject.Value = subProjNameList[0]

        self.textFullName.Value = self.comboProjectSubproject.SelectedItem + "_" + self.textNameSubproject.Value

        self.textPathSubproject.Value = projPath + "/" + self.textNameSubproject.Value
        self.editFlag = False

    def CheckInputValues(self):
        if self.textNameSubproject.Text is None or self.textNameSubproject.Text == "":
            QMessageBox.warning(self, "Warning", "Please input project name!")
            return False

        if self.textPathSubproject.Text is None or self.textPathSubproject.Text == "":
            QMessageBox.warning(self, "Warning", "Please input project path!")
            return False

        if self.comboProjectSubproject.SelectedIndex < 0:
            QMessageBox.warning(self, "Warning", "Please select an project!")
            return False

        directory = QDir(self.textPathSubproject.Text)

        if not directory.exists():
            if QMessageBox.question(
                    self, "Question",
                    "Procedure path dose not exist! Do you create the directory?",
                    QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
                directory.mkpath(self.textPathSubproject.Text)
            else:
                return False

        return True

    def listBoxSubproject_SelectedIndexChanged(self):
        if self.listBoxSubproject.SelectedIndex < 0:
            return

        self.textFullName.Value = self.comboProjectSubproject.SelectedItem + "_" + self.listBoxSubproject.Items[
            self.listBoxSubproject.SelectedIndex]
        pi = AirCraftOperation.g_projectList.Find(self.textFullName.Value)
        self.textNameSubproject.Text = AirCraftOperation.g_projectList.ProjectsList[
            pi].Name
        self.textPathSubproject.Text = AirCraftOperation.g_projectList.ProjectsList[
            pi].Path
        self.comboProjectSubproject.SelectedIndex = self.comboProjectSubproject.IndexOf(
            AirCraftOperation.g_projectList.ProjectsList[pi].ProjName)

    def buttonBrowseSubproject_Click(self):
        folderPath = QFileDialog.getExistingDirectory(self,
                                                      "Open Project Path",
                                                      define.projectManageDir)

        if folderPath is not None and folderPath != "":
            self.textPathSubproject.Value = folderPath
            define.projectManageDir = folderPath

    def buttonCloseSubproject_Click(self):
        res = QMessageBox.question(self, "Question",
                                   "Save changes to project information?",
                                   QMessageBox.Yes | QMessageBox.No)

        if res == QMessageBox.Yes:
            AirCraftOperation.g_projectList.WriteProjectInfoXml()

        self.accept()

    def buttonAddSubproject_Click(self):
        if not self.CheckInputValues():
            return

        if AirCraftOperation.g_projectList.Find(
                self.textFullName.Text) is not None:
            QMessageBox.warning(self, "Warning", "The same sub-project exist!")
            return

        pi = ProjectInfo()
        pi.Pt = enumProjectType.ptSubProject
        pi.Name = self.textNameSubproject.Text
        pi.SubProjName = self.textNameSubproject.Text
        pi.Path = self.textPathSubproject.Text
        pi.ProjName = self.comboProjectSubproject.SelectedItem
        pi.UserName = AirCraftOperation.loginedUser.Name
        pi.FullName = self.textFullName.Value

        AirCraftOperation.g_projectList.Add(pi)

        nIndex = self.listBoxSubproject.Add(pi.Name)
        self.listBoxSubproject.SelectedIndex = nIndex

    def buttonModifySubproject_Click(self):
        if self.listBoxSubproject.SelectedIndex < 0:
            QMessageBox.warning(self, "Warning",
                                "Please select project in the projects list!")
            return

        if not self.CheckInputValues():
            return

        index = AirCraftOperation.g_projectList.Find(
            self.comboProjectSubproject.SelectedItem + "_" +
            self.listBoxSubproject.Items[self.listBoxSubproject.SelectedIndex])
        AirCraftOperation.g_projectList.ProjectsList[
            index].Pt = enumProjectType.ptSubProject
        AirCraftOperation.g_projectList.ProjectsList[
            index].Name = self.textNameSubproject.Text
        AirCraftOperation.g_projectList.ProjectsList[
            index].SubProjName = self.textNameSubproject.Text
        AirCraftOperation.g_projectList.ProjectsList[
            index].Path = self.textPathSubproject.Text
        AirCraftOperation.g_projectList.ProjectsList[
            index].ProjName = self.comboProjectSubproject.SelectedItem
        AirCraftOperation.g_projectList.ProjectsList[
            index].UserName = AirCraftOperation.loginedUser.Name
        AirCraftOperation.g_projectList.ProjectsList[
            index].FullName = self.textFullName.Value

        self.listBoxSubproject.Clear()

        for pi in AirCraftOperation.g_projectList.ProjectsList:
            if pi.Pt == enumProjectType.ptSubProject:
                self.listBoxSubproject.Add(pi.Name)

    def buttonDeleteSubproject_Click(self):
        if self.listBoxSubproject.SelectedIndex < 0:
            QMessageBox.warning(self, "Warning",
                                "Please select project in the projects list!")
            return

        if QMessageBox.question(
                self, "Question",
                "Are you sure to delete " + self.listBoxSubproject.Items[
                    self.listBoxSubproject.SelectedIndex] + "?",
                QMessageBox.Yes | QMessageBox.No) == QMessageBox.No:
            return

        AirCraftOperation.g_projectList.Remove(self.textFullName.Value)

        self.listBoxSubproject.Clear()

        self.setFullNameProjectNameChanged()

        AirCraftOperation.g_projectList.WriteProjectInfoXml()
class ProcedureMngForm(QDialog):
    def __init__(self, parent=None):
        QDialog.__init__(self)

        self.setObjectName(("ui_ProcedureMngForm"))
        self.resize(200, 200)
        font = QFont()
        font.setFamily(("Arial"))
        font.setBold(False)
        font.setWeight(50)
        self.setFont(font)
        self.setWindowTitle("Procedure Manage Dialog")

        self.vlForm = QVBoxLayout(self)
        self.vlForm.setObjectName(("vl_ProceduretMngForm"))
        self.vlForm.setSpacing(9)
        self.vlForm.setMargin(9)

        self.basicFrame = Frame(self)
        self.vlForm.addWidget(self.basicFrame)

        self.frameName = Frame(self.basicFrame, "HL")
        self.basicFrame.Add = self.frameName

        self.frame = Frame(self.frameName)
        self.frameName.Add = self.frame

        self.comboProjectProcedure = ComboBoxPanel(self.frame)
        self.comboProjectProcedure.Caption = "Project"
        self.comboProjectProcedure.LabelWidth = 120
        self.frame.Add = self.comboProjectProcedure

        self.comboSubProjectProcedure = ComboBoxPanel(self.frame)
        self.comboSubProjectProcedure.Caption = "Sub-Project"
        self.comboSubProjectProcedure.LabelWidth = 120
        self.frame.Add = self.comboSubProjectProcedure

        self.comboWorkspaceProcedure = ComboBoxPanel(self.frame)
        self.comboWorkspaceProcedure.Caption = "Workspace"
        self.comboWorkspaceProcedure.LabelWidth = 120
        self.frame.Add = self.comboWorkspaceProcedure

        self.textNameProcedure = TextBoxPanel(self.frame)
        self.textNameProcedure.Caption = "Procedure Name"
        self.textNameProcedure.LabelWidth = 120
        self.textNameProcedure.Width = 120
        self.frame.Add = self.textNameProcedure

        self.textFullName = TextBoxPanel(self.frame)
        self.textFullName.Caption = "Full Name"
        self.textFullName.LabelWidth = 120
        self.textFullName.Width = 120
        self.textFullName.Visible = False
        self.frame.Add = self.textFullName

        self.groubox = GroupBox(self.frameName)
        self.groubox.Caption = "Procedures"
        self.frameName.Add = self.groubox

        self.listBoxProcedure = ListBox(self.groubox)
        self.groubox.Add = self.listBoxProcedure

        self.textPathProcedure = TextBoxPanel(self.basicFrame)
        self.textPathProcedure.Caption = "Procedure Path"
        self.textPathProcedure.imageButton.setIcon(QIcon())
        self.textPathProcedure.Button = "opens.png"
        self.textPathProcedure.LabelWidth = 120
        self.textPathProcedure.textBox.setMaximumWidth(10000)
        self.textPathProcedure.textBox.setMinimumWidth(100)
        self.basicFrame.Add = self.textPathProcedure

        self.btnFrame = Frame(self.basicFrame, "HL")
        self.basicFrame.Add = self.btnFrame

        self.buttonAddProcedure = QPushButton(self.btnFrame)
        self.buttonAddProcedure.setObjectName("buttonAddProcedure")
        self.buttonAddProcedure.setText("Add")
        self.btnFrame.Add = self.buttonAddProcedure

        self.buttonModifyProcedure = QPushButton(self.btnFrame)
        self.buttonModifyProcedure.setObjectName("buttonModifyProcedure")
        self.buttonModifyProcedure.setText("Modify")
        self.btnFrame.Add = self.buttonModifyProcedure

        self.buttonDeleteProcedure = QPushButton(self.btnFrame)
        self.buttonDeleteProcedure.setObjectName("buttonDeleteProcedure")
        self.buttonDeleteProcedure.setText("Delete")
        self.btnFrame.Add = self.buttonDeleteProcedure

        self.buttonSaveProcedure = QPushButton(self.btnFrame)
        self.buttonSaveProcedure.setObjectName("buttonSaveProcedure")
        self.buttonSaveProcedure.setText("Save")
        self.buttonSaveProcedure.setVisible(False)
        self.btnFrame.Add = self.buttonSaveProcedure

        self.buttonCloseProcedure = QPushButton(self.btnFrame)
        self.buttonCloseProcedure.setObjectName("buttonCloseProcedure")
        self.buttonCloseProcedure.setText("Close")
        self.btnFrame.Add = self.buttonCloseProcedure

        self.connect(self.listBoxProcedure, SIGNAL("Event_0"),
                     self.listBoxProcedure_SelectedIndexChanged)
        self.connect(self.comboProjectProcedure, SIGNAL("Event_0"),
                     self.comboProjectProcedure_SelectedIndexChanged)
        self.connect(self.comboSubProjectProcedure, SIGNAL("Event_0"),
                     self.comboSubProjectProcedure_SelectedIndexChanged)
        self.connect(self.textPathProcedure, SIGNAL("Event_1"),
                     self.buttonBrowseWorkspace_Click)
        self.connect(self.comboWorkspaceProcedure, SIGNAL("Event_0"),
                     self.comboWorkspaceProcedure_SelectedIndexChanged)
        self.connect(self.textNameProcedure, SIGNAL("Event_0"),
                     self.setFullName)

        self.buttonCloseProcedure.clicked.connect(
            self.buttonCloseProcedure_Click)
        self.buttonSaveProcedure.clicked.connect(
            self.buttonSaveProcedure_Click)
        self.buttonDeleteProcedure.clicked.connect(
            self.buttonDeleteProcedure_Click)
        self.buttonModifyProcedure.clicked.connect(
            self.buttonModifyProcedure_Click)
        self.buttonAddProcedure.clicked.connect(self.buttonAddProcedure_Click)
        self.editFlag = True
        for pi in AirCraftOperation.g_projectList.ProjectsList:
            if (pi.Pt == enumProjectType.ptFile):
                self.listBoxProcedure.Add(pi.Name)
            elif (pi.Pt == enumProjectType.ptProject):
                self.comboProjectProcedure.Add(pi.Name)
            elif (pi.Pt == enumProjectType.ptSubProject):
                self.comboSubProjectProcedure.Add(pi.Name)
            elif (pi.Pt == enumProjectType.ptWorkspace):
                self.comboWorkspaceProcedure.Add(pi.Name)
        self.editFlag = False
        self.comboProjectProcedure_SelectedIndexChanged()

    def setFullName(self):
        if self.editFlag:
            return
        self.editFlag = True

        index = AirCraftOperation.g_projectList.GetIndexOfWsOrProcedure(
            enumProjectType.ptWorkspace,
            self.comboProjectProcedure.SelectedItem,
            self.comboSubProjectProcedure.SelectedItem,
            self.comboWorkspaceProcedure.SelectedItem)
        if index == None:
            self.editFlag = False
            return
        projPath = AirCraftOperation.g_projectList.ProjectsList[index].Path
        self.textFullName.Value = self.comboProjectProcedure.SelectedItem + "_" + self.comboSubProjectProcedure.SelectedItem + "_" + self.comboWorkspaceProcedure.SelectedItem + "_" + self.textNameProcedure.Text

        self.textPathProcedure.Value = projPath + "/" + self.textNameProcedure.Value

        self.editFlag = False

    def CheckInputValues(self):
        if (self.textNameProcedure.Text == None
                or self.textNameProcedure.Text == ""):
            QMessageBox.warning(self, "Warning", "Please input project name!")
            return False
        if (self.textPathProcedure.Text == None
                or self.textPathProcedure.Text == ""):
            QMessageBox.warning(self, "Warning", "Please input project path!")
            return False
        if (self.comboProjectProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning", "Please select an Project!")
            return False
        if (self.comboSubProjectProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning",
                                "Please select an Sub-Project!")
            return False
        if (self.comboWorkspaceProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning", "Please select an Workspace!")
            return
        directory = QDir(self.textPathProcedure.Text)
        if (not directory.exists()):
            if (QMessageBox.question(
                    self, "Question",
                    "Procedure path dose not exist! Do you create the directory?",
                    QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes):
                directory.mkpath(self.textPathProcedure.Text)
            else:
                return False
        return True

    def listBoxProcedure_SelectedIndexChanged(self):
        if (self.listBoxProcedure.SelectedIndex < 0):
            return
        pi = AirCraftOperation.g_projectList.Find(
            self.listBoxProcedure.Items[self.listBoxProcedure.SelectedIndex])

        pi = AirCraftOperation.g_projectList.GetIndexOfWsOrProcedure(
            enumProjectType.ptFile, self.comboProjectProcedure.SelectedItem,
            self.comboSubProjectProcedure.SelectedItem,
            self.comboWorkspaceProcedure.SelectedItem,
            self.listBoxProcedure.Items[self.listBoxProcedure.SelectedIndex])
        if pi == None:
            return
        self.textNameProcedure.Text = AirCraftOperation.g_projectList.ProjectsList[
            pi].Name
        self.textPathProcedure.Text = AirCraftOperation.g_projectList.ProjectsList[
            pi].Path

        self.comboProjectProcedure.SelectedIndex = self.comboProjectProcedure.IndexOf(
            AirCraftOperation.g_projectList.ProjectsList[pi].ProjName)
        self.comboSubProjectProcedure.SelectedIndex = self.comboSubProjectProcedure.IndexOf(
            AirCraftOperation.g_projectList.ProjectsList[pi].SubProjName)
        self.comboWorkspaceProcedure.SelectedIndex = self.comboWorkspaceProcedure.IndexOf(
            AirCraftOperation.g_projectList.ProjectsList[pi].WorkspaceName)

    def buttonBrowseWorkspace_Click(self):
        folderPath = QFileDialog.getExistingDirectory(self,
                                                      "Open Project Path",
                                                      define.projectManageDir)
        if (folderPath != None and folderPath != ""):
            self.textPathProcedure.Value = folderPath
            define.projectManageDir = folderPath

    def buttonSaveProcedure_Click(self):
        res = QMessageBox.question(self, "Question",
                                   "Save changes to project information?",
                                   QMessageBox.Yes | QMessageBox.No)
        if (res == QMessageBox.Yes):
            AirCraftOperation.g_projectList.WriteProjectInfoXml()
            self.buttonSaveProcedure.setEnabled(False)

    def buttonCloseProcedure_Click(self):
        res = QMessageBox.question(self, "Question",
                                   "Save changes to project information?",
                                   QMessageBox.Yes | QMessageBox.No)
        if (res == QMessageBox.Yes):
            AirCraftOperation.g_projectList.WriteProjectInfoXml()
            self.buttonSaveProcedure.setEnabled(False)
        self.accept()

    def buttonAddProcedure_Click(self):
        if (not self.CheckInputValues()):
            return

        index = AirCraftOperation.g_projectList.GetIndexOfWsOrProcedure(
            enumProjectType.ptFile, self.comboProjectProcedure.SelectedItem,
            self.comboSubProjectProcedure.SelectedItem,
            self.comboWorkspaceProcedure.SelectedItem,
            self.textNameProcedure.Text)

        if (index != None):
            QMessageBox.warning(self, "Warning", "The same name exist!")
            return
        pi = ProjectInfo()
        pi.Pt = enumProjectType.ptFile
        pi.Name = self.textNameProcedure.Text
        pi.ProcedureName = self.textNameProcedure.Text
        pi.Path = self.textPathProcedure.Text
        pi.ProjName = self.comboProjectProcedure.SelectedItem
        pi.SubProjName = self.comboSubProjectProcedure.SelectedItem
        pi.WorkspaceName = self.comboWorkspaceProcedure.SelectedItem
        pi.FullName = self.textFullName.Text
        pi.UserName = AirCraftOperation.loginedUser.Name

        AirCraftOperation.g_projectList.Add(pi)

        nIndex = self.listBoxProcedure.Add(pi.Name)
        self.listBoxProcedure.SelectedIndex = nIndex
        self.buttonSaveProcedure.setEnabled(True)

    def buttonModifyProcedure_Click(self):
        if (self.listBoxProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning",
                                "Please select project in the projects list!")
            return
        if (not self.CheckInputValues()):
            return
        index = AirCraftOperation.g_projectList.GetIndexOfWsOrProcedure(
            enumProjectType.ptFile, self.comboProjectProcedure.SelectedItem,
            self.comboSubProjectProcedure.SelectedItem,
            self.comboWorkspaceProcedure.SelectedItem,
            self.listBoxProcedure.Items[self.listBoxProcedure.SelectedIndex])

        AirCraftOperation.g_projectList.ProjectsList[
            index].Pt = enumProjectType.ptFile
        AirCraftOperation.g_projectList.ProjectsList[
            index].Name = self.textNameProcedure.Text
        AirCraftOperation.g_projectList.ProjectsList[
            index].ProcedureName = self.textNameProcedure.Text
        AirCraftOperation.g_projectList.ProjectsList[
            index].Path = self.textPathProcedure.Text
        AirCraftOperation.g_projectList.ProjectsList[
            index].ProjName = self.comboProjectProcedure.SelectedItem
        AirCraftOperation.g_projectList.ProjectsList[
            index].SubProjName = self.comboSubProjectProcedure.SelectedItem
        AirCraftOperation.g_projectList.ProjectsList[
            index].WorkspaceName = self.comboWorkspaceProcedure.SelectedItem
        AirCraftOperation.g_projectList.ProjectsList[
            index].FullName = self.textFullName.Text
        AirCraftOperation.g_projectList.ProjectsList[
            index].UserName = AirCraftOperation.loginedUser.Name

        self.listBoxProcedure.Clear()
        self.comboProjectProcedure_SelectedIndexChanged()
        # for pi in AirCraftOperation.g_projectList.ProjectsList:
        #     if (pi.Pt == enumProjectType.ptFile):
        #         self.listBoxProcedure.Add(pi.Name)

        # AirCraftOperation.g_projectList.Remove(pi)
        #
        # AirCraftOperation.g_projectList.Add(pi)
        self.buttonSaveProcedure.setEnabled(True)

    def buttonDeleteProcedure_Click(self):
        if (self.listBoxProcedure.SelectedIndex < 0):
            QMessageBox.warning(self, "Warning",
                                "Please select project in the projects list!")
            return

        if (QMessageBox.question(
                self, "Question",
                "Are you sure to delete " + self.listBoxProcedure.Items[
                    self.listBoxProcedure.SelectedIndex] + "?",
                QMessageBox.Yes | QMessageBox.No) == QMessageBox.No):
            return
        index = AirCraftOperation.g_projectList.GetIndexOfWsOrProcedure(
            enumProjectType.ptFile, self.comboProjectProcedure.SelectedItem,
            self.comboSubProjectProcedure.SelectedItem,
            self.comboWorkspaceProcedure.SelectedItem,
            self.listBoxProcedure.Items[self.listBoxProcedure.SelectedIndex])
        AirCraftOperation.g_projectList.Remove(index)
        self.buttonSaveProcedure.setEnabled(True)
        self.listBoxProcedure.Clear()
        self.comboProjectProcedure_SelectedIndexChanged()
        AirCraftOperation.g_projectList.WriteProjectInfoXml()
        # for pi in AirCraftOperation.g_projectList.ProjectsList:
        #     if (pi.Pt == enumProjectType.ptFile):
        #         self.listBoxProcedure.Add(pi.Name)

    def comboProjectProcedure_SelectedIndexChanged(self):
        if self.editFlag:
            return
        listSubprojects = AirCraftOperation.g_projectList.GetLinkedProjects(
            self.comboProjectProcedure.SelectedItem, enumProjectType.ptProject,
            enumProjectType.ptSubProject)
        self.editFlag = True
        self.comboSubProjectProcedure.Clear()
        if (listSubprojects != None and len(listSubprojects) > 0):
            self.comboSubProjectProcedure.Items = listSubprojects
            self.comboSubProjectProcedure.SelectedIndex = 0
        self.editFlag = False
        self.comboSubProjectProcedure_SelectedIndexChanged()

    def comboSubProjectProcedure_SelectedIndexChanged(self):
        if self.editFlag:
            return
        listWorkspaceList = AirCraftOperation.g_projectList.GetListOfWsOrProcedure(
            enumProjectType.ptWorkspace,
            self.comboProjectProcedure.SelectedItem,
            self.comboSubProjectProcedure.SelectedItem)
        self.editFlag = True
        self.comboWorkspaceProcedure.Clear()
        if (listWorkspaceList != None and len(listWorkspaceList) > 0):
            self.comboWorkspaceProcedure.Items = listWorkspaceList
            self.comboWorkspaceProcedure.SelectedIndex = 0
        self.editFlag = False
        self.comboWorkspaceProcedure_SelectedIndexChanged()

    def comboWorkspaceProcedure_SelectedIndexChanged(self):
        if self.editFlag:
            return
        listProcedureList = AirCraftOperation.g_projectList.GetListOfWsOrProcedure(
            enumProjectType.ptFile, self.comboProjectProcedure.SelectedItem,
            self.comboSubProjectProcedure.SelectedItem,
            self.comboWorkspaceProcedure.SelectedItem)
        self.textNameProcedure.Text = ""
        self.listBoxProcedure.Clear()
        self.editFlag = True
        if len(listProcedureList) > 0:
            self.listBoxProcedure.Items = listProcedureList
            self.listBoxProcedure.SelectedIndex = 0
        self.editFlag = False
        self.setFullName()