[geany/geany-plugins] 9cfc48: Complete configuration function and small fixes
federeghe
git-noreply at xxxxx
Thu Sep 11 20:39:06 UTC 2014
Branch: refs/heads/master
Author: federeghe <federico.dev at reghe.net>
Committer: federeghe <federico.dev at reghe.net>
Date: Wed, 16 Apr 2014 06:07:34 UTC
Commit: 9cfc48223c8e895779c610425df94efc0931bbf5
https://github.com/geany/geany-plugins/commit/9cfc48223c8e895779c610425df94efc0931bbf5
Log Message:
-----------
Complete configuration function and small fixes
Modified Paths:
--------------
codenav/src/codenavigation.c
codenav/src/goto_file.c
codenav/src/switch_head_impl.c
Modified: codenav/src/codenavigation.c
89 lines changed, 77 insertions(+), 12 deletions(-)
===================================================================
@@ -83,6 +83,9 @@ static void
on_configure_remove_language(GtkWidget* widget, gpointer data);
static void
+on_configure_reset_to_default(GtkWidget* widget, gpointer data);
+
+static void
on_configure_cell_edited(GtkCellRendererText* text, gchar* arg1, gchar* arg2, gpointer data);
static void
@@ -224,7 +227,7 @@ on_configure_response(GtkDialog* dialog, gint response, gpointer user_data)
gchar *config_dir = NULL;
gchar *data;
- gsize list_len;
+ gsize list_len, empty_lines;
gchar** head_list = NULL;
gchar** impl_list = NULL;
@@ -253,29 +256,37 @@ on_configure_response(GtkDialog* dialog, gint response, gpointer user_data)
list_len = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(list_store), NULL);
impl_list = g_malloc0( sizeof(gchar**) * list_len);
head_list = g_malloc0( sizeof(gchar**) * list_len);
-
+
+ empty_lines = 0;
+
if ( list_len > 0 ) {
// Get the first item
gtk_tree_model_iter_children (GTK_TREE_MODEL(list_store),&iter,NULL);
+
do { /* forall elements in list... */
-
- /* TODO: remove empty lines */
-
+
gtk_tree_model_get (GTK_TREE_MODEL(list_store),&iter,
COLUMN_IMPL,&impl_list[i], -1);
gtk_tree_model_get (GTK_TREE_MODEL(list_store),&iter,
COLUMN_HEAD,&head_list[i], -1);
- i++;
+
+ /* If one field is empty, ignore this line (it will be replaces
+ at next execution) */
+ if ( strlen(impl_list[i])==0 || strlen(head_list[i])==0 )
+ empty_lines++;
+ else
+ i++;
} while ( gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter) );
}
/* write lists */
g_key_file_set_string_list(config, "switch_head_impl", "implementations_list",
- (const gchar * const*)impl_list, list_len);
+ (const gchar * const*)impl_list, list_len - empty_lines);
g_key_file_set_string_list(config, "switch_head_impl", "headers_list",
- (const gchar * const*)head_list, list_len);
+ (const gchar * const*)head_list, list_len - empty_lines);
+ /* Try to create directory if not exists */
if (! g_file_test(config_dir, G_FILE_TEST_IS_DIR) && utils_mkdir(config_dir, TRUE) != 0)
{
dialogs_show_msgbox(GTK_MESSAGE_ERROR,
@@ -289,7 +300,8 @@ on_configure_response(GtkDialog* dialog, gint response, gpointer user_data)
g_free(data);
}
- fill_languages_list((const gchar**)impl_list, (const gchar**)head_list, list_len);
+ /* Replace the current (runtime) languages list */
+ fill_languages_list((const gchar**)impl_list, (const gchar**)head_list, list_len - empty_lines);
/* Freeing memory */
for ( i=0; i < list_len; i++ ) {
@@ -372,7 +384,7 @@ config_widget(void)
{
GtkWidget *help_label;
GtkWidget *frame, *vbox, *tree_view;
- GtkWidget *hbox_buttons, *add_button, *remove_button;
+ GtkWidget *hbox_buttons, *add_button, *remove_button, *reset_button;
GtkTreeViewColumn *column;
GtkCellRenderer *cell_renderer;
@@ -446,7 +458,10 @@ config_widget(void)
g_signal_connect(G_OBJECT(remove_button), "clicked", G_CALLBACK(on_configure_remove_language), tree_view);
gtk_box_pack_start(GTK_BOX(hbox_buttons), remove_button, FALSE, FALSE, 0);
-
+ /* Add the "reset to default" button to the frame's hbox */
+ reset_button = gtk_button_new_with_label(_("Reset to Default"));
+ g_signal_connect(G_OBJECT(reset_button), "clicked", G_CALLBACK(on_configure_reset_to_default), NULL);
+ gtk_box_pack_start(GTK_BOX(hbox_buttons), reset_button, FALSE, FALSE, 0);
gtk_widget_grab_focus(tree_view);
return frame;
@@ -511,6 +526,46 @@ on_configure_remove_language(GtkWidget* button, gpointer data)
}
/**
+ * @brief Callback for reset to default languages in the configuration dialog
+ * @param button the button, not used here
+ * @param data null
+ *
+ * @return void
+ *
+ */
+static void
+on_configure_reset_to_default(GtkWidget* button, gpointer data)
+{
+ GSList *iter_lang;
+ GtkWidget* dialog_new;
+
+ /* ask to user if he's sure */
+ dialog_new = gtk_message_dialog_new(GTK_WINDOW(geany_data->main_widgets->window),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK_CANCEL,
+ _("Are you sure you want to delete all languages " \
+ "and restore defaults?\nThis action cannot be undone."));
+ gtk_window_set_title(GTK_WINDOW(dialog_new), "Geany");
+
+ if(gtk_dialog_run(GTK_DIALOG(dialog_new)) == GTK_RESPONSE_OK)
+ {
+ /* OK, reset! */
+ fill_default_languages_list();
+
+ /* clear and refill the GtkListStore with default extensions */
+ gtk_list_store_clear(list_store);
+
+ for(iter_lang = switch_head_impl_get_languages();
+ iter_lang != NULL ; iter_lang = iter_lang->next)
+ add_language(list_store, (Language*)(iter_lang->data));
+ }
+ gtk_widget_destroy(dialog_new);
+
+}
+
+
+/**
* @brief Callback called when a cell has been edited in the configuration
* dialog
* @param renderer field object
@@ -525,11 +580,21 @@ static void
on_configure_cell_edited(GtkCellRendererText* renderer, gchar* path, gchar* text, gpointer data)
{
GtkTreeIter iter;
+ gchar character;
+ gint i;
Column col = (Column)(GPOINTER_TO_INT(data));
log_func();
- /* TODO: check correctness of text inserted */
+ character=text[0];
+ i=1;
+ while (character != '\0') {
+ if ( ! g_ascii_isalpha(character) && character != ',' ) {
+ log_debug("Not-valid char");
+ return; // invalid extension
+ }
+ character=text[i++];
+ }
/* Replace old text with new */
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(list_store), &iter, path);
Modified: codenav/src/goto_file.c
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -202,7 +202,7 @@ create_dialog(GtkWidget **dialog, GtkTreeModel *completion_model)
GtkWidget *vbox;
GtkEntryCompletion *completion;
- *dialog = gtk_dialog_new_with_buttons("Go to File...", GTK_WINDOW(geany->main_widgets->window),
+ *dialog = gtk_dialog_new_with_buttons(_("Go to File..."), GTK_WINDOW(geany->main_widgets->window),
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
Modified: codenav/src/switch_head_impl.c
65 lines changed, 49 insertions(+), 16 deletions(-)
===================================================================
@@ -3,6 +3,7 @@
* part of the "geany-plugins" project.
*
* Copyright 2009 Lionel Fuentes <funto66(at)gmail(dot)com>
+ * Copyright 2014 Federico Reghenzani <federico(dot)dev(at)reghe(dot)net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -51,10 +52,11 @@ menu_item_activate(guint key_id);
/********************** Functions for the feature *********************/
-
-/* ---------------------------------------------------------------------
- * Initialization
- * ---------------------------------------------------------------------
+/**
+ * @brief Initialization
+ * @param void
+ * @return void
+ *
*/
void
switch_head_impl_init(void)
@@ -84,9 +86,12 @@ switch_head_impl_init(void)
}
-/* ---------------------------------------------------------------------
- * Cleanup
- * ---------------------------------------------------------------------
+
+/**
+ * @brief Default plugin cleanup
+ * @param void
+ * @return void
+ *
*/
void
switch_head_impl_cleanup(void)
@@ -97,6 +102,13 @@ switch_head_impl_cleanup(void)
languages_clean();
}
+/**
+ * @brief Free and cleanup all item in languages array, and set languages
+ * to null
+ * @param void
+ * @return void
+ *
+ */
void languages_clean(void)
{
GSList* iter = NULL;
@@ -105,8 +117,8 @@ void languages_clean(void)
{
Language* lang = (Language*)(iter->data);
- g_slist_foreach(lang->head_extensions, (GFunc)(&g_free), NULL); /* free the data */
- g_slist_free(lang->head_extensions); /* free the list */
+ g_slist_foreach(lang->head_extensions, (GFunc)(&g_free), NULL);
+ g_slist_free(lang->head_extensions);
g_slist_foreach(lang->impl_extensions, (GFunc)(&g_free), NULL);
g_slist_free(lang->impl_extensions);
@@ -117,6 +129,13 @@ void languages_clean(void)
languages = NULL;
}
+/**
+ * @brief Fill the languages variable with passed arguments.
+ * @param impl_list list of implementation extensions
+ * @param head_list list of header extensions
+ * @return void
+ *
+ */
void
fill_languages_list(const gchar** impl_list, const gchar** head_list, gsize n)
{
@@ -129,6 +148,10 @@ fill_languages_list(const gchar** impl_list, const gchar** head_list, gsize n)
for ( i=0; i<n; i++ ) {
lang = g_malloc0(sizeof(Language));
+ /* check if current item has no head or impl */
+ if ( strlen(impl_list[i])==0 || strlen(head_list[i])==0 )
+ continue;
+
/* Set language implementation extensions */
splitted_list = g_strsplit(impl_list[i], ",", 0);
for ( j=0; splitted_list[j] != NULL; j++ )
@@ -150,16 +173,18 @@ fill_languages_list(const gchar** impl_list, const gchar** head_list, gsize n)
}
-/* ---------------------------------------------------------------------
- * Initialize the "languages" list to the default known languages
- * ---------------------------------------------------------------------
+/**
+ * @brief Initialize the "languages" list to the default known languages
+ * @param void
+ * @return void
+ *
*/
void
fill_default_languages_list(void)
{
Language* lang = NULL;
- languages = NULL;
+ languages_clean();
/* C/C++ */
lang = g_malloc0(sizeof(Language));
@@ -211,9 +236,11 @@ fill_default_languages_list(void)
}
-/* ---------------------------------------------------------------------
- * Callback when the menu item is clicked.
- * ---------------------------------------------------------------------
+/**
+ * @brief Callback when the menu item is clicked.
+ * @param key_id not used
+ * @return void
+ *
*/
static void
menu_item_activate(guint key_id)
@@ -407,6 +434,12 @@ menu_item_activate(guint key_id)
}
}
+/**
+ * @brief Extern function to get languages.
+ * @param void
+ * @return GSList* languages list
+ *
+ */
GSList* switch_head_impl_get_languages()
{
return languages;
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Plugins-Commits
mailing list