View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0015483 | Scribus | Scripter | public | 2018-11-13 20:18 | 2019-06-04 20:56 |
Reporter | dockattt | Assigned To | jghali | ||
Priority | normal | Severity | feature | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Product Version | 1.5.4.svn | ||||
Fixed in Version | 1.5.5.svn | ||||
Summary | 0015483: add setJSActionScript and getJSActionScript python functions | ||||
Description | In using Scribus I've had several occasions where I had to make multiple pdf buttons(perhaps up to 20) in a document. These needed JavaScript actions added to them. All of them used the same javascript function calls. The difference being that they passed different parameters into the functions. If I could have automated the populating of their javascript actions this would have saved me time. The attached patch adds 2 python functions that would allowed me to do this: setJSActionScript and getJSActionScript. I used JS as an abbreviation for JavaScript. The setJSActionScript allows the user to set the JavaScript on a particular pdf widget with 2 parameters. The type(0-9) and the script that will be associated with that type. The getJSActionScript returns the JavaScript for an action on a annotation. | ||||
Steps To Reproduce | use this python: setJSActionScript(0, "print 'test'"); #this populates the annotation's action with the script getJSActionScript(0) #this returns the script that was just populated. | ||||
Tags | No tags attached. | ||||
Patch | Yes | ||||
|
forgot to add a null pointer check in the code. Added that in, so that's why its the V2 of the patch. getsetJSActionScript.patch_v2 (7,814 bytes)
Index: Scribus/scribus/plugins/scriptplugin/cmdannotations.cpp =================================================================== --- Scribus/scribus/plugins/scriptplugin/cmdannotations.cpp (revision 22671) +++ Scribus/scribus/plugins/scriptplugin/cmdannotations.cpp (working copy) @@ -16,6 +16,169 @@ 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 be 0-9 " + qnum.toUtf8(), "python error").toLocal8Bit().constData()); + return nullptr; + } + + + if (!checkHaveDocument()) + return nullptr; + + + PageItem *i = GetUniqueItem(QString::fromUtf8(name)); + if (i == nullptr) + return nullptr; + + if(i->isAnnotation() == false){ + PyErr_SetString(PyExc_RuntimeError, + QObject::tr("Page item must be an annotation", "python error").toLocal8Bit().constData()); + return nullptr; + } + + Annotation &annotation = i->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 *i = GetUniqueItem(QString::fromUtf8(name)); + if (i == nullptr) + return nullptr; + + if(i->isAnnotation() == false){ + PyErr_SetString(PyExc_RuntimeError, + QObject::tr("Page item must be an annotation", "python error").toLocal8Bit().constData()); + return nullptr; + } + + Annotation &annotation = i->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) { char *name = const_cast<char*>(""); @@ -446,7 +609,9 @@ << scribus_setfileannotation__doc__ << scribus_seturiannotation__doc__ << scribus_settextannotation__doc__ - << scribus_createpdfannotation__doc__; + << scribus_createpdfannotation__doc__ + << scribus_setjsactionscript__doc__ + << scribus_getjsactionscript__doc__; } Index: Scribus/scribus/plugins/scriptplugin/cmdannotations.h =================================================================== --- Scribus/scribus/plugins/scriptplugin/cmdannotations.h (revision 22671) +++ Scribus/scribus/plugins/scriptplugin/cmdannotations.h (working copy) @@ -157,4 +157,43 @@ /*!creates a pdf annotation and a text frame.*/ PyObject *scribus_createpdfannotation(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\ +\"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\ +Also sets the annotation's action to JavaScript.\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); + +/*! 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\ +None if action is not JavaScript. String/Script is returned\n\ +if it is a JavaScript action.\n\ +")); +/*!gets the JavaScript for an annotation action.*/ +PyObject *scribus_getjsactionscript(PyObject * /*self*/, PyObject* args); + #endif Index: Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp =================================================================== --- Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp (revision 22671) +++ Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp (working copy) @@ -593,6 +593,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 */ }; |
|
Applied, thanks! |
Date Modified | Username | Field | Change |
---|---|---|---|
2018-11-13 20:18 | dockattt | New Issue | |
2018-11-13 20:18 | dockattt | File Added: getsetJSActionScript.patch | |
2018-11-13 20:29 | dockattt | File Deleted: getsetJSActionScript.patch | |
2018-11-13 20:30 | dockattt | File Added: getsetJSActionScript.patch_v2 | |
2018-11-13 20:30 | dockattt | Note Added: 0045615 | |
2018-11-18 14:58 | jghali | Assigned To | => jghali |
2018-11-18 14:58 | jghali | Status | new => resolved |
2018-11-18 14:58 | jghali | Resolution | open => fixed |
2018-11-18 14:58 | jghali | Fixed in Version | => 1.5.5.svn |
2018-11-18 14:58 | jghali | Note Added: 0045636 | |
2019-06-04 20:56 | cbradney | Status | resolved => closed |