Subversion Repositories Scribus

Rev

Rev 5332 | Rev 5753 | Go to most recent revision | 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 "cmdobj.h"
8
#include "cmdutil.h"
3934 cbradney 9
#include "selection.h"
2529 craig 10
#include "util.h"
4546 subik 11
#include "commonstrings.h"
740 fschmid 12
 
3934 cbradney 13
 
2790 craig 14
PyObject *scribus_newrect(PyObject* /* self */, PyObject* args)
82 Franz 15
{
4520 subik 16
        double x, y, w, h;
934 subik 17
        char *Name = const_cast<char*>("");
4520 subik 18
        if (!PyArg_ParseTuple(args, "dddd|es", &x, &y, &w, &h, "utf-8", &Name))
82 Franz 19
                return NULL;
649 fschmid 20
        if(!checkHaveDocument())
21
                return NULL;
900 cbradney 22
        if (ItemExists(QString::fromUtf8(Name)))
720 subik 23
        {
1525 cbradney 24
                PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error"));
720 subik 25
                return NULL;
26
        }
4520 subik 27
        int i = ScMW->doc->itemAdd(PageItem::Polygon, PageItem::Rectangle,
28
                                                                pageUnitXToDocX(x), pageUnitYToDocY(y),
29
                                                                ValueToPoint(w), ValueToPoint(h),
30
                                                                ScMW->doc->toolSettings.dWidth,
31
                                                                ScMW->doc->toolSettings.dBrush, ScMW->doc->toolSettings.dPen, true);
4672 cbradney 32
        ScMW->doc->setRedrawBounding(ScMW->doc->Items->at(i));
2879 cbradney 33
        if (Name != "")
4026 craig 34
                ScMW->doc->Items->at(i)->setItemName(QString::fromUtf8(Name));
35
        return PyString_FromString(ScMW->doc->Items->at(i)->itemName().utf8());
82 Franz 36
}
37
 
243 Franz 38
 
2790 craig 39
PyObject *scribus_newellipse(PyObject* /* self */, PyObject* args)
82 Franz 40
{
4520 subik 41
        double x, y, w, h;
934 subik 42
        char *Name = const_cast<char*>("");
4520 subik 43
        if (!PyArg_ParseTuple(args, "dddd|es", &x, &y, &w, &h, "utf-8", &Name))
82 Franz 44
                return NULL;
649 fschmid 45
        if(!checkHaveDocument())
46
                return NULL;
4520 subik 47
        int i = ScMW->doc->itemAdd(PageItem::Polygon, PageItem::Ellipse,
48
                                                                                pageUnitXToDocX(x),
49
                                                                                pageUnitYToDocY(y),
50
                                                                                ValueToPoint(w),
51
                                                                                ValueToPoint(h),
4026 craig 52
                                                                                ScMW->doc->toolSettings.dWidth,
53
                                                                                ScMW->doc->toolSettings.dBrush,
54
                                                                                ScMW->doc->toolSettings.dPen,
3690 cbradney 55
                                                                                true);
900 cbradney 56
        if (ItemExists(QString::fromUtf8(Name)))
720 subik 57
        {
1525 cbradney 58
                PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error"));
720 subik 59
                return NULL;
60
        }
4672 cbradney 61
        ScMW->doc->setRedrawBounding(ScMW->doc->Items->at(i));
2879 cbradney 62
        if (Name != "")
4026 craig 63
                ScMW->doc->Items->at(i)->setItemName(QString::fromUtf8(Name));
64
        return PyString_FromString(ScMW->doc->Items->at(i)->itemName().utf8());
82 Franz 65
}
66
 
243 Franz 67
 
2790 craig 68
PyObject *scribus_newimage(PyObject* /* self */, PyObject* args)
82 Franz 69
{
3292 cbradney 70
        double x, y, w, h;
934 subik 71
        char *Name = const_cast<char*>("");
3292 cbradney 72
        if (!PyArg_ParseTuple(args, "dddd|es", &x, &y, &w, &h, "utf-8", &Name))
82 Franz 73
                return NULL;
649 fschmid 74
        if(!checkHaveDocument())
75
                return NULL;
4520 subik 76
        int i = ScMW->doc->itemAdd(PageItem::ImageFrame, PageItem::Unspecified,
77
                                                                        pageUnitXToDocX(x),
78
                                                                        pageUnitYToDocY(y),
79
                                                                        ValueToPoint(w),
80
                                                                        ValueToPoint(h),
81
                                                                        1, ScMW->doc->toolSettings.dBrushPict,
4546 subik 82
                                                                        CommonStrings::None, true);
900 cbradney 83
        if (ItemExists(QString::fromUtf8(Name)))
720 subik 84
        {
1525 cbradney 85
                PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error"));
720 subik 86
                return NULL;
87
        }
4672 cbradney 88
        ScMW->doc->setRedrawBounding(ScMW->doc->Items->at(i));
2879 cbradney 89
        if (Name != "")
4026 craig 90
                ScMW->doc->Items->at(i)->setItemName(QString::fromUtf8(Name));
91
        return PyString_FromString(ScMW->doc->Items->at(i)->itemName().utf8());
82 Franz 92
}
93
 
243 Franz 94
 
2790 craig 95
PyObject *scribus_newtext(PyObject* /* self */, PyObject* args)
82 Franz 96
{
4520 subik 97
        double x, y, w, h;
934 subik 98
        char *Name = const_cast<char*>("");
4520 subik 99
        if (!PyArg_ParseTuple(args, "dddd|es", &x, &y, &w, &h, "utf-8", &Name))
82 Franz 100
                return NULL;
649 fschmid 101
        if(!checkHaveDocument())
102
                return NULL;
4520 subik 103
        int i = ScMW->doc->itemAdd(PageItem::TextFrame, PageItem::Unspecified,
104
                                                                pageUnitXToDocX(x),
105
                                                                pageUnitYToDocY(y),
106
                                                                ValueToPoint(w),
107
                                                                ValueToPoint(h),
4546 subik 108
                                                                ScMW->doc->toolSettings.dWidth, CommonStrings::None,
4520 subik 109
                                                                ScMW->doc->toolSettings.dPenText, true);
900 cbradney 110
        if (ItemExists(QString::fromUtf8(Name)))
332 Franz 111
        {
1525 cbradney 112
                PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error"));
720 subik 113
                return NULL;
332 Franz 114
        }
4672 cbradney 115
        ScMW->doc->setRedrawBounding(ScMW->doc->Items->at(i));
2879 cbradney 116
        if (Name != "")
4026 craig 117
                ScMW->doc->Items->at(i)->setItemName(QString::fromUtf8(Name));
118
        return PyString_FromString(ScMW->doc->Items->at(i)->itemName().utf8());
82 Franz 119
}
120
 
2790 craig 121
PyObject *scribus_newline(PyObject* /* self */, PyObject* args)
82 Franz 122
{
4520 subik 123
        double x, y, w, h;
934 subik 124
        char *Name = const_cast<char*>("");
4520 subik 125
        if (!PyArg_ParseTuple(args, "dddd|es", &x, &y, &w, &h, "utf-8", &Name))
82 Franz 126
                return NULL;
649 fschmid 127
        if(!checkHaveDocument())
128
                return NULL;
2029 craig 129
        x = pageUnitXToDocX(x);
1283 subik 130
        y = pageUnitYToDocY(y);
4520 subik 131
        w = pageUnitXToDocX(w);
1283 subik 132
        h = pageUnitYToDocY(h);
900 cbradney 133
        if (ItemExists(QString::fromUtf8(Name)))
720 subik 134
        {
5332 subik 135
                PyErr_SetString(NameExistsError,
136
                                                QObject::tr("An object with the requested name already exists.",
137
                                                                        "python error"));
720 subik 138
                return NULL;
139
        }
5332 subik 140
        int i = ScMW->doc->itemAdd(PageItem::Line, PageItem::Unspecified,
141
                                                           x, y, w, h,
142
                                                           ScMW->doc->toolSettings.dWidth,
143
                                                           ScMW->doc->toolSettings.dBrush,
144
                                                           ScMW->doc->toolSettings.dPen, true);
4026 craig 145
        PageItem *it = ScMW->doc->Items->at(i);
5332 subik 146
        it->setRotation(xy2Deg(w-x, h-y));
147
        it->setWidthHeight(sqrt(pow(x-w, 2.0) + pow(y-h, 2.0)), 1.0);
148
        it->Sizing = false;
149
        it->updateClip();
150
        ScMW->doc->setRedrawBounding(it);
151
/* WTF? maybe I'll examine who's author later. Or maybe I'll remove it later ;)
82 Franz 152
        it->PoLine.resize(4);
153
        it->PoLine.setPoint(0, 0, 0);
154
        it->PoLine.setPoint(1, 0, 0);
4520 subik 155
        it->PoLine.setPoint(2, w-x, h-y);
156
        it->PoLine.setPoint(3, w-x, h-y);
1065 cbradney 157
        FPoint np2 = getMinClipF(&it->PoLine);
82 Franz 158
        if (np2.x() < 0)
647 fschmid 159
        {
82 Franz 160
                it->PoLine.translate(-np2.x(), 0);
4026 craig 161
                ScMW->view->MoveItem(np2.x(), 0, it);
647 fschmid 162
        }
82 Franz 163
        if (np2.y() < 0)
647 fschmid 164
        {
82 Franz 165
                it->PoLine.translate(0, -np2.y());
4026 craig 166
                ScMW->view->MoveItem(0, np2.y(), it);
647 fschmid 167
        }
5332 subik 168
        ScMW->view->SizeItem(it->PoLine.WidthHeight().x(),
169
                                                 it->PoLine.WidthHeight().y(), i, false, false, false);
170
        ScMW->view->AdjustItemSize(it);*/
2879 cbradney 171
        if (Name != "")
1361 tsoots 172
                it->setItemName(QString::fromUtf8(Name));
173
        return PyString_FromString(it->itemName().utf8());
82 Franz 174
}
175
 
243 Franz 176
 
2790 craig 177
PyObject *scribus_polyline(PyObject* /* self */, PyObject* args)
82 Franz 178
{
934 subik 179
        char *Name = const_cast<char*>("");
82 Franz 180
        PyObject *il;
900 cbradney 181
        // FIXME: PyList_Check failing will cause the function to return NULL w/o an exception. Separarate out the check.
182
        if ((!PyArg_ParseTuple(args, "O|es", &il, "utf-8", &Name)) || (!PyList_Check(il)))
82 Franz 183
                return NULL;
649 fschmid 184
        if(!checkHaveDocument())
185
                return NULL;
87 Franz 186
        int len = PyList_Size(il);
720 subik 187
        if (len < 4)
188
        {
1525 cbradney 189
                PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain at least two points (four values).","python error"));
720 subik 190
                return NULL;
191
        }
192
        if ((len % 2) != 0)
193
        {
1525 cbradney 194
                PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain an even number of values.","python error"));
720 subik 195
                return NULL;
196
        }
900 cbradney 197
        if (ItemExists(QString::fromUtf8(Name)))
720 subik 198
        {
1525 cbradney 199
                PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error"));
720 subik 200
                return NULL;
201
        }
4520 subik 202
        double x, y, w, h;
237 Franz 203
        int i = 0;
1283 subik 204
        x = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 205
        i++;
1283 subik 206
        y = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 207
        i++;
4026 craig 208
        int ic = ScMW->doc->itemAdd(PageItem::PolyLine, PageItem::Unspecified, x, y, 1, 1,      ScMW->doc->toolSettings.dWidth, ScMW->doc->toolSettings.dBrush, ScMW->doc->toolSettings.dPen, true);
209
        PageItem *it = ScMW->doc->Items->at(ic);
82 Franz 210
        it->PoLine.resize(2);
211
        it->PoLine.setPoint(0, 0, 0);
212
        it->PoLine.setPoint(1, 0, 0);
87 Franz 213
        int pp = 6;
82 Franz 214
        for (i = 2; i < len - 2; i += 2)
647 fschmid 215
        {
4520 subik 216
                w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
1283 subik 217
                h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+1))));
82 Franz 218
                it->PoLine.resize(pp);
4520 subik 219
                it->PoLine.setPoint(pp-4, w-x, h-y);
220
                it->PoLine.setPoint(pp-3, w-x, h-y);
221
                it->PoLine.setPoint(pp-2, w-x, h-y);
222
                it->PoLine.setPoint(pp-1, w-x, h-y);
82 Franz 223
                pp += 4;
647 fschmid 224
        }
82 Franz 225
        pp -= 2;
4520 subik 226
        w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-2))));
1283 subik 227
        h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-1))));
82 Franz 228
        it->PoLine.resize(pp);
4520 subik 229
        it->PoLine.setPoint(pp-2, w-x, h-y);
230
        it->PoLine.setPoint(pp-1, w-x, h-y);
1065 cbradney 231
        FPoint np2 = getMinClipF(&it->PoLine);
82 Franz 232
        if (np2.x() < 0)
647 fschmid 233
        {
82 Franz 234
                it->PoLine.translate(-np2.x(), 0);
4026 craig 235
                ScMW->view->MoveItem(np2.x(), 0, it);
647 fschmid 236
        }
82 Franz 237
        if (np2.y() < 0)
647 fschmid 238
        {
82 Franz 239
                it->PoLine.translate(0, -np2.y());
4026 craig 240
                ScMW->view->MoveItem(0, np2.y(), it);
647 fschmid 241
        }
5332 subik 242
        ScMW->view->SizeItem(it->PoLine.WidthHeight().x(), it->PoLine.WidthHeight().y(), ic, false, false, false);
4026 craig 243
        ScMW->view->AdjustItemSize(it);
2879 cbradney 244
        if (Name != "")
720 subik 245
        {
1361 tsoots 246
                it->setItemName(QString::fromUtf8(Name));
720 subik 247
        }
1361 tsoots 248
        return PyString_FromString(it->itemName().utf8());
82 Franz 249
}
250
 
243 Franz 251
 
2790 craig 252
PyObject *scribus_polygon(PyObject* /* self */, PyObject* args)
82 Franz 253
{
934 subik 254
        char *Name = const_cast<char*>("");
82 Franz 255
        PyObject *il;
900 cbradney 256
        // FIXME: PyList_Check failing will cause the function to return NULL w/o an exception. Separarate out the check.
257
        if ((!PyArg_ParseTuple(args, "O|es", &il, "utf-8", &Name)) || (!PyList_Check(il)))
82 Franz 258
                return NULL;
649 fschmid 259
        if(!checkHaveDocument())
260
                return NULL;
87 Franz 261
        int len = PyList_Size(il);
720 subik 262
        if (len < 6)
263
        {
1525 cbradney 264
                PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain at least three points (six values).","python error"));
720 subik 265
                return NULL;
266
        }
267
        if ((len % 2) != 0)
268
        {
1525 cbradney 269
                PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain an even number of values.","python error"));
720 subik 270
                return NULL;
271
        }
900 cbradney 272
        if (ItemExists(QString::fromUtf8(Name)))
720 subik 273
        {
1525 cbradney 274
                PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error"));
720 subik 275
                return NULL;
276
        }
4520 subik 277
        double x, y, w, h;
237 Franz 278
        int i = 0;
1283 subik 279
        x = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 280
        i++;
1283 subik 281
        y = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 282
        i++;
4026 craig 283
        int ic = ScMW->doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, x, y, 1, 1,       ScMW->doc->toolSettings.dWidth, ScMW->doc->toolSettings.dBrush, ScMW->doc->toolSettings.dPen, true);
284
        PageItem *it = ScMW->doc->Items->at(ic);
82 Franz 285
        it->PoLine.resize(2);
286
        it->PoLine.setPoint(0, 0, 0);
287
        it->PoLine.setPoint(1, 0, 0);
87 Franz 288
        int pp = 6;
82 Franz 289
        for (i = 2; i < len - 2; i += 2)
647 fschmid 290
        {
4520 subik 291
                w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
1283 subik 292
                h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+1))));
82 Franz 293
                it->PoLine.resize(pp);
4520 subik 294
                it->PoLine.setPoint(pp-4, w-x, h-y);
295
                it->PoLine.setPoint(pp-3, w-x, h-y);
296
                it->PoLine.setPoint(pp-2, w-x, h-y);
297
                it->PoLine.setPoint(pp-1, w-x, h-y);
82 Franz 298
                pp += 4;
647 fschmid 299
        }
4520 subik 300
        w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-2))));
1283 subik 301
        h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-1))));
82 Franz 302
        it->PoLine.resize(pp);
4520 subik 303
        it->PoLine.setPoint(pp-4, w-x, h-y);
304
        it->PoLine.setPoint(pp-3, w-x, h-y);
305
        it->PoLine.setPoint(pp-2, w-x, h-y);
306
        it->PoLine.setPoint(pp-1, w-x, h-y);
82 Franz 307
        pp += 2;
308
        it->PoLine.resize(pp);
309
        it->PoLine.setPoint(pp-2, 0, 0);
310
        it->PoLine.setPoint(pp-1, 0, 0);
1065 cbradney 311
        FPoint np2 = getMinClipF(&it->PoLine);
82 Franz 312
        if (np2.x() < 0)
647 fschmid 313
        {
82 Franz 314
                it->PoLine.translate(-np2.x(), 0);
4026 craig 315
                ScMW->view->MoveItem(np2.x(), 0, it);
647 fschmid 316
        }
82 Franz 317
        if (np2.y() < 0)
647 fschmid 318
        {
82 Franz 319
                it->PoLine.translate(0, -np2.y());
4026 craig 320
                ScMW->view->MoveItem(0, np2.y(), it);
647 fschmid 321
        }
5332 subik 322
        ScMW->view->SizeItem(it->PoLine.WidthHeight().x(), it->PoLine.WidthHeight().y(), ic, false, false, false);
4026 craig 323
        ScMW->view->AdjustItemSize(it);
2879 cbradney 324
        if (Name != "")
1361 tsoots 325
                it->setItemName(QString::fromUtf8(Name));
326
        return PyString_FromString(it->itemName().utf8());
82 Franz 327
}
328
 
2790 craig 329
PyObject *scribus_bezierline(PyObject* /* self */, PyObject* args)
82 Franz 330
{
934 subik 331
        char *Name = const_cast<char*>("");
82 Franz 332
        PyObject *il;
900 cbradney 333
        // FIXME: PyList_Check failing will cause the function to return NULL w/o an exception. Separarate out the check.
334
        if ((!PyArg_ParseTuple(args, "O|es", &il, "utf-8", &Name)) || (!PyList_Check(il)))
82 Franz 335
                return NULL;
649 fschmid 336
        if(!checkHaveDocument())
337
                return NULL;
87 Franz 338
        int len = PyList_Size(il);
720 subik 339
        if (len < 8)
340
        {
1525 cbradney 341
                PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain at least four points (eight values).","python error"));
720 subik 342
                return NULL;
343
        }
344
        if ((len % 6) != 0)
345
        {
1525 cbradney 346
                PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must have a multiple of six values.","python error"));
720 subik 347
                return NULL;
348
        }
900 cbradney 349
        if (ItemExists(QString::fromUtf8(Name)))
720 subik 350
        {
1525 cbradney 351
                PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error"));
720 subik 352
                return NULL;
353
        }
4520 subik 354
        double x, y, w, h, kx, ky, kx2, ky2;
237 Franz 355
        int i = 0;
1283 subik 356
        x = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 357
        i++;
1283 subik 358
        y = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 359
        i++;
1283 subik 360
        kx = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 361
        i++;
1283 subik 362
        ky = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 363
        i++;
1283 subik 364
        kx2 = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 365
        i++;
1283 subik 366
        ky2 = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
82 Franz 367
        i++;
4026 craig 368
        //int ic = ScMW->view->PaintPolyLine(x, y, 1, 1,        ScMW->doc->toolSettings.dWidth, ScMW->doc->toolSettings.dBrush, ScMW->doc->toolSettings.dPen);
369
        int ic = ScMW->doc->itemAdd(PageItem::PolyLine, PageItem::Unspecified, x, y, 1, 1,      ScMW->doc->toolSettings.dWidth, ScMW->doc->toolSettings.dBrush, ScMW->doc->toolSettings.dPen, true);
370
        PageItem *it = ScMW->doc->Items->at(ic);
82 Franz 371
        it->PoLine.resize(2);
372
        it->PoLine.setPoint(0, 0, 0);
373
        it->PoLine.setPoint(1, kx-x, ky-y);
87 Franz 374
        int pp = 6;
82 Franz 375
        for (i = 6; i < len - 6; i += 6)
647 fschmid 376
        {
4520 subik 377
                w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i))));
1283 subik 378
                h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+1))));
379
                kx = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+2))));
380
                ky = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+3))));
381
                kx2 = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+4))));
382
                ky2 = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+5))));
82 Franz 383
                it->PoLine.resize(pp);
4520 subik 384
                it->PoLine.setPoint(pp-4, w-x, h-y);
82 Franz 385
                it->PoLine.setPoint(pp-3, kx-x, ky-y);
386
                it->PoLine.setPoint(pp-2, it->PoLine.point(pp-4));
387
                it->PoLine.setPoint(pp-1, kx2-x, ky2-y);
388
                pp += 4;
647 fschmid 389
        }
82 Franz 390
        pp -= 2;
4520 subik 391
        w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-6))));
1283 subik 392
        h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-5))));
393
        kx = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-4))));
394
        ky = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-3))));
82 Franz 395
        it->PoLine.resize(pp);
4520 subik 396
        it->PoLine.setPoint(pp-2, w-x, h-y);
82 Franz 397
        it->PoLine.setPoint(pp-1, kx-x, ky-y);
1065 cbradney 398
        FPoint np2 = getMinClipF(&it->PoLine);
82 Franz 399
        if (np2.x() < 0)
647 fschmid 400
        {
82 Franz 401
                it->PoLine.translate(-np2.x(), 0);
4026 craig 402
                ScMW->view->MoveItem(np2.x(), 0, it);
647 fschmid 403
        }
82 Franz 404
        if (np2.y() < 0)
647 fschmid 405
        {
82 Franz 406
                it->PoLine.translate(0, -np2.y());
4026 craig 407
                ScMW->view->MoveItem(0, np2.y(), it);
647 fschmid 408
        }
5332 subik 409
        ScMW->view->SizeItem(it->PoLine.WidthHeight().x(), it->PoLine.WidthHeight().y(), ic, false, false, false);
4026 craig 410
        ScMW->view->AdjustItemSize(it);
2879 cbradney 411
        if (Name != "")
1361 tsoots 412
                it->setItemName(QString::fromUtf8(Name));
413
        return PyString_FromString(it->itemName().utf8());
82 Franz 414
}
415
 
243 Franz 416
 
417
/* 03/31/2004 - xception handling
418
 */
2790 craig 419
PyObject *scribus_pathtext(PyObject* /* self */, PyObject* args)
82 Franz 420
{
421
        double x, y;
934 subik 422
        char *Name = const_cast<char*>("");
423
        char *TextB = const_cast<char*>("");
424
        char *PolyB = const_cast<char*>("");
900 cbradney 425
        if (!PyArg_ParseTuple(args, "ddeses|es", &x, &y, "utf-8", &TextB, "utf-8", &PolyB, "utf-8", &Name))
82 Franz 426
                return NULL;
649 fschmid 427
        if(!checkHaveDocument())
428
                return NULL;
900 cbradney 429
        if (ItemExists(QString::fromUtf8(Name)))
720 subik 430
        {
1525 cbradney 431
                PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error"));
720 subik 432
                return NULL;
433
        }
434
        //FIXME: Why use GetItem not GetUniqueItem? Maybe use GetUniqueItem and use the exceptions
435
        // its sets for us?
900 cbradney 436
        int i = GetItem(QString::fromUtf8(TextB));
437
        int ii = GetItem(QString::fromUtf8(PolyB));
82 Franz 438
        if ((i == -1) || (ii == -1))
243 Franz 439
        {
1525 cbradney 440
                PyErr_SetString(NotFoundError, QObject::tr("Object not found.","python error"));
243 Franz 441
                return NULL;
442
        }
4847 cbradney 443
        ScMW->doc->m_Selection->clear();
444
        ScMW->doc->m_Selection->addItem(ScMW->doc->Items->at(i));
445
        ScMW->doc->m_Selection->addItem(ScMW->doc->Items->at(ii));
4026 craig 446
        PageItem *it = ScMW->doc->Items->at(i);
447
        ScMW->view->ToPathText();
448
        ScMW->view->MoveItem(pageUnitXToDocX(x) - it->xPos(), pageUnitYToDocY(y) - it->yPos(), it);
2879 cbradney 449
        if (Name != "")
1361 tsoots 450
                it->setItemName(QString::fromUtf8(Name));
451
        return PyString_FromString(it->itemName().utf8());
82 Franz 452
}
453
 
243 Franz 454
 
237 Franz 455
/* 03/21/2004 - exception raised when Name doesn't exists. Doesn't crash then. (subik)
456
 */
2790 craig 457
PyObject *scribus_deleteobj(PyObject* /* self */, PyObject* args)
82 Franz 458
{
934 subik 459
        char *Name = const_cast<char*>("");
900 cbradney 460
        if (!PyArg_ParseTuple(args, "|es", "utf-8", &Name))
82 Franz 461
                return NULL;
649 fschmid 462
        if(!checkHaveDocument())
463
                return NULL;
900 cbradney 464
        PageItem *i = GetUniqueItem(QString::fromUtf8(Name));
720 subik 465
        if (i == NULL)
332 Franz 466
                return NULL;
4847 cbradney 467
        ScMW->doc->m_Selection->clear();
468
        ScMW->doc->m_Selection->addItem(i);
4707 cbradney 469
        ScMW->doc->itemSelection_DeleteItem();
647 fschmid 470
        Py_INCREF(Py_None);
82 Franz 471
        return Py_None;
472
}
473
 
243 Franz 474
 
237 Franz 475
/* 03/21/2004 - exception raises by non existent name (subik)
476
 */
2790 craig 477
PyObject *scribus_textflow(PyObject* /* self */, PyObject* args)
214 Franz 478
{
934 subik 479
        char *name = const_cast<char*>("");
332 Franz 480
        int state = -1;
214 Franz 481
 
900 cbradney 482
        if (!PyArg_ParseTuple(args, "es|i", "utf-8", &name, &state))
214 Franz 483
                return NULL;
649 fschmid 484
        if(!checkHaveDocument())
485
                return NULL;
900 cbradney 486
        PageItem *i = GetUniqueItem(QString::fromUtf8(name));
332 Franz 487
        if (i == NULL)
237 Franz 488
                return NULL;
214 Franz 489
        if (state == -1)
5620 jghali 490
        {
491
                if (i->textFlowAroundObject())
492
                        i->setTextFlowMode(PageItem::TextFlowDisabled);
493
                else
494
                        i->setTextFlowMode(PageItem::TextFlowUsesFrameShape);
495
        }
496
        else if( state == (int) PageItem::TextFlowDisabled )
497
                i->setTextFlowMode(PageItem::TextFlowDisabled);
498
        else if( state == (int) PageItem::TextFlowUsesFrameShape )
499
                i->setTextFlowMode(PageItem::TextFlowUsesFrameShape);
500
        else if( state == (int) PageItem::TextFlowUsesBoundingBox )
501
                i->setTextFlowMode(PageItem::TextFlowUsesBoundingBox);
502
        else if( state == (int) PageItem::TextFlowUsesContourLine )
503
                i->setTextFlowMode(PageItem::TextFlowUsesContourLine);
4026 craig 504
        ScMW->view->DrawNew();
505
        ScMW->slotDocCh(true);
647 fschmid 506
        Py_INCREF(Py_None);
214 Franz 507
        return Py_None;
508
}
243 Franz 509
 
510
 
2790 craig 511
PyObject *scribus_objectexists(PyObject* /* self */, PyObject* args)
243 Franz 512
{
934 subik 513
        char* name = const_cast<char*>("");
900 cbradney 514
        if (!PyArg_ParseTuple(args, "|es", "utf-8", &name))
243 Franz 515
                return NULL;
649 fschmid 516
        if(!checkHaveDocument())
517
                return NULL;
900 cbradney 518
        if (ItemExists(QString::fromUtf8(name)))
720 subik 519
                return PyBool_FromLong(static_cast<long>(true));
520
        return PyBool_FromLong(static_cast<long>(false));
243 Franz 521
}
522
 
411 Franz 523
/*
524
 * Craig Ringer, 2004-09-09
525
 * Apply the named style to the currently selected object.
526
 * pv, 2004-09-13, optionaly param objectName + "check the page" stuff
527
 */
2790 craig 528
PyObject *scribus_setstyle(PyObject* /* self */, PyObject* args)
411 Franz 529
{
934 subik 530
        char *style = const_cast<char*>("");
531
        char *name = const_cast<char*>("");
900 cbradney 532
        if (!PyArg_ParseTuple(args, "es|es", "utf-8", &style, "utf-8", &name))
411 Franz 533
                return NULL;
649 fschmid 534
        if(!checkHaveDocument())
535
                return NULL;
900 cbradney 536
        PageItem *item = GetUniqueItem(QString::fromUtf8(name));
720 subik 537
        if (item == NULL)
538
                return NULL;
1460 cbradney 539
        if ((item->itemType() == PageItem::TextFrame) || (item->itemType() == PageItem::PathText))
411 Franz 540
        {
3718 cbradney 541
                // First, find the style number associated with the requested style
542
                // by scanning through the styles looking for the name. If
543
                // we can't find it, raise PyExc_Exception.
544
                // FIXME: Should use a more specific exception.
411 Franz 545
                bool found = false;
546
                uint styleid = 0;
547
                // We start at zero here because it's OK to match an internal name
4026 craig 548
                uint docParagraphStylesCount=ScMW->doc->docParagraphStyles.count();
3718 cbradney 549
                for (uint i=0; i < docParagraphStylesCount; ++i)
411 Franz 550
                {
5184 avox 551
                        if (ScMW->doc->docParagraphStyles[i].name() == QString::fromUtf8(style)) {
411 Franz 552
                                found = true;
553
                                styleid = i;
554
                                break;
555
                        }
556
                }
557
                if (!found) {
558
                        // whoops, the user specified an invalid style, complain loudly.
1525 cbradney 559
                        PyErr_SetString(NotFoundError, QObject::tr("Style not found.","python error"));
411 Franz 560
                        return NULL;
561
                }
3748 subik 562
                // for current item only
4847 cbradney 563
                if (ScMW->doc->m_Selection->count() == 0 || name != "")
3748 subik 564
                {
565
                        // quick hack to always apply on the right frame - pv
4026 craig 566
                        ScMW->view->Deselect(true);
3748 subik 567
                        //CB I dont think we need to draw here. Its faster if we dont.
4026 craig 568
                        ScMW->view->SelectItem(item, false);
3748 subik 569
                        // Now apply the style.
4042 subik 570
                        int mode = ScMW->doc->appMode;
571
                        ScMW->doc->appMode = modeEdit;
4026 craig 572
                        ScMW->setNewAbStyle(styleid);
4042 subik 573
                        ScMW->doc->appMode = mode;
3748 subik 574
                }
575
                else // for multiple selection
576
                {
4042 subik 577
                        int mode = ScMW->doc->appMode;
578
                        ScMW->doc->appMode = modeEdit;
4847 cbradney 579
                        for (int i = 0; i < ScMW->doc->m_Selection->count(); ++i)
580
                                ScMW->doc->chAbStyle(ScMW->doc->m_Selection->itemAt(i), styleid);
4042 subik 581
                        ScMW->doc->appMode = mode;
3748 subik 582
                }
411 Franz 583
        }
720 subik 584
        else
585
        {
1525 cbradney 586
                PyErr_SetString(WrongFrameTypeError, QObject::tr("Cannot set style on a non-text frame.","python error"));
720 subik 587
                return NULL;
588
        }
411 Franz 589
        Py_INCREF(Py_None);
590
        return Py_None;
591
}
592
 
593
/*
594
 * Craig Ringer, 2004-09-09
595
 * Enumerate all known paragraph styles
596
 */
2790 craig 597
PyObject *scribus_getstylenames(PyObject* /* self */)
411 Franz 598
{
599
        PyObject *styleList;
649 fschmid 600
        if(!checkHaveDocument())
601
                return NULL;
411 Franz 602
        styleList = PyList_New(0);
603
        /*
421 Franz 604
        We start at 5 because the lower styles are internal names.
605
        pv - changet to get all (with system) objects
649 fschmid 606
        FIXME: this should be a constant defined by the scribus core
421 Franz 607
        */
4026 craig 608
        for (uint i=0; i < ScMW->doc->docParagraphStyles.count(); ++i)
411 Franz 609
        {
5184 avox 610
                if (PyList_Append(styleList, PyString_FromString(ScMW->doc->docParagraphStyles[i].name().utf8())))
411 Franz 611
                {
612
                        // An exception will have already been set by PyList_Append apparently.
613
                        return NULL;
614
                }
615
        }
616
        return styleList;
617
}