diff src/request.h @ 5807:11001789cb22

[gaim-migrate @ 6237] Added a multi-field request API. Haven't tested it yet, or written a UI implementation, so parts may change. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 08 Jun 2003 04:06:21 +0000
parents cce2d7868c78
children 133e86584f4b
line wrap: on
line diff
--- a/src/request.h	Sun Jun 08 03:48:06 2003 +0000
+++ b/src/request.h	Sun Jun 08 04:06:21 2003 +0000
@@ -34,11 +34,96 @@
 {
 	GAIM_REQUEST_INPUT = 0,  /**< Text input request.      */
 	GAIM_REQUEST_CHOICE,     /**< Multiple-choice request. */
-	GAIM_REQUEST_ACTION      /**< Action request.          */
+	GAIM_REQUEST_ACTION,     /**< Action request.          */
+	GAIM_REQUEST_FIELDS      /**< Multiple fields request. */
 
 } GaimRequestType;
 
 /**
+ * A type of field.
+ */
+typedef enum
+{
+	GAIM_REQUEST_FIELD_NONE,
+	GAIM_REQUEST_FIELD_STRING,
+	GAIM_REQUEST_FIELD_INTEGER,
+	GAIM_REQUEST_FIELD_BOOLEAN,
+	GAIM_REQUEST_FIELD_CHOICE
+
+} GaimRequestFieldType;
+
+/**
+ * A request field.
+ */
+typedef struct
+{
+	GaimRequestFieldType type;
+
+	char *id;
+	char *label;
+
+	union
+	{
+		struct
+		{
+			gboolean multiline;
+			char *default_value;
+			char *value;
+
+		} string;
+
+		struct
+		{
+			int default_value;
+			int value;
+
+		} integer;
+
+		struct
+		{
+			gboolean default_value;
+			gboolean value;
+
+		} boolean;
+
+		struct
+		{
+			int default_value;
+			int value;
+
+			GList *labels;
+
+		} choice;
+
+	} u;
+
+} GaimRequestField;
+
+/**
+ * Multiple fields request data.
+ */
+typedef struct
+{
+	GList *groups;
+
+	GHashTable *fields;
+
+} GaimRequestFields;
+
+/**
+ * A group of fields with a title.
+ */
+typedef struct
+{
+	GaimRequestFields *fields_list;
+
+	char *title;
+
+	GList *fields;
+
+} GaimRequestFieldGroup;
+
+/**
  * Request UI operations.
  */
 typedef struct
@@ -59,6 +144,11 @@
 							const char *secondary, unsigned int default_action,
 							void *user_data, size_t action_count,
 							va_list actions);
+	void *(*request_fields)(const char *title, const char *primary,
+							const char *secondary, GaimRequestFields *fields,
+							const char *ok_text, GCallback ok_cb,
+							const char *cancel_text, GCallback cancel_cb,
+							void *user_data);
 
 	void (*close_request)(GaimRequestType type, void *ui_handle);
 
@@ -66,6 +156,428 @@
 
 typedef void (*GaimRequestInputCb)(void *, const char *);
 typedef void (*GaimRequestActionCb)(void *, int);
+typedef void (*GaimRequestFieldsCb)(void *, GaimRequestFields *fields);
+
+/**************************************************************************/
+/** @name Field List API                                                  */
+/**************************************************************************/
+/*@{*/
+
+/**
+ * Creates a list of fields to pass to gaim_request_fields().
+ *
+ * @return A GaimRequestFields structure.
+ */
+GaimRequestFields *gaim_request_fields_new(void);
+
+/**
+ * Destroys a list of fields.
+ *
+ * @param fields The list of fields to destroy.
+ */
+void gaim_request_fields_destroy(GaimRequestFields *fields);
+
+/**
+ * Adds a group of fields to the list.
+ *
+ * @param fields The fields list.
+ * @param group  The group to add.
+ */
+void gaim_request_fields_add_group(GaimRequestFields *fields,
+								   GaimRequestFieldGroup *group);
+
+/**
+ * Returns a list of all groups in a field list.
+ *
+ * @param fields The fields list.
+ *
+ * @return A list of groups.
+ */
+GList *gaim_request_fields_get_groups(const GaimRequestFields *fields);
+
+/**
+ * Return the field with the specified ID.
+ *
+ * @param fields The fields list.
+ * @param id     The ID of the field.
+ *
+ * @return The field, if found.
+ */
+GaimRequestField *gaim_request_fields_get_field(
+		const GaimRequestFields *fields, const char *id);
+
+/**
+ * Returns the string value of a field with the specified ID.
+ *
+ * @param fields The fields list.
+ * @param id     The ID of the field.
+ *
+ * @return The string value, if found, or @c NULL otherwise.
+ */
+const char *gaim_request_fields_get_string(const GaimRequestFields *fields,
+										   const char *id);
+
+/**
+ * Returns the integer value of a field with the specified ID.
+ *
+ * @param fields The fields list.
+ * @param id     The ID of the field.
+ *
+ * @return The integer value, if found, or 0 otherwise.
+ */
+int gaim_request_fields_get_integer(const GaimRequestFields *fields,
+									const char *id);
+
+/**
+ * Returns the boolean value of a field with the specified ID.
+ *
+ * @param fields The fields list.
+ * @param id     The ID of the field.
+ *
+ * @return The boolean value, if found, or @c FALSE otherwise.
+ */
+gboolean gaim_request_fields_get_bool(const GaimRequestFields *fields,
+									  const char *id);
+
+/**
+ * Returns the choice index of a field with the specified ID.
+ *
+ * @param fields The fields list.
+ * @param id     The ID of the field.
+ *
+ * @return The choice index, if found, or -1 otherwise.
+ */
+int gaim_request_fields_get_choice(const GaimRequestFields *fields,
+								   const char *id);
+
+/*@}*/
+
+/**************************************************************************/
+/** @name Fields Group API                                                */
+/**************************************************************************/
+/*@{*/
+
+/**
+ * Creates a fields group with an optional title.
+ *
+ * @param title The optional title to give the group.
+ *
+ * @return A new fields group
+ */
+GaimRequestFieldGroup *gaim_request_field_group_new(const char *title);
+
+/**
+ * Destroys a fields group.
+ *
+ * @param group The group to destroy.
+ */
+void gaim_request_field_group_destroy(GaimRequestFieldGroup *group);
+
+/**
+ * Adds a field to the group.
+ *
+ * @param group The group to add the field to.
+ * @param field The field to add to the group.
+ */
+void gaim_request_field_group_add_field(GaimRequestFieldGroup *group,
+										GaimRequestField *field);
+
+/**
+ * Returns the title of a fields group.
+ *
+ * @param group The group.
+ *
+ * @return The title, if set.
+ */
+const char *gaim_request_field_group_get_title(
+		const GaimRequestFieldGroup *group);
+
+/**
+ * Returns a list of all fields in a group.
+ *
+ * @param group The group.
+ *
+ * @return The list of fields in the group.
+ */
+GList *gaim_request_field_group_get_fields(
+		const GaimRequestFieldGroup *group);
+
+/*@}*/
+
+/**************************************************************************/
+/** @name Field API                                                       */
+/**************************************************************************/
+/*@{*/
+
+/**
+ * Creates a field of the specified type.
+ *
+ * @param id   The field ID.
+ * @param text The text label of the field.
+ * @param type The type of field.
+ *
+ * @return The new field.
+ */
+GaimRequestField *gaim_request_field_new(const char *id, const char *text,
+										 GaimRequestFieldType type);
+
+/**
+ * Destroys a field.
+ *
+ * @param field The field to destroy.
+ */
+void gaim_request_field_destroy(GaimRequestField *field);
+
+/**
+ * Sets the label text of a field.
+ *
+ * @param field The field.
+ * @param label The text label.
+ */
+void gaim_request_field_set_label(GaimRequestField *field, const char *label);
+
+/**
+ * Returns the type of a field.
+ *
+ * @param field The field.
+ *
+ * @return The field's type.
+ */
+GaimRequestFieldType gaim_request_field_get_type(const GaimRequestField *field);
+
+/**
+ * Returns the ID of a field.
+ *
+ * @param field The field.
+ *
+ * @return The ID
+ */
+const char *gaim_request_field_get_id(const GaimRequestField *field);
+
+/**
+ * Returns the label text of a field.
+ *
+ * @param field The field.
+ *
+ * @return The label text.
+ */
+const char *gaim_request_field_get_label(const GaimRequestField *field);
+
+/*@}*/
+
+/**************************************************************************/
+/** @name String Field API                                                */
+/**************************************************************************/
+/*@{*/
+
+/**
+ * Creates a string request field.
+ *
+ * @param id            The field ID.
+ * @param text          The text label of the field.
+ * @param default_value The optional default value.
+ * @param multiline     Whether or not this should be a multiline string.
+ *
+ * @return The new field.
+ */
+GaimRequestField *gaim_request_field_string_new(const char *id,
+												const char *text,
+												const char *default_value,
+												gboolean multiline);
+
+/**
+ * Sets the default value in a string field.
+ *
+ * @param field The field.
+ * @param value The default value.
+ */
+void gaim_request_field_string_set_default_value(GaimRequestField *field,
+												 const char *default_value);
+
+/**
+ * Returns the default value in a string field.
+ *
+ * @param field The field.
+ * 
+ * @return The default value.
+ */
+const char *gaim_request_field_string_get_default_value(
+		const GaimRequestField *field);
+
+/**
+ * Returns the user-entered value in a string field.
+ *
+ * @param field The field.
+ *
+ * @return The value.
+ */
+const char *gaim_request_field_string_get_value(const GaimRequestField *field);
+
+/**
+ * Returns whether or not a string field is multi-line.
+ *
+ * @param field The field.
+ *
+ * @return @c TRUE if the field is mulit-line, or @c FALSE otherwise.
+ */
+gboolean gaim_request_field_string_is_multiline(const GaimRequestField *field);
+
+/*@}*/
+
+/**************************************************************************/
+/** @name Integer Field API                                               */
+/**************************************************************************/
+/*@{*/
+
+/**
+ * Creates an integer field.
+ *
+ * @param id            The field ID.
+ * @param text          The text label of the field.
+ * @param default_value The default value.
+ *
+ * @return The new field.
+ */
+GaimRequestField *gaim_request_field_int_new(const char *id,
+											 const char *text,
+											 int default_value);
+
+/**
+ * Sets the default value in an integer field.
+ *
+ * @param field The field.
+ * @param value The default value.
+ */
+void gaim_request_field_int_set_default_value(GaimRequestField *field,
+											  int default_value);
+
+/**
+ * Returns the default value in an integer field.
+ *
+ * @param field The field.
+ * 
+ * @return The default value.
+ */
+int gaim_request_field_int_get_default_value(const GaimRequestField *field);
+
+/**
+ * Returns the user-entered value in an integer field.
+ *
+ * @param field The field.
+ *
+ * @return The value.
+ */
+int gaim_request_field_int_get_value(const GaimRequestField *field);
+
+/*@}*/
+
+/**************************************************************************/
+/** @name Boolean Field API                                               */
+/**************************************************************************/
+/*@{*/
+
+/**
+ * Creates a boolean field.
+ *
+ * This is often represented as a checkbox.
+ *
+ * @param id            The field ID.
+ * @param text          The text label of the field.
+ * @param default_value The default value.
+ *
+ * @return The new field.
+ */
+GaimRequestField *gaim_request_field_bool_new(const char *id,
+											  const char *text,
+											  gboolean default_value);
+
+/**
+ * Sets the default value in an boolean field.
+ *
+ * @param field The field.
+ * @param value The default value.
+ */
+void gaim_request_field_bool_set_default_value(GaimRequestField *field,
+											   gboolean default_value);
+
+/**
+ * Returns the default value in an boolean field.
+ *
+ * @param field The field.
+ * 
+ * @return The default value.
+ */
+gboolean gaim_request_field_bool_get_default_value(
+		const GaimRequestField *field);
+
+/**
+ * Returns the user-entered value in an boolean field.
+ *
+ * @param field The field.
+ *
+ * @return The value.
+ */
+gboolean gaim_request_field_bool_get_value(const GaimRequestField *field);
+
+/*@}*/
+
+/**************************************************************************/
+/** @name Choice Field API                                                */
+/**************************************************************************/
+/*@{*/
+
+/**
+ * Creates a multiple choice field.
+ *
+ * This is often represented as a group of radio buttons.
+ *
+ * @param id            The field ID.
+ * @param text          The optional label of the field.
+ * @param default_value The default choice.
+ *
+ * @return The new field.
+ */
+GaimRequestField *gaim_request_field_choice_new(const char *id,
+												const char *text,
+												int default_value);
+
+/**
+ * Adds a choice to a multiple choice field.
+ *
+ * @param field The choice field.
+ * @param label The choice label.
+ */
+void gaim_request_field_choice_add(GaimRequestField *field,
+								   const char *label);
+
+/**
+ * Sets the default value in an choice field.
+ *
+ * @param field The field.
+ * @param value The default value.
+ */
+void gaim_request_field_choice_set_default_value(GaimRequestField *field,
+												 int default_value);
+
+/**
+ * Returns the default value in an choice field.
+ *
+ * @param field The field.
+ * 
+ * @return The default value.
+ */
+int gaim_request_field_choice_get_default_value(const GaimRequestField *field);
+
+/**
+ * Returns the user-entered value in an choice field.
+ *
+ * @param field The field.
+ *
+ * @return The value.
+ */
+int gaim_request_field_choice_get_value(const GaimRequestField *field);
+
+/*@}*/
 
 /**************************************************************************/
 /** @name Request API                                                     */
@@ -191,6 +703,29 @@
 							   va_list actions);
 
 /**
+ * Displays groups of fields for the user to fill in.
+ *
+ * @param handle      The plugin or connection handle.
+ * @param title       The title of the message.
+ * @param primary     The main point of the message.
+ * @param secondary   The secondary information.
+ * @param fields      The list of fields.
+ * @param ok_text     The text for the OK button.
+ * @param ok_cb       The callback for the OK button.
+ * @param cancel_text The text for the cancel button.
+ * @param cancel_cb   The callback for the cancel button.
+ * @param user_data   The data to pass to the callback.
+ *
+ * @return A UI-specific handle.
+ */
+void *gaim_request_fields(void *handle, const char *title,
+						  const char *primary, const char *secondary,
+						  GaimRequestFields *fields,
+						  const char *ok_text, GCallback ok_cb,
+						  const char *cancel_text, GCallback cancel_cb,
+						  void *user_data);
+
+/**
  * Closes a request.
  *
  * This should be used only by the UI operation functions and part of the