/* * Copyright (C) 2000 Helix Code Inc. * * Authors: Michael Zucchi * * Abstract filter argument class. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * as published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "filter-arg.h" static void filter_arg_class_init (FilterArgClass *class); static void filter_arg_init (FilterArg *gspaper); static GtkObjectClass *parent_class; enum { CHANGED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0 }; guint filter_arg_get_type (void) { static guint type = 0; if (!type) { GtkTypeInfo type_info = { "FilterArg", sizeof (FilterArg), sizeof (FilterArgClass), (GtkClassInitFunc) filter_arg_class_init, (GtkObjectInitFunc) filter_arg_init, (GtkArgSetFunc) NULL, (GtkArgGetFunc) NULL }; type = gtk_type_unique (gtk_object_get_type (), &type_info); } return type; } static void write_html_nothing(FilterArg *arg, GtkHTML *html, GtkHTMLStreamHandle *stream) { /* empty */ } static void write_text_nothing(FilterArg *arg, GString *string) { /* empty */ } static void edit_values_nothing(FilterArg *arg) { /* empty */ } static void free_value_nothing(FilterArg *arg, void *v) { /* empty */ } static gint compare_pointers(gpointer a, gpointer b) { return a==b; } static void filter_arg_class_init (FilterArgClass *class) { GtkObjectClass *object_class; object_class = (GtkObjectClass *) class; parent_class = gtk_type_class (gtk_object_get_type ()); class->write_html = write_html_nothing; class->write_text = write_text_nothing; class->edit_values = edit_values_nothing; class->free_value = free_value_nothing; signals[CHANGED] = gtk_signal_new ("changed", GTK_RUN_LAST, object_class->type, GTK_SIGNAL_OFFSET (FilterArgClass, changed), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); } static void filter_arg_init (FilterArg *arg) { arg->values = NULL; } /** * filter_arg_new: * * Create a new FilterArg widget. * * Return value: A new FilterArg widget. **/ FilterArg * filter_arg_new (char *name) { FilterArg *a = FILTER_ARG ( gtk_type_new (filter_arg_get_type ())); if (name) a->name = g_strdup(name); return a; } void filter_arg_add(FilterArg *arg, void *v) { g_return_if_fail(v != NULL); arg->values = g_list_append(arg->values, v); gtk_signal_emit(GTK_OBJECT(arg), signals[CHANGED]); } void filter_arg_remove(FilterArg *arg, void *v) { arg->values = g_list_remove(arg->values, v); ((FilterArgClass *)(arg->object.klass))->free_value(arg, v); gtk_signal_emit(GTK_OBJECT(arg), signals[CHANGED]); } void filter_arg_write_html(FilterArg *arg, GtkHTML *html, GtkHTMLStreamHandle *stream) { ((FilterArgClass *)(arg->object.klass))->write_html(arg, html, stream); } void filter_arg_write_text(FilterArg *arg, GString *string) { ((FilterArgClass *)(arg->object.klass))->write_text(arg, string); } void filter_arg_edit_values(FilterArg *arg) { g_return_if_fail(arg != NULL); if (((FilterArgClass *)(arg->object.klass))->edit_values) ((FilterArgClass *)(arg->object.klass))->edit_values(arg); else g_warning("No implementation of virtual method edit_values"); } xmlNodePtr filter_arg_values_get_xml(FilterArg *arg) { return ((FilterArgClass *)(arg->object.klass))->values_get_xml(arg); } void filter_arg_values_add_xml(FilterArg *arg, xmlNodePtr node) { ((FilterArgClass *)(arg->object.klass))->values_add_xml(arg, node); } /* returns the number of args in the arg list */ int filter_arg_get_count(FilterArg *arg) { int count=0; GList *l; for (l = arg->values;l;l=g_list_next(l)) count++; return count; } void * filter_arg_get_value(FilterArg *arg, int index) { int count=0; GList *l; for (l = arg->values;l && countdata; return NULL; } char * filter_arg_get_value_as_string(FilterArg *arg, int index) { int count=0; GList *l; void *data; data = filter_arg_get_value(arg, index); if (data) { return ((FilterArgClass *)(arg->object.klass))->get_value_as_string(arg, data); } else { return ""; } }