Subversion Repositories Scribus

Rev

Rev 8308 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
103 Franz 7
#include "cmdpage.h"
201 Franz 8
#include "cmdutil.h"
3670 cbradney 9
#include "page.h"
5781 cbradney 10
#include "scribuscore.h"
7954 subik 11
#include "commonstrings.h"
82 Franz 12
 
7954 subik 13
 
2790 craig 14
PyObject *scribus_actualpage(PyObject* /* self */)
82 Franz 15
{
649 fschmid 16
        if(!checkHaveDocument())
17
                return NULL;
5781 cbradney 18
        return PyInt_FromLong(static_cast<long>(ScCore->primaryMainWindow()->doc->currentPageNumber() + 1));
82 Franz 19
}
20
 
2790 craig 21
PyObject *scribus_redraw(PyObject* /* self */)
82 Franz 22
{
649 fschmid 23
        if(!checkHaveDocument())
24
                return NULL;
5781 cbradney 25
        ScCore->primaryMainWindow()->view->DrawNew();
8319 fschmid 26
 //     Py_INCREF(Py_None);
27
 //     return Py_None;
8301 cbradney 28
        Py_RETURN_NONE;
82 Franz 29
}
30
 
6299 fschmid 31
PyObject *scribus_pageposition(PyObject* /* self */, PyObject* args)
32
{
33
        int e;
34
        if (!PyArg_ParseTuple(args, "i", &e))
35
                return NULL;
36
        if(!checkHaveDocument())
37
                return NULL;
38
        e--;
39
        if ((e < 0) || (e > static_cast<int>(ScCore->primaryMainWindow()->doc->Pages->count())-1))
40
        {
41
                PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error"));
42
                return NULL;
43
        }
44
        return PyInt_FromLong(static_cast<long>(ScCore->primaryMainWindow()->doc->locationOfPage(e)));
45
}
46
 
2790 craig 47
PyObject *scribus_savepageeps(PyObject* /* self */, PyObject* args)
82 Franz 48
{
49
        char *Name;
900 cbradney 50
        if (!PyArg_ParseTuple(args, "es", "utf-8", &Name))
82 Franz 51
                return NULL;
649 fschmid 52
        if(!checkHaveDocument())
53
                return NULL;
5781 cbradney 54
        bool ret = ScCore->primaryMainWindow()->DoSaveAsEps(QString::fromUtf8(Name));
899 cbradney 55
        if (!ret)
56
        {
1525 cbradney 57
                PyErr_SetString(ScribusException, QObject::tr("Failed to save EPS.","python error"));
899 cbradney 58
                return NULL;
59
        }
8319 fschmid 60
//      Py_INCREF(Py_True); // return True not None for backward compat
61
//      return Py_True;
8301 cbradney 62
        Py_RETURN_TRUE;
82 Franz 63
}
64
 
2790 craig 65
PyObject *scribus_deletepage(PyObject* /* self */, PyObject* args)
82 Franz 66
{
67
        int e;
68
        if (!PyArg_ParseTuple(args, "i", &e))
69
                return NULL;
649 fschmid 70
        if(!checkHaveDocument())
71
                return NULL;
82 Franz 72
        e--;
5781 cbradney 73
        if ((e < 0) || (e > static_cast<int>(ScCore->primaryMainWindow()->doc->Pages->count())-1))
646 fschmid 74
        {
1525 cbradney 75
                PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error"));
646 fschmid 76
                return NULL;
77
        }
5781 cbradney 78
        ScCore->primaryMainWindow()->DeletePage2(e);
8319 fschmid 79
//      Py_INCREF(Py_None);
80
//      return Py_None;
8301 cbradney 81
        Py_RETURN_NONE;
82 Franz 82
}
83
 
2790 craig 84
PyObject *scribus_gotopage(PyObject* /* self */, PyObject* args)
82 Franz 85
{
86
        int e;
87
        if (!PyArg_ParseTuple(args, "i", &e))
88
                return NULL;
649 fschmid 89
        if(!checkHaveDocument())
90
                return NULL;
82 Franz 91
        e--;
5781 cbradney 92
        if ((e < 0) || (e > static_cast<int>(ScCore->primaryMainWindow()->doc->Pages->count())-1))
646 fschmid 93
        {
1525 cbradney 94
                PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error"));
646 fschmid 95
                return NULL;
96
        }
5781 cbradney 97
        ScCore->primaryMainWindow()->view->GotoPage(e);
8319 fschmid 98
//      Py_INCREF(Py_None);
99
//      return Py_None;
8301 cbradney 100
        Py_RETURN_NONE;
82 Franz 101
}
102
 
2790 craig 103
PyObject *scribus_newpage(PyObject* /* self */, PyObject* args)
82 Franz 104
{
105
        int e;
7954 subik 106
        char *name = const_cast<char*>("");
107
        QString qName(CommonStrings::trMasterPageNormal);
900 cbradney 108
        if (!PyArg_ParseTuple(args, "i|es", &e, "utf-8", &name))
82 Franz 109
                return NULL;
649 fschmid 110
        if(!checkHaveDocument())
111
                return NULL;
7954 subik 112
 
113
        int loc = (e > -1) ? e : ScCore->primaryMainWindow()->doc->Pages->count();
114
        if (ScCore->primaryMainWindow()->doc->pageSets[ScCore->primaryMainWindow()->doc->currentPageLayout].Columns != 1)
5052 subik 115
        {
7954 subik 116
                switch (ScCore->primaryMainWindow()->doc->locationOfPage(loc))
117
                {
118
                        case LeftPage:
119
                                qName = CommonStrings::trMasterPageNormalLeft;
120
                                break;
121
                        case RightPage:
122
                                qName = CommonStrings::trMasterPageNormalRight;
123
                                break;
124
                        case MiddlePage:
125
                                qName = CommonStrings::trMasterPageNormalMiddle;
126
                                break;
127
                }
128
        }
129
        if (QString(name).length() != 0)
130
                qName = QString::fromUtf8(name);
131
 
132
        if (!ScCore->primaryMainWindow()->doc->MasterNames.contains(qName))
133
        {
5052 subik 134
                PyErr_SetString(PyExc_IndexError, QObject::tr("Given master page name does not match any existing.","python error"));
135
                return NULL;
136
        }
82 Franz 137
        if (e < 0)
7954 subik 138
                ScCore->primaryMainWindow()->slotNewPageP(loc, qName);
82 Franz 139
        else
411 Franz 140
        {
82 Franz 141
                e--;
7954 subik 142
                if ((e < 0) || (e > static_cast<int>(loc - 1)))
646 fschmid 143
                {
1525 cbradney 144
                        PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error"));
646 fschmid 145
                        return NULL;
146
                }
7954 subik 147
                ScCore->primaryMainWindow()->slotNewPageP(e, qName);
411 Franz 148
        }
8319 fschmid 149
//      Py_INCREF(Py_None);
150
 //     return Py_None;
8301 cbradney 151
        Py_RETURN_NONE;
82 Franz 152
}
153
 
2790 craig 154
PyObject *scribus_pagecount(PyObject* /* self */)
82 Franz 155
{
649 fschmid 156
        if(!checkHaveDocument())
157
                return NULL;
5781 cbradney 158
        return PyInt_FromLong(static_cast<long>(ScCore->primaryMainWindow()->doc->Pages->count()));
82 Franz 159
}
160
 
2790 craig 161
PyObject *scribus_pagedimension(PyObject* /* self */)
201 Franz 162
{
649 fschmid 163
        if(!checkHaveDocument())
164
                return NULL;
201 Franz 165
        PyObject *t;
166
        t = Py_BuildValue(
646 fschmid 167
                        "(dd)",
5781 cbradney 168
                        PointToValue(ScCore->primaryMainWindow()->doc->pageWidth), // it's just view scale... * ScCore->primaryMainWindow()->doc->Scale),
169
                        PointToValue(ScCore->primaryMainWindow()->doc->pageHeight)  // * ScCore->primaryMainWindow()->doc->Scale)
646 fschmid 170
                );
201 Franz 171
        return t;
172
}
173
 
2790 craig 174
PyObject *scribus_getpageitems(PyObject* /* self */)
216 Franz 175
{
649 fschmid 176
        if(!checkHaveDocument())
177
                return NULL;
5781 cbradney 178
        if (ScCore->primaryMainWindow()->doc->Items->count() == 0)
216 Franz 179
                return Py_BuildValue((char*)"[]");
3410 fschmid 180
        uint counter = 0;
6200 subik 181
        int pageNr = ScCore->primaryMainWindow()->doc->currentPageNumber();
5781 cbradney 182
        for (uint lam2 = 0; lam2 < ScCore->primaryMainWindow()->doc->Items->count(); ++lam2)
3410 fschmid 183
        {
5781 cbradney 184
                if (pageNr == ScCore->primaryMainWindow()->doc->Items->at(lam2)->OwnPage)
3410 fschmid 185
                        counter++;
186
        }
187
        PyObject *l = PyList_New(counter);
216 Franz 188
        PyObject *row;
3410 fschmid 189
        counter = 0;
5781 cbradney 190
        for (uint i = 0; i<ScCore->primaryMainWindow()->doc->Items->count(); ++i)
216 Franz 191
        {
5781 cbradney 192
                if (pageNr == ScCore->primaryMainWindow()->doc->Items->at(i)->OwnPage)
3410 fschmid 193
                {
194
                        row = Py_BuildValue((char*)"(sii)",
5781 cbradney 195
                                            ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().ascii(),
196
                                            ScCore->primaryMainWindow()->doc->Items->at(i)->itemType(),
197
                                            ScCore->primaryMainWindow()->doc->Items->at(i)->ItemNr
3410 fschmid 198
                                           );
199
                        PyList_SetItem(l, counter, row);
200
                        counter++;
201
                }
216 Franz 202
        } // for
203
        return l;
204
}
411 Franz 205
 
2790 craig 206
PyObject *scribus_getHguides(PyObject* /* self */)
411 Franz 207
{
649 fschmid 208
        if(!checkHaveDocument())
209
                return NULL;
5781 cbradney 210
        Guides g = ScCore->primaryMainWindow()->doc->currentPage()->guides.horizontals(GuideManagerCore::Standard);
211
        int n = g.count();//ScCore->primaryMainWindow()->doc->currentPage->YGuides.count();
647 fschmid 212
        if (n == 0)
720 subik 213
                return Py_BuildValue((char*)"[]");
411 Franz 214
        int i;
215
        double tmp;
216
        PyObject *l, *guide;
217
        l = PyList_New(0);
218
        for (i=0; i<n; i++)
219
        {
5087 subik 220
                tmp = g[i];
411 Franz 221
                guide = Py_BuildValue("d", PointToValue(tmp));
222
                PyList_Append(l, guide);
223
        }
224
        return l;
225
}
226
 
2790 craig 227
PyObject *scribus_setHguides(PyObject* /* self */, PyObject* args)
411 Franz 228
{
229
        PyObject *l;
230
        if (!PyArg_ParseTuple(args, "O", &l))
231
                return NULL;
649 fschmid 232
        if(!checkHaveDocument())
233
                return NULL;
411 Franz 234
        if (!PyList_Check(l))
235
        {
1525 cbradney 236
                PyErr_SetString(PyExc_TypeError, QObject::tr("argument is not list: must be list of float values.","python error"));
411 Franz 237
                return NULL;
238
        }
239
        int i, n;
240
        n = PyList_Size(l);
241
        double guide;
5781 cbradney 242
        ScCore->primaryMainWindow()->doc->currentPage()->guides.clearHorizontals(GuideManagerCore::Standard);
411 Franz 243
        for (i=0; i<n; i++)
244
        {
245
                if (!PyArg_Parse(PyList_GetItem(l, i), "d", &guide))
246
                {
1525 cbradney 247
                        PyErr_SetString(PyExc_TypeError, QObject::tr("argument contains non-numeric values: must be list of float values.","python error"));
411 Franz 248
                        return NULL;
249
                }
5781 cbradney 250
                ScCore->primaryMainWindow()->doc->currentPage()->guides.addHorizontal(ValueToPoint(guide), GuideManagerCore::Standard);
411 Franz 251
        }
8308 fschmid 252
        Py_INCREF(Py_None);
253
        return Py_None;
8301 cbradney 254
        Py_RETURN_NONE;
411 Franz 255
}
256
 
2790 craig 257
PyObject *scribus_getVguides(PyObject* /* self */)
411 Franz 258
{
649 fschmid 259
        if(!checkHaveDocument())
260
                return NULL;
5781 cbradney 261
        Guides g = ScCore->primaryMainWindow()->doc->currentPage()->guides.verticals(GuideManagerCore::Standard);
262
        int n = g.count();//ScCore->primaryMainWindow()->doc->currentPage->XGuides.count();
647 fschmid 263
        if (n == 0)
720 subik 264
                return Py_BuildValue((char*)"[]");
411 Franz 265
        int i;
266
        double tmp;
267
        PyObject *l, *guide;
268
        l = PyList_New(0);
269
        for (i=0; i<n; i++)
270
        {
5087 subik 271
                tmp = g[i];
411 Franz 272
                guide = Py_BuildValue("d", PointToValue(tmp));
273
                PyList_Append(l, guide);
274
        }
275
        return l;
276
}
277
 
2790 craig 278
PyObject *scribus_setVguides(PyObject* /* self */, PyObject* args)
411 Franz 279
{
280
        PyObject *l;
281
        if (!PyArg_ParseTuple(args, "O", &l))
282
                return NULL;
649 fschmid 283
        if(!checkHaveDocument())
284
                return NULL;
411 Franz 285
        if (!PyList_Check(l))
286
        {
1525 cbradney 287
                PyErr_SetString(PyExc_TypeError, QObject::tr("argument is not list: must be list of float values.","python error"));
411 Franz 288
                return NULL;
289
        }
290
        int i, n;
291
        n = PyList_Size(l);
292
        double guide;
5781 cbradney 293
        ScCore->primaryMainWindow()->doc->currentPage()->guides.clearVerticals(GuideManagerCore::Standard);
411 Franz 294
        for (i=0; i<n; i++)
295
        {
296
                if (!PyArg_Parse(PyList_GetItem(l, i), "d", &guide))
297
                {
1525 cbradney 298
                        PyErr_SetString(PyExc_TypeError, QObject::tr("argument contains no-numeric values: must be list of float values.","python error"));
411 Franz 299
                        return NULL;
300
                }
5781 cbradney 301
                ScCore->primaryMainWindow()->doc->currentPage()->guides.addVertical(ValueToPoint(guide), GuideManagerCore::Standard);
411 Franz 302
        }
8319 fschmid 303
//      Py_INCREF(Py_None);
304
//      return Py_None;
8301 cbradney 305
        Py_RETURN_NONE;
411 Franz 306
}
418 Franz 307
 
2790 craig 308
PyObject *scribus_getpagemargins(PyObject* /* self */)
418 Franz 309
{
310
        PyObject *margins = NULL;
649 fschmid 311
        if(!checkHaveDocument())
312
                return NULL;
5781 cbradney 313
        margins = Py_BuildValue("ffff", PointToValue(ScCore->primaryMainWindow()->doc->pageMargins.Top),
314
                                                                        PointToValue(ScCore->primaryMainWindow()->doc->pageMargins.Left),
315
                                                                        PointToValue(ScCore->primaryMainWindow()->doc->pageMargins.Right),
316
                                                                        PointToValue(ScCore->primaryMainWindow()->doc->pageMargins.Bottom));
418 Franz 317
        return margins;
318
}
6200 subik 319
 
320
/*! HACK: this removes "warning: 'blah' defined but not used" compiler warnings
321
with header files structure untouched (docstrings are kept near declarations)
322
PV */
323
void cmdpagedocwarnings()
324
{
325
    QStringList s;
6299 fschmid 326
    s << scribus_newpage__doc__ << scribus_pageposition__doc__ << scribus_actualpage__doc__ << scribus_redraw__doc__ << scribus_savepageeps__doc__ << scribus_deletepage__doc__ << scribus_gotopage__doc__ << scribus_pagecount__doc__ << scribus_getHguides__doc__ <<scribus_setHguides__doc__ <<scribus_getVguides__doc__ <<scribus_setVguides__doc__ <<scribus_pagedimension__doc__ <<scribus_getpageitems__doc__ <<scribus_getpagemargins__doc__;
6200 subik 327
}