Subversion Repositories Scribus

Rev

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