def __init__(self, property, propertyName, nodeName, fullPropertyName=""):
            # Logging
            self.lgr = logging.getLogger('FluidExplorerPlugin')

            self.propertyName = propertyName

            self.groupBox_Box = QtGui.QWidget()
            gridLayout_Box = QtGui.QGridLayout()
            self.groupBox_Box.setLayout(gridLayout_Box)

            QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))
            txt = "<span style=\" font-size:8pt;\">" + property + "</span>"
            self.label = QtGui.QLabel(txt)

            [sliderMinValue, sliderMaxValue, sliderDefValue] = self.getFielDefaultValues(propertyName, nodeName)
            isAttrLocked = self.chekIfAttrIsLocked(propertyName, nodeName)
            self.isContainerLocked = isAttrLocked

            if len(fullPropertyName) > 0:
                toolTipTxt = "Full Name: " + fullPropertyName + ' '
                self.label.setToolTip(toolTipTxt)

            self.checkBox = QtGui.QCheckBox("")
            self.lineEditMin = QtGui.QLineEdit(str(sliderMinValue))
            self.lineEditMax = QtGui.QLineEdit(str(sliderMaxValue))
            self.lineEditDefault = QtGui.QLineEdit(str(sliderDefValue))
            self.rangeSlider = QHRangeSlider(self.lineEditMin, self.lineEditMax, self.lineEditDefault, range = [sliderMinValue, sliderMaxValue], enabledFlag=True)
            self.sliderDefValue = QtGui.QSlider(QtCore.Qt.Horizontal)   # delete
            self.sliderDefValue.setStyleSheet(DefaultUIParameters.getCustomSliderStyleSheet(isAttrLocked))
            self.rangeSlider.defaultSingleValue = sliderDefValue
            self.lineEditMin.setFixedWidth(35), self.lineEditMin.setAlignment(QtCore.Qt.AlignCenter)
            self.lineEditMax.setFixedWidth(35), self.lineEditMax.setAlignment(QtCore.Qt.AlignCenter)
            self.lineEditDefault.setFixedWidth(35), self.lineEditDefault.setAlignment(QtCore.Qt.AlignRight)
            self.rangeSlider.setValues([sliderMinValue, sliderMaxValue])
            self.rangeSlider.setEmitWhileMoving(True)
            self.resetButton = QtGui.QPushButton("Reset all Values")

            # Lock icon
            self.pix = QtGui.QPixmap(":/icon_lock.png").scaled(12, 12)
            self.lockImage = QtGui.QLabel()
            self.lockImage.setPixmap(self.pix)
            self.lockImage.setAlignment(QtCore.Qt.AlignLeft)

            self.createConnections()
            self.initialComponents()
            self.iniSliderValues2()
class SliderContainer(object):
        def __init__(self, property, propertyName, nodeName, fullPropertyName=""):
            # Logging
            self.lgr = logging.getLogger('FluidExplorerPlugin')

            self.propertyName = propertyName

            self.groupBox_Box = QtGui.QWidget()
            gridLayout_Box = QtGui.QGridLayout()
            self.groupBox_Box.setLayout(gridLayout_Box)

            QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))
            txt = "<span style=\" font-size:8pt;\">" + property + "</span>"
            self.label = QtGui.QLabel(txt)

            [sliderMinValue, sliderMaxValue, sliderDefValue] = self.getFielDefaultValues(propertyName, nodeName)
            isAttrLocked = self.chekIfAttrIsLocked(propertyName, nodeName)
            self.isContainerLocked = isAttrLocked

            if len(fullPropertyName) > 0:
                toolTipTxt = "Full Name: " + fullPropertyName + ' '
                self.label.setToolTip(toolTipTxt)

            self.checkBox = QtGui.QCheckBox("")
            self.lineEditMin = QtGui.QLineEdit(str(sliderMinValue))
            self.lineEditMax = QtGui.QLineEdit(str(sliderMaxValue))
            self.lineEditDefault = QtGui.QLineEdit(str(sliderDefValue))
            self.rangeSlider = QHRangeSlider(self.lineEditMin, self.lineEditMax, self.lineEditDefault, range = [sliderMinValue, sliderMaxValue], enabledFlag=True)
            self.sliderDefValue = QtGui.QSlider(QtCore.Qt.Horizontal)   # delete
            self.sliderDefValue.setStyleSheet(DefaultUIParameters.getCustomSliderStyleSheet(isAttrLocked))
            self.rangeSlider.defaultSingleValue = sliderDefValue
            self.lineEditMin.setFixedWidth(35), self.lineEditMin.setAlignment(QtCore.Qt.AlignCenter)
            self.lineEditMax.setFixedWidth(35), self.lineEditMax.setAlignment(QtCore.Qt.AlignCenter)
            self.lineEditDefault.setFixedWidth(35), self.lineEditDefault.setAlignment(QtCore.Qt.AlignRight)
            self.rangeSlider.setValues([sliderMinValue, sliderMaxValue])
            self.rangeSlider.setEmitWhileMoving(True)
            self.resetButton = QtGui.QPushButton("Reset all Values")

            # Lock icon
            self.pix = QtGui.QPixmap(":/icon_lock.png").scaled(12, 12)
            self.lockImage = QtGui.QLabel()
            self.lockImage.setPixmap(self.pix)
            self.lockImage.setAlignment(QtCore.Qt.AlignLeft)

            self.createConnections()
            self.initialComponents()
            self.iniSliderValues2()

        def setContainerLockedState(self, state):
            if not state:
                self.label.setEnabled(state)
                self.checkBox.setEnabled(state)
                self.lineEditDefault.setEnabled(state)
                self.lineEditMin.setEnabled(state)
                self.lineEditMax.setEnabled(state)
                self.rangeSlider.setEnabled(state)
                self.rangeSlider.enabledFlag = state

        def iniSliderValues2(self):
            self.rangeSlider.setValues([float(self.lineEditMin.text()), float(self.lineEditMax.text())])
            self.rangeSlider.update()
            self.sliderDefValue.setValue(self.translate(self.rangeSlider.defaultSingleValue, self.rangeSlider.rangeValues[0], self.rangeSlider.rangeValues[1], 0, 250))

        def initialComponents(self):
            self.lineEditDefault.setEnabled(True)
            self.lineEditMin.setEnabled(False)
            self.lineEditMax.setEnabled(False)
            self.lineEditMin.setMaxLength(5)
            self.lineEditMax.setMaxLength(4)
            self.lineEditDefault.setMaxLength(4)
            self.checkBox.setChecked(False)
            self.rangeSlider.isRangeActive = False
            self.rangeSlider.setVisible(False)
            self.sliderDefValue.setRange(0, 250)
            self.rangeSlider.setMaximumWidth(288)
            self.rangeSlider.setMinimumWidth(288)
            self.sliderDefValue.setMaximumWidth(self.rangeSlider.width())
            self.sliderDefValue.setMinimumWidth(self.rangeSlider.width())

        def addToLayout(self, gridLayout_Box, position):
            gridLayout_Box.addWidget(self.label, position, 0, 1, 2, QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight)
            gridLayout_Box.addWidget(self.checkBox, position, 2, QtCore.Qt.AlignCenter)
            gridLayout_Box.addWidget(self.lineEditDefault, position, 4, QtCore.Qt.AlignCenter)
            gridLayout_Box.addWidget(self.lineEditMin, position, 5, QtCore.Qt.AlignCenter)
            gridLayout_Box.addWidget(self.rangeSlider, position, 6, 1, 9-2)
            gridLayout_Box.addWidget(self.sliderDefValue, position, 6, 1, 9-2)
            gridLayout_Box.addWidget(self.lineEditMax, position, 15-2, QtCore.Qt.AlignCenter)

            if self.isContainerLocked:
                gridLayout_Box.addWidget(self.lockImage, position, 0, 1, 2, QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
                self.checkBox.setEnabled(False)
                self.lineEditDefault.setEnabled(False)
                self.lineEditMin.setEnabled(False)
                self.rangeSlider.setEnabled(False)
                self.rangeSlider.changeSliderEnabled(False)
                self.lineEditMax.setEnabled(False)
                self.sliderDefValue.setEnabled(False)

                # Use this code because some labes are to long
                if self.propertyName == "densityScale":
                    self.label.setText("Dens. Scale")
                if self.propertyName == "tensionForce":
                    self.label.setText("Tension F.")
                if self.propertyName == "reactionSpeed":
                    self.label.setText("Reac. Sp.")

                self.label.update()


        def createConnections(self):
            self.checkBox.clicked.connect(self.checkBoxModeChanged_Event)
            self.lineEditDefault.editingFinished.connect(self.leaveLineEditDef_A)
            self.lineEditMin.editingFinished.connect(self.leaveLineEditMin_A)
            self.lineEditMax.editingFinished.connect(self.leaveLineEditMax_A)
            self.resetButton.clicked.connect(self.resetValues)
            self.sliderDefValue.valueChanged.connect(self.sliderDefValueEvent)

        # --------------------------------------------------------------------------------------------------------------
        @QtCore.Slot()
        def checkBoxModeChanged_Event(self):
            self.changeSliderMode(self.rangeSlider, self.checkBox, self.lineEditDefault, self.lineEditMin, self.lineEditMax, self.sliderDefValue)

        @QtCore.Slot()
        def leaveLineEditDef_A(self):
            pass
            self.leaveLineEditEvent(self.lineEditDefault,  self.sliderDefValue, self.rangeSlider)

        @QtCore.Slot()
        def leaveLineEditMin_A(self):
            self.leaveLineEditMinEvent(self.lineEditMin, self.lineEditMax, self.rangeSlider)

        @QtCore.Slot()
        def leaveLineEditMax_A(self):
            self.leaveLineEditMaxEvent(self.lineEditMin, self.lineEditMax,  self.rangeSlider)

        @QtCore.Slot()
        def sliderDefValueEvent(self):
            sliderDoubleValue = self.translate(self.sliderDefValue.value(), 0, 250, self.rangeSlider.rangeValues[0], self.rangeSlider.rangeValues[1])
            self.lineEditDefault.setText(str(format(sliderDoubleValue, '.2f')))
        # --------------------------------------------------------------------------------------------------------------

        def changeSliderMode(self, slider, checkBox, lineEditDefault, lineEditMin, lineEditMax, sliderDefValue):
            self.rangeSlider.isRangeActive = True
            if checkBox.checkState():
                # Range is active
                sliderDefValue.setVisible(False)
                lineEditDefault.setEnabled(False)
                lineEditDefault.setText(str(format(slider.defaultSingleValue, '.2f')))

                slider.setValues([slider.rangeValues[0], slider.rangeValues[1]])
                slider.setVisible(True)

                lineEditMin.setEnabled(True)
                lineEditMax.setEnabled(True)
                lineEditMin.setText(str(format(slider.rangeValues[0], '.2f')))
                lineEditMax.setText(str(format(slider.rangeValues[1], '.2f')))
                lineEditMin.setFocus()

            else:
                # Range is NOT active
                slider.setVisible(False)
                lineEditMin.setEnabled(False)
                lineEditMax.setEnabled(False)
                lineEditMin.setText(str(format(slider.rangeValues[0], '.2f')))
                lineEditMax.setText(str(format(slider.rangeValues[1], '.2f')))

                lineEditDefault.setEnabled(True)
                lineEditDefault.setText(str(format(slider.defaultSingleValue, '.2f')))
                lineEditDefault.setFocus()

                sliderDefValue.setVisible(True)
                sliderValueTranslated = self.translate(slider.defaultSingleValue, slider.rangeValues[0], slider.rangeValues[1], 0, 250)
                sliderDefValue.setValue(sliderValueTranslated)

        def leaveLineEditMinEvent(self, lineEditMin, lineEditMax, slider):
                v_str = lineEditMin.text()
                try:
                    v = float(v_str)

                    if v < float(slider.rangeValues[0]):
                        # print "error to small"
                        lineEditMin.setText(str(format(slider.rangeValues[0], '.2f')))
                    elif v > float(slider.rangeValues[1]):
                        # print "error to big"
                        lineEditMin.setText(str(format(slider.rangeValues[1], '.2f')))
                        lineEditMax.setText(str(format(slider.rangeValues[1], '.2f')))
                    else:
                        # print "ok"
                        pass

                except ValueError:
                    lineEditMin.setText(str(format(slider.rangeValues[0], '.2f')))

                v1 = float(lineEditMin.text())
                v2 = float(lineEditMax.text())

                # Update slider and line edit
                slider.setValues([v1, v2])
                slider.update()
                lineEditMin.setText(str(format(v1, '.2f')))

        def leaveLineEditMaxEvent(self, lineEditMin, lineEditMax, slider):
            v_str = lineEditMax.text()
            try:
                v = float(v_str)

                if v < float(slider.rangeValues[0]):
                    # print "error to small"
                    lineEditMax.setText(str(format(slider.rangeValues[0], '.2f')))
                    lineEditMin.setText(str(format(slider.rangeValues[0], '.2f')))
                elif v > float(slider.rangeValues[1]):
                    # print "error to big"
                    lineEditMax.setText(str(format(slider.rangeValues[1], '.2f')))
                else:
                    # print "ok"
                    pass

            except ValueError:
                lineEditMax.setText(str(format(slider.rangeValues[1], '.2f')))

            v1 = float(lineEditMin.text())
            v2 = float(lineEditMax.text())

            # Update slider
            slider.setValues([v1, v2])
            slider.update()
            lineEditMax.setText(str(format(v2, '.2f')))

        def leaveLineEditEvent(self, lineEdit, slider, rangeSlider):

            v_str = lineEdit.text()
            try:
                v = float(v_str)
                v = round(v, 2)

                if v < float(rangeSlider.rangeValues[0]):
                    # print "error to small"
                    lineEdit.setText(str(format(rangeSlider.rangeValues[0], '.2f')))
                    v = rangeSlider.rangeValues[0]
                elif v > float(rangeSlider.rangeValues[1]):
                    # print "error to big"
                    lineEdit.setText(str(format(rangeSlider.rangeValues[1], '.2f')))
                    v = rangeSlider.rangeValues[1]
                else:
                    pass
                    # print "OK"

            except ValueError:
                lineEdit.setText(str(format(rangeSlider.defaultSingleValue, '.2f')))
                v = float(rangeSlider.defaultSingleValue)

            # Set value
            sliderValueTranslated = self.translate(v, rangeSlider.rangeValues[0], rangeSlider.rangeValues[1], 0, 250)
            slider.setValue(sliderValueTranslated)
            lineEdit.setText(str(format(v, '.2f')))

        def resetValues(self):
            self.rangeSlider.setValues([self.rangeSlider.rangeValues[0], self.rangeSlider.rangeValues[1]])
            self.lineEditMin.setText(str(format(self.rangeSlider.rangeValues[0], '.2f')))
            self.lineEditMax.setText(str(format(self.rangeSlider.rangeValues[1], '.2f')))
            self.lineEditDefault.setText(str(format(self.rangeSlider.defaultSingleValue, '.2f')))
            self.sliderDefValue.setValue(self.translate(self.rangeSlider.defaultSingleValue, self.rangeSlider.rangeValues[0], self.rangeSlider.rangeValues[1], 0, 250))
            self.rangeSlider.update()

        def getFielDefaultValues(self, fieldName, nodeName):

            [minSoft, maxSoft] = ParameterTabDefaultValues.setSoftMinMaxValue(fieldName, nodeName)

            cmdStr = nodeName + '.' + fieldName
            currentValue = cmds.getAttr(cmdStr)

            return [minSoft, maxSoft, currentValue]

        def chekIfAttrIsLocked(self, fieldName, nodeName):

            isFieldLocked = False
            cmdStr = nodeName + '.' + fieldName
            try:
                isFieldLocked = cmds.getAttr(cmdStr, lock=True)
                return isFieldLocked
            except ValueError:
                self.lgr.warning('Cannot get lock state of attribute: %s', cmdStr)
                return isFieldLocked

        def translate(self, value, leftMin, leftMax, rightMin, rightMax):
            # Get 'wide' of each range
            leftSpan = leftMax - leftMin
            rightSpan = rightMax - rightMin

            # Convert the left range into a range (rightMin-rightMax)
            valueScaled = float(value - leftMin) / float(leftSpan)

            return rightMin + (valueScaled * rightSpan)