void purple_request_field_list_set_selected(PurpleRequestField *field, GList *items) { GList *l; g_return_if_fail(field != NULL); g_return_if_fail(items != NULL); g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_LIST); purple_request_field_list_clear_selected(field); if (!purple_request_field_list_get_multi_select(field) && items && items->next) { purple_debug_warning("request", "More than one item added to non-multi-select " "field %s\n", purple_request_field_get_id(field)); return; } for (l = items; l != NULL; l = l->next) { field->u.list.selected = g_list_append(field->u.list.selected, g_strdup(l->data)); g_hash_table_insert(field->u.list.selected_table, g_strdup((char *)l->data), NULL); } }
void purple_request_fields_add_group(PurpleRequestFields *fields, PurpleRequestFieldGroup *group) { GList *l; PurpleRequestField *field; g_return_if_fail(fields != NULL); g_return_if_fail(group != NULL); fields->groups = g_list_append(fields->groups, group); group->fields_list = fields; for (l = purple_request_field_group_get_fields(group); l != NULL; l = l->next) { field = l->data; g_hash_table_insert(fields->fields, g_strdup(purple_request_field_get_id(field)), field); if (purple_request_field_is_required(field)) { fields->required_fields = g_list_append(fields->required_fields, field); } } }
void finch_request_save_in_prefs(gpointer null, PurpleRequestFields *allfields) { GList *list; for (list = purple_request_fields_get_groups(allfields); list; list = list->next) { PurpleRequestFieldGroup *group = list->data; GList *fields = purple_request_field_group_get_fields(group); for (; fields ; fields = fields->next) { PurpleRequestField *field = fields->data; PurpleRequestFieldType type = purple_request_field_get_type(field); PurplePrefType pt; gpointer val = NULL; const char *id = purple_request_field_get_id(field); switch (type) { case PURPLE_REQUEST_FIELD_LIST: val = purple_request_field_list_get_selected(field)->data; break; case PURPLE_REQUEST_FIELD_BOOLEAN: val = GINT_TO_POINTER(purple_request_field_bool_get_value(field)); break; case PURPLE_REQUEST_FIELD_INTEGER: val = GINT_TO_POINTER(purple_request_field_int_get_value(field)); break; case PURPLE_REQUEST_FIELD_STRING: val = (gpointer)purple_request_field_string_get_value(field); break; default: break; } pt = purple_prefs_get_type(id); switch (pt) { case PURPLE_PREF_INT: { long int tmp = GPOINTER_TO_INT(val); if (type == PURPLE_REQUEST_FIELD_LIST) /* Lists always return string */ sscanf(val, "%ld", &tmp); purple_prefs_set_int(id, (gint)tmp); break; } case PURPLE_PREF_BOOLEAN: purple_prefs_set_bool(id, GPOINTER_TO_INT(val)); break; case PURPLE_PREF_STRING: purple_prefs_set_string(id, val); break; default: break; } } } }
void purple_request_field_list_add_selected(PurpleRequestField *field, const char *item) { g_return_if_fail(field != NULL); g_return_if_fail(item != NULL); g_return_if_fail(field->type == PURPLE_REQUEST_FIELD_LIST); if (!purple_request_field_list_get_multi_select(field) && field->u.list.selected != NULL) { purple_debug_warning("request", "More than one item added to non-multi-select " "field %s\n", purple_request_field_get_id(field)); return; } field->u.list.selected = g_list_append(field->u.list.selected, g_strdup(item)); g_hash_table_insert(field->u.list.selected_table, g_strdup(item), NULL); }
void purple_request_field_group_add_field(PurpleRequestFieldGroup *group, PurpleRequestField *field) { g_return_if_fail(group != NULL); g_return_if_fail(field != NULL); group->fields = g_list_append(group->fields, field); if (group->fields_list != NULL) { g_hash_table_insert(group->fields_list->fields, g_strdup(purple_request_field_get_id(field)), field); if (purple_request_field_is_required(field)) { group->fields_list->required_fields = g_list_append(group->fields_list->required_fields, field); } } field->group = group; }
QuetzalFieldsDialog::QuetzalFieldsDialog(const char *title, const char *primary, const char *secondary, PurpleRequestFields *fields, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb, void *user_data, QWidget *parent) : QuetzalRequestDialog(PURPLE_REQUEST_FIELDS, user_data, parent) { m_ok_cb = (PurpleRequestFieldsCb) ok_cb; m_cancel_cb = (PurpleRequestFieldsCb) cancel_cb; m_fields = fields; DataItem root = createItem(title, primary, secondary); GList *group_it = purple_request_fields_get_groups(m_fields); bool useGroupBox = group_it->next; debug() << "useGroupBox" << useGroupBox; for (; group_it; group_it = group_it->next) { PurpleRequestFieldGroup *group = reinterpret_cast<PurpleRequestFieldGroup*>(group_it->data); DataItem groupItem; if (useGroupBox) groupItem = DataItem(purple_request_field_group_get_title(group)); GList *field_it = purple_request_field_group_get_fields(group); for (; field_it; field_it = field_it->next) { PurpleRequestField *field = reinterpret_cast<PurpleRequestField*>(field_it->data); debug() << field->id << purple_request_field_is_visible(field) << purple_request_field_get_type(field); if (!purple_request_field_is_visible(field)) continue; DataItem item(purple_request_field_get_id(field), purple_request_field_get_label(field), QVariant()); switch (purple_request_field_get_type(field)) { case PURPLE_REQUEST_FIELD_STRING: item.setData(QString::fromUtf8(purple_request_field_string_get_default_value(field))); item.setProperty("multiline", purple_request_field_string_is_multiline(field)); item.setProperty("password", bool(purple_request_field_string_is_masked(field))); item.setReadOnly(!purple_request_field_string_is_editable(field)); debug() << item.name() << item.data() << item.property("password") << item.isReadOnly(); break; case PURPLE_REQUEST_FIELD_INTEGER: item.setData(purple_request_field_int_get_default_value(field)); item.setProperty("minValue", G_MININT); item.setProperty("maxValue", G_MAXINT); break; case PURPLE_REQUEST_FIELD_BOOLEAN: item.setData(bool(purple_request_field_bool_get_default_value(field))); break; case PURPLE_REQUEST_FIELD_CHOICE: { GList *labels = purple_request_field_choice_get_labels(field); QStringList alternatives; for (; labels; labels = labels->next) alternatives << QString::fromUtf8(reinterpret_cast<char*>(labels->data)); item.setData(alternatives.value(purple_request_field_choice_get_default_value(field))); item.setProperty("alternatives", alternatives); } break; case PURPLE_REQUEST_FIELD_LIST: break; case PURPLE_REQUEST_FIELD_LABEL: item.setData(purple_request_field_get_label(field)); item.setReadOnly(true); item.setProperty("hideTitle", true); break; case PURPLE_REQUEST_FIELD_IMAGE: { QImageReader reader; QByteArray data = QByteArray::fromRawData(purple_request_field_image_get_buffer(field), purple_request_field_image_get_size(field)); QBuffer buffer(&data); reader.setDevice(&buffer); QSize imageSize = reader.size(); if (imageSize.isValid()) { imageSize.setWidth(imageSize.width() * purple_request_field_image_get_scale_x(field)); imageSize.setHeight(imageSize.height() * purple_request_field_image_get_scale_y(field)); reader.setScaledSize(imageSize); } item.setData(qVariantFromValue(reader.read())); item.setProperty("imageSize", qVariantFromValue(imageSize)); item.setReadOnly(true); } break; case PURPLE_REQUEST_FIELD_ACCOUNT: break; case PURPLE_REQUEST_FIELD_NONE: default: continue; } item.setProperty("mandatory", purple_request_field_is_required(field)); if (useGroupBox) groupItem.addSubitem(item); else root.addSubitem(item); } if (useGroupBox) root.addSubitem(groupItem); } createItem(root, ok_text, cancel_text); return; }