Ejemplo n.º 1
0
Request::FieldsDialog::AccountField::AccountField(PurpleRequestField *field)
    : field(field)
{
    g_assert(field);

    // TODO filter (purple_request_field_account_get_filter())
    // TODO signals (signed-on, signed-off, account-added, account-removed)

    char *text = g_strdup_printf("%s%s",
                                 purple_request_field_is_required(field) ? "*" : "",
                                 purple_request_field_get_label(field));
    SetText(text);
    g_free(text);

    gboolean show_all = purple_request_field_account_get_show_all(field);
    for (GList *list = purple_accounts_get_all(); list; list = list->next) {
        PurpleAccount *account = reinterpret_cast<PurpleAccount*>(list->data);
        if (!show_all && !purple_account_is_connected(account))
            continue;

        char *label = g_strdup_printf("[%s] %s",
                                      purple_account_get_protocol_name(account),
                                      purple_account_get_username(account));
        AddOptionPtr(label, account);
        g_free(label);
    }
    SetSelectedByDataPtr(purple_request_field_account_get_default_value(field));

    signal_selection_changed.connect(sigc::mem_fun(this,
                                     &AccountField::OnAccountChanged));
}
Ejemplo n.º 2
0
static GntWidget*
create_account_field(PurpleRequestField *field)
{
	gboolean all;
	PurpleAccount *def;
	GList *list;
	GntWidget *combo = gnt_combo_box_new();

	all = purple_request_field_account_get_show_all(field);
	def = purple_request_field_account_get_value(field);
	if (!def)
		def = purple_request_field_account_get_default_value(field);

	if (all)
		list = purple_accounts_get_all();
	else
		list = purple_connections_get_all();

	for (; list; list = list->next)
	{
		PurpleAccount *account;
		char *text;

		if (all)
			account = list->data;
		else
			account = purple_connection_get_account(list->data);

		text = g_strdup_printf("%s (%s)",
				purple_account_get_username(account),
				purple_account_get_protocol_name(account));
		gnt_combo_box_add_data(GNT_COMBO_BOX(combo), account, text);
		g_free(text);
		if (account == def)
			gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), account);
	}
	gnt_widget_set_size(combo, 20, 3); /* ew */
	return combo;
}