[geany/geany] 45f193: Merge branch 'cleaner-filetype-combo-box'
Colomban Wendling
git-noreply at xxxxx
Tue Apr 15 13:57:26 UTC 2014
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Tue, 15 Apr 2014 13:57:26 UTC
Commit: 45f193a17a8722dce003a05a84b092610f1c0ba7
https://github.com/geany/geany/commit/45f193a17a8722dce003a05a84b092610f1c0ba7
Log Message:
-----------
Merge branch 'cleaner-filetype-combo-box'
Modified Paths:
--------------
src/dialogs.c
Modified: src/dialogs.c
125 files changed, 113 insertions(+), 12 deletions(-)
===================================================================
@@ -80,13 +80,16 @@ filesel_state = {
{
0,
GEANY_ENCODINGS_MAX, /* default encoding is detect from file */
- 0,
+ GEANY_FILETYPES_NONE, /* default filetype is detect from extension */
FALSE,
FALSE
}
};
+static gint filetype_combo_box_get_active_filetype(GtkComboBox *combo);
+
+
/* gets the ID of the current file filter */
static guint file_chooser_get_filter_idx(GtkFileChooser *chooser)
{
@@ -134,11 +137,11 @@ static void open_file_dialog_handle_response(GtkWidget *dialog, gint response)
filesel_state.open.more_options_visible = gtk_expander_get_expanded(GTK_EXPANDER(expander));
filesel_state.open.filter_idx = file_chooser_get_filter_idx(GTK_FILE_CHOOSER(dialog));
- filesel_state.open.filetype_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(filetype_combo));
+ filesel_state.open.filetype_idx = filetype_combo_box_get_active_filetype(GTK_COMBO_BOX(filetype_combo));
/* ignore detect from file item */
if (filesel_state.open.filetype_idx > 0)
- ft = g_slist_nth_data(filetypes_by_title, (guint) filesel_state.open.filetype_idx);
+ ft = filetypes_index(filesel_state.open.filetype_idx);
filesel_state.open.encoding_idx = ui_encodings_combo_box_get_active_encoding(GTK_COMBO_BOX(encoding_combo));
if (filesel_state.open.encoding_idx >= 0 && filesel_state.open.encoding_idx < GEANY_ENCODINGS_MAX)
@@ -178,6 +181,111 @@ on_file_open_check_hidden_toggled(GtkToggleButton *togglebutton, GtkWidget *dial
}
+static void filetype_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);
+ gchar *text;
+
+ gtk_tree_model_get(tree_model, iter, 1, &text, -1);
+ g_object_set(cell, "sensitive", sensitive, "text", text, NULL);
+ g_free(text);
+}
+
+
+static GtkWidget *create_filetype_combo_box(void)
+{
+ GtkTreeStore *store;
+ GtkTreeIter iter_compiled, iter_script, iter_markup, iter_misc, iter_detect;
+ GtkTreeIter *iter_parent;
+ GtkWidget *combo;
+ GtkCellRenderer *renderer;
+ GSList *node;
+
+ store = gtk_tree_store_new(2, G_TYPE_INT, G_TYPE_STRING);
+
+ gtk_tree_store_insert_with_values(store, &iter_detect, NULL, -1,
+ 0, GEANY_FILETYPES_NONE, 1, _("Detect by file extension"), -1);
+
+ gtk_tree_store_insert_with_values(store, &iter_compiled, NULL, -1,
+ 0, -1, 1, _("Programming Languages"), -1);
+ gtk_tree_store_insert_with_values(store, &iter_script, NULL, -1,
+ 0, -1, 1, _("Scripting Languages"), -1);
+ gtk_tree_store_insert_with_values(store, &iter_markup, NULL, -1,
+ 0, -1, 1, _("Markup Languages"), -1);
+ gtk_tree_store_insert_with_values(store, &iter_misc, NULL, -1,
+ 0, -1, 1, _("Miscellaneous"), -1);
+
+ foreach_slist (node, filetypes_by_title)
+ {
+ GeanyFiletype *ft = node->data;
+
+ if (ft->id == GEANY_FILETYPES_NONE)
+ continue;
+
+ switch (ft->group)
+ {
+ case GEANY_FILETYPE_GROUP_COMPILED: iter_parent = &iter_compiled; break;
+ case GEANY_FILETYPE_GROUP_SCRIPT: iter_parent = &iter_script; break;
+ case GEANY_FILETYPE_GROUP_MARKUP: iter_parent = &iter_markup; break;
+ case GEANY_FILETYPE_GROUP_MISC: iter_parent = &iter_misc; break;
+ case GEANY_FILETYPE_GROUP_NONE:
+ default: iter_parent = NULL;
+ }
+ gtk_tree_store_insert_with_values(store, NULL, iter_parent, -1,
+ 0, (gint) ft->id, 1, ft->title, -1);
+ }
+
+ combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
+ gtk_combo_box_set_active_iter(GTK_COMBO_BOX(combo), &iter_detect);
+ renderer = gtk_cell_renderer_text_new();
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);
+ gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(combo), renderer,
+ filetype_combo_cell_data_func, NULL, NULL);
+
+ g_object_unref(store);
+
+ return combo;
+}
+
+
+static gint filetype_combo_box_get_active_filetype(GtkComboBox *combo)
+{
+ gint id = 0;
+ GtkTreeIter iter;
+
+ if (gtk_combo_box_get_active_iter(combo, &iter))
+ {
+ GtkTreeModel *model = gtk_combo_box_get_model(combo);
+ gtk_tree_model_get(model, &iter, 0, &id, -1);
+ }
+ return id;
+}
+
+
+static gboolean filetype_combo_box_set_active_filetype(GtkComboBox *combo, const gint id)
+{
+ GtkTreeModel *model = gtk_combo_box_get_model(combo);
+ GtkTreeIter iter;
+
+ if (gtk_tree_model_get_iter_first(model, &iter))
+ {
+ do
+ {
+ gint row_id;
+ gtk_tree_model_get(model, &iter, 0, &row_id, -1);
+ if (id == row_id)
+ {
+ gtk_combo_box_set_active_iter(combo, &iter);
+ return TRUE;
+ }
+ }
+ while (ui_tree_model_iter_any_next(model, &iter, TRUE));
+ }
+ return FALSE;
+}
+
+
static GtkWidget *add_file_open_extra_widget(GtkWidget *dialog)
{
GtkWidget *expander, *vbox, *table, *check_hidden;
@@ -225,7 +333,7 @@ static GtkWidget *add_file_open_extra_widget(GtkWidget *dialog)
(GtkAttachOptions) (0), 4, 5);
/* the ebox is for the tooltip, because gtk_combo_box can't show tooltips */
filetype_ebox = gtk_event_box_new();
- filetype_combo = gtk_combo_box_text_new();
+ filetype_combo = create_filetype_combo_box();
gtk_widget_set_tooltip_text(filetype_ebox,
_("Explicitly defines a filetype for the file, if it would not be detected by filename extension.\nNote if you choose multiple files, they will all be opened with the chosen filetype."));
gtk_container_add(GTK_CONTAINER(filetype_ebox), filetype_combo);
@@ -250,7 +358,6 @@ static GtkWidget *add_file_open_extra_widget(GtkWidget *dialog)
static GtkWidget *create_open_file_dialog(void)
{
GtkWidget *dialog;
- GtkWidget *filetype_combo;
GtkWidget *viewbtn;
GSList *node;
@@ -278,9 +385,7 @@ static GtkWidget *create_open_file_dialog(void)
/* add checkboxes and filename entry */
gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(dialog), add_file_open_extra_widget(dialog));
- filetype_combo = ui_lookup_widget(dialog, "filetype_combo");
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(filetype_combo), _("Detect by file extension"));
/* add FileFilters(start with "All Files") */
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),
filetypes_create_file_filter(filetypes[GEANY_FILETYPES_NONE]));
@@ -293,11 +398,8 @@ static GtkWidget *create_open_file_dialog(void)
if (G_UNLIKELY(ft->id == GEANY_FILETYPES_NONE))
continue;
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(filetype_combo), ft->title);
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filetypes_create_file_filter(ft));
}
- gtk_combo_box_set_wrap_width(GTK_COMBO_BOX(filetype_combo), 3);
- gtk_combo_box_set_active(GTK_COMBO_BOX(filetype_combo), 0);
g_signal_connect(dialog, "notify::show-hidden",
G_CALLBACK(on_file_open_show_hidden_notify), NULL);
@@ -318,18 +420,17 @@ static void open_file_dialog_apply_settings(GtkWidget *dialog)
if (! initialized)
{
filesel_state.open.filter_idx = file_chooser_get_filter_idx(GTK_FILE_CHOOSER(dialog));
- filesel_state.open.filetype_idx = gtk_combo_box_get_active(GTK_COMBO_BOX(filetype_combo));
initialized = TRUE;
}
else
{
file_chooser_set_filter_idx(GTK_FILE_CHOOSER(dialog), filesel_state.open.filter_idx);
- gtk_combo_box_set_active(GTK_COMBO_BOX(filetype_combo), filesel_state.open.filetype_idx);
}
gtk_expander_set_expanded(GTK_EXPANDER(expander), filesel_state.open.more_options_visible);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_hidden), filesel_state.open.show_hidden);
ui_encodings_combo_box_set_active_encoding(GTK_COMBO_BOX(encoding_combo), filesel_state.open.encoding_idx);
+ filetype_combo_box_set_active_filetype(GTK_COMBO_BOX(filetype_combo), filesel_state.open.filetype_idx);
}
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list