SF.net SVN: geany:[5284] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Wed Oct 6 15:53:53 UTC 2010
Revision: 5284
http://geany.svn.sourceforge.net/geany/?rev=5284&view=rev
Author: ntrel
Date: 2010-10-06 15:53:53 +0000 (Wed, 06 Oct 2010)
Log Message:
-----------
Group Open dialog encoding options by submenus (patch by Adam Ples,
thanks; #3047717).
Modified Paths:
--------------
trunk/ChangeLog
trunk/THANKS
trunk/src/about.c
trunk/src/dialogs.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2010-10-06 15:32:40 UTC (rev 5283)
+++ trunk/ChangeLog 2010-10-06 15:53:53 UTC (rev 5284)
@@ -2,6 +2,9 @@
* src/geanywraplabel.c:
Fix build with GLib 2.8.
+ * src/dialogs.c, src/about.c, THANKS:
+ Group Open dialog encoding options by submenus (patch by Adam Ples,
+ thanks; #3047717).
2010-10-06 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
@@ -19,7 +22,7 @@
Add utils_strv_join().
* tagmanager/basic.c:
Parse property, constructor, destructor as functions (patch by
- pottersson, thanks - #2992167).
+ pottersson, thanks; #2992167).
2010-10-01 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/THANKS
===================================================================
--- trunk/THANKS 2010-10-06 15:32:40 UTC (rev 5283)
+++ trunk/THANKS 2010-10-06 15:53:53 UTC (rev 5284)
@@ -83,6 +83,7 @@
Jiří Techet <techet(at)gmail(dot)com> - Various patches
Erik de Castro Lopo <mle+tools(at)mega-nerd(dot)com> - Various patches
Thomas Huth <th(dot)huth(at)googlemail(dot)com> - Forth filetype
+Adam Ples <adamples(at)users(dot)sourceforge(dot)net> - Group encodings in open dialog
Translators:
------------
Modified: trunk/src/about.c
===================================================================
--- trunk/src/about.c 2010-10-06 15:32:40 UTC (rev 5283)
+++ trunk/src/about.c 2010-10-06 15:53:53 UTC (rev 5284)
@@ -59,7 +59,7 @@
{ "it", "Max Baldinelli <m.baldinelli at agora.it>,\nDario Santomarco <dariello at yahoo.it>" },
{ "ja", "Tarot Osuji <tarot at sdf.lonestar.org>\nChikahiro Masami <cmasa.z321 at gmail.com>" },
{ "ko", "Park Jang-heon <dotkabi at gmail.com>" },
- { "kk", "Baurzhan Muftakhidinov <baurthefirst at gmail.com>"},
+ { "kk", "Baurzhan Muftakhidinov <baurthefirst at gmail.com>"},
{ "lb", "Laurent Hoeltgen <hoeltgman at gmail.com>" },
{ "nl", "Peter Scholtens <peter.scholtens at xs4all.nl>\nAyke van Laethem <aykevanlaethem at gmail.com>" },
{ "pl_PL", "Jarosław Foksa <jfoksa at gmail.com>" },
@@ -84,6 +84,7 @@
static const gint prev_translators_len = G_N_ELEMENTS(prev_translators);
static const gchar *contributors =
+"Adam Ples, "
"Alexander Rodin, Alexey Antipov, Andrew Rowland, Anh Phạm, blackdog, Bo Lorentsen, Bob Doan, "
"Bronisław Białek, Can Koy, Catalin Marinas, "
"Chris Macksey, Christoph Berg, Colomban Wendling, Conrad Steenberg, Daniel Richard G., "
Modified: trunk/src/dialogs.c
===================================================================
--- trunk/src/dialogs.c 2010-10-06 15:32:40 UTC (rev 5283)
+++ trunk/src/dialogs.c 2010-10-06 15:53:53 UTC (rev 5284)
@@ -85,8 +85,9 @@
GSList *filelist;
gint filetype_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(
ui_lookup_widget(GTK_WIDGET(dialog), "filetype_combo")));
- gint encoding_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(
- ui_lookup_widget(GTK_WIDGET(dialog), "encoding_combo")));
+ gint encoding_idx;
+ GtkTreeModel *encoding_model;
+ GtkTreeIter encoding_iter;
GeanyFiletype *ft = NULL;
const gchar *charset = NULL;
gboolean ro = (response == GEANY_RESPONSE_VIEW); /* View clicked */
@@ -94,6 +95,12 @@
/* ignore detect from file item */
if (filetype_idx > 0)
ft = g_slist_nth_data(filetypes_by_title, filetype_idx);
+
+ encoding_model = gtk_combo_box_get_model(GTK_COMBO_BOX(
+ ui_lookup_widget(GTK_WIDGET(dialog), "encoding_combo")));
+ gtk_combo_box_get_active_iter(GTK_COMBO_BOX(
+ ui_lookup_widget(GTK_WIDGET(dialog), "encoding_combo")), &encoding_iter);
+ gtk_tree_model_get(encoding_model, &encoding_iter, 0, &encoding_idx, -1);
if (encoding_idx >= 0 && encoding_idx < GEANY_ENCODINGS_MAX)
charset = encodings[encoding_idx].charset;
@@ -133,12 +140,100 @@
}
+static gint encoding_combo_store_sort_func(GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer data)
+{
+ gboolean a_has_child = gtk_tree_model_iter_has_child(model, a);
+ gboolean b_has_child = gtk_tree_model_iter_has_child(model, b);
+ gchar *a_string;
+ gchar *b_string;
+ gint cmp_res;
+
+ if (a_has_child != b_has_child)
+ return a_has_child ? -1 : 1;
+
+ gtk_tree_model_get(model, a, 1, &a_string, -1);
+ gtk_tree_model_get(model, b, 1, &b_string, -1);
+ cmp_res = strcmp(a_string, b_string);
+ g_free(a_string);
+ g_free(b_string);
+ return cmp_res;
+}
+
+
+static GtkTreeStore *create_encoding_combo_store(GtkTreeIter *iter_detect)
+{
+ GtkTreeStore *store;
+ GtkTreeIter iter_current, iter_westeuro, iter_easteuro, iter_eastasian, iter_asian,
+ iter_utf8, iter_middleeast;
+ GtkTreeIter *iter_parent;
+ gchar *encoding_string;
+ guint i;
+
+ store = gtk_tree_store_new(2, G_TYPE_INT, G_TYPE_STRING);
+
+ gtk_tree_store_append(store, iter_detect, NULL);
+ gtk_tree_store_set(store, iter_detect, 0, GEANY_ENCODINGS_MAX, 1, _("Detect from file"), -1);
+
+ gtk_tree_store_append(store, &iter_westeuro, NULL);
+ gtk_tree_store_set(store, &iter_westeuro, 0, -1, 1, _("West European"), -1);
+ gtk_tree_store_append(store, &iter_easteuro, NULL);
+ gtk_tree_store_set(store, &iter_easteuro, 0, -1, 1, _("East European"), -1);
+ gtk_tree_store_append(store, &iter_eastasian, NULL);
+ gtk_tree_store_set(store, &iter_eastasian, 0, -1, 1, _("East Asian"), -1);
+ gtk_tree_store_append(store, &iter_asian, NULL);
+ gtk_tree_store_set(store, &iter_asian, 0, -1, 1, _("SE & SW Asian"), -1);
+ gtk_tree_store_append(store, &iter_middleeast, NULL);
+ gtk_tree_store_set(store, &iter_middleeast, 0, -1, 1, _("Middle Eastern"), -1);
+ gtk_tree_store_append(store, &iter_utf8, NULL);
+ gtk_tree_store_set(store, &iter_utf8, 0, -1, 1, _("Unicode"), -1);
+
+ for (i = 0; i < GEANY_ENCODINGS_MAX; i++)
+ {
+ switch (encodings[i].group)
+ {
+ case WESTEUROPEAN: iter_parent = &iter_westeuro; break;
+ case EASTEUROPEAN: iter_parent = &iter_easteuro; break;
+ case EASTASIAN: iter_parent = &iter_eastasian; break;
+ case ASIAN: iter_parent = &iter_asian; break;
+ case MIDDLEEASTERN: iter_parent = &iter_middleeast; break;
+ case UNICODE: iter_parent = &iter_utf8; break;
+ case NONE:
+ default: iter_parent = NULL;
+ }
+ gtk_tree_store_append(store, &iter_current, iter_parent);
+ encoding_string = encodings_to_string(&encodings[i]);
+ gtk_tree_store_set(store, &iter_current, 0, i, 1, encoding_string, -1);
+ g_free(encoding_string);
+ }
+
+ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), 1, GTK_SORT_ASCENDING);
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), 1, encoding_combo_store_sort_func, NULL, NULL);
+
+ return store;
+}
+
+
+static void encoding_combo_cell_data_func(GtkCellLayout *cell_layout,
+ GtkCellRenderer *cell,
+ GtkTreeModel *tree_model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ gboolean sensitive = !gtk_tree_model_iter_has_child(tree_model, iter);
+
+ g_object_set(cell, "sensitive", sensitive, NULL);
+}
+
+
static void create_open_file_dialog(void)
{
GtkWidget *filetype_combo, *encoding_combo;
GtkWidget *viewbtn;
- guint i;
- gchar *encoding_string;
+ GtkCellRenderer *encoding_renderer;
+ GtkTreeIter encoding_iter;
GSList *node;
ui_widgets.open_filesel = gtk_file_chooser_dialog_new(_("Open File"), GTK_WINDOW(main_widgets.window),
@@ -191,14 +286,14 @@
/* fill encoding combo box */
encoding_combo = ui_lookup_widget(ui_widgets.open_filesel, "encoding_combo");
- for (i = 0; i < GEANY_ENCODINGS_MAX; i++)
- {
- encoding_string = encodings_to_string(&encodings[i]);
- gtk_combo_box_append_text(GTK_COMBO_BOX(encoding_combo), encoding_string);
- g_free(encoding_string);
- }
- gtk_combo_box_append_text(GTK_COMBO_BOX(encoding_combo), _("Detect from file"));
- gtk_combo_box_set_active(GTK_COMBO_BOX(encoding_combo), GEANY_ENCODINGS_MAX);
+ gtk_combo_box_set_model(GTK_COMBO_BOX(encoding_combo), GTK_TREE_MODEL(
+ create_encoding_combo_store(&encoding_iter)));
+ gtk_combo_box_set_active_iter(GTK_COMBO_BOX(encoding_combo), &encoding_iter);
+ encoding_renderer = gtk_cell_renderer_text_new();
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(encoding_combo), encoding_renderer, TRUE);
+ gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(encoding_combo), encoding_renderer, "text", 1);
+ gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(encoding_combo), encoding_renderer,
+ encoding_combo_cell_data_func, NULL, NULL);
g_signal_connect(ui_widgets.open_filesel, "notify::show-hidden",
G_CALLBACK(on_file_open_notify), NULL);
@@ -284,8 +379,7 @@
(GtkAttachOptions) (0), 4, 5);
/* the ebox is for the tooltip, because gtk_combo_box can't show tooltips */
encoding_ebox = gtk_event_box_new();
- encoding_combo = gtk_combo_box_new_text();
- gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(encoding_combo), 3);
+ encoding_combo = gtk_combo_box_new();
ui_widget_set_tooltip_text(encoding_ebox,
_("Explicitly defines an encoding for the file, if it would not be detected. This is useful when you know that the encoding of a file cannot be detected correctly by Geany.\nNote if you choose multiple files, they will all be opened with the chosen encoding."));
gtk_container_add(GTK_CONTAINER(encoding_ebox), encoding_combo);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list