1 /*
2 * Copyright (C) 2020 The HIME team, Taiwan
3 * Copyright (C) 2011 Edward Der-Hua Liu, Hsin-Chu, Taiwan
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation version 2.1
8 * of the License.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 #include "hime.h"
21
22 #include "pho.h"
23
24 GtkWidget *hbox_buttons;
25 char current_str[MAX_PHRASE_LEN * CH_SZ + 1];
26
27 static GtkClipboard *pclipboard;
28
29 GtkWidget *mainwin;
30 GtkTextBuffer *buffer;
31
do_exit()32 void do_exit () {
33 exit (0);
34 }
35
all_wrap()36 void all_wrap () {
37 GtkTextIter mstart, mend;
38
39 gtk_text_buffer_get_bounds (buffer, &mstart, &mend);
40 gtk_text_buffer_apply_tag_by_name (buffer, "char_wrap", &mstart, &mend);
41 }
42
43 gboolean b_trad2sim = FALSE;
44
45 int trad2sim (char *str, int strN, char **out);
46 int sim2trad (char *str, int strN, char **out);
selection_received(GtkClipboard * pclip,const char * text,gpointer data)47 static void selection_received (GtkClipboard *pclip, const char *text, gpointer data) {
48 if (!text) {
49 dbg ("empty\n");
50 return;
51 }
52
53 char *out;
54 if (b_trad2sim)
55 trad2sim ((char *) text, strlen (text), &out);
56 else
57 sim2trad ((char *) text, strlen (text), &out);
58
59 gtk_text_buffer_set_text (buffer, out, -1);
60 free (out);
61
62 all_wrap ();
63 }
64
req_clipboard()65 void req_clipboard () {
66 gtk_clipboard_request_text (pclipboard, selection_received, mainwin);
67 }
68
cb_button_fetch()69 gboolean cb_button_fetch () {
70 req_clipboard ();
71 return TRUE;
72 }
73
74 void set_window_hime_icon (GtkWidget *window);
75
main(int argc,char ** argv)76 int main (int argc, char **argv) {
77 init_TableDir ();
78
79 gtk_init (&argc, &argv);
80
81 #if HIME_I18N_MESSAGE
82 bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
83 textdomain (GETTEXT_PACKAGE);
84 #endif
85
86 if (strstr (argv[0], "hime-trad2sim")) {
87 b_trad2sim = TRUE;
88 dbg ("hime-trad2sim\n");
89 }
90
91 mainwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
92 gtk_window_set_has_resize_grip (GTK_WINDOW (mainwin), FALSE);
93 gtk_window_set_default_size (GTK_WINDOW (mainwin), 320, 100);
94 set_window_hime_icon (mainwin);
95
96 GtkWidget *sw = gtk_scrolled_window_new (NULL, NULL);
97 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
98 GTK_POLICY_AUTOMATIC,
99 GTK_POLICY_AUTOMATIC);
100
101 GtkWidget *vbox_top = gtk_vbox_new (FALSE, 0);
102 gtk_orientable_set_orientation (GTK_ORIENTABLE (vbox_top), GTK_ORIENTATION_VERTICAL);
103 gtk_container_add (GTK_CONTAINER (mainwin), vbox_top);
104
105 GtkWidget *view = gtk_text_view_new ();
106 gtk_widget_set_hexpand (view, TRUE);
107 gtk_widget_set_vexpand (view, TRUE);
108 gtk_container_add (GTK_CONTAINER (sw), view);
109
110 gtk_box_pack_start (GTK_BOX (vbox_top), sw, TRUE, TRUE, 0);
111
112 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
113
114 gtk_text_buffer_create_tag (buffer,
115 "blue_background", "background", "blue", "foreground", "white", NULL);
116
117 gtk_text_buffer_create_tag (buffer, "char_wrap",
118 "wrap_mode", GTK_WRAP_CHAR, NULL);
119
120 hbox_buttons = gtk_hbox_new (FALSE, 0);
121 gtk_box_pack_start (GTK_BOX (vbox_top), hbox_buttons, FALSE, FALSE, 0);
122
123 GtkWidget *button_fetch = gtk_button_new_with_label (_ ("Update data from clipboard"));
124 gtk_box_pack_start (GTK_BOX (hbox_buttons), button_fetch, FALSE, FALSE, 0);
125 g_signal_connect (G_OBJECT (button_fetch), "clicked",
126 G_CALLBACK (cb_button_fetch), NULL);
127
128 GtkWidget *button_exit = gtk_button_new_with_label (_ ("Exit"));
129 gtk_box_pack_start (GTK_BOX (hbox_buttons), button_exit, FALSE, FALSE, 0);
130 g_signal_connect (G_OBJECT (button_exit), "clicked",
131 G_CALLBACK (do_exit), NULL);
132
133 g_signal_connect (G_OBJECT (mainwin), "delete-event",
134 G_CALLBACK (do_exit), NULL);
135
136 gtk_widget_show_all (mainwin);
137
138 pclipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
139
140 req_clipboard ();
141
142 gtk_main ();
143 return 0;
144 }
145