Revision: 1751 http://geany.svn.sourceforge.net/geany/?rev=1751&view=rev Author: ntrel Date: 2007-07-27 04:28:17 -0700 (Fri, 27 Jul 2007)
Log Message: ----------- Move Color Chooser and Word Count tools to tools.c.
Modified Paths: -------------- trunk/ChangeLog trunk/src/callbacks.c trunk/src/callbacks.h trunk/src/dialogs.c trunk/src/tools.c trunk/src/tools.h trunk/src/utils.c trunk/src/utils.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-07-27 10:43:25 UTC (rev 1750) +++ trunk/ChangeLog 2007-07-27 11:28:17 UTC (rev 1751) @@ -7,6 +7,9 @@ Rename PluginData GeanyData (but use a typedef for backward compatibility). Update plugins to use newer API symbols. + * src/utils.c, src/utils.h, src/tools.c, src/tools.h, src/dialogs.c, + src/callbacks.c, src/callbacks.h: + Move Color Chooser and Word Count tools to tools.c.
2007-07-26 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/src/callbacks.c =================================================================== --- trunk/src/callbacks.c 2007-07-27 10:43:25 UTC (rev 1750) +++ trunk/src/callbacks.c 2007-07-27 11:28:17 UTC (rev 1751) @@ -795,37 +795,6 @@ }
-/* - * color dialog callbacks - */ -void -on_color_cancel_button_clicked (GtkButton *button, - gpointer user_data) -{ - gtk_widget_hide(app->open_colorsel); -} - - -void -on_color_ok_button_clicked (GtkButton *button, - gpointer user_data) -{ - GdkColor color; - gint idx = document_get_cur_idx(); - gchar *hex; - - gtk_widget_hide(app->open_colorsel); - if (idx == -1 || ! doc_list[idx].is_valid) return; - - gtk_color_selection_get_current_color( - GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->colorsel), &color); - - hex = utils_get_hex_from_color(&color); - document_insert_colour(idx, hex); - g_free(hex); -} - - gboolean on_window_key_press_event (GtkWidget *widget, GdkEventKey *event, @@ -1104,7 +1073,7 @@ on_count_words1_activate (GtkMenuItem *menuitem, gpointer user_data) { - dialogs_show_word_count(); + tools_word_count(); }
@@ -1120,7 +1089,7 @@ return;
editor_find_current_word(doc_list[idx].sci, pos, colour, sizeof colour, GEANY_WORDCHARS"#"); - dialogs_show_color(colour); + tools_color_chooser(colour); }
Modified: trunk/src/callbacks.h =================================================================== --- trunk/src/callbacks.h 2007-07-27 10:43:25 UTC (rev 1750) +++ trunk/src/callbacks.h 2007-07-27 11:28:17 UTC (rev 1751) @@ -95,14 +95,6 @@ gpointer user_data);
void -on_color_ok_button_clicked (GtkButton *button, - gpointer user_data); - -void -on_color_cancel_button_clicked (GtkButton *button, - gpointer user_data); - -void on_save_all1_activate (GtkMenuItem *menuitem, gpointer user_data);
Modified: trunk/src/dialogs.c =================================================================== --- trunk/src/dialogs.c 2007-07-27 10:43:25 UTC (rev 1750) +++ trunk/src/dialogs.c 2007-07-27 11:28:17 UTC (rev 1751) @@ -22,7 +22,7 @@ */
/* - * File related dialogs, miscellaneous dialogs. + * File related dialogs, miscellaneous dialogs, font dialog. */
#include "geany.h" @@ -721,149 +721,6 @@ }
-void dialogs_show_word_count() -{ - GtkWidget *dialog, *label, *vbox, *table; - gint idx; - guint chars, lines, words; - gchar *text, *range; - - idx = document_get_cur_idx(); - if (idx == -1 || ! doc_list[idx].is_valid) return; - - dialog = gtk_dialog_new_with_buttons(_("Word Count"), GTK_WINDOW(app->window), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL); - vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog)); - gtk_widget_set_name(dialog, "GeanyDialog"); - - if (sci_can_copy(doc_list[idx].sci)) - { - text = g_malloc0(sci_get_selected_text_length(doc_list[idx].sci) + 1); - sci_get_selected_text(doc_list[idx].sci, text); - range = _("selection"); - } - else - { - text = g_malloc(sci_get_length(doc_list[idx].sci) + 1); - sci_get_text(doc_list[idx].sci, sci_get_length(doc_list[idx].sci) + 1 , text); - range = _("whole document"); - } - utils_wordcount(text, &chars, &lines, &words); - g_free(text); - - table = gtk_table_new(4, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 5); - gtk_table_set_col_spacings(GTK_TABLE(table), 10); - - label = gtk_label_new(_("Range:")); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_misc_set_alignment(GTK_MISC(label), 1, 0); - - label = gtk_label_new(range); - gtk_table_attach(GTK_TABLE(table), label, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 20, 0); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - - label = gtk_label_new(_("Lines:")); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_misc_set_alignment(GTK_MISC(label), 1, 0); - - text = g_strdup_printf("%d", lines); - label = gtk_label_new(text); - gtk_table_attach(GTK_TABLE(table), label, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 20, 0); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - g_free(text); - - label = gtk_label_new(_("Words:")); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_misc_set_alignment(GTK_MISC(label), 1, 0); - - text = g_strdup_printf("%d", words); - label = gtk_label_new(text); - gtk_table_attach(GTK_TABLE(table), label, 1, 2, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 20, 0); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - g_free(text); - - label = gtk_label_new(_("Characters:")); - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 0, 0); - gtk_misc_set_alignment(GTK_MISC(label), 1, 0); - - text = g_strdup_printf("%d", chars); - label = gtk_label_new(text); - gtk_table_attach(GTK_TABLE(table), label, 1, 2, 3, 4, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 20, 0); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - g_free(text); - - gtk_container_add(GTK_CONTAINER(vbox), table); - - g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), dialog); - g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_destroy), dialog); - - gtk_widget_show_all(dialog); -} - - -/* This shows the color selection dialog to choose a color. */ -void dialogs_show_color(gchar *colour) -{ -#ifdef G_OS_WIN32 - win32_show_color_dialog(colour); -#else - - if (app->open_colorsel == NULL) - { - app->open_colorsel = gtk_color_selection_dialog_new(_("Color Chooser")); - gtk_widget_set_name(app->open_colorsel, "GeanyDialog"); - gtk_window_set_transient_for(GTK_WINDOW(app->open_colorsel), GTK_WINDOW(app->window)); - gtk_color_selection_set_has_palette( - GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->colorsel), TRUE); - - g_signal_connect(GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->cancel_button, "clicked", - G_CALLBACK(on_color_cancel_button_clicked), NULL); - g_signal_connect(GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->ok_button, "clicked", - G_CALLBACK(on_color_ok_button_clicked), NULL); - g_signal_connect(app->open_colorsel, "delete_event", - G_CALLBACK(gtk_widget_hide_on_delete), NULL); - } - // if colour is non-NULL set it in the dialog as preselected colour - if (colour != NULL && (colour[0] == '0' || colour[0] == '#')) - { - GdkColor gc; - - if (colour[0] == '0' && colour[1] == 'x') - { // we have a string of the format "0x00ff00" and we need it to "#00ff00" - colour[1] = '#'; - colour++; - } - gdk_color_parse(colour, &gc); - gtk_color_selection_set_current_color(GTK_COLOR_SELECTION( - GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->colorsel), &gc); - gtk_color_selection_set_previous_color(GTK_COLOR_SELECTION( - GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->colorsel), &gc); - } - - // We make sure the dialog is visible. - gtk_window_present(GTK_WINDOW(app->open_colorsel)); -#endif -} - - void dialogs_show_input(const gchar *title, const gchar *label_text, const gchar *default_text, GCallback cb_dialog, GCallback cb_entry) {
Modified: trunk/src/tools.c =================================================================== --- trunk/src/tools.c 2007-07-27 10:43:25 UTC (rev 1750) +++ trunk/src/tools.c 2007-07-27 11:28:17 UTC (rev 1751) @@ -22,7 +22,8 @@ */
/* - * Miscellaneous code for the Tools menu items. + * Miscellaneous code for the built-in Tools menu items, and custom command code. + * For Plugins code see plugins.c. */
#include "geany.h" @@ -454,3 +455,230 @@ } }
+ +/* (stolen from bluefish, thanks) + * Returns number of characters, lines and words in the supplied gchar*. + * Handles UTF-8 correctly. Input must be properly encoded UTF-8. + * Words are defined as any characters grouped, separated with spaces. + */ +static void +word_count(gchar *text, guint *chars, guint *lines, guint *words) +{ + guint in_word = 0; + gunichar utext; + + if (!text) return; // politely refuse to operate on NULL + + *chars = *words = *lines = 0; + while (*text != '\0') + { + (*chars)++; + + switch (*text) + { + case '\n': + (*lines)++; + case '\r': + case '\f': + case '\t': + case ' ': + case '\v': + mb_word_separator: + if (in_word) + { + in_word = 0; + (*words)++; + } + break; + default: + utext = g_utf8_get_char_validated(text, 2); // This might be an utf-8 char + if (g_unichar_isspace(utext)) // Unicode encoded space? + goto mb_word_separator; + if (g_unichar_isgraph(utext)) // Is this something printable? + in_word = 1; + break; + } + text = g_utf8_next_char(text); // Even if the current char is 2 bytes, this will iterate correctly. + } + + // Capture last word, if there's no whitespace at the end of the file. + if (in_word) (*words)++; + // We start counting line numbers from 1 + if (*chars > 0) (*lines)++; +} + + +void tools_word_count() +{ + GtkWidget *dialog, *label, *vbox, *table; + gint idx; + guint chars = 0, lines = 0, words = 0; + gchar *text, *range; + + idx = document_get_cur_idx(); + if (idx == -1 || ! doc_list[idx].is_valid) return; + + dialog = gtk_dialog_new_with_buttons(_("Word Count"), GTK_WINDOW(app->window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL); + vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog)); + gtk_widget_set_name(dialog, "GeanyDialog"); + + if (sci_can_copy(doc_list[idx].sci)) + { + text = g_malloc0(sci_get_selected_text_length(doc_list[idx].sci) + 1); + sci_get_selected_text(doc_list[idx].sci, text); + range = _("selection"); + } + else + { + text = g_malloc(sci_get_length(doc_list[idx].sci) + 1); + sci_get_text(doc_list[idx].sci, sci_get_length(doc_list[idx].sci) + 1 , text); + range = _("whole document"); + } + word_count(text, &chars, &lines, &words); + g_free(text); + + table = gtk_table_new(4, 2, FALSE); + gtk_table_set_row_spacings(GTK_TABLE(table), 5); + gtk_table_set_col_spacings(GTK_TABLE(table), 10); + + label = gtk_label_new(_("Range:")); + gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment(GTK_MISC(label), 1, 0); + + label = gtk_label_new(range); + gtk_table_attach(GTK_TABLE(table), label, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 20, 0); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + + label = gtk_label_new(_("Lines:")); + gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment(GTK_MISC(label), 1, 0); + + text = g_strdup_printf("%d", lines); + label = gtk_label_new(text); + gtk_table_attach(GTK_TABLE(table), label, 1, 2, 1, 2, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 20, 0); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + g_free(text); + + label = gtk_label_new(_("Words:")); + gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment(GTK_MISC(label), 1, 0); + + text = g_strdup_printf("%d", words); + label = gtk_label_new(text); + gtk_table_attach(GTK_TABLE(table), label, 1, 2, 2, 3, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 20, 0); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + g_free(text); + + label = gtk_label_new(_("Characters:")); + gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 0, 0); + gtk_misc_set_alignment(GTK_MISC(label), 1, 0); + + text = g_strdup_printf("%d", chars); + label = gtk_label_new(text); + gtk_table_attach(GTK_TABLE(table), label, 1, 2, 3, 4, + (GtkAttachOptions) (GTK_FILL), + (GtkAttachOptions) (0), 20, 0); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + g_free(text); + + gtk_container_add(GTK_CONTAINER(vbox), table); + + g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), dialog); + g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_destroy), dialog); + + gtk_widget_show_all(dialog); +} + + +/* + * color dialog callbacks + */ +static void +on_color_cancel_button_clicked (GtkButton *button, + gpointer user_data) +{ + gtk_widget_hide(app->open_colorsel); +} + + +static void +on_color_ok_button_clicked (GtkButton *button, + gpointer user_data) +{ + GdkColor color; + gint idx = document_get_cur_idx(); + gchar *hex; + + gtk_widget_hide(app->open_colorsel); + if (idx == -1 || ! doc_list[idx].is_valid) return; + + gtk_color_selection_get_current_color( + GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->colorsel), &color); + + hex = utils_get_hex_from_color(&color); + document_insert_colour(idx, hex); + g_free(hex); +} + + +/* This shows the color selection dialog to choose a color. */ +void tools_color_chooser(gchar *color) +{ +#ifdef G_OS_WIN32 + win32_show_color_dialog(color); +#else + + if (app->open_colorsel == NULL) + { + app->open_colorsel = gtk_color_selection_dialog_new(_("Color Chooser")); + gtk_widget_set_name(app->open_colorsel, "GeanyDialog"); + gtk_window_set_transient_for(GTK_WINDOW(app->open_colorsel), GTK_WINDOW(app->window)); + gtk_color_selection_set_has_palette( + GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->colorsel), TRUE); + + g_signal_connect(GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->cancel_button, "clicked", + G_CALLBACK(on_color_cancel_button_clicked), NULL); + g_signal_connect(GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->ok_button, "clicked", + G_CALLBACK(on_color_ok_button_clicked), NULL); + g_signal_connect(app->open_colorsel, "delete_event", + G_CALLBACK(gtk_widget_hide_on_delete), NULL); + } + // if color is non-NULL set it in the dialog as preselected color + if (color != NULL && (color[0] == '0' || color[0] == '#')) + { + GdkColor gc; + + if (color[0] == '0' && color[1] == 'x') + { // we have a string of the format "0x00ff00" and we need it to "#00ff00" + color[1] = '#'; + color++; + } + gdk_color_parse(color, &gc); + gtk_color_selection_set_current_color(GTK_COLOR_SELECTION( + GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->colorsel), &gc); + gtk_color_selection_set_previous_color(GTK_COLOR_SELECTION( + GTK_COLOR_SELECTION_DIALOG(app->open_colorsel)->colorsel), &gc); + } + + // We make sure the dialog is visible. + gtk_window_present(GTK_WINDOW(app->open_colorsel)); +#endif +} + +
Modified: trunk/src/tools.h =================================================================== --- trunk/src/tools.h 2007-07-27 10:43:25 UTC (rev 1750) +++ trunk/src/tools.h 2007-07-27 11:28:17 UTC (rev 1751) @@ -29,4 +29,9 @@
void tools_execute_custom_command(gint idx, const gchar *command);
+ +void tools_word_count(); + +void tools_color_chooser(gchar *color); + #endif
Modified: trunk/src/utils.c =================================================================== --- trunk/src/utils.c 2007-07-27 10:43:25 UTC (rev 1750) +++ trunk/src/utils.c 2007-07-27 11:28:17 UTC (rev 1751) @@ -617,57 +617,6 @@ }
-/* (stolen from bluefish, thanks) - * Returns number of characters, lines and words in the supplied gchar*. - * Handles UTF-8 correctly. Input must be properly encoded UTF-8. - * Words are defined as any characters grouped, separated with spaces. - */ -void utils_wordcount(gchar *text, guint *chars, guint *lines, guint *words) -{ - guint in_word = 0; - gunichar utext; - - if (!text) return; // politely refuse to operate on NULL - - *chars = *words = *lines = 0; - while (*text != '\0') - { - (*chars)++; - - switch (*text) - { - case '\n': - (*lines)++; - case '\r': - case '\f': - case '\t': - case ' ': - case '\v': - mb_word_separator: - if (in_word) - { - in_word = 0; - (*words)++; - } - break; - default: - utext = g_utf8_get_char_validated(text, 2); // This might be an utf-8 char - if (g_unichar_isspace(utext)) // Unicode encoded space? - goto mb_word_separator; - if (g_unichar_isgraph(utext)) // Is this something printable? - in_word = 1; - break; - } - text = g_utf8_next_char(text); // Even if the current char is 2 bytes, this will iterate correctly. - } - - // Capture last word, if there's no whitespace at the end of the file. - if (in_word) (*words)++; - // We start counting line numbers from 1 - if (*chars > 0) (*lines)++; -} - - /* currently unused */ gboolean utils_is_absolute_path(const gchar *path) {
Modified: trunk/src/utils.h =================================================================== --- trunk/src/utils.h 2007-07-27 10:43:25 UTC (rev 1750) +++ trunk/src/utils.h 2007-07-27 11:28:17 UTC (rev 1751) @@ -78,8 +78,6 @@
gboolean utils_atob(const gchar *str);
-void utils_wordcount(gchar *text, guint *chars, guint *lines, guint *words); - gboolean utils_is_absolute_path(const gchar *path);
gdouble utils_scale_round(gdouble val, gdouble factor);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.