X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-delimited-text.c;h=b232ef309226ca052846f449d92f9fcfebc9ff2d;hb=4bc96629da7d8f0354d8ebf297052e881f936d83;hp=b02a0ac9eabcf867d4575bdfed661b8d2f6faa7a;hpb=4773b69eefd0739e1ee55a86c3174cb3fc0183f0;p=pspp diff --git a/src/ui/gui/psppire-delimited-text.c b/src/ui/gui/psppire-delimited-text.c index b02a0ac9ea..b232ef3092 100644 --- a/src/ui/gui/psppire-delimited-text.c +++ b/src/ui/gui/psppire-delimited-text.c @@ -63,14 +63,16 @@ count_delims (PsppireDelimitedText *tf) { gint enc = -1; // FIXME: Box these lines to avoid constant allocation/deallocation - gchar *foo = 0; - gtk_tree_model_get (tf->child, &iter, 1, &foo, -1); + gchar *line = NULL; + gtk_tree_model_get (tf->child, &iter, 1, &line, -1); { - char *line = foo; + char *p; gint count = 0; - while (*line) + for (p = line; ; p = g_utf8_find_next_char (p, NULL)) { - const gunichar c = *line; //FIXME: Not multibyte safe! + const gunichar c = g_utf8_get_char (p); + if (c == 0) + break; if (enc == -1) { gint i; @@ -96,18 +98,17 @@ count_delims (PsppireDelimitedText *tf) count++; } } - line++; } tf->max_delimiters = MAX (tf->max_delimiters, count); } - g_free (foo); + g_free (line); } } static void cache_invalidate (PsppireDelimitedText *tf) { - memset (tf->cache_starts, 0, 512); + memset (tf->cache_starts, 0, sizeof tf->cache_starts); if (tf->const_cache.string) { ss_dealloc (&tf->const_cache); @@ -168,10 +169,6 @@ psppire_delimited_text_get_property (GObject *object, }; } - -static void psppire_delimited_text_init (PsppireDelimitedText *text_file); -static void psppire_delimited_text_class_init (PsppireDelimitedTextClass *class); - static void psppire_delimited_text_finalize (GObject *object); static void psppire_delimited_text_dispose (GObject *object); @@ -369,7 +366,7 @@ split_row_into_fields (PsppireDelimitedText *file, gint n) return; } - memset (file->cache_starts, 0, 512); + memset (file->cache_starts, 0, sizeof file->cache_starts); /* Cache miss */ if (file->const_cache.string) { @@ -485,44 +482,9 @@ __tree_model_init (GtkTreeModelIface *iface) iface->iter_parent = __iter_parent; } - -GType -psppire_delimited_text_get_type (void) -{ - static GType text_file_type = 0; - - if (!text_file_type) - { - static const GTypeInfo text_file_info = - { - sizeof (PsppireDelimitedTextClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) psppire_delimited_text_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (PsppireDelimitedText), - 0, - (GInstanceInitFunc) psppire_delimited_text_init, - }; - - static const GInterfaceInfo tree_model_info = { - (GInterfaceInitFunc) __tree_model_init, - NULL, - NULL - }; - - text_file_type = g_type_register_static (G_TYPE_OBJECT, - "PsppireDelimitedText", - &text_file_info, 0); - - g_type_add_interface_static (text_file_type, GTK_TYPE_TREE_MODEL, - &tree_model_info); - } - - return text_file_type; -} - +G_DEFINE_TYPE_WITH_CODE (PsppireDelimitedText, psppire_delimited_text, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (GTK_TYPE_TREE_MODEL, + __tree_model_init)) static void psppire_delimited_text_class_init (PsppireDelimitedTextClass *class) @@ -530,7 +492,7 @@ psppire_delimited_text_class_init (PsppireDelimitedTextClass *class) GObjectClass *object_class; parent_class = g_type_class_peek_parent (class); - object_class = (GObjectClass*) class; + object_class = G_OBJECT_CLASS (class); GParamSpec *first_line_spec = g_param_spec_int ("first-line", @@ -582,7 +544,7 @@ psppire_delimited_text_init (PsppireDelimitedText *text_file) text_file->const_cache.string = NULL; text_file->const_cache.length = 0; text_file->cache_row = -1; - memset (text_file->cache_starts, 0, 512); + memset (text_file->cache_starts, 0, sizeof text_file->cache_starts); text_file->max_delimiters = 0; @@ -591,15 +553,13 @@ psppire_delimited_text_init (PsppireDelimitedText *text_file) } -GtkTreeModel * +PsppireDelimitedText * psppire_delimited_text_new (GtkTreeModel *child) { - PsppireDelimitedText *retval = + return g_object_new (PSPPIRE_TYPE_DELIMITED_TEXT, "child", child, NULL); - - return GTK_TREE_MODEL (retval); } static void