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 | } |