Revision: 515 http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=515&view=rev Author: frlan Date: 2009-02-28 12:04:19 +0000 (Sat, 28 Feb 2009)
Log Message: ----------- GeanyLaTeX: Added a feature for easy inserting environments to document
Modified Paths: -------------- trunk/geanylatex/ChangeLog trunk/geanylatex/src/Makefile.am trunk/geanylatex/src/geanylatex.c trunk/geanylatex/src/geanylatex.h trunk/geanylatex/src/letters.h trunk/wscript
Added Paths: ----------- trunk/geanylatex/src/latexenvironments.c trunk/geanylatex/src/latexenvironments.h
Modified: trunk/geanylatex/ChangeLog =================================================================== --- trunk/geanylatex/ChangeLog 2009-02-28 01:35:41 UTC (rev 514) +++ trunk/geanylatex/ChangeLog 2009-02-28 12:04:19 UTC (rev 515) @@ -1,6 +1,7 @@ 2009-02-28 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
* Don't react on some keybindings in case of no document is open. + * Added a feature for easy inserting environments to document.
2009-02-18 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
Modified: trunk/geanylatex/src/Makefile.am =================================================================== --- trunk/geanylatex/src/Makefile.am 2009-02-28 01:35:41 UTC (rev 514) +++ trunk/geanylatex/src/Makefile.am 2009-02-28 12:04:19 UTC (rev 515) @@ -1,5 +1,5 @@ lib_LTLIBRARIES = geanylatex.la -geanylatex_la_SOURCES = geanylatex.c geanylatex.h datatypes.h latexencodings.c latexencodings.h letters.c letters.h bibtex.h bibtex.c bibtexlabels.c reftex.c reftex.h latexutils.c latexutils.h formatutils.c formatutils.h formatpatterns.c +geanylatex_la_SOURCES = geanylatex.c geanylatex.h datatypes.h latexencodings.c latexencodings.h letters.c letters.h bibtex.h bibtex.c bibtexlabels.c reftex.c reftex.h latexutils.c latexutils.h formatutils.c formatutils.h formatpatterns.c latexenvironments.h latexenvironments.c
geanylatex_la_LDFLAGS = -module -avoid-version geanylatex_la_LIBADD = @GEANY_LIBS@ $(INTLLIBS)
Modified: trunk/geanylatex/src/geanylatex.c =================================================================== --- trunk/geanylatex/src/geanylatex.c 2009-02-28 01:35:41 UTC (rev 514) +++ trunk/geanylatex/src/geanylatex.c 2009-02-28 12:04:19 UTC (rev 515) @@ -45,6 +45,7 @@ GtkWidget *menu_latex_bibtex_submenu = NULL; GtkWidget *menu_latex_format_insert = NULL; GtkWidget *menu_latex_format_insert_submenu = NULL; +GtkWidget *menu_latex_insert_environment = NULL;
/* doing some global stuff */ static GtkWidget *menu_latex_replace_toggle = NULL; @@ -63,6 +64,7 @@ LATEX_INSERT_REF_KB, LATEX_INSERT_NEWLINE, LATEX_TOGGLE_ACTIVE, + LATEX_ENVIRONMENT_INSERT, COUNT_KB };
@@ -298,6 +300,77 @@ }
+static void +glatex_environment_insert_activated (G_GNUC_UNUSED GtkMenuItem * menuitem, + G_GNUC_UNUSED gpointer gdata) +{ + gint env = GPOINTER_TO_INT(gdata); + glatex_insert_environment(glatex_environment_array[env].latex); +} + + +static void +glatex_insert_environment_dialog(G_GNUC_UNUSED GtkMenuItem * menuitem, + G_GNUC_UNUSED gpointer gdata) +{ + GtkWidget *dialog = NULL; + GtkWidget *vbox = NULL; + GtkWidget *label_env = NULL; + GtkWidget *textbox_env = NULL; + GtkWidget *table = NULL; + gint i, max; + + dialog = gtk_dialog_new_with_buttons(_("Insert Environment"), + GTK_WINDOW(geany->main_widgets->window), + GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + NULL); + + vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog)); + gtk_widget_set_name(dialog, "GeanyDialog"); + gtk_box_set_spacing(GTK_BOX(vbox), 10); + + table = gtk_table_new(1, 2, FALSE); + gtk_table_set_col_spacings(GTK_TABLE(table), 6); + gtk_table_set_row_spacings(GTK_TABLE(table), 6); + + label_env = gtk_label_new(_("Environment:")); + textbox_env = gtk_combo_box_entry_new_text(); + + max = glatex_count_menu_entries(glatex_environment_array, + ENVIRONMENT_CAT_DUMMY); + for (i = 0; i < max; i++) + { + gtk_combo_box_append_text(GTK_COMBO_BOX(textbox_env), + glatex_environment_array[i].label); + } + + gtk_misc_set_alignment(GTK_MISC(label_env), 0, 0.5); + + gtk_table_attach_defaults(GTK_TABLE(table), label_env, 0, 1, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), textbox_env, 1, 2, 0, 1); + gtk_container_add(GTK_CONTAINER(vbox), table); + + gtk_widget_show_all(vbox); + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + gchar *env_string = NULL; + + env_string = g_strdup(gtk_combo_box_get_active_text( + GTK_COMBO_BOX(textbox_env))); + + if (env_string != NULL) + { + glatex_insert_environment(env_string); + g_free(env_string); + } + } + + gtk_widget_destroy(dialog); +} + + static void character_create_menu_item(GtkWidget *menu, const gchar *label, gint letter, SubMenuCallback callback) { @@ -315,8 +388,8 @@ * returns 0, if categorie is empty * if gint categorie is -1, function will count every element. * Useful, if there is no need for a categorie check.*/ -static gint -count_menu_entries(SubMenuTemplate *tmp, gint categorie) +gint +glatex_count_menu_entries(SubMenuTemplate *tmp, gint categorie) { /* TODO: Reset max value to stop before it's too late */ gint i; @@ -344,7 +417,7 @@ } } } - return count; + return count + 1; }
static gint @@ -371,7 +444,7 @@ /* Creates sub menus based on information from letter.h */ for (i = 0; i < categories; i++) { - if (count_menu_entries(menu_template, i) > 0) + if (glatex_count_menu_entries(menu_template, i) > 0) { create_sub_menu(base_menu, sub_menu_cat[i][0], sub_menu_cat[i][1], category_name[i].label); @@ -386,7 +459,7 @@ gboolean sorted = category_name[i].sorted; /* To check whether we need to build up a new sub sub menu. */ gint local_count = 0; - gint item_count = count_menu_entries(menu_template, i); + gint item_count = glatex_count_menu_entries(menu_template, i);
if (item_count < 1) continue; @@ -920,6 +993,14 @@ insert_ref_activated(NULL, NULL); }
+ +static void kbref_insert_environment(G_GNUC_UNUSED guint key_id) +{ + if (NULL == document_get_current()) + return; + glatex_insert_environment_dialog(NULL, NULL); +} + static void kbwizard(G_GNUC_UNUSED guint key_id) { wizard_activated(NULL, NULL); @@ -951,7 +1032,11 @@ keybindings_set_item(plugin_key_group, LATEX_TOGGLE_ACTIVE, kblatex_toggle, 0, 0, "latex_toggle_status", _("Turn input replacement on/off"), menu_latex_replace_toggle); + keybindings_set_item(plugin_key_group, LATEX_ENVIRONMENT_INSERT, + kbref_insert_environment, 0, 0, "latex_insert_environment", + _("Run insert environment dialog"), menu_latex_insert_environment);
+ }
void plugin_help() @@ -1012,11 +1097,19 @@
menu_latex_label = gtk_menu_item_new_with_mnemonic(_("Insert _Label")); gtk_tooltips_set_tip(tooltips, menu_latex_label, - _("Helps at inserting labels to a document"), NULL); + _("Helps at inserting labels to a document"), NULL); gtk_container_add(GTK_CONTAINER(menu_latex_menu), menu_latex_label); g_signal_connect((gpointer) menu_latex_label, "activate", G_CALLBACK(insert_label_activated), NULL);
+ menu_latex_insert_environment = gtk_menu_item_new_with_mnemonic( + _("Insert _Environment")); + gtk_tooltips_set_tip(tooltips, menu_latex_insert_environment, + _("Helps at inserting an environment a document"), NULL); + gtk_container_add(GTK_CONTAINER(menu_latex_menu), menu_latex_insert_environment); + g_signal_connect((gpointer) menu_latex_insert_environment, "activate", + G_CALLBACK(glatex_insert_environment_dialog), NULL); + menu_latex_bibtex = gtk_menu_item_new_with_mnemonic(_("BibTeX")); gtk_container_add(GTK_CONTAINER(menu_latex_menu), menu_latex_bibtex);
Modified: trunk/geanylatex/src/geanylatex.h =================================================================== --- trunk/geanylatex/src/geanylatex.h 2009-02-28 01:35:41 UTC (rev 514) +++ trunk/geanylatex/src/geanylatex.h 2009-02-28 12:04:19 UTC (rev 515) @@ -28,7 +28,6 @@
#include "geany.h" #include "support.h" - #include "document.h" #include "editor.h" #include "filetypes.h" @@ -44,6 +43,7 @@ #include "bibtex.h" #include "latexutils.h" #include "reftex.h" +#include "latexenvironments.h" #include "formatutils.h" #include "Scintilla.h" #include "plugindata.h" @@ -110,5 +110,6 @@ #define MAX_MENU_ENTRIES 20
extern void glatex_insert_string(gchar *string, gboolean reset_position); +gint glatex_count_menu_entries(SubMenuTemplate *tmp, gint categorie);
#endif
Added: trunk/geanylatex/src/latexenvironments.c =================================================================== --- trunk/geanylatex/src/latexenvironments.c (rev 0) +++ trunk/geanylatex/src/latexenvironments.c 2009-02-28 12:04:19 UTC (rev 515) @@ -0,0 +1,58 @@ +/* + * latexenvironments.c + * + * Copyright 2009 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#include "latexenvironments.h" + +CategoryName glatex_environment_cat_names[] = { + { ENVIRONMENT_CAT_DUMMY, N_("Environments"), TRUE}, + { 0, NULL, FALSE} +}; + + +SubMenuTemplate glatex_environment_array[] = { + {0, "document", "document"}, + {0, "frame", "frame"}, + {0, "itemize", "itemize"}, + {0, NULL, NULL}, +}; + + +void glatex_insert_environment(gchar *environment) +{ + GeanyDocument *doc = NULL; + + doc = document_get_current(); + + if (doc != NULL && environment != NULL) + { + gint pos = sci_get_current_position(doc->editor->sci); + gint len = strlen(environment); + gchar *tmp = NULL; + + tmp = g_strconcat("\begin{", environment, "}\n\n\end(", + environment, "}\n", NULL); + + sci_insert_text(doc->editor->sci, pos, tmp); + sci_set_current_position(doc->editor->sci, pos + len + 9, TRUE); + + g_free(tmp); + } +}
Copied: trunk/geanylatex/src/latexenvironments.h (from rev 514, trunk/geanylatex/src/letters.h) =================================================================== --- trunk/geanylatex/src/latexenvironments.h (rev 0) +++ trunk/geanylatex/src/latexenvironments.h 2009-02-28 12:04:19 UTC (rev 515) @@ -0,0 +1,38 @@ +/* + * latexenvironments.h + * + * Copyright 2009 Frank Lanitz <frank(at)frank(dot)uvena(dot)de> + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#ifndef LATEXENVIRONMENTS_H +#define LATEXENVIRONMENTS_H + +#include "geanylatex.h" + +enum { + ENVIRONMENT_CAT_DUMMY = 0, + ENVIRONMENT_CAT_MAX +}; + +extern SubMenuTemplate glatex_environment_array[]; + +extern CategoryName glatex_environment_cat_names[]; + +void glatex_insert_environment(gchar *environment); + +#endif
Modified: trunk/geanylatex/src/letters.h =================================================================== --- trunk/geanylatex/src/letters.h 2009-02-28 01:35:41 UTC (rev 514) +++ trunk/geanylatex/src/letters.h 2009-02-28 12:04:19 UTC (rev 515) @@ -35,5 +35,4 @@
gchar *glatex_get_entity(const gchar *letter);
- #endif
Modified: trunk/wscript =================================================================== --- trunk/wscript 2009-02-28 01:35:41 UTC (rev 514) +++ trunk/wscript 2009-02-28 12:04:19 UTC (rev 515) @@ -89,7 +89,8 @@ 'geanylatex/src/letters.c', 'geanylatex/src/bibtex.c', 'geanylatex/src/bibtexlabels.c', 'geanylatex/src/reftex.c', 'geanylatex/src/latexutils.c', 'geanylatex/src/formatutils.c', - 'geanylatex/src/formatpatterns.c'], + 'geanylatex/src/formatpatterns.c', + 'geanylatex/src/latexenvironments.c'], [ 'geanylatex' ], # include dirs '0.4dev'), Plugin('geanylua',
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.