Kaydet (Commit) 572826e5 authored tarafından Nick Treleaven's avatar Nick Treleaven

Group Open dialog encoding options by submenus (patch by Adam Ples,

thanks; #3047717).



git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5284 ea778897-0a13-0410-b9d1-a72fbfd435f5
üst 7c0e80c7
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
* src/geanywraplabel.c: * src/geanywraplabel.c:
Fix build with GLib 2.8. 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> 2010-10-06 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
...@@ -19,7 +22,7 @@ ...@@ -19,7 +22,7 @@
Add utils_strv_join(). Add utils_strv_join().
* tagmanager/basic.c: * tagmanager/basic.c:
Parse property, constructor, destructor as functions (patch by 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> 2010-10-01 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
......
...@@ -83,6 +83,7 @@ Daniel Marjamaki <danielm77(at)spray(dot)se> - Small improvements ...@@ -83,6 +83,7 @@ Daniel Marjamaki <danielm77(at)spray(dot)se> - Small improvements
Jiří Techet <techet(at)gmail(dot)com> - Various patches Jiří Techet <techet(at)gmail(dot)com> - Various patches
Erik de Castro Lopo <mle+tools(at)mega-nerd(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 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: Translators:
------------ ------------
......
...@@ -59,7 +59,7 @@ const gchar *translators[][2] = { ...@@ -59,7 +59,7 @@ const gchar *translators[][2] = {
{ "it", "Max Baldinelli &lt;m.baldinelli@agora.it&gt;,\nDario Santomarco &lt;dariello@yahoo.it&gt;" }, { "it", "Max Baldinelli &lt;m.baldinelli@agora.it&gt;,\nDario Santomarco &lt;dariello@yahoo.it&gt;" },
{ "ja", "Tarot Osuji &lt;tarot@sdf.lonestar.org&gt;\nChikahiro Masami &lt;cmasa.z321@gmail.com&gt;" }, { "ja", "Tarot Osuji &lt;tarot@sdf.lonestar.org&gt;\nChikahiro Masami &lt;cmasa.z321@gmail.com&gt;" },
{ "ko", "Park Jang-heon &lt;dotkabi@gmail.com&gt;" }, { "ko", "Park Jang-heon &lt;dotkabi@gmail.com&gt;" },
{ "kk", "Baurzhan Muftakhidinov &lt;baurthefirst@gmail.com&gt;"}, { "kk", "Baurzhan Muftakhidinov &lt;baurthefirst@gmail.com&gt;"},
{ "lb", "Laurent Hoeltgen &lt;hoeltgman@gmail.com&gt;" }, { "lb", "Laurent Hoeltgen &lt;hoeltgman@gmail.com&gt;" },
{ "nl", "Peter Scholtens &lt;peter.scholtens@xs4all.nl&gt;\nAyke van Laethem &lt;aykevanlaethem@gmail.com&gt;" }, { "nl", "Peter Scholtens &lt;peter.scholtens@xs4all.nl&gt;\nAyke van Laethem &lt;aykevanlaethem@gmail.com&gt;" },
{ "pl_PL", "Jarosław Foksa &lt;jfoksa@gmail.com&gt;" }, { "pl_PL", "Jarosław Foksa &lt;jfoksa@gmail.com&gt;" },
...@@ -84,6 +84,7 @@ const gchar *prev_translators[][2] = { ...@@ -84,6 +84,7 @@ const gchar *prev_translators[][2] = {
static const gint prev_translators_len = G_N_ELEMENTS(prev_translators); static const gint prev_translators_len = G_N_ELEMENTS(prev_translators);
static const gchar *contributors = static const gchar *contributors =
"Adam Ples, "
"Alexander Rodin, Alexey Antipov, Andrew Rowland, Anh Phạm, blackdog, Bo Lorentsen, Bob Doan, " "Alexander Rodin, Alexey Antipov, Andrew Rowland, Anh Phạm, blackdog, Bo Lorentsen, Bob Doan, "
"Bronisław Białek, Can Koy, Catalin Marinas, " "Bronisław Białek, Can Koy, Catalin Marinas, "
"Chris Macksey, Christoph Berg, Colomban Wendling, Conrad Steenberg, Daniel Richard G., " "Chris Macksey, Christoph Berg, Colomban Wendling, Conrad Steenberg, Daniel Richard G., "
......
...@@ -85,8 +85,9 @@ on_file_open_dialog_response (GtkDialog *dialog, ...@@ -85,8 +85,9 @@ on_file_open_dialog_response (GtkDialog *dialog,
GSList *filelist; GSList *filelist;
gint filetype_idx = gtk_combo_box_get_active(GTK_COMBO_BOX( gint filetype_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(
ui_lookup_widget(GTK_WIDGET(dialog), "filetype_combo"))); ui_lookup_widget(GTK_WIDGET(dialog), "filetype_combo")));
gint encoding_idx = gtk_combo_box_get_active(GTK_COMBO_BOX( gint encoding_idx;
ui_lookup_widget(GTK_WIDGET(dialog), "encoding_combo"))); GtkTreeModel *encoding_model;
GtkTreeIter encoding_iter;
GeanyFiletype *ft = NULL; GeanyFiletype *ft = NULL;
const gchar *charset = NULL; const gchar *charset = NULL;
gboolean ro = (response == GEANY_RESPONSE_VIEW); /* View clicked */ gboolean ro = (response == GEANY_RESPONSE_VIEW); /* View clicked */
...@@ -94,6 +95,12 @@ on_file_open_dialog_response (GtkDialog *dialog, ...@@ -94,6 +95,12 @@ on_file_open_dialog_response (GtkDialog *dialog,
/* ignore detect from file item */ /* ignore detect from file item */
if (filetype_idx > 0) if (filetype_idx > 0)
ft = g_slist_nth_data(filetypes_by_title, filetype_idx); 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) if (encoding_idx >= 0 && encoding_idx < GEANY_ENCODINGS_MAX)
charset = encodings[encoding_idx].charset; charset = encodings[encoding_idx].charset;
...@@ -133,12 +140,100 @@ on_file_open_check_hidden_toggled(GtkToggleButton *togglebutton, gpointer user_d ...@@ -133,12 +140,100 @@ on_file_open_check_hidden_toggled(GtkToggleButton *togglebutton, gpointer user_d
} }
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) static void create_open_file_dialog(void)
{ {
GtkWidget *filetype_combo, *encoding_combo; GtkWidget *filetype_combo, *encoding_combo;
GtkWidget *viewbtn; GtkWidget *viewbtn;
guint i; GtkCellRenderer *encoding_renderer;
gchar *encoding_string; GtkTreeIter encoding_iter;
GSList *node; GSList *node;
ui_widgets.open_filesel = gtk_file_chooser_dialog_new(_("Open File"), GTK_WINDOW(main_widgets.window), ui_widgets.open_filesel = gtk_file_chooser_dialog_new(_("Open File"), GTK_WINDOW(main_widgets.window),
...@@ -191,14 +286,14 @@ static void create_open_file_dialog(void) ...@@ -191,14 +286,14 @@ static void create_open_file_dialog(void)
/* fill encoding combo box */ /* fill encoding combo box */
encoding_combo = ui_lookup_widget(ui_widgets.open_filesel, "encoding_combo"); encoding_combo = ui_lookup_widget(ui_widgets.open_filesel, "encoding_combo");
for (i = 0; i < GEANY_ENCODINGS_MAX; i++) gtk_combo_box_set_model(GTK_COMBO_BOX(encoding_combo), GTK_TREE_MODEL(
{ create_encoding_combo_store(&encoding_iter)));
encoding_string = encodings_to_string(&encodings[i]); gtk_combo_box_set_active_iter(GTK_COMBO_BOX(encoding_combo), &encoding_iter);
gtk_combo_box_append_text(GTK_COMBO_BOX(encoding_combo), encoding_string); encoding_renderer = gtk_cell_renderer_text_new();
g_free(encoding_string); 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_combo_box_append_text(GTK_COMBO_BOX(encoding_combo), _("Detect from file")); gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(encoding_combo), encoding_renderer,
gtk_combo_box_set_active(GTK_COMBO_BOX(encoding_combo), GEANY_ENCODINGS_MAX); encoding_combo_cell_data_func, NULL, NULL);
g_signal_connect(ui_widgets.open_filesel, "notify::show-hidden", g_signal_connect(ui_widgets.open_filesel, "notify::show-hidden",
G_CALLBACK(on_file_open_notify), NULL); G_CALLBACK(on_file_open_notify), NULL);
...@@ -284,8 +379,7 @@ static GtkWidget *add_file_open_extra_widget() ...@@ -284,8 +379,7 @@ static GtkWidget *add_file_open_extra_widget()
(GtkAttachOptions) (0), 4, 5); (GtkAttachOptions) (0), 4, 5);
/* the ebox is for the tooltip, because gtk_combo_box can't show tooltips */ /* the ebox is for the tooltip, because gtk_combo_box can't show tooltips */
encoding_ebox = gtk_event_box_new(); encoding_ebox = gtk_event_box_new();
encoding_combo = gtk_combo_box_new_text(); encoding_combo = gtk_combo_box_new();
gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(encoding_combo), 3);
ui_widget_set_tooltip_text(encoding_ebox, 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.")); _("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); gtk_container_add(GTK_CONTAINER(encoding_ebox), encoding_combo);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment