gtranslator r3539 - in trunk: . plugins/insert-tags
- From: icq svn gnome org
- To: svn-commits-list gnome org
- Subject: gtranslator r3539 - in trunk: . plugins/insert-tags
- Date: Sun, 30 Mar 2008 14:51:43 +0100 (BST)
Author: icq
Date: Sun Mar 30 14:51:43 2008
New Revision: 3539
URL: http://svn.gnome.org/viewvc/gtranslator?rev=3539&view=rev
Log:
2008-03-30 Ignacio Casal Quinteiro <nacho resa gmail com>
* plugins/insert-tags/insert-tags-plugin.c:
Now tags are managed individually.
Modified:
trunk/ChangeLog
trunk/plugins/insert-tags/insert-tags-plugin.c
Modified: trunk/plugins/insert-tags/insert-tags-plugin.c
==============================================================================
--- trunk/plugins/insert-tags/insert-tags-plugin.c (original)
+++ trunk/plugins/insert-tags/insert-tags-plugin.c Sun Mar 30 14:51:43 2008
@@ -26,14 +26,47 @@
#include "window.h"
#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
#include <string.h>
#define WINDOW_DATA_KEY "GtranslatorInsertTagsPluginWindowData"
GTR_PLUGIN_REGISTER_TYPE(GtranslatorInsertTagsPlugin, gtranslator_insert_tags_plugin)
+static GSList *tags = NULL;
+static gint tag_position;
+
+static void
+on_next_tag_activated (GtkAction *action,
+ GtranslatorWindow *window)
+{
+ GtranslatorView *view;
+ GtkTextBuffer *buffer;
+ GSList *tag;
+
+ if (tag_position >= g_slist_length (tags))
+ tag_position = 0;
+
+ tag = g_slist_nth (tags, tag_position);
+
+ view = gtranslator_window_get_active_view (window);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ gtk_text_buffer_begin_user_action (buffer);
+ gtk_text_buffer_insert_at_cursor (buffer,
+ (const gchar *)tag->data,
+ strlen (tag->data));
+ gtk_text_buffer_end_user_action (buffer);
+
+ tag_position++;
+}
+
static const GtkActionEntry action_entries[] =
{
+ { "NextTag", NULL, N_("_Next Tag"), "<control><shift>I",
+ N_("Insert the next tag of the message"),
+ G_CALLBACK (on_next_tag_activated)},
{ "InsertTags", NULL, N_("_Insert Tags") }
};
@@ -42,6 +75,7 @@
" <menubar name='MainMenu'>"
" <menu name='EditMenu' action='Edit'>"
" <placeholder name='EditOps_1'>"
+" <menuitem name='EditNextTag' action='NextTag' />"
" <menuitem name='EditInsertTags' action='InsertTags' />"
" </placeholder>"
" </menu>"
@@ -76,6 +110,12 @@
gtk_action_set_sensitive (action,
(view != NULL) &&
gtk_text_view_get_editable (view));
+
+ action = gtk_action_group_get_action (data->action_group,
+ "NextTag");
+ gtk_action_set_sensitive (action,
+ (view != NULL) &&
+ gtk_text_view_get_editable (view));
}
static void
@@ -95,58 +135,41 @@
{
const gchar *name;
GtkWidget *label;
- gchar **str;
GtranslatorView *view;
GtkTextBuffer *buffer;
- GtkTextIter iter;
label = gtk_bin_get_child (GTK_BIN (item));
name = gtk_label_get_text (GTK_LABEL (label));
- str = g_strsplit (name, "|", 2);
-
view = gtranslator_window_get_active_view (window);
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
gtk_text_buffer_begin_user_action (buffer);
gtk_text_buffer_insert_at_cursor (buffer,
- str[0], strlen (str[0]));
-
- gtk_text_buffer_insert_at_cursor (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)),
- str[1], strlen (str[1]));
+ name, strlen (name));
gtk_text_buffer_end_user_action (buffer);
-
- gtk_text_buffer_get_iter_at_mark (buffer, &iter,
- gtk_text_buffer_get_insert (buffer));
-
- gtk_text_iter_backward_cursor_positions (&iter, strlen (str[1]));
- gtk_text_buffer_place_cursor (buffer, &iter);
-
- g_strfreev (str);
}
static void
-parse_arrays (GSList *start,
- GSList *close,
- GtranslatorWindow *window)
+parse_list (GtranslatorWindow *window)
{
GtkUIManager *manager;
GtkWidget *insert_tags;
GtkWidget *menuitem;
GtkWidget *menu;
- static guint i = 1;
+ GSList *l = tags;
+ guint i = 1;
manager = gtranslator_window_get_ui_manager (window);
insert_tags = gtk_ui_manager_get_widget (manager,
- "/MainMenu/EditMenu/EditOps_1/EditInsertTags");
+ "/MainMenu/EditMenu/EditOps_1/EditInsertTags");
- if (start == NULL || close == NULL)
+ if (tags == NULL)
{
gtk_menu_item_set_submenu (GTK_MENU_ITEM (insert_tags), NULL);
gtk_widget_set_sensitive (insert_tags, FALSE);
- i = 1;
return;
}
@@ -156,32 +179,26 @@
gtk_menu_set_accel_group (GTK_MENU (menu),
gtk_ui_manager_get_accel_group(manager));
- close = g_slist_reverse (close);
-
do{
- gchar *name, *accel_path;
-
- if (!close)
- return;
+ gchar *accel_path;
- name = g_strdup_printf ("%s|%s", (gchar *)start->data, (gchar *)close->data);
- menuitem = gtk_menu_item_new_with_label (name);
+ menuitem = gtk_menu_item_new_with_label ((const gchar *)l->data);
gtk_widget_show (menuitem);
- accel_path = g_strdup_printf ("<Gtranslator-sheet>/Edit/_Insert Tags/%s", name);
+ accel_path = g_strdup_printf ("<Gtranslator-sheet>/Edit/_Insert Tags/%s",
+ (const gchar *)tags->data);
gtk_menu_item_set_accel_path (GTK_MENU_ITEM (menuitem), accel_path);
gtk_accel_map_add_entry (accel_path, i+48, GDK_CONTROL_MASK);
g_free (accel_path);
- g_free (name);
g_signal_connect (menuitem, "activate",
G_CALLBACK (on_menuitem_activated), window);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
i++;
- }while ((start = g_slist_next (start)));
+ }while ((l = g_slist_next (l)));
gtk_menu_item_set_submenu (GTK_MENU_ITEM (insert_tags), menu);
}
@@ -194,40 +211,38 @@
const gchar *msgid;
GRegex *regex;
GMatchInfo *match_info;
- GSList *start = NULL, *close = NULL;
gchar *word;
- msgid = gtranslator_msg_get_msgid (msg);
+ if (tags != NULL)
+ {
+ g_slist_foreach (tags, (GFunc)g_free, NULL);
+ g_slist_free (tags);
+ tags = NULL;
+ }
/*
- * Start regular expression like "<b>"
+ * If we show another message we have to restart the index
+ * of the tags
*/
- regex = g_regex_new ("<[a-zA-Z=\" ]+>", 0, 0, NULL);
- g_regex_match (regex, msgid, 0, &match_info);
- while (g_match_info_matches (match_info))
- {
- word = g_match_info_fetch (match_info, 0);
- start = g_slist_append (start, word);
- g_match_info_next (match_info, NULL);
- }
- g_match_info_free (match_info);
- g_regex_unref (regex);
+ tag_position = 0;
+
+ msgid = gtranslator_msg_get_msgid (msg);
/*
- * Close regular expression like "</b>"
+ * Regular expression
*/
- regex = g_regex_new ("</[a-zA-Z ]+>", 0, 0, NULL);
+ regex = g_regex_new ("<[a-zA-Z=\"/ ]+>", 0, 0, NULL);
g_regex_match (regex, msgid, 0, &match_info);
while (g_match_info_matches (match_info))
{
word = g_match_info_fetch (match_info, 0);
- close = g_slist_append (close, word);
+ tags = g_slist_append (tags, word);
g_match_info_next (match_info, NULL);
}
g_match_info_free (match_info);
g_regex_unref (regex);
- parse_arrays (start, close, window);
+ parse_list (window);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]