finish modifier_linkable_list(), add modifier_group_free()
This commit is contained in:
4
TODO
4
TODO
@@ -2,6 +2,4 @@
|
|||||||
-effects level
|
-effects level
|
||||||
-handling presets (saving, exporting to xml patches)
|
-handling presets (saving, exporting to xml patches)
|
||||||
-buildsystem (install knob.png to share dir, don't use inline knob pixbuf)
|
-buildsystem (install knob.png to share dir, don't use inline knob pixbuf)
|
||||||
-expression pedal settings
|
-add expression pedal settings to gui
|
||||||
-finish modifier_linkable_list() (gdigi.c)
|
|
||||||
-add it to gui
|
|
||||||
|
|||||||
62
effects.c
62
effects.c
@@ -893,7 +893,27 @@ static Modifier *get_modifier(guint id, guint position)
|
|||||||
return NULL;
|
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 group_id;
|
||||||
guint count;
|
guint count;
|
||||||
@@ -908,12 +928,52 @@ void modifier_linkable_list()
|
|||||||
group_id = (str[8] << 8) | str[9];
|
group_id = (str[8] << 8) | str[9];
|
||||||
count = (str[10] << 8) | str[11];
|
count = (str[10] << 8) | str[11];
|
||||||
|
|
||||||
|
ModifierGroup *modifier_group = g_slice_new(ModifierGroup);
|
||||||
|
|
||||||
g_message("Group %d count %d", group_id, count);
|
g_message("Group %d count %d", group_id, count);
|
||||||
|
EffectGroup *group = g_slice_alloc(count * sizeof(EffectGroup));
|
||||||
|
|
||||||
for (i=0; i<count; i++) {
|
for (i=0; i<count; i++) {
|
||||||
guint id = (str[12 + (i*3)] << 8) | str[13 + (i*3)];
|
guint id = (str[12 + (i*3)] << 8) | str[13 + (i*3)];
|
||||||
guint position = str[14 + (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);
|
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);
|
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 */
|
gint amt; /* list of supported effects length */
|
||||||
} EffectList;
|
} EffectList;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
EffectGroup *group;
|
||||||
|
gint group_amt;
|
||||||
|
} ModifierGroup;
|
||||||
|
|
||||||
|
ModifierGroup *modifier_linkable_list();
|
||||||
|
void modifier_group_free(ModifierGroup *modifier_group);
|
||||||
|
|
||||||
#endif /* GDIGI_EFFECTS_H */
|
#endif /* GDIGI_EFFECTS_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user