gcc6: narrowing conversion from char to unsigned char
[platform/core/uifw/ise-engine-unikey.git] / setup / dlg_main_setup.cpp
1 #include <gio/gio.h>
2 #include <gtk/gtk.h>
3
4 #include "dlg_macro_table.h"
5 #include "dlg_main_setup.h"
6
7 enum {COL_IM_NAME = 0};
8 enum {COL_OC_NAME = 0};
9
10 void macro_enable_toggle_cb(GtkToggleButton* btn, gpointer user_data);
11 void macro_edit_button_cb(GtkButton* btn, gpointer user_data);
12
13
14 GtkWidget* unikey_main_setup_dialog_new()
15 {
16     GtkBuilder* builder = gtk_builder_new();
17
18     gtk_builder_add_from_file(builder, GLADE_DATA_DIR "/setup-main.glade", NULL);
19
20     GtkDialog* dlg = GTK_DIALOG(gtk_builder_get_object(builder, "dlg_main_setup"));
21
22
23     // set data for input method combobox
24     GtkComboBox* cbb_im = GTK_COMBO_BOX(gtk_builder_get_object(builder, "cbb_input_method"));
25     GtkTreeModel* list_im = GTK_TREE_MODEL(gtk_builder_get_object(builder, "list_input_method"));
26
27     gtk_combo_box_set_model(cbb_im, list_im); // set model
28
29     GtkCellRenderer* render = gtk_cell_renderer_text_new();
30     gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(cbb_im), render, TRUE);
31
32     gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbb_im),
33                                    render,
34                                    "text", COL_IM_NAME,
35                                    NULL);  // set Column Input method name
36     // END set data for input method combobox
37
38
39     // set data for output charset combobox
40     GtkComboBox* cbb_oc = GTK_COMBO_BOX(gtk_builder_get_object(builder, "cbb_output_charset"));
41     GtkTreeModel* list_oc = GTK_TREE_MODEL(gtk_builder_get_object(builder, "list_output_charset"));
42
43     gtk_combo_box_set_model(cbb_oc, list_oc); // set model
44
45     render = gtk_cell_renderer_text_new();
46     gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(cbb_oc), render, TRUE);
47
48     gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbb_oc),
49                                    render,
50                                    "text", COL_OC_NAME,
51                                    NULL);  // set Column output charset nam
52     // END set data for output charset combobox
53
54     // set callback
55     GtkWidget* btn = GTK_WIDGET(gtk_builder_get_object(builder, "btn_macroedit")); // macro_edit button
56     g_signal_connect(btn, "clicked", G_CALLBACK(macro_edit_button_cb), dlg);
57
58     GtkWidget* wid = GTK_WIDGET(gtk_builder_get_object(builder, "check_macroenable")); // enable macro checkbox
59     g_signal_connect(wid, "toggled", G_CALLBACK(macro_enable_toggle_cb), btn);
60     // END set callback
61
62     // save object pointer for future use
63     g_object_set_data(G_OBJECT(dlg), "cbb_input_method", cbb_im);
64     g_object_set_data(G_OBJECT(dlg), "cbb_output_charset", cbb_oc);
65     g_object_set_data(G_OBJECT(dlg), "check_macroenable", wid);
66     g_object_set_data(G_OBJECT(dlg), "btn_macroedit", btn);
67     g_object_set_data(G_OBJECT(dlg),
68                       "check_spellcheck",
69                       gtk_builder_get_object(builder, "check_spellcheck"));
70     g_object_set_data(G_OBJECT(dlg),
71                       "check_autorestorenonvn",
72                       gtk_builder_get_object(builder, "check_autorestorenonvn"));
73     g_object_set_data(G_OBJECT(dlg),
74                       "check_modernstyle",
75                       gtk_builder_get_object(builder, "check_modernstyle"));
76     g_object_set_data(G_OBJECT(dlg),
77                       "check_freemarking",
78                       gtk_builder_get_object(builder, "check_freemarking"));
79     g_object_set_data(G_OBJECT(dlg),
80                       "check_processwatbegin",
81                       gtk_builder_get_object(builder, "check_processwatbegin"));
82     // END save object pointer
83
84     g_object_unref(builder);
85
86     return GTK_WIDGET(dlg);
87 }
88
89 void unikey_main_setup_set_values(const GtkDialog* dlg, const UnikeyMainSetupOptions *opt)
90 {
91     GtkWidget* wid;
92
93 // set input method
94     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "cbb_input_method"));
95     gtk_combo_box_set_active(GTK_COMBO_BOX(wid), opt->input_method);
96
97 // set output charset
98     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "cbb_output_charset"));
99     gtk_combo_box_set_active(GTK_COMBO_BOX(wid), opt->output_charset);
100
101 // set spellcheck?
102     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_spellcheck"));
103     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wid), opt->enableSpellcheck);
104
105 // set autorestorenonvn?
106     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_autorestorenonvn"));
107     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wid), opt->autoRestoreNonVn);
108
109 // set modernstyle?
110     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_modernstyle"));
111     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wid), opt->modernStyle);
112
113 // set freemarking?
114     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_freemarking"));
115     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wid), opt->freeMarking);
116
117 // set macroenable?
118     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_macroenable"));
119     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wid), opt->enableMacro);
120
121 // if disable macro, disable btn_macroedit
122     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "btn_macroedit"));
123     gtk_widget_set_sensitive(wid, opt->enableMacro);
124
125 // set processwatbegin?
126     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_processwatbegin"));
127     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wid), opt->processwatbegin);
128
129 // set macro file name data
130     g_object_set_data(G_OBJECT(dlg), "macrofile", opt->macrofile);
131 }
132
133 void unikey_main_setup_get_values(const GtkDialog* dlg, UnikeyMainSetupOptions *opt)
134 {
135     GtkWidget* wid;
136
137 // get input method
138     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "cbb_input_method"));
139     opt->input_method = gtk_combo_box_get_active(GTK_COMBO_BOX(wid));
140
141 // get output charset
142     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "cbb_output_charset"));
143     opt->output_charset = gtk_combo_box_get_active(GTK_COMBO_BOX(wid));
144
145 // get spellcheck?
146     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_spellcheck"));
147     opt->enableSpellcheck = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wid));
148
149 // get autorestorenonvn?
150     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_autorestorenonvn"));
151     opt->autoRestoreNonVn = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wid));
152
153 // get modernstyle?
154     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_modernstyle"));
155     opt->modernStyle = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wid));
156
157 // get freemarking?
158     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_freemarking"));
159     opt->freeMarking = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wid));
160
161 // get macroenable?
162     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_macroenable"));
163     opt->enableMacro = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wid));
164
165 // get processwatbegin?
166     wid = GTK_WIDGET(g_object_get_data(G_OBJECT(dlg), "check_processwatbegin"));
167     opt->processwatbegin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wid));
168 }
169
170 void macro_enable_toggle_cb(GtkToggleButton* btn, gpointer user_data)
171 {
172     gboolean b = gtk_toggle_button_get_active(btn);
173     gtk_widget_set_sensitive(GTK_WIDGET(user_data), b);
174 }
175
176 void macro_edit_button_cb(GtkButton* btn, gpointer user_data)
177 {
178     GtkWidget* parent_dlg = GTK_WIDGET(user_data);
179
180     gtk_widget_set_sensitive(parent_dlg, FALSE);
181
182     GtkWidget* dlg = unikey_macro_dialog_new();
183
184     gchar* macrofile = (gchar*)(g_object_get_data(G_OBJECT(parent_dlg), "macrofile"));
185
186     CMacroTable macro;
187     macro.init();
188     macro.loadFromFile(macrofile);
189
190     unikey_macro_dialog_load_macro(GTK_DIALOG(dlg), macro);
191
192     int ret = gtk_dialog_run(GTK_DIALOG(dlg));
193
194     if (ret == GTK_RESPONSE_OK)
195     {
196         unikey_macro_dialog_save_macro(GTK_DIALOG(dlg), &macro);
197
198         GFile* f = g_file_get_parent(g_file_new_for_path(macrofile));
199         if (g_file_query_exists(f, NULL) == FALSE)
200         {
201             g_file_make_directory(f, NULL, NULL);
202         }
203         g_object_unref(f);
204
205         macro.writeToFile(macrofile);
206     }
207
208     gtk_widget_destroy(dlg);
209
210     gtk_widget_set_sensitive(parent_dlg, TRUE);
211 }
212