mixer: cleanup card and channel selection code path

_populate_channel_editor:
   use app->sys_card_name instead of
e_mod_mixer_card_name_get _populate_channels:
   select default channel or first one
_create_cards:
   do not reselect card and channel
e_mixer_app_dialog_select:
   cleanup, remove unused _find_card_by_name and _find_channel_by_name
_mixer_popup_cb_mixer:
   do not modifiy current selection on popup
This commit is contained in:
Jérémy Zurcher 2013-03-01 09:37:22 +01:00
parent 01e98a4534
commit 46230e204c
2 changed files with 47 additions and 91 deletions

View File

@ -5,7 +5,7 @@ extern const char _e_mixer_Name[];
typedef struct E_Mixer_App_Dialog_Data
{
E_Mixer_System *sys;
const char *card;
const char *sys_card_name;
const char *channel_name;
int lock_sliders;
Eina_List *cards;
@ -161,19 +161,14 @@ _populate_channel_editor(E_Mixer_App_Dialog_Data *app)
{
struct e_mixer_app_ui_channel_editor *ui = &app->ui.channel_editor;
E_Mixer_Channel_State state;
const char *card_name;
card_name = e_mod_mixer_card_name_get(app->card);
if (!card_name)
if ((!app->sys_card_name) || (!app->channel_name))
{
_disable_channel_editor(app);
return;
}
e_widget_entry_text_set(ui->card, card_name);
eina_stringshare_del(card_name);
e_widget_entry_text_set(ui->card, app->sys_card_name);
e_widget_entry_text_set(ui->channel, app->channel_name);
if (e_mod_mixer_channel_is_boost(app->channel_info))
@ -257,7 +252,7 @@ _populate_channels(E_Mixer_App_Dialog_Data *app)
Eina_List *l;
Evas_Object *ilist;
int header_input;
int i;
int i, selected;
ilist = app->ui.channels.list;
edje_freeze();
@ -266,18 +261,16 @@ _populate_channels(E_Mixer_App_Dialog_Data *app)
if (app->sys)
e_mod_mixer_del(app->sys);
app->sys = e_mod_mixer_new(app->card);
app->sys = e_mod_mixer_new(app->sys_card_name);
if (_mixer_using_default)
e_mixer_system_callback_set(app->sys, _cb_system_update, app);
eina_stringshare_del(app->channel_name);
app->channel_name = e_mod_mixer_channel_default_name_get(app->sys);
if (app->channel_infos)
e_mod_mixer_channel_infos_free(app->channel_infos);
app->channel_infos = e_mod_mixer_channel_infos_get(app->sys);
i = 0;
selected = 0;
header_input = 0;
for (l = app->channel_infos; l; l = l->next, i++)
{
@ -300,33 +293,29 @@ _populate_channels(E_Mixer_App_Dialog_Data *app)
info->app = app;
e_widget_ilist_append(ilist, NULL, info->name, _cb_channel_selected,
info, info->name);
if (app->channel_name && info->name &&
if ((selected == 0) && app->channel_name && info->name &&
(strcmp(app->channel_name, info->name) == 0))
{
e_widget_ilist_selected_set(ilist, i);
app->channel_info = info;
selected = 1;
}
}
if ((selected == 0) && (i > 0))
e_widget_ilist_selected_set(ilist, 0);
else
app->channel_name = NULL;
e_widget_ilist_go(ilist);
e_widget_ilist_thaw(ilist);
edje_thaw();
}
static void
select_card(E_Mixer_App_Dialog_Data *app)
{
_populate_channels(app);
if (e_widget_ilist_count(app->ui.channels.list) > 0)
e_widget_ilist_selected_set(app->ui.channels.list, 1);
else
_disable_channel_editor(app);
}
static void
_cb_card_selected(void *data)
{
select_card(data);
_populate_channels(data);
}
static void
@ -336,12 +325,11 @@ _create_cards(E_Dialog *dialog __UNUSED__, Evas *evas, E_Mixer_App_Dialog_Data *
const char *card;
Eina_List *l;
app->card = e_mod_mixer_card_default_get();
app->cards = e_mod_mixer_card_names_get();
if (eina_list_count(app->cards) < 2)
return;
ui->list = e_widget_ilist_add(evas, 32, 32, &app->card);
ui->list = e_widget_ilist_add(evas, 32, 32, &app->sys_card_name);
e_widget_size_min_set(ui->list, 180, 100);
e_widget_ilist_go(ui->list);
EINA_LIST_FOREACH(app->cards, l, card)
@ -442,12 +430,6 @@ _create_ui(E_Dialog *dialog, E_Mixer_App_Dialog_Data *app)
_create_channels(dialog, evas, app);
_create_channel_editor(dialog, evas, app);
if (ui->cards.list)
e_widget_ilist_selected_set(ui->cards.list, 0);
else
select_card(app);
e_widget_ilist_selected_set(ui->channels.list, 1);
e_widget_size_min_get(ui->hlayout, &mw, &mh);
if (mw < 300)
mw = 300;
@ -462,8 +444,9 @@ _mixer_app_dialog_del(E_Dialog *dialog, E_Mixer_App_Dialog_Data *app)
if (app->del.func)
app->del.func(dialog, app->del.data);
eina_stringshare_del(app->card);
eina_stringshare_del(app->channel_name);
if ((!app->ui.cards.list) && (app->ui.channels.list))
eina_stringshare_del(app->sys_card_name);
if (app->cards)
e_mod_mixer_card_names_free(app->cards);
if (app->channel_infos)
@ -527,77 +510,49 @@ e_mixer_app_dialog_new(E_Container *con, void (*func)(E_Dialog *dialog, void *da
return dialog;
}
static inline int
_find_card_by_name(E_Mixer_App_Dialog_Data *app, const char *card_name)
{
Eina_List *l;
int i;
if (!card_name)
return 0;
for (i = 0, l = app->cards; l; i++, l = l->next)
if (strcmp(card_name, l->data) == 0)
return i;
return -1;
}
static inline int
_find_channel_by_name(E_Mixer_App_Dialog_Data *app, const char *channel_name)
{
E_Mixer_Channel_Info *info;
Eina_List *l;
int i = 0;
int header_input;
if (!channel_name)
return 0;
header_input = 0;
EINA_LIST_FOREACH(app->channel_infos, l, info)
{
if (header_input != e_mod_mixer_channel_group_get(info))
{
header_input = e_mod_mixer_channel_group_get(info);
i++;
}
if (strcmp(channel_name, info->name) == 0)
return i;
++i;
}
return -1;
}
int
e_mixer_app_dialog_select(E_Dialog *dialog, const char *card_name, const char *channel_name)
e_mixer_app_dialog_select(E_Dialog *dialog, const char *sys_card_name, const char *channel_name)
{
int n, i;
Eina_List *l;
E_Mixer_App_Dialog_Data *app;
int n;
if (!dialog)
return 0;
if ((!card_name) || (!channel_name))
if ((!sys_card_name) || (!channel_name))
return 0;
app = dialog->data;
if (!app)
return 0;
n = _find_card_by_name(app, card_name);
n = -1;
for (i = 0, l = app->cards; l; i++, l = l->next)
{
if (strcmp(sys_card_name, l->data) == 0)
{
n = i;
break;
}
}
if (n < 0)
return 0;
{
/* FIXME device disappeared, very bad !! */
return 0;
}
/* app->channel_name will be overriden by selection in _populate_channels */
app->channel_name = channel_name;
if (app->ui.cards.list)
e_widget_ilist_selected_set(app->ui.cards.list, n);
n = _find_channel_by_name(app, channel_name);
if (n < 0)
return 0;
e_widget_ilist_selected_set(app->ui.channels.list, n);
else if (app->ui.channels.list)
{
app->sys_card_name = eina_stringshare_add(sys_card_name);
_populate_channels(app);
}
return 1;
}

View File

@ -563,7 +563,8 @@ _mixer_popup_cb_mixer(void *data, void *data2 __UNUSED__)
ctxt = mixer_mod->data;
if (ctxt->mixer_dialog)
{
_mixer_app_select_current(ctxt->mixer_dialog, inst);
/* maybe not update mixer dialog current selection */
/* _mixer_app_select_current(ctxt->mixer_dialog, inst); */
e_dialog_show(ctxt->mixer_dialog);
return;
}