Author: jghali
Date: Tue Jul 18 21:03:50 2017
New Revision: 22113

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22113
Log:
#9350: apply character styles from the scripter

Modified:
    trunk/Scribus/doc/en/scripterapi-manobj.html
    trunk/Scribus/doc/fr/scripterapi-manobj.html
    trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.cpp
    trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.h
    trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp

Modified: trunk/Scribus/doc/en/scripterapi-manobj.html
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22113&path=/trunk/Scribus/doc/en/scripterapi-manobj.html
==============================================================================
--- trunk/Scribus/doc/en/scripterapi-manobj.html        (original)
+++ trunk/Scribus/doc/en/scripterapi-manobj.html        Tue Jul 18 21:03:50 2017
@@ -54,6 +54,10 @@
 <p>Scales the group the object "name" belongs to. Values greater than 1 
enlarge the group, values smaller than 1 make the group smaller e.g a value of 
0.5 scales the group to 50 % of its original size, a value of 1.5 scales the 
group to 150 % of its original size.  The value for "factor" must be greater 
than 0. If "name" is not given the currently selected item is used.</p>
 <p>May raise ValueError if an invalid scale factor is passed.</p></dd>
 
+<dt><a 
name="-setCharacterStyle"><strong>setCharacterStyle</strong></a>(...)</dt>
+<dd><code>setCharacterStyle("style" [, "name"])</code>
+<p>Apply the named character "style" to the object named "name". If object 
name is given, style is applied to the current text selection in object "name". 
If no object name is given, style is applied on selected object.</p></dd>
+
 <dt><a 
name="-setScaleImageToFrame"><strong>setScaleImageToFrame</strong></a>(...)</dt>
 <dd><code>setScaleImageToFrame(scaletoframe, proportional=None, 
name=&lt;selection&gt;)</code>
 <p>Sets the scale to frame on the selected or specified image frame to 
`scaletoframe'. If `proportional' is specified, set fixed aspect ratio scaling 
to `proportional'. Both `scaletoframe' and `proportional' are boolean.</p>

Modified: trunk/Scribus/doc/fr/scripterapi-manobj.html
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22113&path=/trunk/Scribus/doc/fr/scripterapi-manobj.html
==============================================================================
--- trunk/Scribus/doc/fr/scripterapi-manobj.html        (original)
+++ trunk/Scribus/doc/fr/scripterapi-manobj.html        Tue Jul 18 21:03:50 2017
@@ -50,6 +50,10 @@
 <p>Peut g&eacute;n&eacute;rer ValueError si le facteur de redimensionnement 
n'est
 pas valide.</p></dd>
 
+<dt><a 
name="-setCharacterStyle"><strong>setCharacterStyle</strong></a>(...)</dt>
+<dd><code><a href="#-setCharacterStyle">setCharacterStyle</a>("style" [, 
"nom"])</code>
+<p>Applique le "style" de caract&egrave;re d&eacute;sign&eacute; &agrave; 
l'objet "nom". Si un nom d'objet est fourni, le style est appliqu&eacute; 
&agrave; la s&eacute;lection de texte courante de l'objet donn&eacute;. Si 
aucun objet n'est fourni, le style est appliqu&eacute; &agrave; l'objet 
s&eacute;lectionn&eacute;.</p></dd>
+
 <dt><a 
name="-setScaleImageToFrame"><strong>setScaleImageToFrame</strong></a>(...)</dt>
 <dd><code><a 
href="#-setScaleImageToFrame">setScaleImageToFrame</a>(redimAuCadre, 
proportionnel=None, nom=&lt;selection&gt;)</code>    <p>&Eacute;tablit le mode 
de redimensionnement par rapport au cadre d'image s&eacute;lectionn&eacute;, ou 
sp&eacute;cifi&eacute; dans 'redimAuCadre'. 
 Si 'proportionnel' est sp&eacute;cifi&eacute;, &eacute;tablit le 
redimensionnement en maintenant des proportions fixes. 'redimAuCadre' et 
'proportionnel' sont bool&eacute;ens.</p>
@@ -57,7 +61,7 @@
 
 <dt><a name="-setStyle"><strong>setStyle</strong></a>(...)</dt>
 <dd><code><a href="#-setStyle">setStyle</a>("style" [, "nom"])</code>
-<p>&Eacute;tablit le "style" d&eacute;sign&eacute; &agrave; l'objet "nom". Si 
un nom d'objet est fourni, le style est appliqu&eacute; &agrave; la 
s&eacute;lection de texte courante de l'objet donn&eacute;. Si aucun objet 
n'est fourni, le style est appliqu&eacute; &agrave; l'objet 
s&eacute;lectionn&eacute;.</p></dd>
+<p>Applique le "style" d&eacute;sign&eacute; &agrave; l'objet "nom". Si un nom 
d'objet est fourni, le style est appliqu&eacute; &agrave; la s&eacute;lection 
de texte courante de l'objet donn&eacute;. Si aucun objet n'est fourni, le 
style est appliqu&eacute; &agrave; l'objet s&eacute;lectionn&eacute;.</p></dd>
 
 <dt><a name="-sizeObject"><strong>sizeObject</strong></a>(...)</dt>
 <dd><code><a href="#-sizeObject">sizeObject</a>(largeur, hauteur [, 
"nom"])</code>

Modified: trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22113&path=/trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.cpp       (original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.cpp       Tue Jul 18 
21:03:50 2017
@@ -622,10 +622,23 @@
                // for current item only
                if (ScCore->primaryMainWindow()->doc->m_Selection->count() == 0 
|| (strlen(name) > 0))
                {
+                       // Store text selection as clearing object selection
+                       // will also clear text selection
+                       int selectionStart = -1;
+                       int selectionLength = 
item->itemText.lengthOfSelection();
+                       if (selectionLength > 0)
+                               selectionStart = 
item->itemText.startOfSelection();
                        // quick hack to always apply on the right frame - pv
                        ScCore->primaryMainWindow()->view->Deselect(true);
                        //CB I dont think we need to draw here. Its faster if 
we dont.
                        ScCore->primaryMainWindow()->view->SelectItem(item, 
false);
+                       // Restore stext selection if necessary
+                       if (selectionStart >= 0)
+                       {
+                               item->itemText.deselectAll();
+                               item->itemText.select(selectionStart, 
selectionLength);
+                               item->HasSel = true;
+                       }
                        // Now apply the style.
                        int mode = ScCore->primaryMainWindow()->doc->appMode;
                        ScCore->primaryMainWindow()->doc->appMode = modeEdit;
@@ -651,6 +664,92 @@
 }
 
 /*
+* Jean Ghali, 2017-07-18
+* Apply the named character style to the currently selected object.
+* pv, 2004-09-13, optionaly param objectName + "check the page" stuff
+*/
+PyObject *scribus_setcharstyle(PyObject* /* self */, PyObject* args)
+{
+       char *style = const_cast<char*>("");
+       char *name = const_cast<char*>("");
+       if (!PyArg_ParseTuple(args, "es|es", "utf-8", &style, "utf-8", &name))
+               return NULL;
+       if (!checkHaveDocument())
+               return NULL;
+       PageItem *item = GetUniqueItem(QString::fromUtf8(name));
+       if (item == NULL)
+               return NULL;
+       if ((item->itemType() == PageItem::TextFrame) || (item->itemType() == 
PageItem::PathText))
+       {
+               // First, find the style number associated with the requested 
style
+               // by scanning through the styles looking for the name. If
+               // we can't find it, raise PyExc_Exception.
+               // FIXME: Should use a more specific exception.
+               bool found = false;
+               QString charStyleName = QString::fromUtf8(style);
+               // We start at zero here because it's OK to match an internal 
name
+               ScribusDoc*  currentDoc = ScCore->primaryMainWindow()->doc;
+               ScribusView* currentView = ScCore->primaryMainWindow()->view;
+               ScribusMainWindow* currentWin = ScCore->primaryMainWindow();
+               const StyleSet<CharStyle> &docCharStyles = 
currentDoc->charStyles();
+               int docCharacterStylesCount = docCharStyles.count();
+               for (int i = 0; i < docCharacterStylesCount; ++i)
+               {
+                       if (docCharStyles[i].name() == charStyleName) {
+                               found = true;
+                               break;
+                       }
+               }
+               if (!found) {
+                       // whoops, the user specified an invalid style, 
complain loudly.
+                       PyErr_SetString(NotFoundError, QObject::tr("Character 
style not found.", "python error").toLocal8Bit().constData());
+                       return NULL;
+               }
+               // for current item only
+               if (currentDoc->m_Selection->count() == 0 || (strlen(name) > 0))
+               {
+                       // Store text selection as clearing object selection
+                       // will also clear text selection
+                       int selectionStart = -1;
+                       int selectionLength = 
item->itemText.lengthOfSelection();
+                       if (selectionLength > 0)
+                               selectionStart = 
item->itemText.startOfSelection();
+                       // quick hack to always apply on the right frame - pv
+                       currentView->Deselect(true);
+                       //CB I dont think we need to draw here. Its faster if 
we dont.
+                       currentView->SelectItem(item, false);
+                       // Restore stext selection if necessary
+                       if (selectionStart >= 0)
+                       {
+                               item->itemText.deselectAll();
+                               item->itemText.select(selectionStart, 
selectionLength);
+                               item->HasSel = true;
+                       }       
+                       // Now apply the style.
+                       int mode = ScCore->primaryMainWindow()->doc->appMode;
+                       currentDoc->appMode = modeEdit;
+                       currentWin->setNewCharStyle(charStyleName);
+                       currentDoc->appMode = mode;
+               }
+               else // for multiple selection
+               {
+                       int mode = currentDoc->appMode;
+                       currentDoc->appMode = modeNormal;
+                       
currentDoc->itemSelection_SetNamedCharStyle(charStyleName);
+                       currentDoc->appMode = mode;
+               }
+       }
+       else
+       {
+               PyErr_SetString(WrongFrameTypeError, QObject::tr("Cannot set 
character style on a non-text frame.", "python 
error").toLocal8Bit().constData());
+               return NULL;
+       }
+       //      Py_INCREF(Py_None);
+       //      return Py_None;
+       Py_RETURN_NONE;
+}
+
+/*
  * Craig Ringer, 2004-09-09
  * Enumerate all known paragraph styles
  */

Modified: trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22113&path=/trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.h
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.h (original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/cmdobj.h Tue Jul 18 21:03:50 2017
@@ -250,6 +250,19 @@
 PyObject *scribus_setstyle(PyObject * /*self*/, PyObject* args);
 
 /*! docstring */
+PyDoc_STRVAR(scribus_setcharstyle__doc__,
+       QT_TR_NOOP("setCharacterStyle(\"style\" [, \"name\"])\n\
+\n\
+Apply the named character \"style\" to the object named \"name\". If object 
name is\n\
+given, style is applied to the current text selection in object \"name\".\n\
+If no object name is given, style is applied on selected object.\n\
+"));
+/**
+Apply the named character style to the currently selected object.
+*/
+PyObject *scribus_setcharstyle(PyObject * /*self*/, PyObject* args);
+
+/*! docstring */
 PyDoc_STRVAR(scribus_getstylenames__doc__,
 QT_TR_NOOP("getAllStyles() -> list\n\
 \n\

Modified: trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22113&path=/trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp (original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp Tue Jul 18 
21:03:50 2017
@@ -531,6 +531,7 @@
        {const_cast<char*>("dehyphenateText"), scribus_dehyphenatetext, 
METH_VARARGS, tr(scribus_dehyphenatetext__doc__)},
        {const_cast<char*>("setScaleImageToFrame"), 
(PyCFunction)scribus_setscaleimagetoframe, METH_KEYWORDS, 
tr(scribus_setscaleimagetoframe__doc__)},
        {const_cast<char*>("setStyle"), scribus_setstyle, METH_VARARGS, 
tr(scribus_setstyle__doc__)},
+       {const_cast<char*>("setCharacterStyle"), scribus_setcharstyle, 
METH_VARARGS, tr(scribus_setcharstyle__doc__) },
        {const_cast<char*>("setTableStyle"), scribus_settablestyle, 
METH_VARARGS, tr(scribus_settablestyle__doc__)},
        {const_cast<char*>("setTableLeftBorder"), scribus_settableleftborder, 
METH_VARARGS, tr(scribus_settableleftborder__doc__)},
        {const_cast<char*>("setTableRightBorder"), scribus_settablerightborder, 
METH_VARARGS, tr(scribus_settablerightborder__doc__)},


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to