Author: jghali
Date: Sun Nov 18 14:57:45 2018
New Revision: 22772

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22772
Log:
#15483: add setJSActionScript and getJSActionScript python functions <dockatt>

Modified:
    trunk/Scribus/doc/en/scripterapi-pdfannotations.html
    trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.cpp
    trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.h
    trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp

Modified: trunk/Scribus/doc/en/scripterapi-pdfannotations.html
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22772&path=/trunk/Scribus/doc/en/scripterapi-pdfannotations.html
==============================================================================
--- trunk/Scribus/doc/en/scripterapi-pdfannotations.html        (original)
+++ trunk/Scribus/doc/en/scripterapi-pdfannotations.html        Sun Nov 18 
14:57:45 2018
@@ -14,9 +14,45 @@
 
 <dt><a 
name="-createPdfAnnotation"><strong>createPdfAnnotation</strong></a>(...)</dt>
 <dd><code>createPdfAnnotation(type, x, y, w, h, ["name"]) -&gt; string</code>
-<p>Creates a new PDF Annotation frame. "type" refers to the kind of PDF 
annotation with the following key: (0 PDFBUTTON, 1 PDFRADIOBUTTON, 2 
PDFTEXTFIELD,
-3 PDFCHECKBOX, 4 PDFCOMBOBOX, 5 PDFLISTBOX, 6 PDFTEXTANNOTATION, 7 
PDFLINKANNOTATION, 8 PDF3DANNOTATION). <strong>x</strong> and 
<strong>y</strong> are the upper left coordinates for the frame, having 
<strong>w</strong> width and <strong>h</strong> height. If "name" is not given 
Scribus will create one for you.</p>
+<p>Creates a new PDF Annotation frame. "type" refers to the kind of PDF 
annotation with the following key: 
+       <ul style="list-style-type:none">
+               <li>0 - PDFBUTTON</li>
+               <li>1 - PDFRADIOBUTTON</li>
+               <li>2 - PDFTEXTFIELD</li>
+               <li>3 - PDFCHECKBOX</li>
+               <li>4 - PDFCOMBOBOX</li>
+               <li>5 - PDFLISTBOX</li>
+               <li>6 - PDFTEXTANNOTATION</li>
+               <li>7 - PDFLINKANNOTATION</li>
+               <li>8 - PDF3DANNOTATION.</li>
+       </ul>
+</p>
+<p><strong>x</strong> and <strong>y</strong> are the upper left coordinates 
for the frame, having <strong>w</strong> width and <strong>h</strong> height. 
If "name" is not given Scribus will create one for you.</p>
 <p>On systems without OSG installed a runtime error will be raised. May raise 
<a href="scripterapi.html#NameExistsError">NameExistsError</a> if you 
explicitly pass a name that's already used. </p></dd>
+
+<dt><a 
name="-getJSActionScript"><strong>getJSActionScript</strong></a>(...)</dt>
+<dd><code>getJSActionScript(which, ["name"]) -&gt; string</code>
+<p>Gets the JavaScript action script for a particular event</p>
+<p>This functions accepts following arguments:
+       <ul>
+               <li><strong>which</strong> is an integer in range 0-9 
describing the kind of event:</li>
+               <ul style="list-style-type:none">
+                       <li>0 - Mouse Up</li>
+                       <li>1 - Mouse Down</li>
+                       <li>2 - Mouse Enter</li>
+                       <li>3 - Mouse Exit</li>
+                       <li>4 - Focus In</li>
+                       <li>5 - Focus Out</li>
+                       <li>6 - Selection Change</li>
+                       <li>7 - Field Format</li>
+                       <li>8 - Field Validate</li>
+                       <li>9 - Field Calculate</li>
+               </ul>
+               <li><strong>name</strong> is the object name. If "name" is not 
provided, the currently selected item will be used.</li>
+       </ul>
+</p>
+<p>Returns a string if object's action type is Javascript, NONE otherwise.</p>
+<p>Page item must be an annotation or an error will be raised. May raise <a 
href="scripterapi.html#NameExistsError">NameExistsError</a> if you explicitly 
pass a name that doesn't exist.</p></dd>
 
 <dt><a name="-isAnnotated"><strong>isAnnotated</strong></a>(...)</dt>
 <dd><code>isAnnotated(["name"], ["deannotate=False"]) -&gt; tuple</code>
@@ -28,6 +64,32 @@
 <p>Converts a text frame to a PDF link annotation to a file. 
<strong>path</strong> is the absolute or relative path to the file. 
<strong>page</strong> is the page in the document to link to, and 
<strong>x</strong> and <strong>y</strong> are the page coordinates. The 
currently selected frame will be converted unless another name is given. The 
default value for <strong>absolute</strong> is True, which means the path is 
absolute; if set to False the path is relative. </p>
 <p>May raise <a href="scripterapi.html#NameExistsError">NameExistsError</a> if 
you explicitly pass a name that doesn't exist. May raise <a 
href="scripterapi.html#WrongFrameTypeError">WrongFrameTypeError</a> if object 
is not a text frame.</p></dd>
 
+<dt><a 
name="-setJSActionScript"><strong>setJSActionScript</strong></a>(...)</dt>
+<dd><code>setJSActionScript(which, script, ["name"]) -&gt; string</code>
+<p>Sets the JavaScript action for a particular event and returns NONE.</p>
+<p>Also sets the annotation's action to JavaScript.</p>
+<p>This functions accepts following arguments:
+       <ul>
+               <li><strong>which</strong> is an integer in range 0-9 
describing the kind of event:</li>
+               <ul style="list-style-type:none">
+                       <li>0 - Mouse Up</li>
+                       <li>1 - Mouse Down</li>
+                       <li>2 - Mouse Enter</li>
+                       <li>3 - Mouse Exit</li>
+                       <li>4 - Focus In</li>
+                       <li>5 - Focus Out</li>
+                       <li>6 - Selection Change</li>
+                       <li>7 - Field Format</li>
+                       <li>8 - Field Validate</li>
+                       <li>9 - Field Calculate</li>
+               </ul>
+               <li><strong>script</strong> is the JavaScript to set to the 
action</li>
+               <li><strong>name</strong> is the object name. If "name" is not 
provided, the currently selected item will be used.</li>
+       </ul>
+</p>
+<p>Page item must be an annotation or an error will be raised. May raise <a 
href="scripterapi.html#NameExistsError">NameExistsError</a> if you explicitly 
pass a name that doesn't exist.</p></dd>
+
+
 <dt><a 
name="-setLinkAnnotation"><strong>setLinkAnnotation</strong></a>(...)</dt>
 <dd><code>setLinkAnnotation(page, x, y, ["name"])</code>
 <p>Converts a text frame to a PDF link annotation to a page in the current 
document. <strong>page</strong> is the page in the document to link to, and 
must be in the range of pages, starting with 1. <strong>x</strong> and 
<strong>y</strong> are the page coordinates. The currently selected frame will 
be converted unless another name is given.</p>
@@ -35,7 +97,24 @@
 
 <dt><a 
name="-setTextAnnotation"><strong>setTextAnnotation</strong></a>(...)</dt>
 <dd><code>setTextAnnotation(icon, isopen, ["name"])</code>
-<p>Converts a text frame to a text annotation. <strong>icon</strong> is a 
number 0-8 with the following key: 0 = Note, 1 = Comment, 2 = Key, 3 = Help, 4 
= NewParagraph, 5 = Paragraph, 6 = Insert,7 = Cross, 8 = Circle. 
<strong>isopen</strong> is either True or False. The currently selected frame 
will be converted unless another name is given.</p>
+<p>Converts a text frame to a text annotation. Function accepts following 
arguments:
+       <ul>
+               <li><strong>icon</strong> is a number in range 0-8 with the 
following key:</li>
+               <ul style="list-style-type:none">
+                       <li>0 = Note</li>
+                       <li>1 = Comment</li>
+                       <li>2 = Key</li>
+                       <li>3 = Help</li>
+                       <li>4 = NewParagraph</li>
+                       <li>5 = Paragraph</li>
+                       <li>6 = Insert</li>
+                       <li>7 = Cross</li>
+                       <li>8 = Circle</li>
+               </ul>
+               <li><strong>isopen</strong> is either True or False.</li>
+       </ul>
+</p>
+<p>The currently selected frame will be converted unless another name is 
given.</p>
 <p>May raise <a href="scripterapi.html#NameExistsError">NameExistsError</a> if 
you explicitly pass a name that doesn't exist. May raise <a 
href="scripterapi.html#WrongFrameTypeError">WrongFrameTypeError</a> if object 
is not a text frame.</p></dd>
 
 <dt><a name="-setURIAnnotation"><strong>setURIAnnotation</strong></a>(...)</dt>

Modified: trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22772&path=/trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.cpp       
(original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.cpp       Sun Nov 
18 14:57:45 2018
@@ -15,6 +15,163 @@
 static void setactioncoords(Annotation &a, int x, int y);
 static bool testPageItem(PageItem *i);
 static void add_text_to_dict(PyObject *drv, PageItem *i);
+
+PyObject *scribus_setjsactionscript(PyObject * /*self*/, PyObject* args)
+{
+       /*
+               Java_ReleaseButton      = 0,
+               Java_PressButton        = 1,
+               Java_EnterWidget        = 2,
+               Java_LeaveWidget        = 3,
+               Java_FocusIn            = 4,
+               Java_FocusOut           = 5,
+               Java_SelectionChg       = 6,
+               Java_FieldFormat        = 7,
+               Java_FieldValidate      = 8,
+               Java_FieldCalculate     = 9
+       */
+       int action;
+       char *script = const_cast<char*>("");
+       char *name = const_cast<char*>("");
+
+       if (!PyArg_ParseTuple(args, "is|es",&action,&script,"utf-8", &name))
+               return nullptr;
+
+       if (action < 0 || action > 9)
+       {
+               QString qnum = QString("%1").arg(action);
+               PyErr_SetString(PyExc_RuntimeError,
+                       QObject::tr("Action must be an integer in range 0-9 " + 
qnum.toUtf8(), "python error").toLocal8Bit().constData());
+               return nullptr;
+       }
+
+       if (!checkHaveDocument())
+               return nullptr;
+
+       PageItem *item = GetUniqueItem(QString::fromUtf8(name));
+       if (item == nullptr)
+               return nullptr;
+
+       if (item->isAnnotation() == false)
+       {
+               PyErr_SetString(PyExc_RuntimeError,
+                       QObject::tr("Page item must be an annotation", "python 
error").toLocal8Bit().constData());
+               return nullptr;
+       }
+       
+       Annotation &annotation = item->annotation();
+       annotation.setActionType(Annotation::Action_JavaScript);
+       QString javascript = QString::fromUtf8(script); 
+
+       switch (action)
+       {
+       case Annotation::Java_ReleaseButton:
+               annotation.setAction(javascript);
+               break;
+       case Annotation::Java_PressButton:
+               annotation.setD_act(javascript);
+               break;
+       case Annotation::Java_EnterWidget:
+               annotation.setE_act(javascript);
+               break;
+       case Annotation::Java_LeaveWidget:
+               annotation.setX_act(javascript);
+               break;
+       case Annotation::Java_FocusIn:
+               annotation.setFo_act(javascript);
+               break;
+       case Annotation::Java_FocusOut:
+               annotation.setBl_act(javascript);
+               break;
+       case Annotation::Java_SelectionChg:
+               annotation.setK_act(javascript);
+               break;
+       case Annotation::Java_FieldFormat:
+               annotation.setF_act(javascript);
+               break;
+       case Annotation::Java_FieldValidate:
+               annotation.setV_act(javascript);
+               break;
+       case Annotation::Java_FieldCalculate:
+               annotation.setC_act(javascript);
+               break;
+       }
+
+       Py_RETURN_NONE;
+}
+
+PyObject *scribus_getjsactionscript(PyObject * /*self*/, PyObject* args)
+{
+       int action;
+       char *name = const_cast<char*>("");
+
+       if (!PyArg_ParseTuple(args, "i|es",&action,"utf-8", &name))
+               return nullptr;
+
+       if (action < 0 || action > 9)
+       {
+               QString qnum = QString("%1").arg(action);
+               PyErr_SetString(PyExc_RuntimeError,
+                       QObject::tr("Action must be be 0-9 " + qnum.toUtf8(), 
"python error").toLocal8Bit().constData());
+               return nullptr;
+       }
+
+       if (!checkHaveDocument())
+               return nullptr;
+
+       PageItem *item = GetUniqueItem(QString::fromUtf8(name));
+       if (item == nullptr)
+               return nullptr;
+
+       if (item->isAnnotation() == false)
+       {
+               PyErr_SetString(PyExc_RuntimeError,
+                       QObject::tr("Page item must be an annotation", "python 
error").toLocal8Bit().constData());
+               return nullptr;
+       }
+
+    Annotation &annotation = item->annotation();
+       if (annotation.ActionType() != Annotation::Action_JavaScript)
+               Py_RETURN_NONE;
+
+       QString rv;
+       switch (action)
+       {
+       case Annotation::Java_ReleaseButton:
+               rv = annotation.Action();
+               break;
+       case Annotation::Java_PressButton:
+               rv = annotation.D_act();
+               break;
+       case Annotation::Java_EnterWidget:
+               rv = annotation.E_act();
+               break;
+       case Annotation::Java_LeaveWidget:
+               rv = annotation.X_act();
+               break;
+       case Annotation::Java_FocusIn:
+               rv = annotation.Fo_act();
+               break;
+       case Annotation::Java_FocusOut:
+               rv = annotation.Bl_act();
+               break;
+       case Annotation::Java_SelectionChg:
+               rv = annotation.K_act();
+               break;
+       case Annotation::Java_FieldFormat:
+               rv = annotation.F_act();
+               break;
+       case Annotation::Java_FieldValidate:
+               rv = annotation.V_act();
+               break;
+       case Annotation::Java_FieldCalculate:
+               rv = annotation.C_act();
+               break;
+       }
+
+       PyObject *rstr = PyString_FromString(rv.toUtf8());
+       return rstr;
+}
 
 PyObject *scribus_isannotated(PyObject * /*self*/, PyObject* args, PyObject 
*keywds)
 {
@@ -446,7 +603,9 @@
       << scribus_setfileannotation__doc__
       << scribus_seturiannotation__doc__
       << scribus_settextannotation__doc__
-      << scribus_createpdfannotation__doc__;
+      << scribus_createpdfannotation__doc__
+      << scribus_setjsactionscript__doc__
+      << scribus_getjsactionscript__doc__;
 }
 
 
@@ -484,8 +643,8 @@
 {
        if (i->isBookmark)
        {
-         i->isBookmark = false;
-         ScCore->primaryMainWindow()->DelBookMark(i);
+               i->isBookmark = false;
+               ScCore->primaryMainWindow()->DelBookMark(i);
        }
        i->setIsAnnotation(true);
 }

Modified: trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22772&path=/trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.h
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.h (original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/cmdannotations.h Sun Nov 18 
14:57:45 2018
@@ -157,4 +157,43 @@
 /*!creates a pdf annotation and a text frame.*/
 PyObject *scribus_createpdfannotation(PyObject * /*self*/, PyObject* args);
 
+/*! docstring */
+PyDoc_STRVAR(scribus_getjsactionscript__doc__,
+       QT_TR_NOOP("getJSActionScript(which,[\"name\"])\n\
+\n\
+Gets the JavaScript action for a particular event\n\
+\"which\" is one of the following:\n\
+(0 Mouse Up, 1 Mouse Down, 2 Mouse Enter,\n\
+3 Mouse Exit, 4 Focus In, 5 Focus Out,\n\
+6 Selection Change, 7 Field Format,\n\
+8 Field Validate, 9 Field Calculate)\n\
+\"name\" uses the currently selected item if not given.\n\
+Page item must be an annotation or an error will be raised.\n\
+Returns:\n\
+Returns a string if object's action type is Javascript, \n\
+NONE otherwise.\n\
+"));
+/*!gets the JavaScript for an annotation action.*/
+PyObject *scribus_getjsactionscript(PyObject * /*self*/, PyObject* args);
+
+/*! docstring */
+PyDoc_STRVAR(scribus_setjsactionscript__doc__,
+ QT_TR_NOOP("setJSActionScript(which,script,[\"name\"])\n\
+\n\
+Sets the JavaScript action for a particular event.\n\
+Also sets the annotation's action to JavaScript.\n\
+\"which\" is one of the following:\n\
+(0 Mouse Up, 1 Mouse Down, 2 Mouse Enter,\n\
+3 Mouse Exit, 4 Focus In, 5 Focus Out,\n\
+6 Selection Change, 7 Field Format,\n\
+8 Field Validate, 9 Field Calculate)\n\
+\"script\" is the JavaScript set to the action.\n\
+\"name\" uses the currently selected item if not given.\n\
+Page item must be an annotation or an error will be raised.\n\
+Returns:\n\
+None\n\
+"));
+/*!sets the JavaScript on an annotation action.*/
+PyObject *scribus_setjsactionscript(PyObject * /*self*/, PyObject* args);
+
 #endif

Modified: trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=22772&path=/trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp (original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp Sun Nov 18 
14:57:45 2018
@@ -595,6 +595,8 @@
        {const_cast<char*>("setTextAnnotation"), scribus_settextannotation, 
METH_VARARGS,tr(scribus_settextannotation__doc__)},
        {const_cast<char*>("createPdfAnnotation"), scribus_createpdfannotation, 
METH_VARARGS,tr(scribus_createpdfannotation__doc__)},
        {const_cast<char*>("isAnnotated"),(PyCFunction)scribus_isannotated, 
METH_VARARGS|METH_KEYWORDS,tr(scribus_isannotated__doc__)},
+       {const_cast<char*>("setJSActionScript"), scribus_setjsactionscript, 
METH_VARARGS,tr(scribus_setjsactionscript__doc__)},
+       {const_cast<char*>("getJSActionScript"), scribus_getjsactionscript, 
METH_VARARGS,tr(scribus_getjsactionscript__doc__)},
        {nullptr, (PyCFunction)(nullptr), 0, nullptr} /* sentinel */
 };
 


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

Reply via email to