def buildUi(self):
        self.oneVariableFeedbackFormWidget = LOneVariableFeedbackFormWidget(self)
        self.conditionTableWidget = LConditionTableWidget(self)
        self.statusTextWidget = LStatusTextWidget(self)

        self.setLWidgets(self.getLWidgets(mode=Lt.AutoDiscoveryMode))

        self.connect(self.oneVariableFeedbackFormWidget, SIGNAL("dataChanged()"), self.on_oneVariableFeedbackFormWidget_dataChanged)

        self.toolBox = QToolBox(self)
        self.toolBox.addItem(self.oneVariableFeedbackFormWidget,"OVF Form")
        self.toolBox.addItem(self.conditionTableWidget,"OVF Condition Table")
        self.toolBox.addItem(self.statusTextWidget,"OVF Status")
        self.toolBox.setCurrentIndex(0)

        layout = QVBoxLayout(self)
        layout.addWidget(self.toolBox)
        self.setLayout(layout)
    def buildUi(self):
        self.xVariableFeedbackFormWidget = LXVariableFeedbackFormWidget(self)
        self.conditionTableWidget = LConditionTableWidget(self)
        self.statusTextWidget = LStatusTextWidget(self)

        self.setLWidgets(self.getLWidgets(mode=Lt.AutoDiscoveryMode))
        for widget in self.getLWidgets():
            debug(self, "LWidget includes %s/%s/%s" % (widget.getName(), widget.getClassName(), widget.getVersion()),4)

        self.connect(self.xVariableFeedbackFormWidget, SIGNAL("dataChanged()"), self.on_xVariableFeedbackFormWidget_dataChanged)

        self.toolBox = QToolBox(self)
        self.toolBox.addItem(self.xVariableFeedbackFormWidget,"XVF Form")
        self.toolBox.addItem(self.conditionTableWidget,"XVF Condition Table")
        self.toolBox.addItem(self.statusTextWidget,"XVF Status")
        self.toolBox.setCurrentIndex(0)

        layout = QVBoxLayout(self)
        layout.addWidget(self.toolBox)
        self.setLayout(layout)
    def setupUi(self, xVariableFeedbackComposite):
        xVariableFeedbackComposite.setObjectName("xVariableFeedbackComposite")
        xVariableFeedbackComposite.resize(712, 518)
        self.gridLayout = QtGui.QGridLayout(xVariableFeedbackComposite)
        self.gridLayout.setObjectName("gridLayout")
        self.xVariableFeedbackToolBox = QtGui.QToolBox(xVariableFeedbackComposite)
        self.xVariableFeedbackToolBox.setFrameShape(QtGui.QFrame.NoFrame)
        self.xVariableFeedbackToolBox.setFrameShadow(QtGui.QFrame.Sunken)
        self.xVariableFeedbackToolBox.setLineWidth(3)
        self.xVariableFeedbackToolBox.setObjectName("xVariableFeedbackToolBox")
        self.feedbackFormPage = QtGui.QWidget()
        self.feedbackFormPage.setGeometry(QtCore.QRect(0, 0, 694, 413))
        self.feedbackFormPage.setObjectName("feedbackFormPage")
        self.formLayout = QtGui.QFormLayout(self.feedbackFormPage)
        self.formLayout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
        self.formLayout.setObjectName("formLayout")
        self.descriptionLabel = QtGui.QLabel(self.feedbackFormPage)
        self.descriptionLabel.setObjectName("descriptionLabel")
        self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.descriptionLabel)
        self.horizontalLayout_4 = QtGui.QHBoxLayout()
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.descriptionLineEdit = QtGui.QLineEdit(self.feedbackFormPage)
        self.descriptionLineEdit.setEnabled(False)
        self.descriptionLineEdit.setObjectName("descriptionLineEdit")
        self.horizontalLayout_4.addWidget(self.descriptionLineEdit)
        self.checkBox = QtGui.QCheckBox(self.feedbackFormPage)
        self.checkBox.setMinimumSize(QtCore.QSize(85, 0))
        self.checkBox.setChecked(True)
        self.checkBox.setObjectName("checkBox")
        self.horizontalLayout_4.addWidget(self.checkBox)
        self.formLayout.setLayout(0, QtGui.QFormLayout.FieldRole, self.horizontalLayout_4)
        self.line_1 = QtGui.QFrame(self.feedbackFormPage)
        self.line_1.setFrameShadow(QtGui.QFrame.Sunken)
        self.line_1.setLineWidth(3)
        self.line_1.setMidLineWidth(0)
        self.line_1.setFrameShape(QtGui.QFrame.HLine)
        self.line_1.setFrameShadow(QtGui.QFrame.Sunken)
        self.line_1.setObjectName("line_1")
        self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.line_1)
        self.matrixFileLabel = QtGui.QLabel(self.feedbackFormPage)
        self.matrixFileLabel.setObjectName("matrixFileLabel")
        self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.matrixFileLabel)
        self.horizontalLayout_2 = QtGui.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.matrixFileLineEdit = QtGui.QLineEdit(self.feedbackFormPage)
        self.matrixFileLineEdit.setObjectName("matrixFileLineEdit")
        self.horizontalLayout_2.addWidget(self.matrixFileLineEdit)
        self.pickMatrixFileButton = QtGui.QPushButton(self.feedbackFormPage)
        self.pickMatrixFileButton.setObjectName("pickMatrixFileButton")
        self.horizontalLayout_2.addWidget(self.pickMatrixFileButton)
        self.formLayout.setLayout(2, QtGui.QFormLayout.FieldRole, self.horizontalLayout_2)
        self.numberOfSamplesPerIterationLabel = QtGui.QLabel(self.feedbackFormPage)
        self.numberOfSamplesPerIterationLabel.setObjectName("numberOfSamplesPerIterationLabel")
        self.formLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.numberOfSamplesPerIterationLabel)
        self.numberOfSamplesPerIterationSpinBox = QtGui.QSpinBox(self.feedbackFormPage)
        self.numberOfSamplesPerIterationSpinBox.setPrefix("")
        self.numberOfSamplesPerIterationSpinBox.setMinimum(1)
        self.numberOfSamplesPerIterationSpinBox.setMaximum(99)
        self.numberOfSamplesPerIterationSpinBox.setProperty("value", 1)
        self.numberOfSamplesPerIterationSpinBox.setObjectName("numberOfSamplesPerIterationSpinBox")
        self.formLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.numberOfSamplesPerIterationSpinBox)
        self.samplingRateLabel = QtGui.QLabel(self.feedbackFormPage)
        self.samplingRateLabel.setObjectName("samplingRateLabel")
        self.formLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.samplingRateLabel)
        self.samplingRateSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.samplingRateSpinBox.setDecimals(6)
        self.samplingRateSpinBox.setSingleStep(0.01)
        self.samplingRateSpinBox.setProperty("value", 1.0)
        self.samplingRateSpinBox.setObjectName("samplingRateSpinBox")
        self.formLayout.setWidget(4, QtGui.QFormLayout.FieldRole, self.samplingRateSpinBox)
        self.numberOfPreviousSampleLabel = QtGui.QLabel(self.feedbackFormPage)
        self.numberOfPreviousSampleLabel.setObjectName("numberOfPreviousSampleLabel")
        self.formLayout.setWidget(5, QtGui.QFormLayout.LabelRole, self.numberOfPreviousSampleLabel)
        self.numberOfPreviousSamplesSpinBox = QtGui.QSpinBox(self.feedbackFormPage)
        self.numberOfPreviousSamplesSpinBox.setPrefix("")
        self.numberOfPreviousSamplesSpinBox.setObjectName("numberOfPreviousSamplesSpinBox")
        self.formLayout.setWidget(5, QtGui.QFormLayout.FieldRole, self.numberOfPreviousSamplesSpinBox)
        self.gainLabel = QtGui.QLabel(self.feedbackFormPage)
        self.gainLabel.setObjectName("gainLabel")
        self.formLayout.setWidget(6, QtGui.QFormLayout.LabelRole, self.gainLabel)
        self.gainSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.gainSpinBox.setDecimals(6)
        self.gainSpinBox.setMinimum(-999999999.0)
        self.gainSpinBox.setMaximum(999999999.0)
        self.gainSpinBox.setSingleStep(0.001)
        self.gainSpinBox.setObjectName("gainSpinBox")
        self.formLayout.setWidget(6, QtGui.QFormLayout.FieldRole, self.gainSpinBox)
        self.upperActionLimitLabel = QtGui.QLabel(self.feedbackFormPage)
        self.upperActionLimitLabel.setObjectName("upperActionLimitLabel")
        self.formLayout.setWidget(7, QtGui.QFormLayout.LabelRole, self.upperActionLimitLabel)
        self.upperActionLimitSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.upperActionLimitSpinBox.setDecimals(6)
        self.upperActionLimitSpinBox.setMinimum(0.0)
        self.upperActionLimitSpinBox.setMaximum(999999.0)
        self.upperActionLimitSpinBox.setSingleStep(0.001)
        self.upperActionLimitSpinBox.setProperty("value", 100.0)
        self.upperActionLimitSpinBox.setObjectName("upperActionLimitSpinBox")
        self.formLayout.setWidget(7, QtGui.QFormLayout.FieldRole, self.upperActionLimitSpinBox)
        self.lowerActionLimitLabel = QtGui.QLabel(self.feedbackFormPage)
        self.lowerActionLimitLabel.setObjectName("lowerActionLimitLabel")
        self.formLayout.setWidget(8, QtGui.QFormLayout.LabelRole, self.lowerActionLimitLabel)
        self.lowerActionLimitSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.lowerActionLimitSpinBox.setDecimals(6)
        self.lowerActionLimitSpinBox.setMinimum(0.0)
        self.lowerActionLimitSpinBox.setMaximum(999999.0)
        self.lowerActionLimitSpinBox.setSingleStep(0.001)
        self.lowerActionLimitSpinBox.setProperty("value", 0.01)
        self.lowerActionLimitSpinBox.setObjectName("lowerActionLimitSpinBox")
        self.formLayout.setWidget(8, QtGui.QFormLayout.FieldRole, self.lowerActionLimitSpinBox)
        self.OperationLabel = QtGui.QLabel(self.feedbackFormPage)
        self.OperationLabel.setObjectName("OperationLabel")
        self.formLayout.setWidget(9, QtGui.QFormLayout.LabelRole, self.OperationLabel)
        self.operationComboBox = QtGui.QComboBox(self.feedbackFormPage)
        self.operationComboBox.setObjectName("operationComboBox")
        self.operationComboBox.addItem("")
        self.operationComboBox.addItem("")
        self.operationComboBox.addItem("")
        self.formLayout.setWidget(9, QtGui.QFormLayout.FieldRole, self.operationComboBox)
        self.line_2 = QtGui.QFrame(self.feedbackFormPage)
        self.line_2.setLineWidth(3)
        self.line_2.setFrameShape(QtGui.QFrame.HLine)
        self.line_2.setFrameShadow(QtGui.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.formLayout.setWidget(10, QtGui.QFormLayout.LabelRole, self.line_2)
        self.offsetPvRegExLabel = QtGui.QLabel(self.feedbackFormPage)
        self.offsetPvRegExLabel.setObjectName("offsetPvRegExLabel")
        self.formLayout.setWidget(11, QtGui.QFormLayout.LabelRole, self.offsetPvRegExLabel)
        self.offsetPvRegExLineEdit = QtGui.QLineEdit(self.feedbackFormPage)
        self.offsetPvRegExLineEdit.setObjectName("offsetPvRegExLineEdit")
        self.formLayout.setWidget(11, QtGui.QFormLayout.FieldRole, self.offsetPvRegExLineEdit)
        self.numberOfIterationsLabel = QtGui.QLabel(self.feedbackFormPage)
        self.numberOfIterationsLabel.setObjectName("numberOfIterationsLabel")
        self.formLayout.setWidget(12, QtGui.QFormLayout.LabelRole, self.numberOfIterationsLabel)
        self.horizontalLayout_3 = QtGui.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.numberOfIterationsSpinBox = QtGui.QSpinBox(self.feedbackFormPage)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.numberOfIterationsSpinBox.sizePolicy().hasHeightForWidth())
        self.numberOfIterationsSpinBox.setSizePolicy(sizePolicy)
        self.numberOfIterationsSpinBox.setMaximum(999999)
        self.numberOfIterationsSpinBox.setProperty("value", 999999)
        self.numberOfIterationsSpinBox.setObjectName("numberOfIterationsSpinBox")
        self.horizontalLayout_3.addWidget(self.numberOfIterationsSpinBox)
        self.infinityButton = QtGui.QPushButton(self.feedbackFormPage)
        self.infinityButton.setObjectName("infinityButton")
        self.horizontalLayout_3.addWidget(self.infinityButton)
        self.formLayout.setLayout(12, QtGui.QFormLayout.FieldRole, self.horizontalLayout_3)
        self.pausebetweenIterationsLabel = QtGui.QLabel(self.feedbackFormPage)
        self.pausebetweenIterationsLabel.setObjectName("pausebetweenIterationsLabel")
        self.formLayout.setWidget(13, QtGui.QFormLayout.LabelRole, self.pausebetweenIterationsLabel)
        self.pauseBetweenIterationsSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.pauseBetweenIterationsSpinBox.setSingleStep(0.01)
        self.pauseBetweenIterationsSpinBox.setProperty("value", 2.0)
        self.pauseBetweenIterationsSpinBox.setObjectName("pauseBetweenIterationsSpinBox")
        self.formLayout.setWidget(13, QtGui.QFormLayout.FieldRole, self.pauseBetweenIterationsSpinBox)
        self.xVariableFeedbackToolBox.addItem(self.feedbackFormPage, "")
        self.conditionTablePage = QtGui.QWidget()
        self.conditionTablePage.setGeometry(QtCore.QRect(0, 0, 710, 418))
        self.conditionTablePage.setObjectName("conditionTablePage")
        self.gridLayout_3 = QtGui.QGridLayout(self.conditionTablePage)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.conditionTableWidget = LConditionTableWidget(self.conditionTablePage)
        self.conditionTableWidget.setObjectName("conditionTableWidget")
        self.gridLayout_3.addWidget(self.conditionTableWidget, 0, 0, 1, 1)
        self.xVariableFeedbackToolBox.addItem(self.conditionTablePage, "")
        self.page = QtGui.QWidget()
        self.page.setGeometry(QtCore.QRect(0, 0, 710, 418))
        self.page.setObjectName("page")
        self.gridLayout_4 = QtGui.QGridLayout(self.page)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.statusTextWidget = LStatusTextWidget(self.page)
        self.statusTextWidget.setObjectName("statusTextWidget")
        self.gridLayout_4.addWidget(self.statusTextWidget, 0, 0, 1, 1)
        self.xVariableFeedbackToolBox.addItem(self.page, "")
        self.gridLayout.addWidget(self.xVariableFeedbackToolBox, 0, 0, 1, 1)
        self.descriptionLabel.setBuddy(self.descriptionLineEdit)
        self.matrixFileLabel.setBuddy(self.matrixFileLineEdit)
        self.numberOfSamplesPerIterationLabel.setBuddy(self.numberOfSamplesPerIterationSpinBox)
        self.samplingRateLabel.setBuddy(self.samplingRateSpinBox)
        self.numberOfPreviousSampleLabel.setBuddy(self.numberOfPreviousSamplesSpinBox)
        self.gainLabel.setBuddy(self.gainSpinBox)
        self.upperActionLimitLabel.setBuddy(self.upperActionLimitSpinBox)
        self.lowerActionLimitLabel.setBuddy(self.lowerActionLimitSpinBox)
        self.OperationLabel.setBuddy(self.operationComboBox)
        self.offsetPvRegExLabel.setBuddy(self.offsetPvRegExLineEdit)
        self.numberOfIterationsLabel.setBuddy(self.numberOfIterationsSpinBox)
        self.pausebetweenIterationsLabel.setBuddy(self.pauseBetweenIterationsSpinBox)

        self.retranslateUi(xVariableFeedbackComposite)
        self.xVariableFeedbackToolBox.setCurrentIndex(0)
        QtCore.QObject.connect(self.checkBox, QtCore.SIGNAL("toggled(bool)"), self.descriptionLineEdit.setDisabled)
        QtCore.QMetaObject.connectSlotsByName(xVariableFeedbackComposite)
class Ui_xVariableFeedbackComposite(object):
    def setupUi(self, xVariableFeedbackComposite):
        xVariableFeedbackComposite.setObjectName("xVariableFeedbackComposite")
        xVariableFeedbackComposite.resize(712, 518)
        self.gridLayout = QtGui.QGridLayout(xVariableFeedbackComposite)
        self.gridLayout.setObjectName("gridLayout")
        self.xVariableFeedbackToolBox = QtGui.QToolBox(xVariableFeedbackComposite)
        self.xVariableFeedbackToolBox.setFrameShape(QtGui.QFrame.NoFrame)
        self.xVariableFeedbackToolBox.setFrameShadow(QtGui.QFrame.Sunken)
        self.xVariableFeedbackToolBox.setLineWidth(3)
        self.xVariableFeedbackToolBox.setObjectName("xVariableFeedbackToolBox")
        self.feedbackFormPage = QtGui.QWidget()
        self.feedbackFormPage.setGeometry(QtCore.QRect(0, 0, 694, 413))
        self.feedbackFormPage.setObjectName("feedbackFormPage")
        self.formLayout = QtGui.QFormLayout(self.feedbackFormPage)
        self.formLayout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
        self.formLayout.setObjectName("formLayout")
        self.descriptionLabel = QtGui.QLabel(self.feedbackFormPage)
        self.descriptionLabel.setObjectName("descriptionLabel")
        self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.descriptionLabel)
        self.horizontalLayout_4 = QtGui.QHBoxLayout()
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.descriptionLineEdit = QtGui.QLineEdit(self.feedbackFormPage)
        self.descriptionLineEdit.setEnabled(False)
        self.descriptionLineEdit.setObjectName("descriptionLineEdit")
        self.horizontalLayout_4.addWidget(self.descriptionLineEdit)
        self.checkBox = QtGui.QCheckBox(self.feedbackFormPage)
        self.checkBox.setMinimumSize(QtCore.QSize(85, 0))
        self.checkBox.setChecked(True)
        self.checkBox.setObjectName("checkBox")
        self.horizontalLayout_4.addWidget(self.checkBox)
        self.formLayout.setLayout(0, QtGui.QFormLayout.FieldRole, self.horizontalLayout_4)
        self.line_1 = QtGui.QFrame(self.feedbackFormPage)
        self.line_1.setFrameShadow(QtGui.QFrame.Sunken)
        self.line_1.setLineWidth(3)
        self.line_1.setMidLineWidth(0)
        self.line_1.setFrameShape(QtGui.QFrame.HLine)
        self.line_1.setFrameShadow(QtGui.QFrame.Sunken)
        self.line_1.setObjectName("line_1")
        self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.line_1)
        self.matrixFileLabel = QtGui.QLabel(self.feedbackFormPage)
        self.matrixFileLabel.setObjectName("matrixFileLabel")
        self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.matrixFileLabel)
        self.horizontalLayout_2 = QtGui.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.matrixFileLineEdit = QtGui.QLineEdit(self.feedbackFormPage)
        self.matrixFileLineEdit.setObjectName("matrixFileLineEdit")
        self.horizontalLayout_2.addWidget(self.matrixFileLineEdit)
        self.pickMatrixFileButton = QtGui.QPushButton(self.feedbackFormPage)
        self.pickMatrixFileButton.setObjectName("pickMatrixFileButton")
        self.horizontalLayout_2.addWidget(self.pickMatrixFileButton)
        self.formLayout.setLayout(2, QtGui.QFormLayout.FieldRole, self.horizontalLayout_2)
        self.numberOfSamplesPerIterationLabel = QtGui.QLabel(self.feedbackFormPage)
        self.numberOfSamplesPerIterationLabel.setObjectName("numberOfSamplesPerIterationLabel")
        self.formLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.numberOfSamplesPerIterationLabel)
        self.numberOfSamplesPerIterationSpinBox = QtGui.QSpinBox(self.feedbackFormPage)
        self.numberOfSamplesPerIterationSpinBox.setPrefix("")
        self.numberOfSamplesPerIterationSpinBox.setMinimum(1)
        self.numberOfSamplesPerIterationSpinBox.setMaximum(99)
        self.numberOfSamplesPerIterationSpinBox.setProperty("value", 1)
        self.numberOfSamplesPerIterationSpinBox.setObjectName("numberOfSamplesPerIterationSpinBox")
        self.formLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.numberOfSamplesPerIterationSpinBox)
        self.samplingRateLabel = QtGui.QLabel(self.feedbackFormPage)
        self.samplingRateLabel.setObjectName("samplingRateLabel")
        self.formLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.samplingRateLabel)
        self.samplingRateSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.samplingRateSpinBox.setDecimals(6)
        self.samplingRateSpinBox.setSingleStep(0.01)
        self.samplingRateSpinBox.setProperty("value", 1.0)
        self.samplingRateSpinBox.setObjectName("samplingRateSpinBox")
        self.formLayout.setWidget(4, QtGui.QFormLayout.FieldRole, self.samplingRateSpinBox)
        self.numberOfPreviousSampleLabel = QtGui.QLabel(self.feedbackFormPage)
        self.numberOfPreviousSampleLabel.setObjectName("numberOfPreviousSampleLabel")
        self.formLayout.setWidget(5, QtGui.QFormLayout.LabelRole, self.numberOfPreviousSampleLabel)
        self.numberOfPreviousSamplesSpinBox = QtGui.QSpinBox(self.feedbackFormPage)
        self.numberOfPreviousSamplesSpinBox.setPrefix("")
        self.numberOfPreviousSamplesSpinBox.setObjectName("numberOfPreviousSamplesSpinBox")
        self.formLayout.setWidget(5, QtGui.QFormLayout.FieldRole, self.numberOfPreviousSamplesSpinBox)
        self.gainLabel = QtGui.QLabel(self.feedbackFormPage)
        self.gainLabel.setObjectName("gainLabel")
        self.formLayout.setWidget(6, QtGui.QFormLayout.LabelRole, self.gainLabel)
        self.gainSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.gainSpinBox.setDecimals(6)
        self.gainSpinBox.setMinimum(-999999999.0)
        self.gainSpinBox.setMaximum(999999999.0)
        self.gainSpinBox.setSingleStep(0.001)
        self.gainSpinBox.setObjectName("gainSpinBox")
        self.formLayout.setWidget(6, QtGui.QFormLayout.FieldRole, self.gainSpinBox)
        self.upperActionLimitLabel = QtGui.QLabel(self.feedbackFormPage)
        self.upperActionLimitLabel.setObjectName("upperActionLimitLabel")
        self.formLayout.setWidget(7, QtGui.QFormLayout.LabelRole, self.upperActionLimitLabel)
        self.upperActionLimitSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.upperActionLimitSpinBox.setDecimals(6)
        self.upperActionLimitSpinBox.setMinimum(0.0)
        self.upperActionLimitSpinBox.setMaximum(999999.0)
        self.upperActionLimitSpinBox.setSingleStep(0.001)
        self.upperActionLimitSpinBox.setProperty("value", 100.0)
        self.upperActionLimitSpinBox.setObjectName("upperActionLimitSpinBox")
        self.formLayout.setWidget(7, QtGui.QFormLayout.FieldRole, self.upperActionLimitSpinBox)
        self.lowerActionLimitLabel = QtGui.QLabel(self.feedbackFormPage)
        self.lowerActionLimitLabel.setObjectName("lowerActionLimitLabel")
        self.formLayout.setWidget(8, QtGui.QFormLayout.LabelRole, self.lowerActionLimitLabel)
        self.lowerActionLimitSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.lowerActionLimitSpinBox.setDecimals(6)
        self.lowerActionLimitSpinBox.setMinimum(0.0)
        self.lowerActionLimitSpinBox.setMaximum(999999.0)
        self.lowerActionLimitSpinBox.setSingleStep(0.001)
        self.lowerActionLimitSpinBox.setProperty("value", 0.01)
        self.lowerActionLimitSpinBox.setObjectName("lowerActionLimitSpinBox")
        self.formLayout.setWidget(8, QtGui.QFormLayout.FieldRole, self.lowerActionLimitSpinBox)
        self.OperationLabel = QtGui.QLabel(self.feedbackFormPage)
        self.OperationLabel.setObjectName("OperationLabel")
        self.formLayout.setWidget(9, QtGui.QFormLayout.LabelRole, self.OperationLabel)
        self.operationComboBox = QtGui.QComboBox(self.feedbackFormPage)
        self.operationComboBox.setObjectName("operationComboBox")
        self.operationComboBox.addItem("")
        self.operationComboBox.addItem("")
        self.operationComboBox.addItem("")
        self.formLayout.setWidget(9, QtGui.QFormLayout.FieldRole, self.operationComboBox)
        self.line_2 = QtGui.QFrame(self.feedbackFormPage)
        self.line_2.setLineWidth(3)
        self.line_2.setFrameShape(QtGui.QFrame.HLine)
        self.line_2.setFrameShadow(QtGui.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.formLayout.setWidget(10, QtGui.QFormLayout.LabelRole, self.line_2)
        self.offsetPvRegExLabel = QtGui.QLabel(self.feedbackFormPage)
        self.offsetPvRegExLabel.setObjectName("offsetPvRegExLabel")
        self.formLayout.setWidget(11, QtGui.QFormLayout.LabelRole, self.offsetPvRegExLabel)
        self.offsetPvRegExLineEdit = QtGui.QLineEdit(self.feedbackFormPage)
        self.offsetPvRegExLineEdit.setObjectName("offsetPvRegExLineEdit")
        self.formLayout.setWidget(11, QtGui.QFormLayout.FieldRole, self.offsetPvRegExLineEdit)
        self.numberOfIterationsLabel = QtGui.QLabel(self.feedbackFormPage)
        self.numberOfIterationsLabel.setObjectName("numberOfIterationsLabel")
        self.formLayout.setWidget(12, QtGui.QFormLayout.LabelRole, self.numberOfIterationsLabel)
        self.horizontalLayout_3 = QtGui.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.numberOfIterationsSpinBox = QtGui.QSpinBox(self.feedbackFormPage)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.numberOfIterationsSpinBox.sizePolicy().hasHeightForWidth())
        self.numberOfIterationsSpinBox.setSizePolicy(sizePolicy)
        self.numberOfIterationsSpinBox.setMaximum(999999)
        self.numberOfIterationsSpinBox.setProperty("value", 999999)
        self.numberOfIterationsSpinBox.setObjectName("numberOfIterationsSpinBox")
        self.horizontalLayout_3.addWidget(self.numberOfIterationsSpinBox)
        self.infinityButton = QtGui.QPushButton(self.feedbackFormPage)
        self.infinityButton.setObjectName("infinityButton")
        self.horizontalLayout_3.addWidget(self.infinityButton)
        self.formLayout.setLayout(12, QtGui.QFormLayout.FieldRole, self.horizontalLayout_3)
        self.pausebetweenIterationsLabel = QtGui.QLabel(self.feedbackFormPage)
        self.pausebetweenIterationsLabel.setObjectName("pausebetweenIterationsLabel")
        self.formLayout.setWidget(13, QtGui.QFormLayout.LabelRole, self.pausebetweenIterationsLabel)
        self.pauseBetweenIterationsSpinBox = QtGui.QDoubleSpinBox(self.feedbackFormPage)
        self.pauseBetweenIterationsSpinBox.setSingleStep(0.01)
        self.pauseBetweenIterationsSpinBox.setProperty("value", 2.0)
        self.pauseBetweenIterationsSpinBox.setObjectName("pauseBetweenIterationsSpinBox")
        self.formLayout.setWidget(13, QtGui.QFormLayout.FieldRole, self.pauseBetweenIterationsSpinBox)
        self.xVariableFeedbackToolBox.addItem(self.feedbackFormPage, "")
        self.conditionTablePage = QtGui.QWidget()
        self.conditionTablePage.setGeometry(QtCore.QRect(0, 0, 710, 418))
        self.conditionTablePage.setObjectName("conditionTablePage")
        self.gridLayout_3 = QtGui.QGridLayout(self.conditionTablePage)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.conditionTableWidget = LConditionTableWidget(self.conditionTablePage)
        self.conditionTableWidget.setObjectName("conditionTableWidget")
        self.gridLayout_3.addWidget(self.conditionTableWidget, 0, 0, 1, 1)
        self.xVariableFeedbackToolBox.addItem(self.conditionTablePage, "")
        self.page = QtGui.QWidget()
        self.page.setGeometry(QtCore.QRect(0, 0, 710, 418))
        self.page.setObjectName("page")
        self.gridLayout_4 = QtGui.QGridLayout(self.page)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.statusTextWidget = LStatusTextWidget(self.page)
        self.statusTextWidget.setObjectName("statusTextWidget")
        self.gridLayout_4.addWidget(self.statusTextWidget, 0, 0, 1, 1)
        self.xVariableFeedbackToolBox.addItem(self.page, "")
        self.gridLayout.addWidget(self.xVariableFeedbackToolBox, 0, 0, 1, 1)
        self.descriptionLabel.setBuddy(self.descriptionLineEdit)
        self.matrixFileLabel.setBuddy(self.matrixFileLineEdit)
        self.numberOfSamplesPerIterationLabel.setBuddy(self.numberOfSamplesPerIterationSpinBox)
        self.samplingRateLabel.setBuddy(self.samplingRateSpinBox)
        self.numberOfPreviousSampleLabel.setBuddy(self.numberOfPreviousSamplesSpinBox)
        self.gainLabel.setBuddy(self.gainSpinBox)
        self.upperActionLimitLabel.setBuddy(self.upperActionLimitSpinBox)
        self.lowerActionLimitLabel.setBuddy(self.lowerActionLimitSpinBox)
        self.OperationLabel.setBuddy(self.operationComboBox)
        self.offsetPvRegExLabel.setBuddy(self.offsetPvRegExLineEdit)
        self.numberOfIterationsLabel.setBuddy(self.numberOfIterationsSpinBox)
        self.pausebetweenIterationsLabel.setBuddy(self.pauseBetweenIterationsSpinBox)

        self.retranslateUi(xVariableFeedbackComposite)
        self.xVariableFeedbackToolBox.setCurrentIndex(0)
        QtCore.QObject.connect(self.checkBox, QtCore.SIGNAL("toggled(bool)"), self.descriptionLineEdit.setDisabled)
        QtCore.QMetaObject.connectSlotsByName(xVariableFeedbackComposite)

    def retranslateUi(self, xVariableFeedbackComposite):
        xVariableFeedbackComposite.setWindowTitle(QtGui.QApplication.translate("xVariableFeedbackComposite", "X-Variable Feedback Composite", None, QtGui.QApplication.UnicodeUTF8))
        self.descriptionLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Description", None, QtGui.QApplication.UnicodeUTF8))
        self.checkBox.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "Locked", None, QtGui.QApplication.UnicodeUTF8))
        self.matrixFileLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Matrix File", None, QtGui.QApplication.UnicodeUTF8))
        self.pickMatrixFileButton.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Pick Matrix", None, QtGui.QApplication.UnicodeUTF8))
        self.numberOfSamplesPerIterationLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Number Of Samples Per Iteration", None, QtGui.QApplication.UnicodeUTF8))
        self.numberOfSamplesPerIterationSpinBox.setSuffix(QtGui.QApplication.translate("xVariableFeedbackComposite", " Sample(s)", None, QtGui.QApplication.UnicodeUTF8))
        self.samplingRateLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Sampling Rate in Hertz", None, QtGui.QApplication.UnicodeUTF8))
        self.samplingRateSpinBox.setSuffix(QtGui.QApplication.translate("xVariableFeedbackComposite", " Hetz", None, QtGui.QApplication.UnicodeUTF8))
        self.numberOfPreviousSampleLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Number Of Previous Samples", None, QtGui.QApplication.UnicodeUTF8))
        self.numberOfPreviousSamplesSpinBox.setSuffix(QtGui.QApplication.translate("xVariableFeedbackComposite", " Sample(s)", None, QtGui.QApplication.UnicodeUTF8))
        self.gainLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Gain", None, QtGui.QApplication.UnicodeUTF8))
        self.upperActionLimitLabel.setToolTip(QtGui.QApplication.translate("xVariableFeedbackComposite", "Maximum value that can be written on the actuator at the end of an iteration", None, QtGui.QApplication.UnicodeUTF8))
        self.upperActionLimitLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Upper Action Limit", None, QtGui.QApplication.UnicodeUTF8))
        self.lowerActionLimitLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Lower Action Limit", None, QtGui.QApplication.UnicodeUTF8))
        self.OperationLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Operation", None, QtGui.QApplication.UnicodeUTF8))
        self.operationComboBox.setItemText(0, QtGui.QApplication.translate("xVariableFeedbackComposite", "Average", None, QtGui.QApplication.UnicodeUTF8))
        self.operationComboBox.setItemText(1, QtGui.QApplication.translate("xVariableFeedbackComposite", "Minimum", None, QtGui.QApplication.UnicodeUTF8))
        self.operationComboBox.setItemText(2, QtGui.QApplication.translate("xVariableFeedbackComposite", "Maximum", None, QtGui.QApplication.UnicodeUTF8))
        self.offsetPvRegExLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Offset PV Reg Expression", None, QtGui.QApplication.UnicodeUTF8))
        self.numberOfIterationsLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Number Of Iterations", None, QtGui.QApplication.UnicodeUTF8))
        self.numberOfIterationsSpinBox.setSuffix(QtGui.QApplication.translate("xVariableFeedbackComposite", " Iteration(s)", None, QtGui.QApplication.UnicodeUTF8))
        self.infinityButton.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Infinity", None, QtGui.QApplication.UnicodeUTF8))
        self.pausebetweenIterationsLabel.setText(QtGui.QApplication.translate("xVariableFeedbackComposite", "&Pause Between Iterations", None, QtGui.QApplication.UnicodeUTF8))
        self.pauseBetweenIterationsSpinBox.setSuffix(QtGui.QApplication.translate("xVariableFeedbackComposite", " Second", None, QtGui.QApplication.UnicodeUTF8))
        self.xVariableFeedbackToolBox.setItemText(self.xVariableFeedbackToolBox.indexOf(self.feedbackFormPage), QtGui.QApplication.translate("xVariableFeedbackComposite", "Form", None, QtGui.QApplication.UnicodeUTF8))
        self.conditionTableWidget.setToolTip(QtGui.QApplication.translate("xVariableFeedbackComposite", "Condition table", None, QtGui.QApplication.UnicodeUTF8))
        self.conditionTableWidget.setWhatsThis(QtGui.QApplication.translate("xVariableFeedbackComposite", "This widget displays the current condition that needs to be meet.", None, QtGui.QApplication.UnicodeUTF8))
        self.xVariableFeedbackToolBox.setItemText(self.xVariableFeedbackToolBox.indexOf(self.conditionTablePage), QtGui.QApplication.translate("xVariableFeedbackComposite", "Conditions", None, QtGui.QApplication.UnicodeUTF8))
        self.statusTextWidget.setToolTip(QtGui.QApplication.translate("xVariableFeedbackComposite", "Current status", None, QtGui.QApplication.UnicodeUTF8))
        self.statusTextWidget.setWhatsThis(QtGui.QApplication.translate("xVariableFeedbackComposite", "This widget displays the current status.", None, QtGui.QApplication.UnicodeUTF8))
        self.xVariableFeedbackToolBox.setItemText(self.xVariableFeedbackToolBox.indexOf(self.page), QtGui.QApplication.translate("xVariableFeedbackComposite", "Status", None, QtGui.QApplication.UnicodeUTF8))
class LOneVariableFeedbackComposite(LExecutableComposite):

    processStarted = pyqtSignal()
    processStopped = pyqtSignal()
    processPaused = pyqtSignal()
    processResumed = pyqtSignal()
    processFinished = pyqtSignal()
    dataChanged = pyqtSignal()			# Used when description changes

    def __init__(self, parent=None):
        super(LOneVariableFeedbackComposite, self).__init__(parent)
        self.dataContainer = LMyDataContainer(self)
        self.actions = LMyActions(self.dataContainer, self)
        self.setName(COMPOSITE_NAME)
        self.buildUi()
        self.updateUi()

    @LInAndOut(DEBUG & COMPOSITES)
    def buildUi(self):
        self.oneVariableFeedbackFormWidget = LOneVariableFeedbackFormWidget(self)
        self.conditionTableWidget = LConditionTableWidget(self)
        self.statusTextWidget = LStatusTextWidget(self)

        self.setLWidgets(self.getLWidgets(mode=Lt.AutoDiscoveryMode))

        self.connect(self.oneVariableFeedbackFormWidget, SIGNAL("dataChanged()"), self.on_oneVariableFeedbackFormWidget_dataChanged)

        self.toolBox = QToolBox(self)
        self.toolBox.addItem(self.oneVariableFeedbackFormWidget,"OVF Form")
        self.toolBox.addItem(self.conditionTableWidget,"OVF Condition Table")
        self.toolBox.addItem(self.statusTextWidget,"OVF Status")
        self.toolBox.setCurrentIndex(0)

        layout = QVBoxLayout(self)
        layout.addWidget(self.toolBox)
        self.setLayout(layout)


    @LInAndOut(DEBUG & COMPOSITES)
    def updateUi(self):
        ''' Updates displayed values with object attributes '''
        super(LOneVariableFeedbackComposite, self).updateUi()

    #----------------------------------------------------------------------
    # Interface (geT)

    @LInAndOut(DEBUG & COMPOSITES)
    def getDescription(self):
        return self.oneVariableFeedbackFormWidget.getDescription()


    #----------------------------------------------------------------------
    # Widget actions

    @LInAndOut(DEBUG & COMPOSITES)
    def on_oneVariableFeedbackFormWidget_dataChanged(self):
        self.dataContainer.menuTitle = self.getDescription()
        self.emit_dataChanged()

    @LInAndOut(DEBUG & COMPOSITES)
    def on_process_readyReadStandardOutput(self):
        byteArray = self.process.readAllStandardOutput()
        stdout_message = "%s" % QString(byteArray)
        message = stdout_message.strip('\n')
        if len(message) > 0 :
            debug(self, "%s" %  message)
            self.statusTextWidget.append("%s" % message)

    @LInAndOut(DEBUG & COMPOSITES)
    def on_process_readyReadStandardError(self):
        byteArray = self.process.readAllStandardError()
        stderr_message = "%s" % QString(byteArray)       # <-- QByteArray to ...
        message = stderr_message.strip('\n')
        if len(message) > 0 :
            debug(self, "%s" %  message)
            self.statusTextWidget.append("%s" % message)

    @LInAndOut(DEBUG & WIDGETS_)
    def on_process_started(self):
        self.statusTextWidget.clear()
        commandLine = self.getCommandLine()
        message = "[process %d] %s" %  (self.process.pid(), commandLine)
        debug(self, message)
        self.statusTextWidget.append("%s" % message)
        self.toolBox.setCurrentIndex(2)
        self.emit_processStarted()

    @LInAndOut(DEBUG & COMPOSITES)
    def on_process_finished(self, exitCode):
        ''' If killed through OS '''
        debug(self, "[process %d] finished with exitCode %s" % (self.process.pid(), exitCode))
        self.emit_processFinished()