Example #1
0
    def _create_effect_parameter_controls(self, zone, effect_id,
                                          effect_options):
        """
        Creates a set of radio buttons for changing the current effect's parameter.
        """
        widgets = []

        def _clicked_param_button():
            for radio in self.btn_grps["radio_param_" + zone]:
                if not radio.isChecked():
                    continue

                self.dbg.stdout(
                    "Setting parameter {} for {} on {} device {} (zone: {}, colours: {})"
                    .format(radio.option_data, radio.option_id,
                            self.current_backend, self.current_uid, radio.zone,
                            str(radio.colour_hex)), self.dbg.action, 1)
                self.middleman.set_device_state(self.current_backend,
                                                self.current_uid,
                                                self.current_serial,
                                                radio.zone, radio.option_id,
                                                radio.option_data,
                                                radio.colour_hex)
                self.reload_device()

        for effect in effect_options:
            if not effect["id"] == effect_id:
                continue

            for param in effect["parameters"]:
                label = param["label"]

                radio = QRadioButton()
                radio.setText(label)
                radio.clicked.connect(_clicked_param_button)

                radio.option_id = effect_id
                radio.option_data = param["data"]
                radio.zone = zone
                radio.colour_hex = param["colours"]

                if param["active"]:
                    radio.setChecked(True)

                icon = common.get_icon("params", param["id"])
                if icon:
                    radio.setIcon(QIcon(icon))
                    radio.setIconSize(QSize(22, 22))

                widgets.append(radio)

        if not widgets:
            return None

        self.btn_grps["radio_param_" + zone] = widgets
        return self.widgets.create_row_widget(self._("Effect Mode"),
                                              widgets,
                                              vertical=True)