From 2e09f09966a15aa838af9ae96daef702cac09569 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 28 Jun 2021 18:07:50 +0200 Subject: Fixture display: Handle grouped fixtures --- src/starlet-fixture-display.c | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/starlet-fixture-display.c b/src/starlet-fixture-display.c index c75a7c4..8f1d34c 100644 --- a/src/starlet-fixture-display.c +++ b/src/starlet-fixture-display.c @@ -316,6 +316,18 @@ static char *symbol_to_str(SCM symbol) } +static char *group_fixture_name(SCM item) +{ + char tmp[64]; + SCM group_name = scm_list_ref(item, scm_from_int(1)); + SCM idx = scm_list_ref(item, scm_from_int(2)); + SCM name = scm_symbol_to_string(group_name); + snprintf(tmp, 63, "%s/%i", scm_to_locale_string(name), + scm_to_int(idx)); + return strdup(tmp); +} + + static void handle_patched_fixtures(struct fixture_display *fixd, SCM list) { @@ -338,19 +350,17 @@ static void handle_patched_fixtures(struct fixture_display *fixd, if ( is_list(item) && (scm_to_int(scm_length(item)) == 3) ) { char tmp[64]; - SCM group_name = scm_list_ref(item, scm_from_int(1)); SCM idx = scm_list_ref(item, scm_from_int(2)); + SCM group_name = scm_list_ref(item, scm_from_int(1)); SCM name = scm_symbol_to_string(group_name); - snprintf(tmp, 63, "%s/%i", - scm_to_locale_string(name), - scm_to_int(idx)); - fixd->fixtures[i].label = strdup(tmp); snprintf(tmp, 63, "(list-ref %s %i)", scm_to_locale_string(name), scm_to_int(idx)); fixd->fixtures[i].scheme_name = strdup(tmp); + fixd->fixtures[i].label = group_fixture_name(item); + } else { SCM name = scm_symbol_to_string(item); fixd->fixtures[i].label = scm_to_locale_string(name); @@ -405,7 +415,16 @@ static void handle_selection(struct fixture_display *fixd, SCM list) for ( i=0; i