1
/* Copyright (C) 2011 cwlin <https://github.com/cwlin>
3
* This library is free software; you can redistribute it and/or
4
* modify it under the terms of the GNU Lesser General Public
5
* License as published by the Free Software Foundation; either
6
* version 2.1 of the License, or (at your option) any later version.
8
* This library is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
* Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public
14
* License along with this library; if not, write to the Free Software
15
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
// the hbox/label could be moved to local func
22
static GtkWidget *hime_chewing_window = NULL;
23
static GtkWidget *vbox_top = NULL;
24
static GtkWidget *hbox_cancel_ok = NULL;
25
static GtkWidget *button_cancel = NULL;
26
static GtkWidget *button_ok = NULL;
28
static GtkWidget *g_pHBoxCandPerPage = NULL;
29
static GtkWidget *g_pLabelCandPerPage = NULL;
30
static GtkAdjustment *g_pGtkAdj = NULL;
31
static GtkWidget *g_pSpinButtonCandPerPage = NULL;
33
static GtkWidget *g_pHBoxSpaceAsSelection = NULL;
34
static GtkWidget *g_pCheckButtonSpaceAsSelection = NULL;
36
static GtkWidget *g_pHBoxEscCleanAllBuf = NULL;
37
static GtkWidget *g_pCheckButtonEscCleanAllBuf = NULL;
39
static GtkWidget *g_pHBoxAutoShiftCur = NULL;
40
static GtkWidget *g_pCheckButtonAutoShiftCur = NULL;
42
static GtkWidget *g_pHBoxAddPhraseForward = NULL;
43
static GtkWidget *g_pCheckButtonAddPhraseForward = NULL;
45
static ChewingConfigData g_chewingConfig;
48
cb_close_window (GtkWidget *widget, GdkEvent *event, gpointer data)
50
chewing_config_close ();
52
gtk_widget_destroy (hime_chewing_window);
53
hime_chewing_window = NULL;
54
memset (&g_chewingConfig, 0x00, sizeof (g_chewingConfig));
60
cb_update_setting (GtkWidget *widget, GdkEvent *event, gpointer data)
64
gtk_spin_button_get_value (GTK_SPIN_BUTTON (g_pSpinButtonCandPerPage)),
65
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (g_pCheckButtonSpaceAsSelection)),
66
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (g_pCheckButtonEscCleanAllBuf)),
67
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (g_pCheckButtonAutoShiftCur)),
68
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (g_pCheckButtonAddPhraseForward))
71
if (!chewing_config_save (nVal))
73
chewing_config_close ();
77
chewing_config_close ();
79
gtk_widget_destroy (hime_chewing_window);
80
hime_chewing_window = NULL;
84
void module_setup_window_create ()
86
gboolean bWriteMode = TRUE;
88
chewing_config_open (bWriteMode);
90
chewing_config_load (&g_chewingConfig);
92
if (hime_chewing_window)
94
gtk_window_present (GTK_WINDOW (hime_chewing_window));
98
hime_chewing_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
100
/* main setup win setting */
101
gtk_window_set_position (GTK_WINDOW (hime_chewing_window),
103
gtk_window_set_has_resize_grip (GTK_WINDOW (hime_chewing_window), FALSE);
105
g_signal_connect (G_OBJECT (hime_chewing_window), "delete_event",
106
G_CALLBACK (cb_close_window),
109
gtk_window_set_title (GTK_WINDOW (hime_chewing_window),
111
gtk_container_set_border_width (GTK_CONTAINER (hime_chewing_window), 1);
113
vbox_top = gtk_vbox_new (FALSE, 3);
114
gtk_orientable_set_orientation(GTK_ORIENTABLE(vbox_top), GTK_ORIENTATION_VERTICAL);
115
gtk_container_add (GTK_CONTAINER (hime_chewing_window), vbox_top);
118
g_pHBoxCandPerPage = gtk_hbox_new (FALSE, 0);
119
gtk_box_pack_start (GTK_BOX (vbox_top), g_pHBoxCandPerPage, TRUE, TRUE, 1);
120
g_pLabelCandPerPage = gtk_label_new (_("每頁候選字數"));
121
gtk_box_pack_start (GTK_BOX (g_pHBoxCandPerPage), g_pLabelCandPerPage, TRUE, TRUE, 0);
122
g_pGtkAdj = (GtkAdjustment *)gtk_adjustment_new (g_chewingConfig.candPerPage, 1, 10, 1.0, 1.0, 0.0);
123
g_pSpinButtonCandPerPage = gtk_spin_button_new (g_pGtkAdj, 0, 0);
124
gtk_box_pack_start (GTK_BOX (g_pHBoxCandPerPage), g_pSpinButtonCandPerPage, FALSE, FALSE, 0);
126
// space as selection
127
g_pHBoxSpaceAsSelection = gtk_hbox_new (FALSE, 0);
128
gtk_box_pack_start (GTK_BOX (vbox_top), g_pHBoxSpaceAsSelection, TRUE, TRUE, 1);
129
g_pCheckButtonSpaceAsSelection = gtk_check_button_new_with_label(_("空白鍵選字"));
130
gtk_box_pack_start (GTK_BOX (g_pHBoxSpaceAsSelection), g_pCheckButtonSpaceAsSelection, FALSE, FALSE, 0);
131
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_pCheckButtonSpaceAsSelection), g_chewingConfig.bSpaceAsSelection);
134
g_pHBoxEscCleanAllBuf = gtk_hbox_new (FALSE, 0);
135
gtk_box_pack_start (GTK_BOX (vbox_top), g_pHBoxEscCleanAllBuf, TRUE, TRUE, 1);
136
g_pCheckButtonEscCleanAllBuf = gtk_check_button_new_with_label (_("ESC 鍵清空緩衝區"));
137
gtk_box_pack_start (GTK_BOX (g_pHBoxEscCleanAllBuf), g_pCheckButtonEscCleanAllBuf, FALSE, FALSE, 0);
138
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_pCheckButtonEscCleanAllBuf), g_chewingConfig.bEscCleanAllBuf);
141
g_pHBoxAutoShiftCur = gtk_hbox_new (FALSE, 0);
142
gtk_box_pack_start (GTK_BOX (vbox_top), g_pHBoxAutoShiftCur, TRUE, TRUE, 1);
143
g_pCheckButtonAutoShiftCur = gtk_check_button_new_with_label (_("選字完畢自動跳字"));
144
gtk_box_pack_start (GTK_BOX (g_pHBoxAutoShiftCur), g_pCheckButtonAutoShiftCur, FALSE, FALSE, 0);
145
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_pCheckButtonAutoShiftCur), g_chewingConfig.bAutoShiftCur);
147
// add phrase forward
148
g_pHBoxAddPhraseForward = gtk_hbox_new (FALSE, 0);
149
gtk_box_pack_start (GTK_BOX (vbox_top), g_pHBoxAddPhraseForward, TRUE, TRUE, 1);
150
g_pCheckButtonAddPhraseForward = gtk_check_button_new_with_label (_("向後加詞"));
151
gtk_box_pack_start (GTK_BOX (g_pHBoxAddPhraseForward), g_pCheckButtonAddPhraseForward, FALSE, FALSE, 0);
152
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (g_pCheckButtonAddPhraseForward), g_chewingConfig.bAddPhraseForward);
154
// cancel & ok buttons
155
hbox_cancel_ok = gtk_hbox_new (FALSE, 10);
156
gtk_box_pack_start (GTK_BOX (vbox_top), hbox_cancel_ok , FALSE, FALSE, 5);
158
button_cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
159
gboolean button_order;
160
g_object_get(gtk_settings_get_default(), "gtk-alternative-button-order", &button_order, NULL);
162
gtk_box_pack_end (GTK_BOX (hbox_cancel_ok), button_cancel, TRUE, TRUE, 0);
164
gtk_box_pack_start (GTK_BOX (hbox_cancel_ok), button_cancel, TRUE, TRUE, 0);
165
button_ok = gtk_button_new_from_stock (GTK_STOCK_OK);
166
#if !GTK_CHECK_VERSION(2,91,2)
168
gtk_box_pack_end (GTK_BOX (hbox_cancel_ok), button_ok, TRUE, TRUE, 5);
170
gtk_box_pack_start (GTK_BOX (hbox_cancel_ok), button_ok, TRUE, TRUE, 5);
173
gtk_grid_attach_next_to (GTK_BOX (hbox_cancel_ok), button_ok, button_cancel, GTK_POS_LEFT, 1, 1);
175
gtk_grid_attach_next_to (GTK_BOX (hbox_cancel_ok), button_ok, button_cancel, GTK_POS_RIGHT, 1, 1);
178
g_signal_connect (G_OBJECT (button_cancel), "clicked",
179
G_CALLBACK (cb_close_window),
180
G_OBJECT (hime_chewing_window));
182
g_signal_connect (G_OBJECT (button_ok), "clicked",
183
G_CALLBACK (cb_update_setting),
184
G_OBJECT (hime_chewing_window));
186
gtk_widget_show_all (hime_chewing_window);