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