View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0010748 | Scribus | Scripter | public | 2012-06-13 14:51 | 2016-05-02 01:52 |
Reporter | mochouinard | Assigned To | cbradney | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Target Version | 1.5.2 | Fixed in Version | 1.5.2.svn | ||
Summary | 0010748: Scripter: Get and Apply a Master Page | ||||
Description | Allow to Get and Apply a Master page from a script. I've seperated them in 2 different patch | ||||
Tags | No tags attached. | ||||
Patch | Yes | ||||
has duplicate | 0011490 | closed | Add commands like "getMasterPage() and setMasterPage()" |
|
Scribus_scripter_getMasterPage_api.diff (3,172 bytes)
diff --git a/scribus/plugins/scriptplugin/cmdpage.cpp b/scribus/plugins/scriptplugin/cmdpage.cpp index 52ad3f2..fa0eb8e 100644 --- a/scribus/plugins/scriptplugin/cmdpage.cpp +++ b/scribus/plugins/scriptplugin/cmdpage.cpp @@ -87,6 +87,22 @@ PyObject *scribus_deletepage(PyObject* /* self */, PyObject* args) Py_RETURN_NONE; } +PyObject *scribus_getmasterpage(PyObject* /* self */, PyObject* args) +{ + int e; + if (!PyArg_ParseTuple(args, "i", &e)) + return NULL; + if(!checkHaveDocument()) + return NULL; + e--; + if ((e < 0) || (e > static_cast<int>(ScCore->primaryMainWindow()->doc->Pages->count())-1)) + { + PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error").toLocal8Bit().constData()); + return NULL; + } + return PyString_FromString(ScCore->primaryMainWindow()->doc->DocPages.at(e)->MPageNam.toUtf8()); +} + PyObject *scribus_gotopage(PyObject* /* self */, PyObject* args) { int e; @@ -513,5 +529,6 @@ void cmdpagedocwarnings() << scribus_getVguides__doc__ << scribus_setVguides__doc__ << scribus_pagedimension__doc__ << scribus_getpageitems__doc__ << scribus_getpagemargins__doc__ << scribus_importpage__doc__ - << scribus_pagensize__doc__ << scribus_pagenmargins__doc__; + << scribus_pagensize__doc__ << scribus_pagenmargins__doc__ + << scribus_getmasterpage__doc__; } diff --git a/scribus/plugins/scriptplugin/cmdpage.h b/scribus/plugins/scriptplugin/cmdpage.h index c3880d5..e6b0df5 100644 --- a/scribus/plugins/scriptplugin/cmdpage.h +++ b/scribus/plugins/scriptplugin/cmdpage.h @@ -80,6 +80,17 @@ May raise IndexError if the page number is out of range\n\ PyObject *scribus_deletepage(PyObject * /*self*/, PyObject* args); /*! docstring */ +PyDoc_STRVAR(scribus_getmasterpage__doc__, +QT_TR_NOOP("getMasterPage(nr)\n\ +\n\ +Get Master Page of the page \"nr\".\n\ +\n\ +May raise IndexError if the page number is out of range.\n\ +")); +/*! Get Master Page Name */ +PyObject *scribus_getmasterpage(PyObject * /*self*/, PyObject* args); + +/*! docstring */ PyDoc_STRVAR(scribus_gotopage__doc__, QT_TR_NOOP("gotoPage(nr)\n\ \n\ diff --git a/scribus/plugins/scriptplugin/scriptplugin.cpp b/scribus/plugins/scriptplugin/scriptplugin.cpp index c4233f5..4d59eac 100644 --- a/scribus/plugins/scriptplugin/scriptplugin.cpp +++ b/scribus/plugins/scriptplugin/scriptplugin.cpp @@ -366,6 +366,7 @@ PyMethodDef scribus_methods[] = { {const_cast<char*>("getUnit"), (PyCFunction)scribus_getunit, METH_NOARGS, tr(scribus_getunit__doc__)}, {const_cast<char*>("getVGuides"), (PyCFunction)scribus_getVguides, METH_NOARGS, tr(scribus_getVguides__doc__)}, {const_cast<char*>("getXFontNames"), (PyCFunction)scribus_xfontnames, METH_NOARGS, tr(scribus_xfontnames__doc__)}, + {const_cast<char*>("getMasterPage"), scribus_getmasterpage, METH_VARARGS, tr(scribus_getmasterpage__doc__)}, {const_cast<char*>("gotoPage"), scribus_gotopage, METH_VARARGS, tr(scribus_gotopage__doc__)}, {const_cast<char*>("groupObjects"), scribus_groupobj, METH_VARARGS, tr(scribus_groupobj__doc__)}, {const_cast<char*>("haveDoc"), (PyCFunction)scribus_havedoc, METH_NOARGS, tr(scribus_havedoc__doc__)}, |
|
Scribus_scripter_applyMasterPage_api.diff (3,375 bytes)
diff --git a/scribus/plugins/scriptplugin/cmdpage.cpp b/scribus/plugins/scriptplugin/cmdpage.cpp index 52ad3f2..7cbec6f 100644 --- a/scribus/plugins/scriptplugin/cmdpage.cpp +++ b/scribus/plugins/scriptplugin/cmdpage.cpp @@ -68,6 +68,31 @@ PyObject *scribus_savepageeps(PyObject* /* self */, PyObject* args) return PyBool_FromLong(static_cast<long>(true)); } +PyObject *scribus_applymasterpage(PyObject* /* self */, PyObject* args) +{ + int e; + char *name = const_cast<char*>(""); + if (!PyArg_ParseTuple(args, "esi", "utf-8", &name, &e)) + return NULL; + if(!checkHaveDocument()) + return NULL; + if (!ScCore->primaryMainWindow()->doc->MasterNames.contains(name)) + { + PyErr_SetString(PyExc_IndexError, QObject::tr("Given master page name does not match any existing.","python error").toLocal8Bit().constData()); + return NULL; + } + e--; + if ((e < 0) || (e > static_cast<int>(ScCore->primaryMainWindow()->doc->Pages->count())-1)) + { + PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error").toLocal8Bit().constData()); + return NULL; + } + + ScCore->primaryMainWindow()->doc->applyMasterPage(name, e); + + Py_RETURN_NONE; +} + PyObject *scribus_deletepage(PyObject* /* self */, PyObject* args) { int e; @@ -513,5 +538,6 @@ void cmdpagedocwarnings() << scribus_getVguides__doc__ << scribus_setVguides__doc__ << scribus_pagedimension__doc__ << scribus_getpageitems__doc__ << scribus_getpagemargins__doc__ << scribus_importpage__doc__ - << scribus_pagensize__doc__ << scribus_pagenmargins__doc__; + << scribus_pagensize__doc__ << scribus_pagenmargins__doc__ + << scribus_applymasterpage__doc__; } diff --git a/scribus/plugins/scriptplugin/cmdpage.h b/scribus/plugins/scriptplugin/cmdpage.h index c3880d5..792eaaf 100644 --- a/scribus/plugins/scriptplugin/cmdpage.h +++ b/scribus/plugins/scriptplugin/cmdpage.h @@ -28,6 +28,15 @@ May raise IndexError if the page number is out of range\n\ PyObject *scribus_newpage(PyObject * /*self*/, PyObject* args); /*! docstring */ +PyDoc_STRVAR(scribus_applymasterpage__doc__, +QT_TR_NOOP("applyMasterPage(masterpage, page)\n\ +\n\ +Apply Master Page to current document\n\ +")); +/*! apply Master Page */ +PyObject *scribus_applymasterpage(PyObject * /*self*/, PyObject* args); + +/*! docstring */ PyDoc_STRVAR(scribus_actualpage__doc__, QT_TR_NOOP("currentPage() -> integer\n\ \n\ diff --git a/scribus/plugins/scriptplugin/scriptplugin.cpp b/scribus/plugins/scriptplugin/scriptplugin.cpp index c4233f5..8bea68c 100644 --- a/scribus/plugins/scriptplugin/scriptplugin.cpp +++ b/scribus/plugins/scriptplugin/scriptplugin.cpp @@ -281,6 +281,7 @@ char* tr(const char* docstringConstant) PyMethodDef scribus_methods[] = { // 2004/10/03 pv - aliases with common Python syntax - ClassName methodName // 2004-11-06 cr - move aliasing to dynamically generated wrapper functions, sort methoddef + {const_cast<char*>("applyMasterPage"), scribus_applymasterpage, METH_VARARGS, tr(scribus_applymasterpage__doc__)}, {const_cast<char*>("changeColor"), scribus_setcolor, METH_VARARGS, tr(scribus_setcolor__doc__)}, {const_cast<char*>("closeDoc"), (PyCFunction)scribus_closedoc, METH_NOARGS, tr(scribus_closedoc__doc__)}, {const_cast<char*>("closeMasterPage"), (PyCFunction)scribus_closemasterpage, METH_NOARGS, tr(scribus_closemasterpage__doc__)}, |
|
I have updated mochouinard's getMasterPage patch by moving function from cmdpage.cpp file into cmddoc.cpp where rest of function handling Master Pages are located. I did not change anything else in his patch. apllyMasterPage fuction was added in issue 0012758 Issue 0011490 can be closed as duplicate of this one. |
|
0001-Add-getMasterPage-function-to-scripter.patch (4,774 bytes)
From ca7b28f78f633064cf1592655fbb562b9d399b14 Mon Sep 17 00:00:00 2001 From: Juraj Fedel <wtxnh-scribus@yahoo.com.au> Date: Fri, 29 Apr 2016 14:43:23 +0200 Subject: [PATCH] Add getMasterPage function to scripter Updated patch from mochouinard by moving function from file cmdpage.cpp into cmddoc.cpp (where rest of function dealing with Master Pages are located. --- scribus/plugins/scriptplugin/cmddoc.cpp | 18 +++++++++++++++++- scribus/plugins/scriptplugin/cmddoc.h | 10 ++++++++++ scribus/plugins/scriptplugin/scriptplugin.cpp | 1 + 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/scribus/plugins/scriptplugin/cmddoc.cpp b/scribus/plugins/scriptplugin/cmddoc.cpp index eb8bdf4..7870866 100644 --- a/scribus/plugins/scriptplugin/cmddoc.cpp +++ b/scribus/plugins/scriptplugin/cmddoc.cpp @@ -390,6 +390,22 @@ PyObject* scribus_deletemasterpage(PyObject* /* self */, PyObject* args) Py_RETURN_NONE; } +PyObject *scribus_getmasterpage(PyObject* /* self */, PyObject* args) +{ + int e; + if (!PyArg_ParseTuple(args, "i", &e)) + return NULL; + if(!checkHaveDocument()) + return NULL; + e--; + if ((e < 0) || (e > static_cast<int>(ScCore->primaryMainWindow()->doc->Pages->count())-1)) + { + PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error").toLocal8Bit().constData()); + return NULL; + } + return PyString_FromString(ScCore->primaryMainWindow()->doc->DocPages.at(e)->MPageNam.toUtf8()); +} + PyObject* scribus_applymasterpage(PyObject* /* self */, PyObject* args) { char* name = 0; @@ -426,5 +442,5 @@ PV */ void cmddocdocwarnings() { QStringList s; - s << scribus_newdocument__doc__ << scribus_newdoc__doc__ << scribus_closedoc__doc__ << scribus_havedoc__doc__ << scribus_opendoc__doc__ << scribus_savedoc__doc__ << scribus_getdocname__doc__ << scribus_savedocas__doc__ << scribus_setinfo__doc__ <<scribus_setmargins__doc__ <<scribus_setunit__doc__ <<scribus_getunit__doc__ <<scribus_loadstylesfromfile__doc__ <<scribus_setdoctype__doc__ <<scribus_closemasterpage__doc__ <<scribus_masterpagenames__doc__ <<scribus_editmasterpage__doc__ <<scribus_createmasterpage__doc__ <<scribus_deletemasterpage__doc__ << scribus_setbaseline__doc__ << scribus_applymasterpage__doc__; + s << scribus_newdocument__doc__ << scribus_newdoc__doc__ << scribus_closedoc__doc__ << scribus_havedoc__doc__ << scribus_opendoc__doc__ << scribus_savedoc__doc__ << scribus_getdocname__doc__ << scribus_savedocas__doc__ << scribus_setinfo__doc__ <<scribus_setmargins__doc__ <<scribus_setunit__doc__ <<scribus_getunit__doc__ <<scribus_loadstylesfromfile__doc__ <<scribus_setdoctype__doc__ <<scribus_closemasterpage__doc__ <<scribus_masterpagenames__doc__ <<scribus_editmasterpage__doc__ <<scribus_createmasterpage__doc__ <<scribus_deletemasterpage__doc__ << scribus_setbaseline__doc__ << scribus_getmasterpage__doc__ << scribus_applymasterpage__doc__; } diff --git a/scribus/plugins/scriptplugin/cmddoc.h b/scribus/plugins/scriptplugin/cmddoc.h index 8a9695c..c384509 100644 --- a/scribus/plugins/scriptplugin/cmddoc.h +++ b/scribus/plugins/scriptplugin/cmddoc.h @@ -277,6 +277,16 @@ Delete the named master page.\n\ ")); PyObject* scribus_deletemasterpage(PyObject* self, PyObject* args); +PyDoc_STRVAR(scribus_getmasterpage__doc__, +QT_TR_NOOP("getMasterPage(nr)\n\ +\n\ +Get Master Page of the page \"nr\".\n\ +\n\ +May raise IndexError if the page number is out of range.\n\ +")); +/*! Get Master Page Name */ +PyObject *scribus_getmasterpage(PyObject * /*self*/, PyObject* args); + PyDoc_STRVAR(scribus_applymasterpage__doc__, QT_TR_NOOP("applyMasterPage(masterPageName, pageNumber)\n\ \n\ diff --git a/scribus/plugins/scriptplugin/scriptplugin.cpp b/scribus/plugins/scriptplugin/scriptplugin.cpp index 25d0c61..0beecd1 100644 --- a/scribus/plugins/scriptplugin/scriptplugin.cpp +++ b/scribus/plugins/scriptplugin/scriptplugin.cpp @@ -377,6 +377,7 @@ PyMethodDef scribus_methods[] = { {const_cast<char*>("getLineSpacing"), scribus_getlinespace, METH_VARARGS, tr(scribus_getlinespace__doc__)}, {const_cast<char*>("getLineStyle"), scribus_getlinestyle, METH_VARARGS, tr(scribus_getlinestyle__doc__)}, {const_cast<char*>("getLineWidth"), scribus_getlinewidth, METH_VARARGS, tr(scribus_getlinewidth__doc__)}, + {const_cast<char*>("getMasterPage"), scribus_getmasterpage, METH_VARARGS, tr(scribus_getmasterpage__doc__)}, {const_cast<char*>("getPageItems"), (PyCFunction)scribus_getpageitems, METH_NOARGS, tr(scribus_getpageitems__doc__)}, {const_cast<char*>("getPageMargins"), (PyCFunction)scribus_getpagemargins, METH_NOARGS, tr(scribus_getpagemargins__doc__)}, {const_cast<char*>("getPageType"), (PyCFunction)scribus_pageposition, METH_VARARGS, tr(scribus_pageposition__doc__)}, -- 2.1.4 |
|
Thanks Juraj! I've closed 0011490 |
|
unassigned jainbasil + added to 1.5.3 unless devs want to merge it earlier ? |
|
Hey Greg, can you test this ? |
|
masterpage.py (963 bytes)
scribus.newDocument(scribus.PAPER_A4, (15,15, 20, 20), scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.PAGE_2, 1, 8) def create_mp(name): scribus.createMasterPage(name) scribus.editMasterPage(name) txt=scribus.createText(250, 70, 120, 30) scribus.setText(name, txt) scribus.closeMasterPage() return name odd = create_mp('Odd Master Page') even = create_mp('Even Master Page') for p in range(8): page = p+1 name = odd if page%2 == 0: name = even scribus.applyMasterPage(name, page) scribus.gotoPage(page) txt=scribus.createText(250, 170, 120, 30) scribus.setText("Page %i" % page, txt) for p in range(8): print p+1, scribus.getMasterPage(p+1) scribus.saveDocAs('masterpage.sla') pdf = scribus.PDFfile() pdf.save() # scribus.applyMasterPage('Wrong Name', 1) # scribus.applyMasterPage(even, 42) # p = -3 # print scribus.getMasterPage(p+1) # p = 43 # print scribus.getMasterPage(p+1) |
|
Added small test script that shows how to use getMasterPage() and applyMasterPage() function. |
|
William, would you have a moment to test this ? |
|
It looks good to me. I built the current 1.5.2 SVN + 0001-Add-getMasterPage-function-to-scripter.patch and tested that masterpage.py worked and that the conditions in the commented lines were caught when uncommented. Could scribus_getmasterpage() show the page number in the error like scribus_applymasterpage() does by changing line 403 of cmddoc.cpp from PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error").toLocal8Bit().constData()); to PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range: '%1'.","python error").arg(e+1).toLocal8Bit().constData()); |
|
Thanks! Committed. |
|
cbradney applied jurajF's patch in r21268 without william's 0010748:0040662 refinement William, do you mind making a quick patch and submitting it? |
|
Kunda, I think that cbradney added the line. Try svn log --diff -r 21268 |
|
Oh, apologies. I didn't see that. Thanks! Ok, closing ticket! Thanks to all involved in the process. |
Date Modified | Username | Field | Change |
---|---|---|---|
2012-06-13 14:51 | mochouinard | New Issue | |
2012-06-13 14:51 | mochouinard | File Added: Scribus_scripter_getMasterPage_api.diff | |
2012-06-13 14:51 | mochouinard | File Added: Scribus_scripter_applyMasterPage_api.diff | |
2012-06-13 14:53 | ale | Assigned To | => jainbasil |
2012-06-13 14:53 | ale | Status | new => assigned |
2016-04-29 13:07 | jurajF | Note Added: 0040598 | |
2016-04-29 13:07 | jurajF | File Added: 0001-Add-getMasterPage-function-to-scripter.patch | |
2016-04-29 13:52 | Kunda | Relationship added | has duplicate 0011490 |
2016-04-29 13:54 | Kunda | Note Added: 0040601 | |
2016-04-29 13:54 | Kunda | Assigned To | jainbasil => |
2016-04-29 13:54 | Kunda | Status | assigned => confirmed |
2016-04-29 13:55 | Kunda | Patch | => No |
2016-04-29 13:55 | Kunda | Target Version | => 1.5.3 |
2016-04-29 13:55 | Kunda | Summary | Get and Apply a Master Page => Scripter: Get and Apply a Master Page |
2016-04-29 13:55 | Kunda | Patch | No => Yes |
2016-04-29 13:56 | Kunda | Note Added: 0040602 | |
2016-04-29 17:05 | Kunda | Note Added: 0040607 | |
2016-04-30 07:02 | jurajF | File Added: masterpage.py | |
2016-04-30 07:03 | jurajF | Note Added: 0040621 | |
2016-04-30 23:19 | Kunda | Note Added: 0040658 | |
2016-05-01 06:03 | william | Note Added: 0040662 | |
2016-05-01 14:30 | cbradney | Fixed in Version | => 1.5.2.svn |
2016-05-01 14:30 | cbradney | Target Version | 1.5.3 => 1.5.2 |
2016-05-01 14:31 | cbradney | Status | confirmed => resolved |
2016-05-01 14:31 | cbradney | Resolution | open => fixed |
2016-05-01 14:31 | cbradney | Assigned To | => cbradney |
2016-05-01 14:38 | cbradney | Note Added: 0040676 | |
2016-05-01 14:52 | Kunda | Note Added: 0040677 | |
2016-05-01 17:15 | william | Note Added: 0040687 | |
2016-05-02 01:52 | Kunda | Note Added: 0040695 | |
2016-05-02 01:52 | Kunda | Status | resolved => closed |