Subversion Repositories Scribus

Rev

Rev 222 | Rev 243 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
82 Franz 1
/***************************************************************************
2
                          scriptplugin.cpp  -  description
3
                             -------------------
4
    begin                : Thu Oct 3 08:00:00 CEST 2002
5
    copyright            : (C) 2002 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
104 Franz 17
#include "Python.h"
103 Franz 18
#include "cmddialog.h"
19
#include "cmddoc.h"
20
#include "cmdpage.h"
21
#include "cmdobj.h"
22
#include "cmdgetprop.h"
23
#include "cmdsetprop.h"
24
#include "cmdtext.h"
25
#include "cmdmani.h"
26
#include "cmdcolor.h"
27
#include "cmdmisc.h"
82 Franz 28
#include "scriptplugin.h"
29
#include "scriptplugin.moc"
103 Franz 30
#include "cmdutil.h"
31
#include "cmdvar.h"
203 Franz 32
#include "guiapp.h"
82 Franz 33
#include "customfdialog.h"
34
#include "helpbrowser.h"
128 Franz 35
 
36
#if (_MSC_VER >= 1200)
37
 #include "win-config.h"
38
#else
39
 #include "config.h"
40
#endif
41
 
82 Franz 42
#include <qmessagebox.h>
43
#include <qtextcodec.h>
44
#include <qdom.h>
45
#include <qtextstream.h>
46
#include <cstdlib>
47
 
48
QString Name()
49
{
91 Franz 50
  return QObject::tr("Scripter Manual...");
82 Franz 51
}
52
 
53
int Type()
54
{
55
        return 4;
56
}
57
 
58
void InitPlug(QWidget *d, ScribusApp *plug)
59
{
60
        QString cm;
61
        Py_Initialize();
62
        Carrier = plug;
63
        RetVal = 0;
64
        initscribus(Carrier);
65
        Tes = new MenuTest(d);
66
        men = new QPopupMenu();
67
        Tes->rmen = new QPopupMenu();
222 Franz 68
        Tes->smen = new QPopupMenu();
82 Franz 69
        Tes->SavedRecentScripts.clear();
70
        Tes->ReadPlugPrefs();
222 Franz 71
        QString pfad = PREL;
72
        QString pfad2;
73
        pfad2 = pfad + "/share/scribus/scripts/";
74
        QDir ds(pfad2, "*.py", QDir::Name, QDir::Files | QDir::NoSymLinks);
75
        if ((ds.exists()) && (ds.count() != 0))
76
        {
77
                for (uint dc = 0; dc < ds.count(); ++dc)
78
                {
79
                        QFileInfo fs(ds[dc]);
80
                        Tes->smen->insertItem(fs.baseName(true));
81
                }
82
        }
82 Franz 83
        Tes->RecentScripts.clear();
84
        if (Tes->SavedRecentScripts.count() != 0)
85
                {
86
                uint max = QMIN(Carrier->Prefs.RecentDCount, Tes->SavedRecentScripts.count());
87 Franz 87
                for (uint m = 0; m < max; ++m)
82 Franz 88
                        {
89
                        QFileInfo fd(Tes->SavedRecentScripts[m]);
90
                        if (fd.exists())
91
                                {
92
                                Tes->RecentScripts.append(Tes->SavedRecentScripts[m]);
93
                                Tes->rmen->insertItem(Tes->SavedRecentScripts[m]);
94
                                }
95
                        }
96
                }
97
        Tes->pcon = new PConsole(d);
222 Franz 98
        Tes->smenid = men->insertItem(QObject::tr("Scribus Scripts"), Tes->smen);
82 Franz 99
        men->insertItem(QObject::tr("Execute Script..."), Tes, SLOT(slotTest()));
100
        Tes->rmenid = men->insertItem(QObject::tr("Recent Scripts"), Tes->rmen);
222 Franz 101
        men->insertSeparator();
82 Franz 102
        Tes->cons = men->insertItem(QObject::tr("Show Console"), Tes, SLOT(slotInteractiveScript()));
238 Franz 103
        plug->menuBar()->insertItem(QObject::tr("S&cript"), men, -1, plug->menuBar()->count() - 2);
82 Franz 104
        QObject::connect(Tes->pcon->OutWin, SIGNAL(returnPressed()), Tes, SLOT(slotExecute()));
105
        QObject::connect(Tes->pcon, SIGNAL(Schliessen()), Tes, SLOT(slotInteractiveScript()));
106
        QObject::connect(Tes->rmen, SIGNAL(activated(int)), Tes, SLOT(RecentScript(int)));
222 Franz 107
        QObject::connect(Tes->smen, SIGNAL(activated(int)), Tes, SLOT(StdScript(int)));
82 Franz 108
}
109
 
110
void CleanUpPlug()
111
{
112
        Py_Finalize();
113
        Tes->SavePlugPrefs();
114
}
115
 
116
void Run(QWidget *d, ScribusApp *plug)
117
{
118
        QString pfad = PREL;
119
        QString pfad2;
208 Franz 120
        pfad2 = pfad + "/share/scribus/doc/en/Scripter/index.html";
82 Franz 121
        HelpBrowser *dia = new HelpBrowser(0, QObject::tr("Online Reference"), pfad2);
122
        dia->show();
123
}
124
 
222 Franz 125
 
126
void MenuTest::FinishScriptRun()
127
{
128
        if (Carrier->HaveDoc)
129
                {
130
                Carrier->Mpal->SetDoc(Carrier->doc);
131
                Carrier->Mpal->updateCList();
132
                Carrier->Mpal->Spal->SetFormats(Carrier->doc);
133
                Carrier->Mpal->SetLineFormats(Carrier->doc);
134
                Carrier->Mpal->Cpal->SetColors(Carrier->doc->PageColors);
135
                Carrier->Lpal->setLayers(&Carrier->doc->Layers, &Carrier->doc->ActiveLayer);
136
                Carrier->Tpal->BuildTree(Carrier->view);
137
                Carrier->Sepal->SetView(Carrier->view);
138
                Carrier->Sepal->Rebuild();
139
                if (Carrier->doc->ActPage->SelItem.count() != 0)
140
                        Carrier->HaveNewSel(Carrier->doc->ActPage->SelItem.at(0)->PType);
141
                else
142
                        Carrier->HaveNewSel(-1);
143
                Carrier->view->DrawNew();
144
                }
145
}
146
 
82 Franz 147
void MenuTest::slotTest()
148
{
149
        QString fileName;
91 Franz 150
        QString CurDirP = QDir::currentDirPath();
151
        if (Carrier->Prefs.ScriptDir != "")
152
                QDir::setCurrent(Carrier->Prefs.ScriptDir);
82 Franz 153
        CustomFDialog diaf((QWidget*)parent(), QObject::tr("Open"), QObject::tr("Python Scripts (*.py);; All Files (*)"));
154
        if (diaf.exec())
155
                {
156
                fileName = diaf.selectedFile();
157
                slotRunScriptFile(fileName);
158
                rmen->clear();
159
                if (RecentScripts.findIndex(fileName) == -1)
160
                        RecentScripts.prepend(fileName);
161
                else
162
                        {
163
                        RecentScripts.remove(fileName);
164
                        RecentScripts.prepend(fileName);
165
                        }
166
                uint max = QMIN(Carrier->Prefs.RecentDCount, RecentScripts.count());
167
                for (uint m = 0; m < max; m++)
168
                        {
169
                        rmen->insertItem(RecentScripts[m]);
170
                        }
171
                }
91 Franz 172
        QDir::setCurrent(CurDirP);
222 Franz 173
        FinishScriptRun();
82 Franz 174
}
175
 
222 Franz 176
void MenuTest::StdScript(int id)
177
{
178
        QString pfad = PREL;
179
        QString pfad2;
180
        pfad2 = pfad + "/share/scribus/scripts/";
181
        QString fn = pfad2+smen->text(id)+".py";
182
        QFileInfo fd(fn);
183
        if (!fd.exists())
184
                return;
185
        slotRunScriptFile(fn);
186
        FinishScriptRun();
187
}
188
 
82 Franz 189
void MenuTest::RecentScript(int id)
190
{
191
        QString fn = rmen->text(id);
192
        QFileInfo fd(fn);
193
        if (!fd.exists())
194
                {
195
                RecentScripts.remove(fn);
196
                rmen->clear();
197
                uint max = QMIN(Carrier->Prefs.RecentDCount, RecentScripts.count());
198
                for (uint m = 0; m < max; m++)
199
                        {
200
                        rmen->insertItem(RecentScripts[m]);
201
                        }
202
                return;
203
                }
204
        slotRunScriptFile(fn);
222 Franz 205
        FinishScriptRun();
82 Franz 206
}
207
 
208
void MenuTest::slotRunScriptFile(QString fileName)
209
{
173 Franz 210
        Carrier->ScriptRunning = true;
182 Franz 211
        qApp->setOverrideCursor(QCursor(waitCursor), true);
82 Franz 212
        char* comm[1];
213
        QFileInfo fi(fileName);
214
        QCString na = fi.fileName().latin1();
215
        QDir::setCurrent(fi.dirPath(true));
216
        PyThreadState *stateo = PyEval_SaveThread();
217
        PyThreadState *state = Py_NewInterpreter();
218
        initscribus(Carrier);
219
        QString cm = "import sys\nsys.path[0] = \""+fi.dirPath(true)+"\"\n";
220
        cm += "try:\n\texecfile(\""+fileName+"\")\nexcept SystemExit:\n\tpass\n";
221
        QCString cmd = cm.latin1();
222
        comm[0] = na.data();
221 Franz 223
        // this code run the script and handles stderr redirection
224
        PyRun_SimpleString( "import sys, StringIO\nsys.stderr=sys._capture=StringIO.StringIO()\n");
225
        // call python script
82 Franz 226
        PySys_SetArgv(1, comm);
227
        PyRun_SimpleString(cmd.data());
221 Franz 228
        // and restore stderr
229
        PyObject* sysmod = PyImport_ImportModule("sys");
230
        PyObject* capobj = PyObject_GetAttrString(sysmod, "_capture");
231
        PyObject* strres = PyObject_CallMethod(capobj, "getvalue", 0);
232
        QString cres = QString(PyString_AsString(strres));
233
        // just tell the truth :)
234
        if (cres.length() > 0)
235
                QMessageBox::warning(Carrier,
236
                                tr("Script error"),
237
                                tr("If you are running an official script report it at <a href=\"http://bugs.scribus.net\">bugs.scribus.net</a> please.")
238
                                + "<br><br>"
239
                                + cres);
82 Franz 240
        Py_EndInterpreter(state);
241
        PyEval_RestoreThread(stateo);
173 Franz 242
        Carrier->ScriptRunning = false;
182 Franz 243
        qApp->setOverrideCursor(QCursor(arrowCursor), true);
82 Franz 244
}
245
 
246
QString MenuTest::slotRunScript(QString Script)
247
{
173 Franz 248
        Carrier->ScriptRunning = true;
182 Franz 249
        qApp->setOverrideCursor(QCursor(waitCursor), true);
82 Franz 250
        char* comm[1];
251
        QString cm;
252
        InValue = Script;
253
        QString CurDir = QDir::currentDirPath();
254
        if(PyThreadState_Get() != NULL)
255
                {
256
                initscribus(Carrier);
257
                if (RetVal == 0)
258
                        {
259
                        cm = "import sys\nsys.path[0] = \""+CurDir+"\"\n";
260
                        cm += "import cStringIO\n";
261
                        cm += "from scribus import *\n";
262
                        cm += "bu = cStringIO.StringIO()\n";
263
                        cm += "sys.stdout = bu\n";
264
                        cm += "sys.stderr = bu\n";
265
                        cm += "import code\n";
266
                        cm += "ia = code.InteractiveConsole(globals())\n";
267
                        }
268
                cm += "sc = getval()\n";
269
                cm += "rv = ia.push(sc)\n";
270
                cm += "if rv == 1:\n";
271
                cm += "\tre = \"...\"\n";
272
                cm += "else:\n";
273
                cm += "\tre = bu.getvalue()\n";
274
                cm += "retval(re, rv)\n";
275
                }
276
        QCString cmd = cm.latin1();
277
        comm[0] = "scribus";
278
        PySys_SetArgv(1, comm);
279
        PyRun_SimpleString(cmd.data());
280
        if (RetVal == 0)
281
                {
282
                RetString += ">>>";
283
                pcon->OutWin->Prompt = ">>>";
284
                }
285
        else
286
                pcon->OutWin->Prompt = "...";
173 Franz 287
        Carrier->ScriptRunning = false;
182 Franz 288
        qApp->setOverrideCursor(QCursor(arrowCursor), true);
82 Franz 289
        return RetString;
290
}
291
 
292
void MenuTest::slotInteractiveScript()
293
{
294
        if (pcon->isVisible())
295
                {
296
                men->changeItem(cons, tr("Show Console"));
297
                pcon->hide();
298
                }
299
        else
300
                {
301
                men->changeItem(cons, tr("Hide Console"));
302
                pcon->show();
303
                }
304
}
305
 
306
void MenuTest::slotExecute()
307
{
308
        pcon->OutWin->append(slotRunScript(pcon->OutWin->LastComm));
309
        pcon->OutWin->moveCursor(QTextEdit::MoveEnd, false);
310
        pcon->OutWin->scrollToBottom();
311
        pcon->OutWin->ensureCursorVisible();
222 Franz 312
        FinishScriptRun();
82 Franz 313
}
314
 
315
void MenuTest::ReadPlugPrefs()
316
{
317
        QDomDocument docu("scriptrc");
318
        QString ho = getenv("HOME");
319
        QFile f(ho+"/.scribus/scripter.rc");
320
        if(!f.open(IO_ReadOnly))
321
                return;
322
        if(!docu.setContent(&f))
323
                {
324
                f.close();
325
                return;
326
                }
327
        f.close();
328
        QDomElement elem=docu.documentElement();
329
        if (elem.tagName() != "SCRIPTRC")
330
                return;
331
        QDomNode DOC=elem.firstChild();
332
        while(!DOC.isNull())
333
                {
334
                QDomElement dc=DOC.toElement();
335
                if (dc.tagName()=="RECENT")
336
                        SavedRecentScripts.append(dc.attribute("NAME"));
337
                DOC=DOC.nextSibling();
338
                }
339
}
340
 
341
void MenuTest::SavePlugPrefs()
342
{
343
        QDomDocument docu("scriptrc");
344
        QString st="<SCRIPTRC></SCRIPTRC>";
345
        docu.setContent(st);
346
        QDomElement elem=docu.documentElement();
87 Franz 347
        for (uint rd=0; rd < Tes->RecentScripts.count(); ++rd)
82 Franz 348
                {
349
                QDomElement rde=docu.createElement("RECENT");
350
                rde.setAttribute("NAME",Tes->RecentScripts[rd]);
351
                elem.appendChild(rde);
352
                }
353
        QString ho = getenv("HOME");
354
        QFile f(ho+"/.scribus/scripter.rc");
355
        if(!f.open(IO_WriteOnly))
356
                return;
357
        QTextStream s(&f);
358
        s<<docu.toCString();
359
        f.close();
360
}
361
 
362
/****************************************************************************************/
363
/*                                                                                      */
364
/*   Definitionen der Python-Befehle                                                    */
365
/*                                                                                      */
366
/****************************************************************************************/
367
 
368
static PyObject *scribus_retval(PyObject *self, PyObject* args)
369
{
370
        char *Name;
371
        int retV;
372
        if (!PyArg_ParseTuple(args, "si", &Name, &retV))
373
                return NULL;
374
        RetString = QString(Name);
375
        RetVal = retV;
376
        return PyInt_FromLong(0L);
377
}
378
 
379
static PyObject *scribus_getval(PyObject *self, PyObject* args)
380
{
381
        if (!PyArg_ParseTuple(args, ""))
382
                return NULL;
383
        return PyString_FromString(InValue);
384
}
385
 
386
static PyMethodDef scribus_methods[] = {
213 Franz 387
     // petr's stuff
216 Franz 388
        {"GetPageItems", scribus_getpageitems, METH_VARARGS},
218 Franz 389
        {"TextFlowsAroundFrame", scribus_textflow, METH_VARARGS},
213 Franz 390
    {"GetXFontNames",    scribus_xfontnames,    METH_VARARGS},
391
    {"LinkTextFrames",    scribus_linktextframes,    METH_VARARGS},
392
    {"UnlinkTextFrames",    scribus_unlinktextframes,    METH_VARARGS},
203 Franz 393
    {"ProgressReset",    scribus_progressreset,    METH_VARARGS},
394
    {"ProgressTotal",    scribus_progresssettotalsteps,    METH_VARARGS},
395
    {"ProgressSet",    scribus_progresssetprogress,    METH_VARARGS},
396
    {"MessagebarText",    scribus_messagebartext,    METH_VARARGS},
204 Franz 397
    {"DocChanged",    scribus_docchanged,    METH_VARARGS},
203 Franz 398
    {"SetCursor",    scribus_setcursor,    METH_VARARGS},
201 Franz 399
        {"PageDimension",       scribus_pagedimension,  METH_VARARGS},
82 Franz 400
        {"NewDocDialog",                        scribus_newdocdia,                      METH_VARARGS},
401
        {"FileDialog",                          scribus_filedia,                                METH_VARARGS},
138 Franz 402
        {"StatusMessage",                       scribus_mess,                                           METH_VARARGS},
403
        {"MessageBox",                          scribus_messdia,                                METH_VARARGS},
82 Franz 404
        {"NewDoc",                                              scribus_newdoc,                                 METH_VARARGS},
405
        {"CloseDoc",                                    scribus_closedoc,                               METH_VARARGS},
406
        {"HaveDoc",                                             scribus_havedoc,                                METH_VARARGS},
407
        {"OpenDoc",                                             scribus_opendoc,                                METH_VARARGS},
408
        {"SaveDoc",                                             scribus_savedoc,                                METH_VARARGS},
409
        {"SaveDocAs",                                   scribus_savedocas,                      METH_VARARGS},
410
        {"SetInfo",                                             scribus_setinfo,                                METH_VARARGS},
411
        {"SetMargins",                          scribus_setmargins,                     METH_VARARGS},
412
        {"SetUnit",                                             scribus_setunit,                                METH_VARARGS},
413
        {"GetUnit",                                             scribus_getunit,                                METH_VARARGS},
414
        {"CurrentPage",                         scribus_actualpage,                     METH_VARARGS},
415
        {"SetRedraw",                                   scribus_setredraw,                      METH_VARARGS},
416
        {"RedrawAll",                                   scribus_redraw,                                 METH_VARARGS},
417
        {"SavePageAsEPS",                       scribus_savepageeps,            METH_VARARGS},
418
        {"NewPage",                                             scribus_newpage,                                METH_VARARGS},
419
        {"DeletePage",                          scribus_deletepage,                     METH_VARARGS},
420
        {"GotoPage",                                    scribus_gotopage,                               METH_VARARGS},
421
        {"PageCount",                                   scribus_pagecount,                      METH_VARARGS},
422
        {"CreateRect",                          scribus_newrect,                                METH_VARARGS},
423
        {"CreateEllipse",                       scribus_newellipse,                     METH_VARARGS},
424
        {"CreateImage",                         scribus_newimage,                               METH_VARARGS},
425
        {"CreateLine",                          scribus_newline,                                METH_VARARGS},
426
        {"CreatePolyLine",              scribus_polyline,                               METH_VARARGS},
427
        {"CreatePolygon",                       scribus_polygon,                                METH_VARARGS},
428
        {"CreateBezierLine",    scribus_bezierline,                     METH_VARARGS},
429
        {"CreatePathText",              scribus_pathtext,                               METH_VARARGS},
430
        {"CreateText",                          scribus_newtext,                                METH_VARARGS},
431
        {"DeleteObject",                        scribus_deleteobj,                      METH_VARARGS},
432
        {"GetFillColor",                        scribus_getfillcolor,           METH_VARARGS},
433
        {"GetLineColor",                        scribus_getlinecolor,           METH_VARARGS},
434
        {"GetLineWidth",                        scribus_getlinewidth,           METH_VARARGS},
435
        {"GetLineShade",                        scribus_getlineshade,           METH_VARARGS},
436
        {"GetLineJoin",                         scribus_getlinejoin,            METH_VARARGS},
437
        {"GetLineCap",                          scribus_getlineend,                     METH_VARARGS},
438
        {"GetLineStyle",                        scribus_getlinestyle,           METH_VARARGS},
439
        {"GetFillShade",                        scribus_getfillshade,           METH_VARARGS},
440
        {"GetCornerRadius",             scribus_getcornerrad,           METH_VARARGS},
441
        {"GetImageScale",                       scribus_getimgscale,            METH_VARARGS},
442
        {"GetImageFile",                        scribus_getimgname,                     METH_VARARGS},
443
        {"GetPosition",                         scribus_getposi,                                METH_VARARGS},
444
        {"GetSize",                                             scribus_getsize,                                METH_VARARGS},
445
        {"GetRotation",                         scribus_getrotation,            METH_VARARGS},
446
        {"GetFontSize",                         scribus_getfontsize,            METH_VARARGS},
447
        {"GetFont",                                             scribus_getfont,                                METH_VARARGS},
448
        {"GetTextLength",                       scribus_gettextsize,            METH_VARARGS},
449
        {"GetTextColor",                        scribus_getlinecolor,           METH_VARARGS},
450
        {"GetTextShade",                        scribus_getlineshade,           METH_VARARGS},
138 Franz 451
        {"GetColumns",                          scribus_getcolumns,                     METH_VARARGS},
452
        {"GetColumnGap",                        scribus_getcolumngap,           METH_VARARGS},
82 Franz 453
        {"GetLineSpacing",              scribus_getlinespace,           METH_VARARGS},
95 Franz 454
        {"GetText",                                             scribus_getframetext,           METH_VARARGS},
455
        {"GetAllText",                          scribus_gettext,                                METH_VARARGS},
82 Franz 456
        {"GetAllObjects",                       scribus_getallobj,                      METH_VARARGS},
457
        {"SetGradientFill",             scribus_setgradfill,            METH_VARARGS},
458
        {"SetFillColor",                        scribus_setfillcolor,           METH_VARARGS},
459
        {"SetLineColor",                        scribus_setlinecolor,           METH_VARARGS},
460
        {"SetMultiLine",                        scribus_setmultiline,           METH_VARARGS},
461
        {"SetLineWidth",                        scribus_setlinewidth,           METH_VARARGS},
462
        {"SetLineShade",                        scribus_setlineshade,           METH_VARARGS},
463
        {"SetLineJoin",                         scribus_setlinejoin,            METH_VARARGS},
464
        {"SetLineCap",                          scribus_setlineend,                     METH_VARARGS},
465
        {"SetLineStyle",                        scribus_setlinestyle,           METH_VARARGS},
466
        {"SetFillShade",                        scribus_setfillshade,           METH_VARARGS},
467
        {"SetCornerRadius",             scribus_setcornerrad,           METH_VARARGS},
468
        {"LoadImage",                                   scribus_loadimage,                      METH_VARARGS},
469
        {"ScaleImage",                          scribus_scaleimage,                     METH_VARARGS},
470
        {"SetText",                                             scribus_setboxtext,                     METH_VARARGS},
471
        {"InsertText",                          scribus_inserttext,                     METH_VARARGS},
472
        {"SelectText",                          scribus_selecttext,                     METH_VARARGS},
473
        {"DeleteText",                          scribus_deletetext,                     METH_VARARGS},
474
        {"SetFont",                                             scribus_setfont,                                METH_VARARGS},
475
        {"SetFontSize",                         scribus_setfontsize,            METH_VARARGS},
476
        {"SetTextColor",                        scribus_settextfill,            METH_VARARGS},
477
        {"SetTextStroke",                       scribus_settextstroke,  METH_VARARGS},
478
        {"SetTextShade",                        scribus_settextshade,           METH_VARARGS},
138 Franz 479
        {"SetColumns",                          scribus_setcolumns,                     METH_VARARGS},
480
        {"SetColumnGap",                        scribus_setcolumngap,           METH_VARARGS},
82 Franz 481
        {"SetLineSpacing",              scribus_setlinespace,           METH_VARARGS},
482
        {"SetTextAlignment",    scribus_setalign,                               METH_VARARGS},
483
        {"MoveObject",                          scribus_moveobjrel,                     METH_VARARGS},
484
        {"MoveObjectAbs",                       scribus_moveobjabs,                     METH_VARARGS},
485
        {"RotateObject",                        scribus_rotobjrel,                      METH_VARARGS},
486
        {"RotateObjectAbs",             scribus_rotobjabs,                      METH_VARARGS},
487
        {"SizeObject",                          scribus_sizeobjabs,                     METH_VARARGS},
488
        {"GroupObjects",                        scribus_groupobj,                               METH_VARARGS},
489
        {"UnGroupObject",                       scribus_ungroupobj,                     METH_VARARGS},
490
        {"ScaleGroup",                          scribus_scalegroup,                     METH_VARARGS},
491
        {"GetSelectedObject",   scribus_getselobjnam,           METH_VARARGS},
492
        {"SelectionCount",              scribus_selcount,                               METH_VARARGS},
493
        {"SelectObject",                        scribus_selectobj,                      METH_VARARGS},
494
        {"DeselectAll",                         scribus_deselect,                               METH_VARARGS},
495
        {"GetColorNames",                       scribus_colornames,                     METH_VARARGS},
496
        {"GetColor",                                    scribus_getcolor,                               METH_VARARGS},
497
        {"ChangeColor",                         scribus_setcolor,                               METH_VARARGS},
498
        {"DefineColor",                         scribus_newcolor,                               METH_VARARGS},
499
        {"DeleteColor",                         scribus_delcolor,                               METH_VARARGS},
500
        {"ReplaceColor",                        scribus_replcolor,                      METH_VARARGS},
501
        {"GetFontNames",                        scribus_fontnames,                      METH_VARARGS},
205 Franz 502
        {"RenderFont",                  scribus_renderfont,                     METH_VARARGS},
82 Franz 503
        {"GetLayers",                                   scribus_getlayers,                      METH_VARARGS},
504
        {"SetActiveLayer",              scribus_setactlayer,            METH_VARARGS},
505
        {"GetActiveLayer",              scribus_getactlayer,            METH_VARARGS},
506
        {"SentToLayer",                         scribus_senttolayer,            METH_VARARGS},
507
        {"SetLayerVisible",             scribus_layervisible,           METH_VARARGS},
508
        {"SetLayerPrintable",   scribus_layerprint,                     METH_VARARGS},
509
        {"IsLayerVisible",              scribus_glayervisib,            METH_VARARGS},
510
        {"IsLayerPrintable",    scribus_glayerprint,            METH_VARARGS},
511
        {"CreateLayer",                         scribus_createlayer,            METH_VARARGS},
512
        {"DeleteLayer",                         scribus_removelayer,            METH_VARARGS},
513
        {"retval",                                              scribus_retval,                                 METH_VARARGS},
514
        {"getval",                                              scribus_getval,                                 METH_VARARGS},
515
        {NULL,          NULL}           /* sentinel */
516
};
517
 
518
void initscribus(ScribusApp *pl)
519
{
520
        PyObject *m, *d;
521
        PyImport_AddModule("scribus");
522
        m = Py_InitModule("scribus", scribus_methods);
523
        d = PyModule_GetDict(m);
524
        PyDict_SetItemString(d, "Points",                                                               Py_BuildValue("i", 0));
525
        PyDict_SetItemString(d, "Millimeters",                                          Py_BuildValue("i", 1));
526
        PyDict_SetItemString(d, "Inches",                                                               Py_BuildValue("i", 2));
527
        PyDict_SetItemString(d, "Picas",                                                                        Py_BuildValue("i", 3));
528
        PyDict_SetItemString(d, "Portrait",                                                     Py_BuildValue("i", 0));
529
        PyDict_SetItemString(d, "Landscape",                                                    Py_BuildValue("i", 1));
530
        PyDict_SetItemString(d, "NoFacingPages",                                        Py_BuildValue("i", 0));
531
        PyDict_SetItemString(d, "FacingPages",                                          Py_BuildValue("i", 1));
532
        PyDict_SetItemString(d, "FirstPageRight",                               Py_BuildValue("i", 0));
533
        PyDict_SetItemString(d, "FirstPageLeft",                                        Py_BuildValue("i", 1));
534
        PyDict_SetItemString(d, "LeftAlign",                                                    Py_BuildValue("i", 0));
535
        PyDict_SetItemString(d, "RightAlign",                                           Py_BuildValue("i", 2));
536
        PyDict_SetItemString(d, "Centered",                                                             Py_BuildValue("i", 1));
537
        PyDict_SetItemString(d, "Forced",                                                                       Py_BuildValue("i", 3));
538
        PyDict_SetItemString(d, "NoGradient",                                                   Py_BuildValue("i", 0));
539
        PyDict_SetItemString(d, "HorizontalGradient",                   Py_BuildValue("i", 1));
540
        PyDict_SetItemString(d, "VerticalGradient",                             Py_BuildValue("i", 2));
541
        PyDict_SetItemString(d, "DiagonalGradient",                             Py_BuildValue("i", 3));
542
        PyDict_SetItemString(d, "CrossDiagonalGradient",        Py_BuildValue("i", 4));
543
        PyDict_SetItemString(d, "RadialGradient",                                       Py_BuildValue("i", 5));
544
        PyDict_SetItemString(d, "SolidLine",                                                    Py_BuildValue("i", Qt::SolidLine));
545
        PyDict_SetItemString(d, "DashLine",                                                             Py_BuildValue("i", Qt::DashLine));
546
        PyDict_SetItemString(d, "DotLine",                                                              Py_BuildValue("i", Qt::DotLine));
547
        PyDict_SetItemString(d, "DashDotLine",                                          Py_BuildValue("i", Qt::DashDotLine));
548
        PyDict_SetItemString(d, "DashDotDotLine",                                       Py_BuildValue("i", Qt::DashDotDotLine));
549
        PyDict_SetItemString(d, "MiterJoin",                                                    Py_BuildValue("i", Qt::MiterJoin));
550
        PyDict_SetItemString(d, "BevelJoin",                                                    Py_BuildValue("i", Qt::BevelJoin));
551
        PyDict_SetItemString(d, "RoundJoin",                                                    Py_BuildValue("i", Qt::RoundJoin));
552
        PyDict_SetItemString(d, "FlatCap",                                                              Py_BuildValue("i", Qt::FlatCap));
553
        PyDict_SetItemString(d, "SquareCap",                                                    Py_BuildValue("i", Qt::SquareCap));
554
        PyDict_SetItemString(d, "RoundCap",                                                             Py_BuildValue("i", Qt::RoundCap));
138 Franz 555
        PyDict_SetItemString(d, "NoButton",                                                             Py_BuildValue("i", QMessageBox::NoButton));
556
        PyDict_SetItemString(d, "Ok",                                                                                   Py_BuildValue("i", QMessageBox::Ok));
557
        PyDict_SetItemString(d, "Cancel",                                                                       Py_BuildValue("i", QMessageBox::Cancel));
558
        PyDict_SetItemString(d, "Yes",                                                                          Py_BuildValue("i", QMessageBox::Yes));
559
        PyDict_SetItemString(d, "No",                                                                                   Py_BuildValue("i", QMessageBox::No));
560
        PyDict_SetItemString(d, "Abort",                                                                        Py_BuildValue("i", QMessageBox::Abort));
561
        PyDict_SetItemString(d, "Retry",                                                                        Py_BuildValue("i", QMessageBox::Retry));
562
        PyDict_SetItemString(d, "Ignore",                                                                       Py_BuildValue("i", QMessageBox::Ignore));
563
        PyDict_SetItemString(d, "NoIcon",                                                                       Py_BuildValue("i", QMessageBox::NoIcon));
564
        PyDict_SetItemString(d, "Information",                                          Py_BuildValue("i", QMessageBox::Information));
565
        PyDict_SetItemString(d, "Warning",                                                              Py_BuildValue("i", QMessageBox::Warning));
566
        PyDict_SetItemString(d, "Critical",                                                             Py_BuildValue("i", QMessageBox::Critical));
82 Franz 567
        PyDict_SetItemString(d, "Paper_A0",                                                     Py_BuildValue("(ff)", 2380.0, 3368.0));
568
        PyDict_SetItemString(d, "Paper_A1",                                                     Py_BuildValue("(ff)", 1684.0, 2380.0));
569
        PyDict_SetItemString(d, "Paper_A2",                                                     Py_BuildValue("(ff)", 1190.0, 1684.0));
570
        PyDict_SetItemString(d, "Paper_A3",                                                     Py_BuildValue("(ff)", 842.0, 1190.0));
571
        PyDict_SetItemString(d, "Paper_A4",                                                     Py_BuildValue("(ff)", 595.0, 842.0));
572
        PyDict_SetItemString(d, "Paper_A5",                                                     Py_BuildValue("(ff)", 421.0, 595.0));
573
        PyDict_SetItemString(d, "Paper_A6",                                                     Py_BuildValue("(ff)", 297.0, 421.0));
574
        PyDict_SetItemString(d, "Paper_A7",                                                     Py_BuildValue("(ff)", 210.0, 297.0));
575
        PyDict_SetItemString(d, "Paper_A8",                                                     Py_BuildValue("(ff)", 148.0, 210.0));
576
        PyDict_SetItemString(d, "Paper_A9",                                                     Py_BuildValue("(ff)", 105.0, 148.0));
577
        PyDict_SetItemString(d, "Paper_B0",                                                     Py_BuildValue("(ff)", 2836.0, 4008.0));
578
        PyDict_SetItemString(d, "Paper_B1",                                                     Py_BuildValue("(ff)", 2004.0, 2836.0));
579
        PyDict_SetItemString(d, "Paper_B2",                                                     Py_BuildValue("(ff)", 1418.0, 2004.0));
580
        PyDict_SetItemString(d, "Paper_B3",                                                     Py_BuildValue("(ff)", 1002.0, 1418.0));
581
        PyDict_SetItemString(d, "Paper_B4",                                                     Py_BuildValue("(ff)", 709.0, 1002.0));
582
        PyDict_SetItemString(d, "Paper_B5",                                                     Py_BuildValue("(ff)", 501.0, 709.0));
583
        PyDict_SetItemString(d, "Paper_B6",                                                     Py_BuildValue("(ff)", 355.0, 501.0));
584
        PyDict_SetItemString(d, "Paper_B7",                                                     Py_BuildValue("(ff)", 250.0, 355.0));
585
        PyDict_SetItemString(d, "Paper_B8",                                                     Py_BuildValue("(ff)", 178.0, 250.0));
586
        PyDict_SetItemString(d, "Paper_B9",                                                     Py_BuildValue("(ff)", 125.0, 178.0));
587
        PyDict_SetItemString(d, "Paper_B10",                                                    Py_BuildValue("(ff)", 89.0, 125.0));
588
        PyDict_SetItemString(d, "Paper_C5E",                                                    Py_BuildValue("(ff)", 462.0, 649.0));
589
        PyDict_SetItemString(d, "Paper_Comm10E",                                        Py_BuildValue("(ff)", 298.0, 683.0));
590
        PyDict_SetItemString(d, "Paper_DLE",                                                    Py_BuildValue("(ff)", 312.0, 624.0));
591
        PyDict_SetItemString(d, "Paper_Executive",                              Py_BuildValue("(ff)", 542.0, 720.0));
592
        PyDict_SetItemString(d, "Paper_Folio",                                          Py_BuildValue("(ff)", 595.0, 935.0));
593
        PyDict_SetItemString(d, "Paper_Ledger",                                         Py_BuildValue("(ff)", 1224.0, 792.0));
594
        PyDict_SetItemString(d, "Paper_Legal",                                          Py_BuildValue("(ff)", 612.0, 1008.0));
595
        PyDict_SetItemString(d, "Paper_Letter",                                         Py_BuildValue("(ff)", 612.0, 792.0));
596
        PyDict_SetItemString(d, "Paper_Tabloid",                                        Py_BuildValue("(ff)", 792.0, 1224.0));
597
        Carrier = pl;
598
}
599