class FloatSliderField: """ Similar to float slider group, only without caption """ def __init__(self, range=[0.0, 1.0]): assert len(range) == 2 self.model = None self.floatField = None self.slider = None self.onChange = Signal() self.onChanging = Signal() self.range = range self.flexibleRange = False def updateModel(self): if self.model is not None: self.model.set(self.getValue()) def sliderChanging(self, *args): """ handler for when float slider value is dragged """ self.floatField.setValue(cmds.floatSlider(self.slider, q=True, value=True)) self.updateModel() self.onChanging.emit() def sliderChanged(self, *args): self.updateModel() self.onChange.emit() def __updateSliderValue(self): value = self.floatField.getValue() minValue = cmds.floatSlider(self.slider, q=True, minValue=True) maxValue = cmds.floatSlider(self.slider, q=True, maxValue=True) if self.flexibleRange: # change min/max, if needed cmds.floatSlider(self.slider, e=True, minValue=min(value, minValue), maxValue=max(value, maxValue)) else: # change value, if needed value = min(maxValue, max(value, minValue)) cmds.floatSlider(self.slider, e=True, value=self.floatField.getValue()) def fieldChanged(self): """ handler for when float field value changes """ self.__updateSliderValue() self.updateModel() self.onChange.emit() def create(self): result = self.mainLayout = cmds.rowLayout(nc=2, adjustableColumn=2) step = (self.range[1] - self.range[0]) / 100.0 self.floatField = FloatField(self.model, step=step) if not self.flexibleRange: self.floatField.editUI(minValue=self.range[0], maxValue=self.range[1]) self.floatField.changeCommand.addHandler(self.fieldChanged) self.slider = cmds.floatSlider( value=self.floatField.getValue(), dragCommand=self.sliderChanging, changeCommand=self.sliderChanged, step=step, minValue=self.range[0], maxValue=self.range[1], ) self.__updateSliderValue() return result def setModel(self, model): self.floatField.setModel(model) self.__updateSliderValue() def setValue(self, value): self.floatField.setValue(value) self.__updateSliderValue() def getValue(self): return self.floatField.getValue() def setEnabled(self, enabled): cmds.layout(self.mainLayout, e=True, enable=enabled)
class FloatSliderField: ''' Similar to float slider group, only without caption ''' def __init__(self, range=(0.0, 1.0)): assert (len(range) == 2) self.model = None self.floatField = None self.slider = None self.onChange = Signal("floatSliderChange") self.onChanging = Signal("floatSliderChanging") self.range = range self.flexibleRange = False def updateModel(self): if self.model is not None: self.model.set(self.getValue()) def sliderChanging(self, *args): ''' handler for when float slider value is dragged ''' self.floatField.setValue( cmds.floatSlider(self.slider, q=True, value=True)) self.updateModel() self.onChanging.emit() def sliderChanged(self, *args): self.updateModel() self.onChange.emit() def __updateSliderValue(self): value = self.floatField.getValue() minValue = cmds.floatSlider(self.slider, q=True, minValue=True) maxValue = cmds.floatSlider(self.slider, q=True, maxValue=True) if self.flexibleRange: #change min/max, if needed cmds.floatSlider(self.slider, e=True, minValue=min(value, minValue), maxValue=max(value, maxValue)) else: #change value, if needed value = min(maxValue, max(value, minValue)) cmds.floatSlider(self.slider, e=True, value=self.floatField.getValue()) def fieldChanged(self): ''' handler for when float field value changes ''' self.__updateSliderValue() self.updateModel() self.onChange.emit() def create(self): result = self.mainLayout = cmds.rowLayout(nc=2, adjustableColumn=2) step = (self.range[1] - self.range[0]) / 100.0 self.floatField = FloatField(self.model, step=step) if not self.flexibleRange: self.floatField.editUI(minValue=self.range[0], maxValue=self.range[1]) self.floatField.changeCommand.addHandler(self.fieldChanged) self.slider = cmds.floatSlider(value=self.floatField.getValue(), dragCommand=self.sliderChanging, changeCommand=self.sliderChanged, step=step, minValue=self.range[0], maxValue=self.range[1]) self.__updateSliderValue() return result def setModel(self, model): self.floatField.setModel(model) self.__updateSliderValue() def setValue(self, value): self.floatField.setValue(value) self.__updateSliderValue() def getValue(self): return self.floatField.getValue() def setEnabled(self, enabled): cmds.layout(self.mainLayout, e=True, enable=enabled)