4 #include "dlg_macro_table.h"
5 #include "dlg_main_setup.h"
7 enum {COL_IM_NAME = 0};
8 enum {COL_OC_NAME = 0};
10 void macro_enable_toggle_cb(GtkToggleButton* btn, gpointer user_data);
11 void macro_edit_button_cb(GtkButton* btn, gpointer user_data);
14 GtkWidget* unikey_main_setup_dialog_new()
16 GtkBuilder* builder = gtk_builder_new();
18 gtk_builder_add_from_file(builder, GLADE_DATA_DIR "/setup-main.glade", NULL);
20 GtkDialog* dlg = GTK_DIALOG(gtk_builder_get_object(builder, "dlg_main_setup"));
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"));
27 gtk_combo_box_set_model(cbb_im, list_im); // set model
29 GtkCellRenderer* render = gtk_cell_renderer_text_new();
30 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(cbb_im), render, TRUE);
32 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbb_im),
35 NULL); // set Column Input method name
36 // END set data for input method combobox
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"));
43 gtk_combo_box_set_model(cbb_oc, list_oc); // set model
45 render = gtk_cell_renderer_text_new();
46 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(cbb_oc), render, TRUE);
48 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbb_oc),
51 NULL); // set Column output charset nam
52 // END set data for output charset combobox
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);
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);
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),
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),
75 gtk_builder_get_object(builder, "check_modernstyle"));
76 g_object_set_data(G_OBJECT(dlg),
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
84 g_object_unref(builder);
86 return GTK_WIDGET(dlg);
89 void unikey_main_setup_set_values(const GtkDialog* dlg, const UnikeyMainSetupOptions *opt)
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);
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);
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);
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);
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);
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);
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);
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);
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);
129 // set macro file name data
130 g_object_set_data(G_OBJECT(dlg), "macrofile", opt->macrofile);
133 void unikey_main_setup_get_values(const GtkDialog* dlg, UnikeyMainSetupOptions *opt)
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));
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));
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));
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));
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));
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));
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));
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));
170 void macro_enable_toggle_cb(GtkToggleButton* btn, gpointer user_data)
172 gboolean b = gtk_toggle_button_get_active(btn);
173 gtk_widget_set_sensitive(GTK_WIDGET(user_data), b);
176 void macro_edit_button_cb(GtkButton* btn, gpointer user_data)
178 GtkWidget* parent_dlg = GTK_WIDGET(user_data);
180 gtk_widget_set_sensitive(parent_dlg, FALSE);
182 GtkWidget* dlg = unikey_macro_dialog_new();
184 gchar* macrofile = (gchar*)(g_object_get_data(G_OBJECT(parent_dlg), "macrofile"));
188 macro.loadFromFile(macrofile);
190 unikey_macro_dialog_load_macro(GTK_DIALOG(dlg), macro);
192 int ret = gtk_dialog_run(GTK_DIALOG(dlg));
194 if (ret == GTK_RESPONSE_OK)
196 unikey_macro_dialog_save_macro(GTK_DIALOG(dlg), ¯o);
198 GFile* f = g_file_get_parent(g_file_new_for_path(macrofile));
199 if (g_file_query_exists(f, NULL) == FALSE)
201 g_file_make_directory(f, NULL, NULL);
205 macro.writeToFile(macrofile);
208 gtk_widget_destroy(dlg);
210 gtk_widget_set_sensitive(parent_dlg, TRUE);