Author: kitone
Date: Sun Jun  7 14:57:24 2015
New Revision: 938

URL: http://svn.gna.org/viewcvs/subtitleeditor?rev=938&view=rev
Log:
Fix bug #23529 : Impossible to change styles of several subtitles at once.

Added:
    trunk/plugins/actions/stylize/
    trunk/plugins/actions/stylize/Makefile.am
    trunk/plugins/actions/stylize/stylize.cc
    trunk/plugins/actions/stylize/stylize.se-plugin.in
Modified:
    trunk/ChangeLog
    trunk/configure.ac
    trunk/plugins/actions/Makefile.am

Modified: trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/subtitleeditor/trunk/ChangeLog?rev=938&r1=937&r2=938&view=diff
==============================================================================
--- trunk/ChangeLog     (original)
+++ trunk/ChangeLog     Sun Jun  7 14:57:24 2015
@@ -1,3 +1,12 @@
+2015-06-07  kitone  <[email protected]>
+
+       * configure.ac:
+       * plugins/actions/Makefile.am:
+       * plugins/actions/stylize/Makefile.am:
+       * plugins/actions/stylize/stylize.cc:
+       * plugins/actions/stylize/stylize.se-plugin.in:
+       Fix bug #23529 : Impossible to change styles of several subtitles at 
once.
+
 2015-06-07  kitone  <[email protected]>
 
        * src/document.h:

Modified: trunk/configure.ac
URL: 
http://svn.gna.org/viewcvs/subtitleeditor/trunk/configure.ac?rev=938&r1=937&r2=938&view=diff
==============================================================================
--- trunk/configure.ac  (original)
+++ trunk/configure.ac  Sun Jun  7 14:57:24 2015
@@ -359,6 +359,7 @@
 plugins/actions/splitsubtitle/Makefile
 plugins/actions/stacksubtitles/Makefile
 plugins/actions/styleeditor/Makefile
+plugins/actions/stylize/Makefile
 plugins/actions/textcorrection/Makefile
 plugins/actions/timemodemanagement/Makefile
 plugins/actions/timingfromplayer/Makefile

Modified: trunk/plugins/actions/Makefile.am
URL: 
http://svn.gna.org/viewcvs/subtitleeditor/trunk/plugins/actions/Makefile.am?rev=938&r1=937&r2=938&view=diff
==============================================================================
--- trunk/plugins/actions/Makefile.am   (original)
+++ trunk/plugins/actions/Makefile.am   Sun Jun  7 14:57:24 2015
@@ -36,6 +36,7 @@
                splitdocument \
                splitsubtitle \
                styleeditor \
+               stylize \
                stacksubtitles \
                textcorrection \
                timemodemanagement \

Added: trunk/plugins/actions/stylize/Makefile.am
URL: 
http://svn.gna.org/viewcvs/subtitleeditor/trunk/plugins/actions/stylize/Makefile.am?rev=938&view=auto
==============================================================================
--- trunk/plugins/actions/stylize/Makefile.am   (added)
+++ trunk/plugins/actions/stylize/Makefile.am   Sun Jun  7 14:57:24 2015
@@ -0,0 +1,25 @@
+pluginlibdir = $(PACKAGE_PLUGIN_LIB_DIR)/actions
+plugindescriptiondir = $(PACKAGE_PLUGIN_DESCRIPTION_DIR)/actions
+
+AM_CPPFLAGS = \
+       -I$(top_srcdir) \
+       -I$(top_srcdir)/src \
+       $(SUBTITLEEDITOR_CFLAGS)
+
+pluginlib_LTLIBRARIES = \
+       libstylize.la
+
+libstylize_la_SOURCES = \
+       stylize.cc
+
+libstylize_la_LDFLAGS = $(PLUGIN_LIBTOOL_FLAGS)
+libstylize_la_LIBADD = $(SUBTITLEEDITOR_LIBS) -L$(top_srcdir)/src 
-lsubtitleeditor
+
+plugindescription_in_files = stylize.se-plugin.in
+plugindescription_DATA = $(plugindescription_in_files:.se-plugin.in=.se-plugin)
+
+@INTLTOOL_SE_PLUGIN_RULE@
+
+EXTRA_DIST = $(plugindescription_in_files)
+
+CLEANFILES = $(plugindescription_DATA) Makefile.am~ *.cc~ *.h~ *.in~

Added: trunk/plugins/actions/stylize/stylize.cc
URL: 
http://svn.gna.org/viewcvs/subtitleeditor/trunk/plugins/actions/stylize/stylize.cc?rev=938&view=auto
==============================================================================
--- trunk/plugins/actions/stylize/stylize.cc    (added)
+++ trunk/plugins/actions/stylize/stylize.cc    Sun Jun  7 14:57:24 2015
@@ -0,0 +1,208 @@
+/*
+ *     subtitleeditor -- a tool to create or edit subtitle
+ *
+ *     http://home.gna.org/subtitleeditor/
+ *     https://gna.org/projects/subtitleeditor/
+ *
+ *     Copyright @ 2005-2015, kitone
+ *
+ *     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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+ 
+#include <extension/action.h>
+#include <i18n.h>
+#include <debug.h>
+#include <documentsystem.h>
+
+/*
+ */
+class StylizeSelectedSubtitlesPlugin : public Action
+{
+public:
+       
+       StylizeSelectedSubtitlesPlugin()
+       {
+               activate();
+               update_ui();
+       }
+
+       ~StylizeSelectedSubtitlesPlugin()
+       {
+               deactivate();
+       }
+
+       /*
+        */
+       void activate()
+       {
+               se_debug(SE_DEBUG_PLUGINS);
+
+               // actions
+               action_group = 
Gtk::ActionGroup::create("StylizeSelectedSubtitlesPlugin");
+
+               action_group->add(
+                               
Gtk::Action::create("stylize-selected-subtitles", _("_Stylize"), _("Stylize the 
selected subtitles text"))); 
+
+               // ui
+               Glib::RefPtr<Gtk::UIManager> ui = get_ui_manager();
+
+               ui->insert_action_group(action_group);
+
+               Glib::ustring submenu = 
+                       "<ui>"
+                       "       <menubar name='menubar'>"
+                       "               <menu name='menu-edit' 
action='menu-edit'>"
+                       "                       <placeholder 
name='text-formatting'>"
+                       "                                       <menu 
name='stylize-selected-subtitles' action='stylize-selected-subtitles'>"
+                       "                                               
<separator/>"
+                       "                                               
<placeholder name='stylize-selected-subtitles-placeholder'/>"
+                       "                                       </menu>"
+                       "                       </placeholder>"
+                       "               </menu>"
+                       "       </menubar>"
+                       "</ui>";
+
+               ui_id = ui->add_ui_from_string(submenu);
+
+               DocumentSystem &ds = DocumentSystem::getInstance();
+
+               ds.signal_current_document_changed().connect(
+                               sigc::mem_fun(*this, 
&StylizeSelectedSubtitlesPlugin::on_current_document_changed));
+
+               ds.signals_document().connect(
+                               sigc::mem_fun(*this, 
&StylizeSelectedSubtitlesPlugin::on_document_signals));
+
+               rebuild_styles_menu();
+       }
+
+       /*
+        */
+       void deactivate()
+       {
+               se_debug(SE_DEBUG_PLUGINS);
+
+               Glib::RefPtr<Gtk::UIManager> ui = get_ui_manager();
+
+               ui->remove_ui(ui_id_styles);
+               ui->remove_action_group(action_group_styles);
+
+               ui->remove_ui(ui_id);
+               ui->remove_action_group(action_group);
+       }
+
+       /*
+        */
+       void update_ui()
+       {
+               se_debug(SE_DEBUG_PLUGINS);
+
+               bool visible = (get_current_document() != NULL);
+
+               
action_group->get_action("stylize-selected-subtitles")->set_sensitive(visible);
+       }
+
+protected:
+
+       /*
+        */
+       void on_document_signals(Document*, const std::string &signal)
+       {
+               if(signal == "style-changed")
+                       rebuild_styles_menu();
+               else if (signal == "style-insered")
+                       rebuild_styles_menu();
+               else if (signal == "style-removed")
+                       rebuild_styles_menu();
+       }
+
+       /*
+        */
+       void on_current_document_changed(Document *doc)
+       {
+               rebuild_styles_menu();
+       }
+
+       /*
+        */
+       void rebuild_styles_menu()
+       {
+               if(action_group_styles)
+               {
+                       get_ui_manager()->remove_ui(ui_id_styles);
+                       
get_ui_manager()->remove_action_group(action_group_styles);
+               }
+
+               action_group_styles = 
Gtk::ActionGroup::create("StylizeSelectedSubtitlesPluginStyles");
+               get_ui_manager()->insert_action_group(action_group_styles);
+
+               ui_id_styles = get_ui_manager()->new_merge_id();
+
+               build_styles_menu();
+
+               get_ui_manager()->ensure_update();      
+       }
+
+       /*
+        */
+       void build_styles_menu()
+       {
+               Document *doc = get_current_document();
+               if(doc == NULL)
+                       return;
+
+               guint count=0;
+               for(Style style = doc->styles().first(); style; ++style, 
++count)
+               {
+                       Glib::ustring action_name = 
Glib::ustring::compose("stylize-selected-subtitles-style-%1", count);
+                       Glib::ustring action_label = style.get("name");
+
+                       action_group_styles->add(
+                                       Gtk::Action::create(action_name, 
action_label),
+                                       sigc::bind(
+                                               sigc::mem_fun(*this, 
&StylizeSelectedSubtitlesPlugin::apply_style_to_selection), style.get("name")));
+
+                       get_ui_manager()->add_ui(
+                                       ui_id_styles,
+                                       
"/menubar/menu-edit/text-formatting/stylize-selected-subtitles/stylize-selected-subtitles-placeholder/",
 
+                                       action_name,
+                                       action_name,
+                                       Gtk::UI_MANAGER_MENUITEM,
+                                       false);
+               }
+       }
+
+       /*
+        */
+       void apply_style_to_selection(const Glib::ustring &name)
+       {
+               Document *doc = get_current_document();
+               std::vector<Subtitle> selection = 
doc->subtitles().get_selection();
+               if(selection.empty())
+                       return;
+
+               doc->start_command(_("Set style to selection"));
+               for(guint i=0; i<selection.size(); ++i)
+                       selection[i].set("style", name);
+               doc->finish_command();
+       }
+
+protected:
+       Gtk::UIManager::ui_merge_id ui_id;
+       Glib::RefPtr<Gtk::ActionGroup> action_group;
+
+       Gtk::UIManager::ui_merge_id ui_id_styles;
+       Glib::RefPtr<Gtk::ActionGroup> action_group_styles;
+};
+
+REGISTER_EXTENSION(StylizeSelectedSubtitlesPlugin)

Added: trunk/plugins/actions/stylize/stylize.se-plugin.in
URL: 
http://svn.gna.org/viewcvs/subtitleeditor/trunk/plugins/actions/stylize/stylize.se-plugin.in?rev=938&view=auto
==============================================================================
--- trunk/plugins/actions/stylize/stylize.se-plugin.in  (added)
+++ trunk/plugins/actions/stylize/stylize.se-plugin.in  Sun Jun  7 14:57:24 2015
@@ -0,0 +1,7 @@
+[SubtitleEditor Extension]
+_Name=Stylize
+_Description=Stylize the selected subtitles text.
+Categorie=action
+Type=module
+Module=stylize
+Authors=kitone <kitone at gna dot org>


_______________________________________________
Subtitleeditor-commits mailing list
[email protected]
https://mail.gna.org/listinfo/subtitleeditor-commits

Reply via email to