Hiroyuki Ikezoe
ikezo****@users*****
2006年 12月 1日 (金) 14:48:07 JST
Index: libtomoe-gtk/src/Makefile.am diff -u libtomoe-gtk/src/Makefile.am:1.19 libtomoe-gtk/src/Makefile.am:1.20 --- libtomoe-gtk/src/Makefile.am:1.19 Thu Nov 30 15:42:50 2006 +++ libtomoe-gtk/src/Makefile.am Fri Dec 1 14:48:06 2006 @@ -15,9 +15,9 @@ tomoe-edit-meta.c tomoe-edit-meta.h \ tomoe-edit-strokes.c tomoe-edit-strokes.h \ tomoe-gucharmap.c tomoe-gucharmap.h \ + tomoe-handwriting.c tomoe-handwriting.h \ tomoe-reading-search.c tomoe-reading-search.h \ tomoe-scrollable.c tomoe-scrollable.h \ - tomoe-stroke-search.c tomoe-stroke-search.h \ tomoe-window.c tomoe-window.h libtomoe_gtk_la_LDFLAGS = \ @@ -34,7 +34,7 @@ tomoe-edit-strokes.h \ tomoe-gtk.h \ tomoe-gucharmap.h \ + tomoe-handwriting.h \ tomoe-reading-search.h \ tomoe-scrollable.h \ - tomoe-stroke-search.h \ tomoe-window.h Index: libtomoe-gtk/src/tomoe-gtk.h diff -u libtomoe-gtk/src/tomoe-gtk.h:1.6 libtomoe-gtk/src/tomoe-gtk.h:1.7 --- libtomoe-gtk/src/tomoe-gtk.h:1.6 Thu Nov 16 14:23:23 2006 +++ libtomoe-gtk/src/tomoe-gtk.h Fri Dec 1 14:48:06 2006 @@ -24,6 +24,6 @@ #include <tomoe-canvas.h> #include <tomoe-char-table.h> #include <tomoe-window.h> -#include <tomoe-stroke-search.h> +#include <tomoe-handwriting.h> #endif /* __TOMOE_GTK_H_INCLUDED__ */ Index: libtomoe-gtk/src/tomoe-handwriting.c diff -u /dev/null libtomoe-gtk/src/tomoe-handwriting.c:1.1 --- /dev/null Fri Dec 1 14:48:07 2006 +++ libtomoe-gtk/src/tomoe-handwriting.c Fri Dec 1 14:48:06 2006 @@ -0,0 +1,387 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2005 Takuro Ashie + * Copyright (C) 2006 Juernjakob Harder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifdef HAVE_CONFIG_H + #include <config.h> +#endif + +#include <glib/gi18n.h> + +#include "tomoe-handwriting.h" +#include "tomoe-canvas.h" +#include "tomoe-char-table.h" + +enum { + SELECTED_SIGNAL, + LAST_SIGNAL +}; + +typedef struct _TomoeHandwritingPrivate TomoeHandwritingPrivate; +struct _TomoeHandwritingPrivate +{ + GtkWidget *canvas; + GtkWidget *button_area; + GtkWidget *find_button; + GtkWidget *go_back_button; + GtkWidget *clear_button; + GtkWidget *normalize_button; + GtkWidget *candidates_view; +}; + +#define TOMOE_HANDWRITING_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TOMOE_TYPE_HANDWRITING, TomoeHandwritingPrivate)) + +G_DEFINE_TYPE (TomoeHandwriting, tomoe_handwriting, GTK_TYPE_TABLE) + +static void tomoe_handwriting_set_sensitive (TomoeHandwriting *handwriting); + +/* callbacks for child widgets */ +static void on_canvas_stroke_added (TomoeCanvas *canvas, + gpointer user_data); +static void on_find_button_clicked (GtkButton *button, + gpointer user_data); +static void on_go_back_button_clicked (GtkButton *button, + gpointer user_data); +static void on_clear_button_clicked (GtkButton *button, + gpointer user_data); +static void on_normalize_button_clicked (GtkButton *button, + gpointer user_data); +#ifdef ENABLE_DUMPSTROKE +static void on_dump_button_clicked (GtkButton *button, + gpointer user_data); +#endif +static void on_candidate_selected (TomoeCharTable *table, + gpointer user_data); + +static guint handwriting_signals[LAST_SIGNAL] = { 0 }; + +static void +tomoe_handwriting_class_init (TomoeHandwritingClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + handwriting_signals[SELECTED_SIGNAL] = + g_signal_new ("selected", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (TomoeHandwritingClass, selected), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + klass->selected = NULL; + + g_type_class_add_private (gobject_class, sizeof (TomoeHandwritingPrivate)); +} + +static void +tomoe_handwriting_init (TomoeHandwriting *handwriting) +{ + GtkWidget *main_vbox, *hbox, *vbox, *frame, *alignment; + GtkWidget *canvas, *button, *table; + TomoeHandwritingPrivate *priv = TOMOE_HANDWRITING_GET_PRIVATE (handwriting); + + gtk_table_resize (GTK_TABLE (handwriting), 1, 1); + gtk_table_set_homogeneous (GTK_TABLE (handwriting), TRUE); + + main_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 8); + gtk_table_attach_defaults (GTK_TABLE (handwriting), main_vbox, + 0, 1, 0, 1); + gtk_widget_show (main_vbox); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), hbox, + TRUE, TRUE, 0); + gtk_widget_show (hbox); + + /* canvas */ + frame = gtk_frame_new (NULL); + gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); + gtk_widget_show (frame); + + canvas = tomoe_canvas_new (); + priv->canvas = canvas; + gtk_widget_set_size_request (canvas, 300, 300); + gtk_container_add (GTK_CONTAINER (frame), canvas); + g_signal_connect (G_OBJECT (canvas), "stroke-added", + G_CALLBACK (on_canvas_stroke_added), + (gpointer) handwriting); + gtk_widget_show (canvas); + + /* button area */ + alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0); + gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 8, 0); + gtk_box_pack_start (GTK_BOX (hbox), alignment, FALSE, FALSE, 0); + gtk_widget_show (alignment); + + vbox = gtk_vbox_new (FALSE, 0); + priv->button_area = vbox; + gtk_container_add (GTK_CONTAINER (alignment), vbox); + gtk_widget_show (vbox); + + button = gtk_button_new_from_stock (GTK_STOCK_FIND); + priv->find_button = button; + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (on_find_button_clicked), + (gpointer) handwriting); + gtk_widget_show (button); + + button = gtk_button_new_from_stock (GTK_STOCK_UNDO); + priv->go_back_button = button; + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (on_go_back_button_clicked), + (gpointer) handwriting); + gtk_widget_show (button); + + button = gtk_button_new_from_stock (GTK_STOCK_CLEAR); + priv->clear_button = button; + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (on_clear_button_clicked), + (gpointer) handwriting); + gtk_widget_show (button); + + button = gtk_button_new_from_stock (GTK_STOCK_ZOOM_FIT); + priv->normalize_button = button; + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (on_normalize_button_clicked), + (gpointer) handwriting); + gtk_widget_show (button); +#ifdef ENABLE_DUMPSTROKE + button = gtk_button_new_from_stock (GTK_STOCK_SAVE); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); + g_signal_connect (G_OBJECT (button), "clicked", + G_CALLBACK (on_dump_button_clicked), + (gpointer) handwriting); + gtk_widget_show (button); +#endif + + /* candidates view */ + frame = gtk_frame_new (NULL); + gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 4); + gtk_widget_show (frame); + + table = tomoe_char_table_new (); + priv->candidates_view = table; + tomoe_char_table_set_canvas (TOMOE_CHAR_TABLE (table), + TOMOE_CANVAS (canvas)); + g_signal_connect (G_OBJECT (table), "selected", + G_CALLBACK (on_candidate_selected), + (gpointer) handwriting); + gtk_container_add (GTK_CONTAINER (frame), table); + gtk_widget_show (table); + + tomoe_handwriting_set_sensitive (handwriting); +} + +static void +tomoe_handwriting_set_sensitive (TomoeHandwriting *handwriting) +{ + TomoeHandwritingPrivate *priv = TOMOE_HANDWRITING_GET_PRIVATE (handwriting); + gboolean editable = tomoe_canvas_has_stroke (TOMOE_CANVAS (priv->canvas)); + + gtk_widget_set_sensitive (priv->find_button, editable); + gtk_widget_set_sensitive (priv->go_back_button, editable); + gtk_widget_set_sensitive (priv->clear_button, editable); + gtk_widget_set_sensitive (priv->normalize_button, editable); +} + +GtkWidget * +tomoe_handwriting_new (void) +{ + return GTK_WIDGET(g_object_new (TOMOE_TYPE_HANDWRITING, + NULL)); +} + +GtkWidget * +tomoe_handwriting_get_canvas (TomoeHandwriting *handwriting) +{ + g_return_val_if_fail (TOMOE_IS_HANDWRITING (handwriting), NULL); + + return TOMOE_HANDWRITING_GET_PRIVATE (handwriting)->canvas; +} + +static void +on_canvas_stroke_added (TomoeCanvas *canvas, gpointer user_data) +{ + TomoeHandwriting *handwriting = TOMOE_HANDWRITING (user_data); + + tomoe_handwriting_set_sensitive (handwriting); +} + +static void +on_find_button_clicked (GtkButton *button, gpointer user_data) +{ + TomoeHandwriting *handwriting = TOMOE_HANDWRITING (user_data); + TomoeHandwritingPrivate *priv = TOMOE_HANDWRITING_GET_PRIVATE (handwriting); + + g_return_if_fail (TOMOE_IS_HANDWRITING (handwriting)); + g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); + + tomoe_canvas_find (TOMOE_CANVAS (priv->canvas)); +} + +static void +on_go_back_button_clicked (GtkButton *button, gpointer user_data) +{ + TomoeHandwriting *handwriting = TOMOE_HANDWRITING (user_data); + TomoeHandwritingPrivate *priv = TOMOE_HANDWRITING_GET_PRIVATE (handwriting); + + g_return_if_fail (TOMOE_IS_HANDWRITING (handwriting)); + g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); + + tomoe_canvas_revert (TOMOE_CANVAS (priv->canvas)); + tomoe_canvas_find (TOMOE_CANVAS (priv->canvas)); + tomoe_handwriting_set_sensitive (handwriting); +} + +static void +on_clear_button_clicked (GtkButton *button, gpointer user_data) +{ + TomoeHandwriting *handwriting = TOMOE_HANDWRITING (user_data); + TomoeHandwritingPrivate *priv = TOMOE_HANDWRITING_GET_PRIVATE (handwriting); + + g_return_if_fail (TOMOE_IS_HANDWRITING (handwriting)); + g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); + + tomoe_canvas_clear (TOMOE_CANVAS (priv->canvas)); + tomoe_handwriting_set_sensitive (handwriting); +} + +static void +on_normalize_button_clicked (GtkButton *button, gpointer user_data) +{ + TomoeHandwriting *handwriting = TOMOE_HANDWRITING (user_data); + TomoeHandwritingPrivate *priv = TOMOE_HANDWRITING_GET_PRIVATE (handwriting); + + g_return_if_fail (TOMOE_IS_HANDWRITING (handwriting)); + g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); + + tomoe_canvas_normalize (TOMOE_CANVAS (priv->canvas)); + tomoe_handwriting_set_sensitive (handwriting); +} + +static void +on_candidate_selected (TomoeCharTable *table, + gpointer user_data) +{ + TomoeHandwriting *handwriting = TOMOE_HANDWRITING (user_data); + + g_return_if_fail (TOMOE_IS_HANDWRITING (handwriting)); + + g_signal_emit (G_OBJECT (handwriting), + handwriting_signals[SELECTED_SIGNAL], 0); + tomoe_handwriting_set_sensitive (handwriting); +} + +GtkWidget * +tomoe_handwriting_get_button_area (TomoeHandwriting *handwriting) +{ + TomoeHandwritingPrivate *priv; + + g_return_val_if_fail (TOMOE_IS_HANDWRITING (handwriting), NULL); + priv = TOMOE_HANDWRITING_GET_PRIVATE (handwriting); + + return priv->button_area; +} + +TomoeChar * +tomoe_handwriting_get_selected_candidate (TomoeHandwriting *handwriting) +{ + TomoeHandwritingPrivate *priv; + + g_return_val_if_fail (TOMOE_IS_HANDWRITING (handwriting), NULL); + priv = TOMOE_HANDWRITING_GET_PRIVATE (handwriting); + + return tomoe_char_table_get_selected (TOMOE_CHAR_TABLE (priv->candidates_view)); +} + +#ifdef ENABLE_DUMPSTROKE +static void +on_dump_button_clicked (GtkButton *button, gpointer user_data) +{ + TomoeHandwriting *handwriting = TOMOE_HANDWRITING (user_data); + TomoeHandwritingPrivate *priv = TOMOE_HANDWRITING_GET_PRIVATE (handwriting); + TomoeWriting *writing; + GtkWidget *dialog; + GList *strokes, *list; + GList *candidates; + GString *dump_string; + gchar *filename; + + g_return_if_fail (TOMOE_IS_HANDWRITING (handwriting)); + g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); + + dialog = gtk_file_chooser_dialog_new (_("Select the file name for dump"), + NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + NULL); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_ACCEPT) { + gtk_widget_destroy (dialog); + return; + } + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + gtk_widget_destroy (dialog); + + dump_string = g_string_new (NULL); + writing = tomoe_canvas_get_writing (TOMOE_CANVAS (priv->canvas)); + + /* set candidate data */ + candidates = (GList *) tomoe_canvas_get_candidates (TOMOE_CANVAS (priv->canvas)); + for (list = candidates; list; list = g_list_next (list)) { + TomoeCandidate *cand = TOMOE_CANDIDATE (list->data); + TomoeChar *c = tomoe_candidate_get_char (cand); + if (list != candidates) + g_string_append_c (dump_string, ' '); + g_string_append (dump_string, tomoe_char_get_utf8 (c)); + } + g_string_append_c (dump_string, '\n'); + + /* set stroke data */ + strokes = (GList *) tomoe_writing_get_strokes (writing); + for (list = strokes; list; list = g_list_next (list)) { + GList *points = (GList *) list->data; + GList *point; + + for (point = points; point; point = g_list_next (point)) { + TomoePoint *p = (TomoePoint *) point->data; + if (point != points) + g_string_append (dump_string, ", "); + g_string_append_printf (dump_string, "%d %d", p->x, p->y); + } + g_string_append_c (dump_string, '\n'); + } + + g_file_set_contents (filename, dump_string->str, dump_string->len, NULL); + + g_object_unref (writing); + g_string_free (dump_string, TRUE); + g_free (filename); +} +#endif + +/* + * vi:ts=4:nowrap:ai:expandtab + */ Index: libtomoe-gtk/src/tomoe-handwriting.h diff -u /dev/null libtomoe-gtk/src/tomoe-handwriting.h:1.1 --- /dev/null Fri Dec 1 14:48:07 2006 +++ libtomoe-gtk/src/tomoe-handwriting.h Fri Dec 1 14:48:06 2006 @@ -0,0 +1,65 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Copyright (C) 2005 Takuro Ashie + * Copyright (C) 2006 Juernjakob Harder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __TOMOE_HANDWRITING_H__ +#define __TOMOE_HANDWRITING_H__ + +#include <glib.h> +#include <glib-object.h> +#include <gtk/gtktable.h> +#include <tomoe-char.h> + +G_BEGIN_DECLS + +#define TOMOE_TYPE_HANDWRITING (tomoe_handwriting_get_type ()) +#define TOMOE_HANDWRITING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TOMOE_TYPE_HANDWRITING, TomoeHandwriting)) +#define TOMOE_HANDWRITING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TOMOE_TYPE_HANDWRITING, TomoeHandwritingClass)) +#define TOMOE_IS_HANDWRITING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TOMOE_TYPE_HANDWRITING)) +#define TOMOE_IS_HANDWRITING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TOMOE_TYPE_HANDWRITING)) +#define TOMOE_HANDWRITING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TOMOE_TYPE_HANDWRITING, TomoeHandwritingClass)) + + +typedef struct _TomoeHandwritingClass TomoeHandwritingClass; +typedef struct _TomoeHandwriting TomoeHandwriting; + +struct _TomoeHandwriting +{ + GtkTable parent_instance; +}; + +struct _TomoeHandwritingClass +{ + GtkTableClass parent_class; + /* -- signals -- */ + void (*selected) (TomoeHandwriting *search); +}; + + +GType tomoe_handwriting_get_type (void) G_GNUC_CONST; +GtkWidget *tomoe_handwriting_new (void); +GtkWidget *tomoe_handwriting_get_canvas (TomoeHandwriting *handwriting); +TomoeChar *tomoe_handwriting_get_selected_candidate + (TomoeHandwriting *handwriting); +GtkWidget *tomoe_handwriting_get_button_area + (TomoeHandwriting *handwriting); + +G_END_DECLS + +#endif /* __TOMOE_HANDWRITING_H__ */ Index: libtomoe-gtk/src/tomoe-stroke-search.c diff -u libtomoe-gtk/src/tomoe-stroke-search.c:1.20 libtomoe-gtk/src/tomoe-stroke-search.c:removed --- libtomoe-gtk/src/tomoe-stroke-search.c:1.20 Fri Dec 1 14:40:47 2006 +++ libtomoe-gtk/src/tomoe-stroke-search.c Fri Dec 1 14:48:07 2006 @@ -1,387 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2005 Takuro Ashie - * Copyright (C) 2006 Juernjakob Harder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifdef HAVE_CONFIG_H - #include <config.h> -#endif - -#include <glib/gi18n.h> - -#include "tomoe-stroke-search.h" -#include "tomoe-canvas.h" -#include "tomoe-char-table.h" - -enum { - SELECTED_SIGNAL, - LAST_SIGNAL -}; - -typedef struct _TomoeStrokeSearchPrivate TomoeStrokeSearchPrivate; -struct _TomoeStrokeSearchPrivate -{ - GtkWidget *canvas; - GtkWidget *button_area; - GtkWidget *find_button; - GtkWidget *go_back_button; - GtkWidget *clear_button; - GtkWidget *normalize_button; - GtkWidget *candidates_view; -}; - -#define TOMOE_STROKE_SEARCH_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TOMOE_TYPE_STROKE_SEARCH, TomoeStrokeSearchPrivate)) - -G_DEFINE_TYPE (TomoeStrokeSearch, tomoe_stroke_search, GTK_TYPE_TABLE) - -static void tomoe_stroke_search_set_sensitive (TomoeStrokeSearch *stroke_search); - -/* callbacks for child widgets */ -static void on_canvas_stroke_added (TomoeCanvas *canvas, - gpointer user_data); -static void on_find_button_clicked (GtkButton *button, - gpointer user_data); -static void on_go_back_button_clicked (GtkButton *button, - gpointer user_data); -static void on_clear_button_clicked (GtkButton *button, - gpointer user_data); -static void on_normalize_button_clicked (GtkButton *button, - gpointer user_data); -#ifdef ENABLE_DUMPSTROKE -static void on_dump_button_clicked (GtkButton *button, - gpointer user_data); -#endif -static void on_candidate_selected (TomoeCharTable *table, - gpointer user_data); - -static guint stroke_search_signals[LAST_SIGNAL] = { 0 }; - -static void -tomoe_stroke_search_class_init (TomoeStrokeSearchClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - stroke_search_signals[SELECTED_SIGNAL] = - g_signal_new ("selected", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (TomoeStrokeSearchClass, selected), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - klass->selected = NULL; - - g_type_class_add_private (gobject_class, sizeof (TomoeStrokeSearchPrivate)); -} - -static void -tomoe_stroke_search_init (TomoeStrokeSearch *stroke_search) -{ - GtkWidget *main_vbox, *hbox, *vbox, *frame, *alignment; - GtkWidget *canvas, *button, *table; - TomoeStrokeSearchPrivate *priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search); - - gtk_table_resize (GTK_TABLE (stroke_search), 1, 1); - gtk_table_set_homogeneous (GTK_TABLE (stroke_search), TRUE); - - main_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 8); - gtk_table_attach_defaults (GTK_TABLE (stroke_search), main_vbox, - 0, 1, 0, 1); - gtk_widget_show (main_vbox); - - hbox = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (main_vbox), hbox, - TRUE, TRUE, 0); - gtk_widget_show (hbox); - - /* canvas */ - frame = gtk_frame_new (NULL); - gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); - gtk_widget_show (frame); - - canvas = tomoe_canvas_new (); - priv->canvas = canvas; - gtk_widget_set_size_request (canvas, 300, 300); - gtk_container_add (GTK_CONTAINER (frame), canvas); - g_signal_connect (G_OBJECT (canvas), "stroke-added", - G_CALLBACK (on_canvas_stroke_added), - (gpointer) stroke_search); - gtk_widget_show (canvas); - - /* button area */ - alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0); - gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 8, 0); - gtk_box_pack_start (GTK_BOX (hbox), alignment, FALSE, FALSE, 0); - gtk_widget_show (alignment); - - vbox = gtk_vbox_new (FALSE, 0); - priv->button_area = vbox; - gtk_container_add (GTK_CONTAINER (alignment), vbox); - gtk_widget_show (vbox); - - button = gtk_button_new_from_stock (GTK_STOCK_FIND); - priv->find_button = button; - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (on_find_button_clicked), - (gpointer) stroke_search); - gtk_widget_show (button); - - button = gtk_button_new_from_stock (GTK_STOCK_UNDO); - priv->go_back_button = button; - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (on_go_back_button_clicked), - (gpointer) stroke_search); - gtk_widget_show (button); - - button = gtk_button_new_from_stock (GTK_STOCK_CLEAR); - priv->clear_button = button; - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (on_clear_button_clicked), - (gpointer) stroke_search); - gtk_widget_show (button); - - button = gtk_button_new_from_stock (GTK_STOCK_ZOOM_FIT); - priv->normalize_button = button; - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (on_normalize_button_clicked), - (gpointer) stroke_search); - gtk_widget_show (button); -#ifdef ENABLE_DUMPSTROKE - button = gtk_button_new_from_stock (GTK_STOCK_SAVE); - gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 4); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (on_dump_button_clicked), - (gpointer) stroke_search); - gtk_widget_show (button); -#endif - - /* candidates view */ - frame = gtk_frame_new (NULL); - gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 4); - gtk_widget_show (frame); - - table = tomoe_char_table_new (); - priv->candidates_view = table; - tomoe_char_table_set_canvas (TOMOE_CHAR_TABLE (table), - TOMOE_CANVAS (canvas)); - g_signal_connect (G_OBJECT (table), "selected", - G_CALLBACK (on_candidate_selected), - (gpointer) stroke_search); - gtk_container_add (GTK_CONTAINER (frame), table); - gtk_widget_show (table); - - tomoe_stroke_search_set_sensitive (stroke_search); -} - -static void -tomoe_stroke_search_set_sensitive (TomoeStrokeSearch *stroke_search) -{ - TomoeStrokeSearchPrivate *priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search); - gboolean editable = tomoe_canvas_has_stroke (TOMOE_CANVAS (priv->canvas)); - - gtk_widget_set_sensitive (priv->find_button, editable); - gtk_widget_set_sensitive (priv->go_back_button, editable); - gtk_widget_set_sensitive (priv->clear_button, editable); - gtk_widget_set_sensitive (priv->normalize_button, editable); -} - -GtkWidget * -tomoe_stroke_search_new (void) -{ - return GTK_WIDGET(g_object_new (TOMOE_TYPE_STROKE_SEARCH, - NULL)); -} - -GtkWidget * -tomoe_stroke_search_get_canvas (TomoeStrokeSearch *stroke_search) -{ - g_return_val_if_fail (TOMOE_IS_STROKE_SEARCH (stroke_search), NULL); - - return TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search)->canvas; -} - -static void -on_canvas_stroke_added (TomoeCanvas *canvas, gpointer user_data) -{ - TomoeStrokeSearch *stroke_search = TOMOE_STROKE_SEARCH (user_data); - - tomoe_stroke_search_set_sensitive (stroke_search); -} - -static void -on_find_button_clicked (GtkButton *button, gpointer user_data) -{ - TomoeStrokeSearch *stroke_search = TOMOE_STROKE_SEARCH (user_data); - TomoeStrokeSearchPrivate *priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search); - - g_return_if_fail (TOMOE_IS_STROKE_SEARCH (stroke_search)); - g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); - - tomoe_canvas_find (TOMOE_CANVAS (priv->canvas)); -} - -static void -on_go_back_button_clicked (GtkButton *button, gpointer user_data) -{ - TomoeStrokeSearch *stroke_search = TOMOE_STROKE_SEARCH (user_data); - TomoeStrokeSearchPrivate *priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search); - - g_return_if_fail (TOMOE_IS_STROKE_SEARCH (stroke_search)); - g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); - - tomoe_canvas_revert (TOMOE_CANVAS (priv->canvas)); - tomoe_canvas_find (TOMOE_CANVAS (priv->canvas)); - tomoe_stroke_search_set_sensitive (stroke_search); -} - -static void -on_clear_button_clicked (GtkButton *button, gpointer user_data) -{ - TomoeStrokeSearch *stroke_search = TOMOE_STROKE_SEARCH (user_data); - TomoeStrokeSearchPrivate *priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search); - - g_return_if_fail (TOMOE_IS_STROKE_SEARCH (stroke_search)); - g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); - - tomoe_canvas_clear (TOMOE_CANVAS (priv->canvas)); - tomoe_stroke_search_set_sensitive (stroke_search); -} - -static void -on_normalize_button_clicked (GtkButton *button, gpointer user_data) -{ - TomoeStrokeSearch *stroke_search = TOMOE_STROKE_SEARCH (user_data); - TomoeStrokeSearchPrivate *priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search); - - g_return_if_fail (TOMOE_IS_STROKE_SEARCH (stroke_search)); - g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); - - tomoe_canvas_normalize (TOMOE_CANVAS (priv->canvas)); - tomoe_stroke_search_set_sensitive (stroke_search); -} - -static void -on_candidate_selected (TomoeCharTable *table, - gpointer user_data) -{ - TomoeStrokeSearch *stroke_search = TOMOE_STROKE_SEARCH (user_data); - - g_return_if_fail (TOMOE_IS_STROKE_SEARCH (stroke_search)); - - g_signal_emit (G_OBJECT (stroke_search), - stroke_search_signals[SELECTED_SIGNAL], 0); - tomoe_stroke_search_set_sensitive (stroke_search); -} - -GtkWidget * -tomoe_stroke_search_get_button_area (TomoeStrokeSearch *stroke_search) -{ - TomoeStrokeSearchPrivate *priv; - - g_return_val_if_fail (TOMOE_IS_STROKE_SEARCH (stroke_search), NULL); - priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search); - - return priv->button_area; -} - -TomoeChar * -tomoe_stroke_search_get_selected_candidate (TomoeStrokeSearch *stroke_search) -{ - TomoeStrokeSearchPrivate *priv; - - g_return_val_if_fail (TOMOE_IS_STROKE_SEARCH (stroke_search), NULL); - priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search); - - return tomoe_char_table_get_selected (TOMOE_CHAR_TABLE (priv->candidates_view)); -} - -#ifdef ENABLE_DUMPSTROKE -static void -on_dump_button_clicked (GtkButton *button, gpointer user_data) -{ - TomoeStrokeSearch *stroke_search = TOMOE_STROKE_SEARCH (user_data); - TomoeStrokeSearchPrivate *priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (stroke_search); - TomoeWriting *writing; - GtkWidget *dialog; - GList *strokes, *list; - GList *candidates; - GString *dump_string; - gchar *filename; - - g_return_if_fail (TOMOE_IS_STROKE_SEARCH (stroke_search)); - g_return_if_fail (TOMOE_IS_CANVAS (priv->canvas)); - - dialog = gtk_file_chooser_dialog_new (_("Select the file name for dump"), - NULL, - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, - NULL); - - if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_ACCEPT) { - gtk_widget_destroy (dialog); - return; - } - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - gtk_widget_destroy (dialog); - - dump_string = g_string_new (NULL); - writing = tomoe_canvas_get_writing (TOMOE_CANVAS (priv->canvas)); - - /* set candidate data */ - candidates = (GList *) tomoe_canvas_get_candidates (TOMOE_CANVAS (priv->canvas)); - for (list = candidates; list; list = g_list_next (list)) { - TomoeCandidate *cand = TOMOE_CANDIDATE (list->data); - TomoeChar *c = tomoe_candidate_get_char (cand); - if (list != candidates) - g_string_append_c (dump_string, ' '); - g_string_append (dump_string, tomoe_char_get_utf8 (c)); - } - g_string_append_c (dump_string, '\n'); - - /* set stroke data */ - strokes = (GList *) tomoe_writing_get_strokes (writing); - for (list = strokes; list; list = g_list_next (list)) { - GList *points = (GList *) list->data; - GList *point; - - for (point = points; point; point = g_list_next (point)) { - TomoePoint *p = (TomoePoint *) point->data; - if (point != points) - g_string_append (dump_string, ", "); - g_string_append_printf (dump_string, "%d %d", p->x, p->y); - } - g_string_append_c (dump_string, '\n'); - } - - g_file_set_contents (filename, dump_string->str, dump_string->len, NULL); - - g_object_unref (writing); - g_string_free (dump_string, TRUE); - g_free (filename); -} -#endif - -/* - * vi:ts=4:nowrap:ai:expandtab - */ Index: libtomoe-gtk/src/tomoe-stroke-search.h diff -u libtomoe-gtk/src/tomoe-stroke-search.h:1.7 libtomoe-gtk/src/tomoe-stroke-search.h:removed --- libtomoe-gtk/src/tomoe-stroke-search.h:1.7 Fri Dec 1 13:38:37 2006 +++ libtomoe-gtk/src/tomoe-stroke-search.h Fri Dec 1 14:48:07 2006 @@ -1,65 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * Copyright (C) 2005 Takuro Ashie - * Copyright (C) 2006 Juernjakob Harder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __TOMOE_STROKE_SEARCH_H__ -#define __TOMOE_STROKE_SEARCH_H__ - -#include <glib.h> -#include <glib-object.h> -#include <gtk/gtktable.h> -#include <tomoe-char.h> - -G_BEGIN_DECLS - -#define TOMOE_TYPE_STROKE_SEARCH (tomoe_stroke_search_get_type ()) -#define TOMOE_STROKE_SEARCH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TOMOE_TYPE_STROKE_SEARCH, TomoeStrokeSearch)) -#define TOMOE_STROKE_SEARCH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TOMOE_TYPE_STROKE_SEARCH, TomoeStrokeSearchClass)) -#define TOMOE_IS_STROKE_SEARCH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TOMOE_TYPE_STROKE_SEARCH)) -#define TOMOE_IS_STROKE_SEARCH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TOMOE_TYPE_STROKE_SEARCH)) -#define TOMOE_STROKE_SEARCH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TOMOE_TYPE_STROKE_SEARCH, TomoeStrokeSearchClass)) - - -typedef struct _TomoeStrokeSearchClass TomoeStrokeSearchClass; -typedef struct _TomoeStrokeSearch TomoeStrokeSearch; - -struct _TomoeStrokeSearch -{ - GtkTable parent_instance; -}; - -struct _TomoeStrokeSearchClass -{ - GtkTableClass parent_class; - /* -- signals -- */ - void (*selected) (TomoeStrokeSearch *search); -}; - - -GType tomoe_stroke_search_get_type (void) G_GNUC_CONST; -GtkWidget *tomoe_stroke_search_new (void); -GtkWidget *tomoe_stroke_search_get_canvas (TomoeStrokeSearch *stroke_search); -TomoeChar *tomoe_stroke_search_get_selected_candidate - (TomoeStrokeSearch *stroke_search); -GtkWidget *tomoe_stroke_search_get_button_area - (TomoeStrokeSearch *stroke_search); - -G_END_DECLS - -#endif /* __TOMOE_STROKE_SEARCH_H__ */ Index: libtomoe-gtk/src/tomoe-window.c diff -u libtomoe-gtk/src/tomoe-window.c:1.28 libtomoe-gtk/src/tomoe-window.c:1.29 --- libtomoe-gtk/src/tomoe-window.c:1.28 Fri Dec 1 14:12:36 2006 +++ libtomoe-gtk/src/tomoe-window.c Fri Dec 1 14:48:06 2006 @@ -27,7 +27,7 @@ #include "tomoe-window.h" #include "tomoe-canvas.h" -#include "tomoe-stroke-search.h" +#include "tomoe-handwriting.h" #include "tomoe-char-table.h" #include "tomoe-reading-search.h" #include "tomoe-gucharmap.h" @@ -63,7 +63,7 @@ static void dispose (GObject *object); static void destroy (GtkObject *object); -static void on_handwriting_candidate_selected (TomoeStrokeSearch *view, +static void on_handwriting_candidate_selected (TomoeHandwriting *view, gpointer user_data); static guint window_signals[LAST_SIGNAL] = { 0 }; @@ -92,7 +92,7 @@ static void tomoe_window_init (TomoeWindow *window) { - TomoeStrokeSearch *handwriting_page; + TomoeHandwriting *handwriting_page; TomoeReadingSearch *reading_search; GtkWidget *widget, *notebook, *vbox; TomoeCanvas *canvas; @@ -135,10 +135,10 @@ gtk_widget_show (notebook); /* handwriting page */ - widget = tomoe_stroke_search_new (); + widget = tomoe_handwriting_new (); priv->handwriting = widget; - handwriting_page = TOMOE_STROKE_SEARCH (widget); - canvas = TOMOE_CANVAS (tomoe_stroke_search_get_canvas (handwriting_page)); + handwriting_page = TOMOE_HANDWRITING (widget); + canvas = TOMOE_CANVAS (tomoe_handwriting_get_canvas (handwriting_page)); tomoe_canvas_set_context (canvas, priv->context); g_signal_connect (G_OBJECT (widget), "selected", G_CALLBACK (on_handwriting_candidate_selected), @@ -202,15 +202,15 @@ tomoe_window_get_canvas (TomoeWindow *window) { TomoeWindowPrivate *priv; - TomoeStrokeSearch *handwriting_page; + TomoeHandwriting *handwriting_page; g_return_val_if_fail (TOMOE_IS_WINDOW (window), NULL); priv = TOMOE_WINDOW_GET_PRIVATE (window); - g_return_val_if_fail (TOMOE_IS_STROKE_SEARCH (priv->handwriting), + g_return_val_if_fail (TOMOE_IS_HANDWRITING (priv->handwriting), NULL); - handwriting_page = TOMOE_STROKE_SEARCH (priv->handwriting); - return tomoe_stroke_search_get_canvas (handwriting_page); + handwriting_page = TOMOE_HANDWRITING (priv->handwriting); + return tomoe_handwriting_get_canvas (handwriting_page); } void @@ -260,7 +260,7 @@ } static void -on_handwriting_candidate_selected (TomoeStrokeSearch *view, gpointer user_data) +on_handwriting_candidate_selected (TomoeHandwriting *view, gpointer user_data) { TomoeWindow *window; g_return_if_fail (TOMOE_IS_WINDOW (user_data)); @@ -284,8 +284,8 @@ current_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), page_num); #warning FIX ME! - if (TOMOE_IS_STROKE_SEARCH (current_page)) - return tomoe_stroke_search_get_selected_candidate (TOMOE_STROKE_SEARCH (priv->handwriting)); + if (TOMOE_IS_HANDWRITING (current_page)) + return tomoe_handwriting_get_selected_candidate (TOMOE_HANDWRITING (priv->handwriting)); return NULL; }