finish modifier_linkable_list(), add modifier_group_free()

This commit is contained in:
Tomasz Moń
2009-03-14 12:39:45 +01:00
parent 4ca140ab48
commit bdb35ddf54
3 changed files with 70 additions and 4 deletions

4
TODO
View File

@@ -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

View File

@@ -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);
} }

View File

@@ -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 */