~ubuntu-branches/ubuntu/maverick/scribus-ng/maverick-backports

« back to all changes in this revision

Viewing changes to scribus/plugins/scriptplugin/cmdpage.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Oleksandr Moskalenko
  • Date: 2009-02-09 09:25:18 UTC
  • mfrom: (5.1.4 sid)
  • Revision ID: james.westby@ubuntu.com-20090209092518-iqsxmh3pjspgrdyd
Tags: 1.3.5.dfsg~svn20090208-2
debian/control: Use "type-handling -n arm,armel,armeb any" to generate the
list of architectures to build on.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
        e--;
39
39
        if ((e < 0) || (e > static_cast<int>(ScCore->primaryMainWindow()->doc->Pages->count())-1))
40
40
        {
41
 
                PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error"));
 
41
                PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error").toLocal8Bit().constData());
42
42
                return NULL;
43
43
        }
44
44
        return PyInt_FromLong(static_cast<long>(ScCore->primaryMainWindow()->doc->locationOfPage(e)));
51
51
                return NULL;
52
52
        if(!checkHaveDocument())
53
53
                return NULL;
54
 
        bool ret = ScCore->primaryMainWindow()->DoSaveAsEps(QString::fromUtf8(Name));
 
54
        QString epsError;
 
55
        bool ret = ScCore->primaryMainWindow()->DoSaveAsEps(QString::fromUtf8(Name), epsError);
55
56
        if (!ret)
56
57
        {
57
 
                PyErr_SetString(ScribusException, QObject::tr("Failed to save EPS.","python error"));
 
58
                QString message = QObject::tr("Failed to save EPS.","python error");
 
59
                if (!epsError.isEmpty())
 
60
                        message += QString("\n%1").arg(epsError);
 
61
                PyErr_SetString(ScribusException, message.toLocal8Bit().constData());
58
62
                return NULL;
59
63
        }
60
64
//      Py_INCREF(Py_True); // return True not None for backward compat
61
65
//      return Py_True;
62
 
        Py_RETURN_TRUE;
 
66
//      Py_RETURN_TRUE;
 
67
        return PyBool_FromLong(static_cast<long>(true));
63
68
}
64
69
 
65
70
PyObject *scribus_deletepage(PyObject* /* self */, PyObject* args)
72
77
        e--;
73
78
        if ((e < 0) || (e > static_cast<int>(ScCore->primaryMainWindow()->doc->Pages->count())-1))
74
79
        {
75
 
                PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error"));
 
80
                PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error").toLocal8Bit().constData());
76
81
                return NULL;
77
82
        }
78
83
        ScCore->primaryMainWindow()->DeletePage2(e);
91
96
        e--;
92
97
        if ((e < 0) || (e > static_cast<int>(ScCore->primaryMainWindow()->doc->Pages->count())-1))
93
98
        {
94
 
                PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error"));
 
99
                PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error").toLocal8Bit().constData());
95
100
                return NULL;
96
101
        }
97
102
        ScCore->primaryMainWindow()->view->GotoPage(e);
131
136
 
132
137
        if (!ScCore->primaryMainWindow()->doc->MasterNames.contains(qName))
133
138
        {
134
 
                PyErr_SetString(PyExc_IndexError, QObject::tr("Given master page name does not match any existing.","python error"));
 
139
                PyErr_SetString(PyExc_IndexError, QObject::tr("Given master page name does not match any existing.","python error").toLocal8Bit().constData());
135
140
                return NULL;
136
141
        }
137
142
        if (e < 0)
141
146
                e--;
142
147
                if ((e < 0) || (e > static_cast<int>(loc - 1)))
143
148
                {
144
 
                        PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error"));
 
149
                        PyErr_SetString(PyExc_IndexError, QObject::tr("Page number out of range.","python error").toLocal8Bit().constData());
145
150
                        return NULL;
146
151
                }
147
152
                ScCore->primaryMainWindow()->slotNewPageP(e, qName);
179
184
                return Py_BuildValue((char*)"[]");
180
185
        uint counter = 0;
181
186
        int pageNr = ScCore->primaryMainWindow()->doc->currentPageNumber();
182
 
        for (uint lam2 = 0; lam2 < ScCore->primaryMainWindow()->doc->Items->count(); ++lam2)
 
187
        for (int lam2 = 0; lam2 < ScCore->primaryMainWindow()->doc->Items->count(); ++lam2)
183
188
        {
184
189
                if (pageNr == ScCore->primaryMainWindow()->doc->Items->at(lam2)->OwnPage)
185
190
                        counter++;
187
192
        PyObject *l = PyList_New(counter);
188
193
        PyObject *row;
189
194
        counter = 0;
190
 
        for (uint i = 0; i<ScCore->primaryMainWindow()->doc->Items->count(); ++i)
 
195
        for (int i = 0; i<ScCore->primaryMainWindow()->doc->Items->count(); ++i)
191
196
        {
192
197
                if (pageNr == ScCore->primaryMainWindow()->doc->Items->at(i)->OwnPage)
193
198
                {
194
199
                        row = Py_BuildValue((char*)"(sii)",
195
 
                                            ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().ascii(),
 
200
                                            ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toAscii().constData(),
196
201
                                            ScCore->primaryMainWindow()->doc->Items->at(i)->itemType(),
197
202
                                            ScCore->primaryMainWindow()->doc->Items->at(i)->ItemNr
198
203
                                           );
233
238
                return NULL;
234
239
        if (!PyList_Check(l))
235
240
        {
236
 
                PyErr_SetString(PyExc_TypeError, QObject::tr("argument is not list: must be list of float values.","python error"));
 
241
                PyErr_SetString(PyExc_TypeError, QObject::tr("argument is not list: must be list of float values.","python error").toLocal8Bit().constData());
237
242
                return NULL;
238
243
        }
239
244
        int i, n;
244
249
        {
245
250
                if (!PyArg_Parse(PyList_GetItem(l, i), "d", &guide))
246
251
                {
247
 
                        PyErr_SetString(PyExc_TypeError, QObject::tr("argument contains non-numeric values: must be list of float values.","python error"));
 
252
                        PyErr_SetString(PyExc_TypeError, QObject::tr("argument contains non-numeric values: must be list of float values.","python error").toLocal8Bit().constData());
248
253
                        return NULL;
249
254
                }
250
255
                ScCore->primaryMainWindow()->doc->currentPage()->guides.addHorizontal(ValueToPoint(guide), GuideManagerCore::Standard);
284
289
                return NULL;
285
290
        if (!PyList_Check(l))
286
291
        {
287
 
                PyErr_SetString(PyExc_TypeError, QObject::tr("argument is not list: must be list of float values.","python error"));
 
292
                PyErr_SetString(PyExc_TypeError, QObject::tr("argument is not list: must be list of float values.","python error").toLocal8Bit().constData());
288
293
                return NULL;
289
294
        }
290
295
        int i, n;
295
300
        {
296
301
                if (!PyArg_Parse(PyList_GetItem(l, i), "d", &guide))
297
302
                {
298
 
                        PyErr_SetString(PyExc_TypeError, QObject::tr("argument contains no-numeric values: must be list of float values.","python error"));
 
303
                        PyErr_SetString(PyExc_TypeError, QObject::tr("argument contains no-numeric values: must be list of float values.","python error").toLocal8Bit().constData());
299
304
                        return NULL;
300
305
                }
301
306
                ScCore->primaryMainWindow()->doc->currentPage()->guides.addVertical(ValueToPoint(guide), GuideManagerCore::Standard);
317
322
        return margins;
318
323
}
319
324
 
 
325
/*!
 
326
 \fn import_addpages(int total, int pos)
 
327
 \author Alessandro Pira <alex@alessandropira.org>
 
328
 \date 11-11-2007
 
329
 \param total number of pages to add, pos: position in the document
 
330
 \param pos position of the imported pages
 
331
 \retval void
 
332
 */
 
333
// This function is used by scribus_importpage() to add new pages
 
334
void import_addpages(int total, int pos) {
 
335
        for (int i=0; i<total; i++) {
 
336
                int locreal = pos + i;
 
337
                int loc = pos + i + 1;
 
338
 
 
339
                if (loc > ScCore->primaryMainWindow()->doc->Pages->count()) {
 
340
                        loc = ScCore->primaryMainWindow()->doc->Pages->count();
 
341
                }
 
342
                QString qName(CommonStrings::trMasterPageNormal);
 
343
 
 
344
                if (ScCore->primaryMainWindow()->doc->pageSets[ScCore->primaryMainWindow()->doc->currentPageLayout].Columns != 1) {
 
345
                        ScCore->primaryMainWindow()->doc->locationOfPage(loc);
 
346
                        switch (ScCore->primaryMainWindow()->doc->locationOfPage(loc))
 
347
                        {
 
348
                                case LeftPage:
 
349
                                        qName = CommonStrings::trMasterPageNormalLeft;
 
350
                                        break;
 
351
                                case RightPage:
 
352
                                        qName = CommonStrings::trMasterPageNormalRight;
 
353
                                        break;
 
354
                                case MiddlePage:
 
355
                                        qName = CommonStrings::trMasterPageNormalMiddle;
 
356
                                        break;
 
357
                        }
 
358
                }
 
359
                ScCore->primaryMainWindow()->slotNewPageP(locreal, qName);
 
360
        }
 
361
}
 
362
 
 
363
/*!
 
364
 \fn scribus_importpage(PyObject*,  PyObject* args)
 
365
 \author Alessandro Pira <alex@alessandropira.org>
 
366
 \date 11-11-2007
 
367
 \param PyObject unused reference
 
368
 \param args Python function args ("fromDoc", (pageList), [create, imortwhere, importwherePage])
 
369
 \retval Py_RETURN_NONE if ok, null if error
 
370
 */
 
371
PyObject *scribus_importpage(PyObject* /* self */, PyObject* args)
 
372
{
 
373
        char *doc = NULL;
 
374
        PyObject *pages = NULL;
 
375
        int createPageI = 1;
 
376
        int importWhere = 2;
 
377
        int importWherePage = 0;
 
378
 
 
379
        if (!PyArg_ParseTuple(args, "sO|iii", &doc, &pages, &createPageI, &importWhere, &importWherePage))
 
380
                return NULL;
 
381
        if(!checkHaveDocument())
 
382
                return NULL;
 
383
 
 
384
        if (!PyTuple_Check(pages))
 
385
        {
 
386
                PyErr_SetString(PyExc_TypeError, QObject::tr("second argument is not tuple: must be tuple of int values.","python error").toLocal8Bit().constData());
 
387
                return NULL;
 
388
        }
 
389
 
 
390
        Py_INCREF(pages);
 
391
        std::vector<int> pageNs;
 
392
        int i, n, p;
 
393
        n = PyTuple_Size(pages);
 
394
        for (i=0; i<n; i++)
 
395
        {
 
396
                if (!PyArg_Parse(PyTuple_GetItem(pages, i), "i", &p))
 
397
                {
 
398
                        PyErr_SetString(PyExc_TypeError, QObject::tr("second argument contains non-numeric values: must be list of int values.","python error").toLocal8Bit().constData());
 
399
                        Py_DECREF(pages);
 
400
                        return NULL;
 
401
                }
 
402
                pageNs.push_back(p);
 
403
        }
 
404
        Py_DECREF(pages);
 
405
 
 
406
        QString fromDoc = QString(doc);
 
407
        bool createPage = (createPageI != 0);
 
408
 
 
409
        int startPage=0, nrToImport=pageNs.size();
 
410
        bool doIt = true;
 
411
 
 
412
        if (ScCore->primaryMainWindow()->doc->masterPageMode())
 
413
        {
 
414
                if (nrToImport > 1)
 
415
                        ScCore->primaryMainWindow()->loadPage(fromDoc, pageNs[0] - 1, false);
 
416
                doIt = false;
 
417
        }
 
418
        else if (createPage)
 
419
        {
 
420
                if (importWhere == 0) //Before page
 
421
                        startPage = importWherePage;
 
422
                else if (importWhere == 1) //After page
 
423
                        startPage = importWherePage + 1;
 
424
                else //at end
 
425
                        startPage = ScCore->primaryMainWindow()->doc->DocPages.count() + 1;
 
426
 
 
427
                import_addpages(nrToImport, startPage);
 
428
        }
 
429
        else
 
430
        {
 
431
                startPage = ScCore->primaryMainWindow()->doc->currentPage()->pageNr() + 1;
 
432
                if (nrToImport > (ScCore->primaryMainWindow()->doc->DocPages.count() - ScCore->primaryMainWindow()->doc->currentPage()->pageNr()))
 
433
                {
 
434
                        int tmp=nrToImport - (ScCore->primaryMainWindow()->doc->DocPages.count() - ScCore->primaryMainWindow()->doc->currentPage()->pageNr());
 
435
                        import_addpages(tmp, ScCore->primaryMainWindow()->doc->DocPages.count());
 
436
                }
 
437
        }
 
438
 
 
439
        if (doIt)
 
440
        {
 
441
                if (nrToImport > 0)
 
442
                {
 
443
                        int counter = startPage + 1;
 
444
                        for (int i = 0; i < nrToImport; ++i)
 
445
                        {
 
446
                                ScCore->primaryMainWindow()->view->GotoPa(counter);
 
447
                                ScCore->primaryMainWindow()->loadPage(fromDoc, pageNs[i] - 1, false);
 
448
                                counter++;
 
449
                        }
 
450
                }
 
451
        }
 
452
 
 
453
        Py_RETURN_NONE;
 
454
}
 
455
 
 
456
 
320
457
/*! HACK: this removes "warning: 'blah' defined but not used" compiler warnings
321
458
with header files structure untouched (docstrings are kept near declarations)
322
459
PV */
323
460
void cmdpagedocwarnings()
324
461
{
325
462
    QStringList s;
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__;
 
463
    s << scribus_newpage__doc__        << scribus_pageposition__doc__
 
464
          << scribus_actualpage__doc__     << scribus_redraw__doc__
 
465
          << scribus_savepageeps__doc__    << scribus_deletepage__doc__
 
466
          << scribus_gotopage__doc__       << scribus_pagecount__doc__
 
467
          << scribus_getHguides__doc__     << scribus_setHguides__doc__
 
468
          << scribus_getVguides__doc__     << scribus_setVguides__doc__
 
469
          << scribus_pagedimension__doc__  << scribus_getpageitems__doc__
 
470
          << scribus_getpagemargins__doc__ << scribus_importpage__doc__;
327
471
}