finish modifier_linkable_list(), add modifier_group_free()
This commit is contained in:
4
TODO
4
TODO
@@ -2,6 +2,4 @@
|
||||
-effects level
|
||||
-handling presets (saving, exporting to xml patches)
|
||||
-buildsystem (install knob.png to share dir, don't use inline knob pixbuf)
|
||||
-expression pedal settings
|
||||
-finish modifier_linkable_list() (gdigi.c)
|
||||
-add it to gui
|
||||
-add expression pedal settings to gui
|
||||
|
||||
62
effects.c
62
effects.c
@@ -893,7 +893,27 @@ static Modifier *get_modifier(guint id, guint position)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void modifier_linkable_list()
|
||||
static EffectSettings *get_modifier_settings(EffectValues *values)
|
||||
{
|
||||
if (values == NULL)
|
||||
return NULL;
|
||||
|
||||
/* TODO: reuse exsisting settings if values is the same */
|
||||
EffectSettings *settings = g_slice_alloc0(2 * sizeof(EffectSettings));
|
||||
settings[0].id = EXP_MIN;
|
||||
settings[1].id = EXP_MAX;
|
||||
|
||||
settings[0].label = "Min";
|
||||
settings[1].label = "Max";
|
||||
|
||||
settings[0].position = settings[1].position = EXP_POSITION;
|
||||
|
||||
settings[0].values = settings[1].values = values;
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
ModifierGroup *modifier_linkable_list()
|
||||
{
|
||||
guint group_id;
|
||||
guint count;
|
||||
@@ -908,12 +928,52 @@ void modifier_linkable_list()
|
||||
group_id = (str[8] << 8) | str[9];
|
||||
count = (str[10] << 8) | str[11];
|
||||
|
||||
ModifierGroup *modifier_group = g_slice_new(ModifierGroup);
|
||||
|
||||
g_message("Group %d count %d", group_id, count);
|
||||
EffectGroup *group = g_slice_alloc(count * sizeof(EffectGroup));
|
||||
|
||||
for (i=0; i<count; i++) {
|
||||
guint id = (str[12 + (i*3)] << 8) | str[13 + (i*3)];
|
||||
guint position = str[14 + (i*3)];
|
||||
|
||||
group[i].type = (position << 16) | id;
|
||||
group[i].id = EXP_TYPE;
|
||||
group[i].position = EXP_POSITION;
|
||||
|
||||
Modifier *modifier = get_modifier(id, position);
|
||||
if (modifier) {
|
||||
group[i].label = modifier->label;
|
||||
group[i].settings = get_modifier_settings(modifier->values);
|
||||
group[i].settings_amt = 2;
|
||||
} else {
|
||||
group[i].label = NULL;
|
||||
group[i].settings = NULL;
|
||||
}
|
||||
|
||||
if (group[i].settings == NULL)
|
||||
group[i].settings_amt = 0;
|
||||
|
||||
g_message("ID: %d Position: %d Label: %s", id, position, modifier ? modifier->label : NULL);
|
||||
}
|
||||
|
||||
modifier_group->group = group;
|
||||
modifier_group->group_amt = count;
|
||||
|
||||
return modifier_group;
|
||||
}
|
||||
|
||||
void modifier_group_free(ModifierGroup *modifier_group)
|
||||
{
|
||||
g_return_if_fail(modifier_group != NULL);
|
||||
|
||||
int x;
|
||||
for (x=0; x<modifier_group->group_amt; x++) {
|
||||
if (modifier_group->group[x].settings)
|
||||
g_slice_free1(2 * sizeof(EffectSettings),
|
||||
modifier_group->group[x].settings);
|
||||
}
|
||||
g_slice_free1(modifier_group->group_amt * sizeof(EffectGroup),
|
||||
modifier_group->group);
|
||||
g_slice_free(ModifierGroup, modifier_group);
|
||||
}
|
||||
|
||||
@@ -54,4 +54,12 @@ typedef struct {
|
||||
gint amt; /* list of supported effects length */
|
||||
} EffectList;
|
||||
|
||||
typedef struct {
|
||||
EffectGroup *group;
|
||||
gint group_amt;
|
||||
} ModifierGroup;
|
||||
|
||||
ModifierGroup *modifier_linkable_list();
|
||||
void modifier_group_free(ModifierGroup *modifier_group);
|
||||
|
||||
#endif /* GDIGI_EFFECTS_H */
|
||||
|
||||
Reference in New Issue
Block a user