Esempio n. 1
0
		color_table_type& get_color_table() 
		{
			static color_table_type res;
			if(res.empty()) {
				create_color_table(res);
			}
			return res;
		}
Esempio n. 2
0
static void create_dialog(void)
{
        GtkWidget *vbox, *hbox, *vbox2, *notebook, *w;

        if (options_dialog)
                return;
        vbox = gtk_vbox_new(FALSE, 0);

        /* Buttons box */
        hbox = gtk_hbutton_box_new();
        gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
        gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END);

        /* Close button */
        w = gtk_button_new_with_label("Close");
        gtk_button_set_image(GTK_BUTTON(w),
                             gtk_image_new_from_stock(GTK_STOCK_CLOSE,
                                                      GTK_ICON_SIZE_BUTTON));
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        g_signal_connect(G_OBJECT(w), "clicked",
                         G_CALLBACK(close_dialog), NULL);

        gtk_box_pack_end(GTK_BOX(vbox), spacer_new(-1, 8), FALSE, TRUE, 0);

        /* Create notebook */
        notebook = gtk_notebook_new();
        gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);

        /* Colors page */
        vbox2 = gtk_vbox_new(FALSE, 0);
        w = gtk_label_new("Colors");
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, w);
        gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);

        /* Colors -> Use style */
        w = check_button_new("Use default theme colors", &style_colors, FALSE);
        g_signal_connect(G_OBJECT(w), "toggled",
                         G_CALLBACK(style_colors_changed), NULL);
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Colors -> Custom colors */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        color_table = create_color_table();
        gtk_box_pack_start(GTK_BOX(vbox2), color_table, FALSE, FALSE, 0);
        style_colors_changed();

        /* Unicode page */
        vbox2 = gtk_vbox_new(FALSE, 0);
        w = gtk_label_new("Languages");
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, w);
        gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);

        /* Unicode -> Displayed blocks */
        w = label_new_markup("<b>Enabled Unicode blocks</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(-1, 4), FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);

        /* Unicode -> Blocks list */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = create_blocks_list();
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, TRUE, TRUE, 0);

        /* Recognition -> Duplicate glyphs */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        w = label_new_markup("<b>Language options</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Unicode -> Disable Latin letters */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Disable Basic Latin letters",
                             &no_latin_alpha, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "If you have trained both the Basic Latin block "
                             "and a block with characters similar to Latin "
                             "letters (for instance, Cyrillic) you can disable "
                             "the Basic Latin letters in order to use only "
                             "numbers and symbols from Basic Latin.", NULL);

        /* Unicode -> Right-to-left */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Enable right-to-left mode",
                             &right_to_left, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             PACKAGE_NAME " will expect you to write from "
                             "the rightmost cell to the left and will pad "
                             "cells and create new lines accordingly.", NULL);

        /* Recognition page */
        vbox2 = gtk_vbox_new(FALSE, 0);
        gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);
        w = gtk_label_new("Recognition");
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, w);

        /* Recognition -> Samples */
        w = label_new_markup("<b>Training samples</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Recognition -> Samples -> Train on input */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Train on input when entering",
                             &train_on_input, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "When enabled, input characters will be used as "
                             "training samples when 'Enter' is pressed. This "
                             "is a good way to quickly build up many samples, "
                             "but can generate poor samples if your writing "
                             "gets sloppy.", NULL);

        /* Recognition -> Samples -> Maximum */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = label_new_markup("Samples per character: ");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        w = spin_button_new_int(2, SAMPLES_MAX, &samples_max, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "The maximum number of training samples kept per "
                             "character. Lower this value if recognition is "
                             "too slow or the program uses too much memory.",
                             NULL);

        /* Recognition -> Word context */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        w = label_new_markup("<b>Word context</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Recognition -> Word context -> English */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Enable English word context",
                             &wordfreq_enable, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "Use a dictionary of the most frequent English "
                             "words to assist recognition. Also aids in "
                             "consistent recognition of numbers and "
                             "capitalization.", NULL);

        /* Recognition -> Preprocessor */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        w = label_new_markup("<b>Preprocessor</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Recognition -> Preprocessor -> Ignore stroke direction */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Ignore stroke direction",
                             &ignore_stroke_dir, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "Match input strokes with training sample strokes "
                             "that were drawn in the opposite direction. "
                             "Disabling this can boost recognition speed.",
                             NULL);

        /* Recognition -> Preprocessor -> Ignore stroke number */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Match differing stroke numbers",
                             &ignore_stroke_num, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "Match inputs to training samples that do not "
                             "have the same number of strokes. Disabling this "
                             "can boost recognition speed.", NULL);

        /* Create dialog window */
        options_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT(options_dialog), "delete_event",
                         G_CALLBACK(gtk_widget_hide_on_delete), NULL);
        gtk_window_set_destroy_with_parent(GTK_WINDOW(options_dialog), TRUE);
        gtk_window_set_resizable(GTK_WINDOW(options_dialog), TRUE);
        gtk_window_set_title(GTK_WINDOW(options_dialog), "CellWriter Setup");
        gtk_container_set_border_width(GTK_CONTAINER(options_dialog), 8);
        gtk_container_add(GTK_CONTAINER(options_dialog), vbox);
        if (!window_embedded)
                gtk_window_set_transient_for(GTK_WINDOW(options_dialog),
                                             GTK_WINDOW(window));
}
Esempio n. 3
0
static void create_dialog(void)
{
        GtkWidget *vbox, *hbox, *vbox2, *notebook, *w;

        if (options_dialog)
                return;
        vbox = gtk_vbox_new(FALSE, 0);

        /* Buttons box */
        hbox = gtk_hbutton_box_new();
        gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
        gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END);

#if GTK_CHECK_VERSION(2, 14, 0)
        /* Help button */
        gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_EDGE);
        w = gtk_button_new_from_stock(GTK_STOCK_HELP);
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        g_signal_connect(G_OBJECT(w), "clicked",
                         G_CALLBACK(help_clicked), NULL);
        gtk_tooltips_set_tip(tooltips, w, "Launch program website", NULL);
#endif

        /* Close button */
        w = gtk_button_new_with_label("Close");
        gtk_button_set_image(GTK_BUTTON(w),
                             gtk_image_new_from_stock(GTK_STOCK_CLOSE,
                                                      GTK_ICON_SIZE_BUTTON));
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        g_signal_connect(G_OBJECT(w), "clicked",
                         G_CALLBACK(close_dialog), NULL);

        gtk_box_pack_end(GTK_BOX(vbox), spacer_new(-1, 8), FALSE, TRUE, 0);

        /* Create notebook */
        notebook = gtk_notebook_new();
        gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);

        /* View page */
        vbox2 = gtk_vbox_new(FALSE, 0);
        gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);
        w = gtk_label_new("Interface");
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, w);

        /* View -> Dimensions */
        w = label_new_markup("<b>Dimensions</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* View -> Dimensions -> Cell size */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = label_new_markup("Cells: ");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        cell_width_spin = spin_button_new_int(CELL_WIDTH_MIN, cell_height,
                                              &cell_width, TRUE);
        g_signal_connect(G_OBJECT(cell_width_spin), "value-changed",
                         G_CALLBACK(cell_width_value_changed), NULL);
        gtk_box_pack_start(GTK_BOX(hbox), cell_width_spin, FALSE, FALSE, 0);
        w = label_new_markup(" by ");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        cell_height_spin = spin_button_new_int(cell_width, CELL_HEIGHT_MAX,
                                               &cell_height, TRUE);
        cell_width_value_changed();
        g_signal_connect(G_OBJECT(cell_height_spin), "value-changed",
                         G_CALLBACK(cell_height_value_changed), NULL);
        gtk_box_pack_start(GTK_BOX(hbox), cell_height_spin, FALSE, FALSE, 0);
        w = label_new_markup(" pixels");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);

        /* View -> Dimensions -> Grid */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = label_new_markup("Grid: ");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        w = spin_button_new_int(6, 48, &cell_cols_pref, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        w = label_new_markup(" by ");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        w = spin_button_new_int(1, 8, &cell_rows_pref, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        w = label_new_markup(" cells");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);

        /* View -> Dimensions -> Keyboard size */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = label_new_markup("Keyboard: ");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        w = spin_button_new_int(KEYBOARD_SIZE_MIN, 1400, &keyboard_size, TRUE);
        gtk_spin_button_set_increments(GTK_SPIN_BUTTON(w), 16, 4);
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        w = label_new_markup(" pixels wide");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);

        /* View -> Window */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        w = label_new_markup("<b>Window</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* View -> Window -> Button labels */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Show button labels", &window_button_labels, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);

        /* View -> Window -> On-screen keyboard */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Show on-screen keyboard",
                             &keyboard_enabled, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);

        /* View -> Window -> Enable */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Enable extended input events",
                             &xinput_enabled, FALSE);
        g_signal_connect(G_OBJECT(w), "toggled",
                         G_CALLBACK(xinput_enabled_toggled), NULL);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "If you cannot write in the cells or the ink "
                             "does not appear where it should, you can try "
                             "disabling extended input events. Note that this "
                             "will disable the pen eraser.", NULL);

        /* View -> Window -> Docking */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = label_new_markup("Window docking: ");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        w = gtk_combo_box_new_text();
        gtk_combo_box_append_text(GTK_COMBO_BOX(w), "Disabled");
        gtk_combo_box_append_text(GTK_COMBO_BOX(w), "Top");
        gtk_combo_box_append_text(GTK_COMBO_BOX(w), "Bottom");
        gtk_combo_box_set_active(GTK_COMBO_BOX(w), window_docked);
        g_signal_connect(G_OBJECT(w), "changed",
                         G_CALLBACK(window_docking_changed), NULL);
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);

        /* View -> Status icon */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        w = label_new_markup("<b>Status icon</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* View -> Status icon -> Enable */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Open menu on left click",
                             &status_menu_left_click, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);

        /* Colors page */
        vbox2 = gtk_vbox_new(FALSE, 0);
        w = gtk_label_new("Colors");
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, w);
        gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);

        /* Colors -> Use style */
        w = check_button_new("Use default theme colors", &style_colors, FALSE);
        g_signal_connect(G_OBJECT(w), "toggled",
                         G_CALLBACK(style_colors_changed), NULL);
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Colors -> Custom colors */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        color_table = create_color_table();
        gtk_box_pack_start(GTK_BOX(vbox2), color_table, FALSE, FALSE, 0);
        style_colors_changed();

        /* Unicode page */
        vbox2 = gtk_vbox_new(FALSE, 0);
        w = gtk_label_new("Languages");
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, w);
        gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);

        /* Unicode -> Displayed blocks */
        w = label_new_markup("<b>Enabled Unicode blocks</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(-1, 4), FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);

        /* Unicode -> Blocks list */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = create_blocks_list();
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, TRUE, TRUE, 0);

        /* Recognition -> Duplicate glyphs */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        w = label_new_markup("<b>Language options</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Unicode -> Disable Latin letters */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Disable Basic Latin letters",
                             &no_latin_alpha, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "If you have trained both the Basic Latin block "
                             "and a block with characters similar to Latin "
                             "letters (for instance, Cyrillic) you can disable "
                             "the Basic Latin letters in order to use only "
                             "numbers and symbols from Basic Latin.", NULL);

        /* Unicode -> Right-to-left */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Enable right-to-left mode",
                             &right_to_left, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             PACKAGE_NAME " will expect you to write from "
                             "the rightmost cell to the left and will pad "
                             "cells and create new lines accordingly.", NULL);

        /* Recognition page */
        vbox2 = gtk_vbox_new(FALSE, 0);
        gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);
        w = gtk_label_new("Recognition");
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox2, w);

        /* Recognition -> Samples */
        w = label_new_markup("<b>Training samples</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Recognition -> Samples -> Train on input */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Train on input when entering",
                             &train_on_input, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "When enabled, input characters will be used as "
                             "training samples when 'Enter' is pressed. This "
                             "is a good way to quickly build up many samples, "
                             "but can generate poor samples if your writing "
                             "gets sloppy.", NULL);

        /* Recognition -> Samples -> Maximum */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = label_new_markup("Samples per character: ");
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        w = spin_button_new_int(2, SAMPLES_MAX, &samples_max, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "The maximum number of training samples kept per "
                             "character. Lower this value if recognition is "
                             "too slow or the program uses too much memory.",
                             NULL);

        /* Recognition -> Word context */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        w = label_new_markup("<b>Word context</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Recognition -> Word context -> English */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Enable English word context",
                             &wordfreq_enable, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "Use a dictionary of the most frequent English "
                             "words to assist recognition. Also aids in "
                             "consistent recognition of numbers and "
                             "capitalization.", NULL);

        /* Recognition -> Preprocessor */
        gtk_box_pack_start(GTK_BOX(vbox2), spacer_new(-1, 8), FALSE, FALSE, 0);
        w = label_new_markup("<b>Preprocessor</b>");
        gtk_box_pack_start(GTK_BOX(vbox2), w, FALSE, FALSE, 0);

        /* Recognition -> Preprocessor -> Ignore stroke direction */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Ignore stroke direction",
                             &ignore_stroke_dir, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "Match input strokes with training sample strokes "
                             "that were drawn in the opposite direction. "
                             "Disabling this can boost recognition speed.",
                             NULL);

        /* Recognition -> Preprocessor -> Ignore stroke number */
        hbox = gtk_hbox_new(FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbox), spacer_new(16, -1), FALSE, FALSE, 0);
        w = check_button_new("Match differing stroke numbers",
                             &ignore_stroke_num, FALSE);
        gtk_box_pack_start(GTK_BOX(hbox), w, TRUE, TRUE, 0);
        gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
        gtk_tooltips_set_tip(tooltips, w,
                             "Match inputs to training samples that do not "
                             "have the same number of strokes. Disabling this "
                             "can boost recognition speed.", NULL);

        /* Create dialog window */
        options_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT(options_dialog), "delete_event",
                         G_CALLBACK(gtk_widget_hide_on_delete), NULL);
        gtk_window_set_destroy_with_parent(GTK_WINDOW(options_dialog), TRUE);
        gtk_window_set_resizable(GTK_WINDOW(options_dialog), TRUE);
        gtk_window_set_title(GTK_WINDOW(options_dialog), "CellWriter Setup");
        gtk_container_set_border_width(GTK_CONTAINER(options_dialog), 8);
        gtk_container_add(GTK_CONTAINER(options_dialog), vbox);
        if (!window_embedded)
                gtk_window_set_transient_for(GTK_WINDOW(options_dialog),
                                             GTK_WINDOW(window));
}
Esempio n. 4
0
// ==========================================================================
// make (or read) all colormaps for all palettes
void misc_make_cmaps(void)
{
    CMAP_E cm;
    int    a, cmap_ok, i, c, start;
    char   tmp[100];
    FILE   * out, * in;

    printf("\n");
    for (cm=0; cm < CM_MAX; cm++)
    {
        for (a=0; a < ACT_MAX; a++)
        {
            fprintf(stderr, ".");
            sprintf(tmp, "%s/cmap%i_%i.bin", glb_ds1edit_data_dir, a, cm);
            cmap_ok = FALSE;
            if (file_exists(tmp, -1, NULL) && (glb_ds1edit.pal_loaded[a] == TRUE))
            {
                // load the colormap from disk, instead of making it
                in = fopen(tmp, "rb");
                if (in == NULL){
                    printf("can't read %s\n", tmp);
                }else{
                    printf("loading %s\n", tmp);
                    fread(& glb_ds1edit.cmap[cm][a], sizeof(COLOR_MAP), 1, in);
                    fclose(in);
                    cmap_ok = TRUE;
                }
            }

            if (cmap_ok == FALSE)
            {
                // not found or can't be open, so create it

                if (cm == CM_SELECT)
                {
                    // color table
                    create_color_table(& glb_ds1edit.cmap[cm][a],
                            glb_ds1edit.vga_pal[a],
                            misc_make_cmaps_helper,
                            NULL);

                }
                else if (cm == CM_TRANS)
                {
                    create_trans_table(& glb_ds1edit.cmap[cm][a],
                            glb_ds1edit.vga_pal[a],
                            128, 128, 128,
                            NULL);
                }
                else if (cm == CM_SHADOW)
                {
                    for (c=0; c < 256; c++)
                    {
                        start = 1024 + (256 * (c/8));
                        for (i=0; i<256; i++)
                        {
                            glb_ds1edit.cmap[cm][a].data[c][i] =
                                glb_ds1edit.d2_pal[a][start + i];
                        }
                    }
                }

                out = fopen(tmp, "wb");
                if (out == NULL)
                    printf("can't write %s\n", tmp);
                else
                {
                    printf("saving %s\n", tmp);
                    fwrite(& glb_ds1edit.cmap[cm][a], sizeof(COLOR_MAP), 1, out);
                    fclose(out);
                }
            }
        }
    }
}