Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
103 Franz 1
#include "cmdmani.h"
2
#include "cmdutil.h"
82 Franz 3
 
935 subik 4
PyObject *scribus_loadimage(PyObject */*self*/, PyObject* args)
82 Franz 5
{
935 subik 6
        char *Name = const_cast<char*>("");
82 Franz 7
        char *Image;
877 cbradney 8
        if (!PyArg_ParseTuple(args, "es|es", "utf-8", &Image, "utf-8", &Name))
82 Franz 9
                return NULL;
535 subik 10
        if(!checkHaveDocument())
11
                return NULL;
877 cbradney 12
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
332 Franz 13
        if (item == NULL)
14
                return NULL;
857 cbradney 15
        if (item->PType != FRAME_IMAGE)
16
        {
17
                PyErr_SetString(WrongFrameTypeError, QObject::tr("Target is not an image frame.","python error"));
18
                return NULL;
19
        }
877 cbradney 20
        item->OwnPage->LoadPict(QString::fromUtf8(Image), item->ItemNr);
474 subik 21
        Py_INCREF(Py_None);
82 Franz 22
        return Py_None;
23
}
24
 
935 subik 25
PyObject *scribus_scaleimage(PyObject */*self*/, PyObject* args)
82 Franz 26
{
935 subik 27
        char *Name = const_cast<char*>("");
82 Franz 28
        double x, y;
877 cbradney 29
        if (!PyArg_ParseTuple(args, "dd|es", &x, &y, "utf-8", &Name))
82 Franz 30
                return NULL;
535 subik 31
        if(!checkHaveDocument())
32
                return NULL;
877 cbradney 33
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
719 subik 34
        if (item == NULL)
35
                return NULL;
857 cbradney 36
        if (!item->PType == FRAME_IMAGE)
332 Franz 37
        {
857 cbradney 38
                PyErr_SetString(WrongFrameTypeError, QObject::tr("Target is not an image frame.","python error"));
719 subik 39
                return NULL;
40
        }
857 cbradney 41
        item->LocalScX = x;
42
        item->LocalScY = y;
935 subik 43
        item->OwnPage->ChLocalSc(x, y);
1189 subik 44
        item->OwnPage->UpdatePic();
474 subik 45
        Py_INCREF(Py_None);
82 Franz 46
        return Py_None;
47
}
48
 
935 subik 49
PyObject *scribus_moveobjrel(PyObject */*self*/, PyObject* args)
82 Franz 50
{
935 subik 51
        char *Name = const_cast<char*>("");
82 Franz 52
        double x, y;
877 cbradney 53
        if (!PyArg_ParseTuple(args, "dd|es", &x, &y, "utf-8", &Name))
82 Franz 54
                return NULL;
535 subik 55
        if(!checkHaveDocument())
56
                return NULL;
877 cbradney 57
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
719 subik 58
        if (item == NULL)
59
                return NULL;
60
        if (item->OwnPage->GroupSel)
61
                item->OwnPage->moveGroup(ValueToPoint(x), ValueToPoint(y));
62
        else
63
                item->OwnPage->MoveItem(ValueToPoint(x), ValueToPoint(y), item);
474 subik 64
        Py_INCREF(Py_None);
82 Franz 65
        return Py_None;
66
}
67
 
935 subik 68
PyObject *scribus_moveobjabs(PyObject */*self*/, PyObject* args)
82 Franz 69
{
935 subik 70
        char *Name = const_cast<char*>("");
87 Franz 71
        double x, y;
877 cbradney 72
        if (!PyArg_ParseTuple(args, "dd|es", &x, &y, "utf-8", &Name))
82 Franz 73
                return NULL;
535 subik 74
        if(!checkHaveDocument())
75
                return NULL;
877 cbradney 76
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
719 subik 77
        if (item == NULL)
78
                return NULL;
79
        if (item->OwnPage->GroupSel)
332 Franz 80
        {
719 subik 81
                double x2, y2, w, h;
82
                item->OwnPage->getGroupRect(&x2, &y2, &w, &h);
83
                item->OwnPage->moveGroup(ValueToPoint(x) - x2, ValueToPoint(y) - y2);
332 Franz 84
        }
719 subik 85
        else
86
                //PageItem *b = Carrier->doc->ActPage->Items.at(i);
87
                item->OwnPage->MoveItem(ValueToPoint(x) - item->Xpos, ValueToPoint(y) - item->Ypos, item);
474 subik 88
        Py_INCREF(Py_None);
82 Franz 89
        return Py_None;
90
}
91
 
935 subik 92
PyObject *scribus_rotobjrel(PyObject */*self*/, PyObject* args)
82 Franz 93
{
935 subik 94
        char *Name = const_cast<char*>("");
82 Franz 95
        double x;
877 cbradney 96
        if (!PyArg_ParseTuple(args, "d|es", &x, "utf-8", &Name))
82 Franz 97
                return NULL;
535 subik 98
        if(!checkHaveDocument())
99
                return NULL;
877 cbradney 100
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
719 subik 101
        if (item == NULL)
102
                return NULL;
103
        item->OwnPage->RotateItem(item->Rot - x, item->ItemNr);
474 subik 104
        Py_INCREF(Py_None);
82 Franz 105
        return Py_None;
106
}
107
 
935 subik 108
PyObject *scribus_rotobjabs(PyObject */*self*/, PyObject* args)
82 Franz 109
{
935 subik 110
        char *Name = const_cast<char*>("");
82 Franz 111
        double x;
877 cbradney 112
        if (!PyArg_ParseTuple(args, "d|es", &x, "utf-8", &Name))
82 Franz 113
                return NULL;
535 subik 114
        if(!checkHaveDocument())
115
                return NULL;
877 cbradney 116
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
719 subik 117
        if (item == NULL)
118
                return NULL;
119
        item->OwnPage->RotateItem(x * -1.0, item->ItemNr);
474 subik 120
        Py_INCREF(Py_None);
82 Franz 121
        return Py_None;
122
}
123
 
935 subik 124
PyObject *scribus_sizeobjabs(PyObject */*self*/, PyObject* args)
82 Franz 125
{
935 subik 126
        char *Name = const_cast<char*>("");
82 Franz 127
        double x, y;
877 cbradney 128
        if (!PyArg_ParseTuple(args, "dd|es", &x, &y, "utf-8", &Name))
82 Franz 129
                return NULL;
535 subik 130
        if(!checkHaveDocument())
131
                return NULL;
877 cbradney 132
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
719 subik 133
        if (item == NULL)
134
                return NULL;
135
        item->OwnPage->SizeItem(ValueToPoint(x) - item->Xpos, ValueToPoint(y) - item->Ypos, item->ItemNr);
474 subik 136
        Py_INCREF(Py_None);
82 Franz 137
        return Py_None;
138
}
139
 
935 subik 140
PyObject *scribus_groupobj(PyObject */*self*/, PyObject* args)
82 Franz 141
{
935 subik 142
        char *Name = const_cast<char*>("");
82 Franz 143
        PyObject *il = 0;
144
        if (!PyArg_ParseTuple(args, "|O", &il))
145
                return NULL;
535 subik 146
        if(!checkHaveDocument())
147
                return NULL;
332 Franz 148
        Page *p = Carrier->doc->ActPage;
149
        uint ap = Carrier->doc->ActPage->PageNr;
82 Franz 150
        if (il != 0)
332 Franz 151
        {
87 Franz 152
                int len = PyList_Size(il);
82 Franz 153
                if (len == 0)
474 subik 154
                {
155
                        Py_INCREF(Py_None);
82 Franz 156
                        return Py_None;
474 subik 157
                }
87 Franz 158
                for (int i = 0; i < len; i++)
332 Franz 159
                {
877 cbradney 160
                        // FIXME: We might need to explicitly get this string as utf8
161
                        // but as sysdefaultencoding is utf8 it should be a no-op to do
162
                        // so anyway.
332 Franz 163
                        Name = PyString_AsString(PyList_GetItem(il, i));
877 cbradney 164
                        PageItem *ic = GetUniqueItem(QString::fromUtf8(Name));
719 subik 165
                        if (ic == NULL)
166
                                return NULL;
167
                        ic->OwnPage->SelectItemNr(ic->ItemNr);
168
                        p = ic->OwnPage;
82 Franz 169
                }
332 Franz 170
        }
171
        if (p->SelItem.count() != 0)
172
        {
173
                Carrier->view->GotoPage(p->PageNr);
82 Franz 174
                Carrier->GroupObj();
332 Franz 175
                p->Deselect();
176
                Carrier->view->GotoPage(ap);
177
        }
474 subik 178
        Py_INCREF(Py_None);
82 Franz 179
        return Py_None;
180
}
181
 
935 subik 182
PyObject *scribus_ungroupobj(PyObject */*self*/, PyObject* args)
82 Franz 183
{
935 subik 184
        char *Name = const_cast<char*>("");
877 cbradney 185
        if (!PyArg_ParseTuple(args, "|es", "utf-8", &Name))
82 Franz 186
                return NULL;
535 subik 187
        if(!checkHaveDocument())
188
                return NULL;
877 cbradney 189
        PageItem *i = GetUniqueItem(QString::fromUtf8(Name));
719 subik 190
        if (i == NULL)
191
                return NULL;
192
        uint p = Carrier->doc->ActPage->PageNr;
193
        Carrier->view->GotoPage(i->OwnPage->PageNr);
194
        Carrier->UnGroupObj();
195
        Carrier->view->GotoPage(p);
474 subik 196
        Py_INCREF(Py_None);
82 Franz 197
        return Py_None;
198
}
199
 
935 subik 200
PyObject *scribus_scalegroup(PyObject */*self*/, PyObject* args)
82 Franz 201
{
935 subik 202
        char *Name = const_cast<char*>("");
82 Franz 203
        double sc;
877 cbradney 204
        if (!PyArg_ParseTuple(args, "d|es", &sc, "utf-8", &Name))
82 Franz 205
                return NULL;
535 subik 206
        if(!checkHaveDocument())
207
                return NULL;
82 Franz 208
        if (sc == 0.0)
474 subik 209
        {
857 cbradney 210
                PyErr_SetString(PyExc_ValueError, QObject::tr("Can't scale by 0%","python error"));
719 subik 211
                return NULL;
474 subik 212
        }
877 cbradney 213
        PageItem *i = GetUniqueItem(QString::fromUtf8(Name));
719 subik 214
        if (i == NULL)
215
                return NULL;
216
        i->OwnPage->Deselect();
217
        i->OwnPage->SelectItemNr(i->ItemNr);
218
        int h = i->OwnPage->HowTo;
219
        i->OwnPage->HowTo = 1;
220
        i->OwnPage->scaleGroup(sc, sc);
221
        i->OwnPage->HowTo = h;
474 subik 222
        Py_INCREF(Py_None);
82 Franz 223
        return Py_None;
224
}
225
 
935 subik 226
PyObject *scribus_getselobjnam(PyObject */*self*/, PyObject* args)
82 Franz 227
{
228
        int i = 0;
229
        if (!PyArg_ParseTuple(args, "|i", &i))
230
                return NULL;
535 subik 231
        if(!checkHaveDocument())
232
                return NULL;
164 Franz 233
        if ((i < static_cast<int>(Carrier->doc->ActPage->SelItem.count())) && (i > -1))
234
                return PyString_FromString(Carrier->doc->ActPage->SelItem.at(i)->AnName);
82 Franz 235
        else
877 cbradney 236
                // FIXME: Should probably return None if no selection?
82 Franz 237
                return PyString_FromString("");
238
}
239
 
935 subik 240
PyObject *scribus_selcount(PyObject */*self*/)
82 Franz 241
{
535 subik 242
        if(!checkHaveDocument())
243
                return NULL;
164 Franz 244
        return PyInt_FromLong(static_cast<long>(Carrier->doc->ActPage->SelItem.count()));
82 Franz 245
}
246
 
935 subik 247
PyObject *scribus_selectobj(PyObject */*self*/, PyObject* args)
82 Franz 248
{
935 subik 249
        char *Name = const_cast<char*>("");
877 cbradney 250
        if (!PyArg_ParseTuple(args, "es", "utf-8", &Name))
82 Franz 251
                return NULL;
535 subik 252
        if(!checkHaveDocument())
253
                return NULL;
877 cbradney 254
        PageItem *i = GetUniqueItem(QString::fromUtf8(Name));
719 subik 255
        if (i == NULL)
256
                return NULL;
257
        i->OwnPage->SelectItemNr(i->ItemNr);
474 subik 258
        Py_INCREF(Py_None);
82 Franz 259
        return Py_None;
260
}
261
 
935 subik 262
PyObject *scribus_deselect(PyObject */*self*/)
82 Franz 263
{
535 subik 264
        if(!checkHaveDocument())
265
                return NULL;
332 Franz 266
        for (uint i = 0; i < Carrier->view->Pages.count(); i++)
267
                Carrier->view->Pages.at(i)->Deselect();
474 subik 268
        Py_INCREF(Py_None);
82 Franz 269
        return Py_None;
270
}
271
 
935 subik 272
PyObject *scribus_lockobject(PyObject */*self*/, PyObject* args)
332 Franz 273
{
935 subik 274
        char *name = const_cast<char*>("");
877 cbradney 275
        if (!PyArg_ParseTuple(args, "|es", "utf-8", &name))
332 Franz 276
                return NULL;
535 subik 277
        if(!checkHaveDocument())
278
                return NULL;
877 cbradney 279
        PageItem *item = GetUniqueItem(QString::fromUtf8(name));
332 Franz 280
        if (item == NULL)
281
                return NULL;
719 subik 282
        // FIXME: Rather than toggling the lock, we should probably let the user set the lock state
283
        // and instead provide a different function like toggleLock()
332 Franz 284
        item->Locked = !item->Locked;
285
        if (item->Locked)
719 subik 286
                return PyBool_FromLong(1);
287
        return PyBool_FromLong(0);
332 Franz 288
}
289
 
935 subik 290
PyObject *scribus_islocked(PyObject */*self*/, PyObject* args)
332 Franz 291
{
935 subik 292
        char *name = const_cast<char*>("");
877 cbradney 293
        if (!PyArg_ParseTuple(args, "|es", "utf-8", &name))
332 Franz 294
                return NULL;
535 subik 295
        if(!checkHaveDocument())
296
                return NULL;
877 cbradney 297
        PageItem *item = GetUniqueItem(QString::fromUtf8(name));
332 Franz 298
        if (item == NULL)
299
                return NULL;
300
        if (item->Locked)
719 subik 301
                return PyBool_FromLong(1);
302
        return PyBool_FromLong(0);
332 Franz 303
}
1387 subik 304
 
305
PyObject *scribus_setscaleimagetoframe(PyObject */*self*/, PyObject* args, PyObject* kw)
306
{
307
        char *name = const_cast<char*>("");
308
        long int scaleToFrame = 0;
309
        long int proportional = 1;
310
        char* kwargs[] = {"scaletoframe", "proportional", "name", NULL};
311
        if (!PyArg_ParseTupleAndKeywords(args, kw, "i|ies", kwargs, &scaleToFrame, &proportional, "utf-8", &name))
312
                return NULL;
313
        if(!checkHaveDocument())
314
                return NULL;
315
        PageItem *item = GetUniqueItem(QString::fromUtf8(name));
316
        if (item == NULL)
317
                return NULL;
318
        if (item->PType != FRAME_IMAGE)
319
        {
320
                PyErr_SetString(ScribusException, QObject::tr("Specified item not an image frame","python error"));
321
                return NULL;
322
        }
323
        // Set the item to scale if appropriate. ScaleType 1 is free
324
        // scale, 0 is scale to frame.
325
        item->ScaleType = scaleToFrame == 0;
326
        // Now, if the user has chosen to set the proportional mode,
327
        // set it. 1 is proportional, 0 is free aspect.
328
        if (proportional != -1)
329
                item->AspectRatio = proportional > 0;
330
        // Force the braindead app to notice the changes
331
        item->OwnPage->AdjustPictScale(item);
332
        item->OwnPage->AdjustPreview(item, false);
333
        item->OwnPage->RefreshItem(item);
334
        Py_INCREF(Py_None);
335
        return Py_None;
336
}