Subversion Repositories Scribus

Rev

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