From 12cdd6eeb3206a2d7d63d943f82a2e900adefd88 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Tue, 3 Dec 2024 14:26:36 +0100 Subject: Implement config constraints --- src/blocks/slider.c | 79 ++++++++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 44 deletions(-) (limited to 'src/blocks') diff --git a/src/blocks/slider.c b/src/blocks/slider.c index fe8ee28..854b284 100644 --- a/src/blocks/slider.c +++ b/src/blocks/slider.c @@ -257,29 +257,6 @@ static void block_slider_clean(block_t *block) gradient_clean(&slider->knob_line_color); } -static int block_slider_validate(block_t *block, config_t *config) -{ - block_slider_t *slider = (block_slider_t *)block; - int errors = 0; - - if (slider->value < 0 || slider->value > 100) { - log_error("Block '%s' requires '%s' to be between 0 and 100", block->label, "bar-value"); - errors++; - } - - if (slider->knob_width < slider->knob_height) { - log_error("Block '%s' requires '%s' greater than '%s'", block->label, "knob-width", "knob-height"); - errors++; - } - - if (fabs(slider->knob_rotation) > 360.0) { - log_error("Block '%s' requires '%s' to be at most 360", block->label, "knob-rotation"); - errors++; - } - - return errors; -} - static bool block_slider_resolve(block_t *block, config_t *config) { block_slider_t *slider = (block_slider_t *)block; @@ -306,28 +283,43 @@ static config_enum_t knob_shape_enum[] = { { 0 }, }; +static config_check_t bar_value_checks[] = { + { CHECK_IN_RANGE, { .range = { 0, 100 } } }, + { 0 }, +}; + +static config_check_t knob_width_checks[] = { + { CHECK_GT_OTHER, { .compare = { offsetof(block_slider_t, knob_height), CONFIG_UINT } } }, + { 0 }, +}; + +static config_check_t knob_rotation_checks[] = { + { CHECK_IN_RANGE, { { -360, 360 } } }, + { 0 }, +}; + static const config_entry_t block_slider_entries[] = { // TODO: Ugly names - { "bar-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, bar_color) }, - { "bar-line-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, line_color) }, - { "bar-bg-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, bg_color) }, - { "bar-height", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, height) }, - { "bar-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, width) }, - { "bar-line-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, line_width) }, - { "bar-value", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, value) }, - { "seekable", CONFIG_BOOL, NULL, NULL, offsetof(block_slider_t, seekable) }, - { "knob", CONFIG_ENUM, knob_shape_enum, NULL, offsetof(block_slider_t, knob) }, - { "knob-height", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_height) }, - { "knob-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_width) }, - { "knob-line-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_line_width) }, - { "knob-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, knob_color) }, - { "knob-line-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, knob_line_color) }, - { "knob-x-offset", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, knob_x_offset) }, - { "knob-y-offset", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, knob_y_offset) }, - { "knob-rotation", CONFIG_DOUBLE, NULL, NULL, offsetof(block_slider_t, knob_rotation) }, - { "left-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, left_click) }, - { "middle-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, middle_click) }, - { "right-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, right_click) }, + { "bar-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, bar_color) }, + { "bar-line-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, line_color) }, + { "bar-bg-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, bg_color) }, + { "bar-height", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, height) }, + { "bar-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, width) }, + { "bar-line-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, line_width) }, + { "bar-value", CONFIG_INT, NULL, bar_value_checks, offsetof(block_slider_t, value) }, + { "seekable", CONFIG_BOOL, NULL, NULL, offsetof(block_slider_t, seekable) }, + { "knob", CONFIG_ENUM, knob_shape_enum, NULL, offsetof(block_slider_t, knob) }, + { "knob-height", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_height) }, + { "knob-width", CONFIG_UINT, NULL, knob_width_checks, offsetof(block_slider_t, knob_width) }, + { "knob-line-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_line_width) }, + { "knob-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, knob_color) }, + { "knob-line-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, knob_line_color) }, + { "knob-x-offset", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, knob_x_offset) }, + { "knob-y-offset", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, knob_y_offset) }, + { "knob-rotation", CONFIG_DOUBLE, NULL, knob_rotation_checks, offsetof(block_slider_t, knob_rotation) }, + { "left-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, left_click) }, + { "middle-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, middle_click) }, + { "right-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, right_click) }, { 0 }, }; @@ -343,7 +335,6 @@ const block_scheme_t block_slider_scheme = { .validate_change = true, .init_fn = block_slider_init, .clean_fn = block_slider_clean, - .validate_fn = block_slider_validate, .resolve_fn = block_slider_resolve, .change_fn = block_slider_change, }; -- cgit v1.2.3