class SliderGroup(Group):
    def __init__(self, posSize, minValue, maxValue, value, callback):
        Group.__init__(self, posSize)
        self.slider = Slider(
            (2, 3, -55, 17),
            minValue=minValue,
            maxValue=maxValue,
            value=value,
            sizeStyle="regular",
            callback=self.sliderChanged)
        self.edit = EditText(
            (-40, 0, -0, 22),
            text=str(value),
            placeholder=str(value),
            callback=self.editChanged)
        self.callback = callback

    def sliderChanged(self, sender):
        self.edit.set(str(int(self.slider.get())))
        self.callback(sender)

    def editChanged(self, sender):
        try:
            value = int(float(self.edit.get()))
        except ValueError:
            value = int(self.edit.getPlaceholder())
            self.edit.set(value)
        self.slider.set(value)
        self.callback(sender)
Beispiel #2
0
class SliderGroup(Group):
    def __init__(self, posSize, text, minValue, maxValue, value, callback):
        Group.__init__(self, posSize)
        self.text = TextBox((0, 0, -0, 20), text)
        self.slider = Slider((2, 20, -60, 17),
                             minValue=minValue,
                             maxValue=maxValue,
                             value=value,
                             sizeStyle="small",
                             callback=self.sliderChanged)
        self.edit = EditText((-40, 15, -0, 22),
                             text=str(value),
                             placeholder=str(value),
                             callback=self.editChanged)
        self.callback = callback

    def sliderChanged(self, sender):
        self.edit.set(str(int(self.slider.get())))
        self.callback(sender)

    def editChanged(self, sender):
        try:
            value = int(float(self.edit.get()))
        except ValueError:
            value = int(self.edit.getPlaceholder())
            self.edit.set(value)
        self.slider.set(value)

    def enable(self):
        self.text.enable(True)
        self.slider.enable(True)
        self.edit.enable(True)

    def disable(self):
        self.text.enable(False)
        self.slider.enable(False)
        self.edit.enable(False)
Beispiel #3
0
class SliderPlus(Group):

    _callback = weakrefCallbackProperty()

    def __init__(self,
                 posSize,
                 label,
                 minValue,
                 value,
                 maxValue,
                 continuous=True,
                 callback=None):
        super().__init__(posSize)
        self._callback = callback
        self.label = TextBox((0, 0, 0, 20), label)
        self.slider = Slider((0, 18, -60, 20),
                             value=minValue,
                             minValue=minValue,
                             maxValue=maxValue,
                             continuous=continuous,
                             callback=self._sliderCallback)
        self.editField = EditText((-50, 16, 0, 24),
                                  "",
                                  continuous=False,
                                  callback=self._editFieldCallback)
        self.editField._nsObject.setAlignment_(AppKit.NSRightTextAlignment)
        self._setSliderFromValue(value)
        self._setEditFieldFromValue(value)

    def _breakCycles(self):
        self._callback = None
        super()._breakCycles()

    def _sliderCallback(self, sender):
        value = sender.get()
        self._setEditFieldFromValue(value)
        callCallback(self._callback, self)

    def _editFieldCallback(self, sender):
        value = sender.get()
        if not value:
            # self._setSliderFromValue(None)
            callCallback(self._callback, self)
            return
        value = value.replace(",", ".")
        try:
            f = float(value)
        except ValueError:
            pass
        else:
            self.slider.set(f)
            sliderValue = self.slider.get()
            if sliderValue != f:
                self._setEditFieldFromValue(sliderValue)
            callCallback(self._callback, self)

    def _setSliderFromValue(self, value):
        if isinstance(value, set):
            value = sum(value) / len(value)
        elif value is None:
            minValue = self.slider._nsObject.minValue()
            maxValue = self.slider._nsObject.maxValue()
            value = (minValue + maxValue) / 2
        self.slider.set(value)

    def _setEditFieldFromValue(self, value):
        if isinstance(value, set):
            if len(value) == 1:
                value = next(iter(value))
            else:
                value = None
        if value is None:
            s = ""
        else:
            if int(value) == value:
                s = str(int(value))
            else:
                s = f"{value:.1f}"
        self.editField.set(s)

    def get(self):
        if not self.editField.get():
            return None
        else:
            return self.slider.get()

    def set(self, value):
        self._setSliderFromValue(value)
        self._setEditFieldFromValue(value)
Beispiel #4
0
class ParameterSliderTextInput(Group):
    '''
    Custom Vanilla object consisting mainly of a Slider & and text input linked together (through a parameter object)
    '''
    def __init__(self, parameter, posSize, title=None, callback=None):
        super(ParameterSliderTextInput, self).__init__(posSize)
        self.parameter = parameter
        self.callback = callback
        editTextPosSize = (-65, 0, 40, 22)
        if title is None:
            sliderPosSize = (5, 3, -80, 15)
        elif title is not None:
            title = title.capitalize()
            sliderPosSize = (70, 3, -80, 15)
            self.title = TextBox((0, 3, 65, 30), title, sizeStyle='small')
        if parameter.dissociable:
            editTextPosSize = (-65, 0, 40, 22)
            self.checkBox = CheckBox((-22, 5, 22, 25),
                                     u'∞',
                                     callback=self.setFree,
                                     value=True,
                                     sizeStyle='mini')
        self.slider = Slider(sliderPosSize,
                             minValue=parameter.limits[0],
                             maxValue=parameter.limits[1],
                             value=parameter.value,
                             callback=self.valueInput,
                             sizeStyle='small')
        self.textInput = EditText(editTextPosSize,
                                  str(parameter.value),
                                  callback=self.valueInput,
                                  continuous=False,
                                  sizeStyle='small')
        self.parameter.bind(self)

    def get(self):
        return self.parameter.get()

    def enable(self, b):
        self.slider.enable(b)
        self.textInput.enable(b)
        if hasattr(self, checkBox):
            self.checkBox.enable(b)

    def valueInput(self, sender):
        value = sender.get()
        parameter = self.parameter
        if value == 'R':
            parameter.reset()
            parameter.update()
            if self.callback is not None:
                self.callback(self)
            return
        elif value != '*':
            parameter.setInput(value, sender=sender)
            parameter.update()
            if self.callback is not None:
                self.callback(self)

    def update(self, sender):
        value = self.parameter.get()
        self.textInput.set(str(value))
        if (value != '*'):
            self.slider.set(value)
        if hasattr(self, 'checkBox'):
            free = self.parameter.hasMaster
            self.checkBox.set(free)

    def setFree(self, sender):
        value = not bool(sender.get())
        self.parameter.setFree(value)
class ParameterSliderTextInput(Group):

    '''
    Custom Vanilla object consisting mainly of a Slider & and text input linked together (through a parameter object)
    '''

    def __init__(self, parameter, posSize, title=None, callback=None):
        super(ParameterSliderTextInput, self).__init__(posSize)
        self.parameter = parameter
        self.callback = callback
        editTextPosSize = (-45, 0, 45, 22)
        if title is None:
            sliderPosSize = (5, 3, -80, 15)
        elif title is not None:
            if len(title) > 15:
                title = '{0}.'.format(title[:16])
            title = title.capitalize()
            sliderPosSize = (120, 3, -55, 15)
            self.title = TextBox((0, 3, 115, 30), title, sizeStyle='small')
        if parameter.dissociable:
            editTextPosSize = (-65, 0, 40, 22)
            self.checkBox = CheckBox((-22, 5, 22, 25), u'∞', callback=self.setFree, value=True, sizeStyle='mini')
        self.slider = Slider(sliderPosSize, minValue=parameter.limits[0], maxValue=parameter.limits[1], value=parameter.value, callback=self.valueInput, sizeStyle='small')
        self.textInput = EditText(editTextPosSize, str(parameter.value), callback=self.valueInput, continuous=False, sizeStyle='small')
        self.parameter.bind(self)

    def get(self):
        return self.parameter.get()

    def enable(self, b):
        self.slider.enable(b)
        self.textInput.enable(b)
        if hasattr(self, checkBox):
            self.checkBox.enable(b)

    def valueInput(self, sender):
        value = sender.get()
        parameter = self.parameter
        if value == 'R':
            parameter.reset()
            parameter.update()
            if self.callback is not None:
                self.callback(self)
            return
        elif value != '*':
            parameter.setInput(value, sender=sender)
            parameter.update()
            if self.callback is not None:
                self.callback(self)

    def update(self, sender):
        value = self.parameter.get()
        self.textInput.set(str(value))
        if (value != '*'):
            self.slider.set(value)
        if hasattr(self, 'checkBox'):
            free = self.parameter.hasMaster
            self.checkBox.set(free)

    def setFree(self, sender):
        value = not bool(sender.get())
        self.parameter.setFree(value)
class ParameterSliderTextInput(Group):

    """
    Custom Vanilla object consisting mainly of a Slider & and text input linked together (through a parameter object)
    """

    def __init__(self, parameter, posSize, title=None, callback=None):
        super(ParameterSliderTextInput, self).__init__(posSize)
        self.parameter = parameter
        self.callback = callback
        editTextPosSize = (-65, 0, 40, 22)
        if title is None:
            sliderPosSize = (5, 3, -80, 15)
        elif title is not None:
            title = title.capitalize()
            sliderPosSize = (70, 3, -80, 15)
            self.title = TextBox((0, 3, 65, 30), title, sizeStyle="small")
        if parameter.dissociable:
            editTextPosSize = (-65, 0, 40, 22)
            self.checkBox = CheckBox((-22, 5, 22, 25), u"∞", callback=self.setFree, value=True, sizeStyle="mini")
        self.slider = Slider(
            sliderPosSize,
            minValue=parameter.limits[0],
            maxValue=parameter.limits[1],
            value=parameter.value,
            callback=self.valueInput,
            sizeStyle="small",
        )
        self.textInput = EditText(
            editTextPosSize, str(parameter.value), callback=self.valueInput, continuous=False, sizeStyle="small"
        )
        self.parameter.bind(self)

    def get(self):
        return self.parameter.get()

    def enable(self, b):
        self.slider.enable(b)
        self.textInput.enable(b)
        if hasattr(self, checkBox):
            self.checkBox.enable(b)

    def valueInput(self, sender):
        value = sender.get()
        parameter = self.parameter
        if value == "R":
            parameter.reset()
            parameter.update()
            if self.callback is not None:
                self.callback(self)
            return
        elif value != "*":
            parameter.setInput(value, sender=sender)
            parameter.update()
            if self.callback is not None:
                self.callback(self)

    def update(self, sender):
        value = self.parameter.get()
        self.textInput.set(str(value))
        if value != "*":
            self.slider.set(value)
        if hasattr(self, "checkBox"):
            free = self.parameter.hasMaster
            self.checkBox.set(free)

    def setFree(self, sender):
        value = not bool(sender.get())
        self.parameter.setFree(value)