Hiroyuki Ikezoe
ikezo****@users*****
2006年 11月 27日 (月) 11:58:39 JST
Index: libtomoe-gtk/src/tomoe-canvas.c diff -u libtomoe-gtk/src/tomoe-canvas.c:1.34 libtomoe-gtk/src/tomoe-canvas.c:1.35 --- libtomoe-gtk/src/tomoe-canvas.c:1.34 Sat Nov 25 22:25:58 2006 +++ libtomoe-gtk/src/tomoe-canvas.c Mon Nov 27 11:58:39 2006 @@ -563,13 +563,9 @@ TomoeWriting * tomoe_canvas_get_writing (TomoeCanvas *canvas) { - TomoeWriting *writing; - g_return_val_if_fail (TOMOE_IS_CANVAS (canvas), NULL); - writing = create_sparse_writing (canvas); - - return writing; + return TOMOE_CANVAS_GET_PRIVATE (canvas)->writing; } void @@ -1241,6 +1237,14 @@ g_free (buffer); g_object_unref (layout); } +const GList * +tomoe_canvas_get_candidates (TomoeCanvas *canvas) +{ + TomoeCanvasPriv *priv = TOMOE_CANVAS_GET_PRIVATE (canvas); + + return priv->candidates; +} + /* * vi:ts=4:nowrap:ai:expandtab */ Index: libtomoe-gtk/src/tomoe-canvas.h diff -u libtomoe-gtk/src/tomoe-canvas.h:1.8 libtomoe-gtk/src/tomoe-canvas.h:1.9 --- libtomoe-gtk/src/tomoe-canvas.h:1.8 Thu Nov 23 15:25:38 2006 +++ libtomoe-gtk/src/tomoe-canvas.h Mon Nov 27 11:58:39 2006 @@ -90,6 +90,7 @@ TomoeWriting *writing); void tomoe_canvas_lock (TomoeCanvas *canvas, gboolean lock); +const GList *tomoe_canvas_get_candidates (TomoeCanvas *canvas); G_END_DECLS Index: libtomoe-gtk/src/tomoe-stroke-search.c diff -u libtomoe-gtk/src/tomoe-stroke-search.c:1.8 libtomoe-gtk/src/tomoe-stroke-search.c:1.9 --- libtomoe-gtk/src/tomoe-stroke-search.c:1.8 Thu Nov 23 10:09:55 2006 +++ libtomoe-gtk/src/tomoe-stroke-search.c Mon Nov 27 11:58:39 2006 @@ -62,6 +62,10 @@ 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 gboolean on_candidate_selected (TomoeCharTable *table, GdkEventButton *event, gpointer user_data); @@ -155,6 +159,14 @@ G_CALLBACK (on_normalize_button_clicked), (gpointer) strokeSearch); 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) strokeSearch); + gtk_widget_show (button); +#endif /* candidates view */ frame = gtk_frame_new (NULL); @@ -282,6 +294,72 @@ tomoe_stroke_search_set_sensitive (strokeSearch); return FALSE; } + +#ifdef ENABLE_DUMPSTROKE +static void +on_dump_button_clicked (GtkButton *button, gpointer user_data) +{ + TomoeStrokeSearch *strokeSearch = TOMOE_STROKE_SEARCH (user_data); + TomoeStrokeSearchPrivate *priv = TOMOE_STROKE_SEARCH_GET_PRIVATE (strokeSearch); + TomoeWriting *writing; + GtkWidget *dialog; + GList *strokes, *list; + GList *candidates; + GString *dump_string; + gchar *filename; + + g_return_if_fail (TOMOE_IS_STROKE_SEARCH (strokeSearch)); + 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_character (cand); + if (list != candidates) + g_string_append_c (dump_string, ' '); + g_string_append (dump_string, tomoe_char_get_code (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_string_free (dump_string, TRUE); + g_free (filename); +} +#endif + /* * vi:ts=4:nowrap:ai:expandtab */