PyObject *scribus_newrect(PyObject* /* self */, PyObject* args) { double x, y, w, h; char *Name = const_cast<char*>(""); if (!PyArg_ParseTuple(args, "dddd|es", &x, &y, &w, &h, "utf-8", &Name)) return NULL; if(!checkHaveDocument()) return NULL; // if (ItemExists(QString::fromUtf8(Name))) // { // PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error")); // return NULL; // } int i = ScCore->primaryMainWindow()->doc->itemAdd(PageItem::Polygon, PageItem::Rectangle, pageUnitXToDocX(x), pageUnitYToDocY(y), ValueToPoint(w), ValueToPoint(h), ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineWidth, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeFillColor, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineColor, true); // ScCore->primaryMainWindow()->doc->setRedrawBounding(ScCore->primaryMainWindow()->doc->Items->at(i)); if (Name != EMPTY_STRING) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(i)->setItemName(objName); } return PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8()); }
PyObject *scribus_newellipse(PyObject* /* self */, PyObject* args) { double x, y, w, h; char *Name = const_cast<char*>(""); if (!PyArg_ParseTuple(args, "dddd|es", &x, &y, &w, &h, "utf-8", &Name)) return NULL; if(!checkHaveDocument()) return NULL; int i = ScCore->primaryMainWindow()->doc->itemAdd(PageItem::Polygon, PageItem::Ellipse, pageUnitXToDocX(x), pageUnitYToDocY(y), ValueToPoint(w), ValueToPoint(h), ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineWidth, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeFillColor, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineColor, true); if (Name != EMPTY_STRING) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(i)->setItemName(objName); } return PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8()); }
PyObject *scribus_newtable(PyObject* /* self */, PyObject* args) { double x, y, w, h; int numRows, numColumns; char *Name = const_cast<char*>(""); if (!PyArg_ParseTuple(args, "ddddii|es", &x, &y, &w, &h, &numRows, &numColumns, "utf-8", &Name)) return NULL; if (!checkHaveDocument()) return NULL; if (numRows < 1 || numColumns < 1) { PyErr_SetString(PyExc_ValueError, QObject::tr("Both numRows and numColumns must be greater than 0.","python error").toLocal8Bit().constData()); return NULL; } int i = ScCore->primaryMainWindow()->doc->itemAdd(PageItem::Table, PageItem::Unspecified, pageUnitXToDocX(x), pageUnitYToDocY(y), ValueToPoint(w), ValueToPoint(h), 0, // Unused. CommonStrings::None, // Unused. CommonStrings::None); // Unused. PageItem_Table *table = ScCore->primaryMainWindow()->doc->Items->at(i)->asTable(); table->insertRows(0, numRows - 1); table->insertColumns(0, numColumns - 1); table->adjustTableToFrame(); table->adjustFrameToTable(); if (strlen(Name) > 0) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(i)->setItemName(objName); } return PyString_FromString(table->itemName().toUtf8()); }
void C4Network2ResDlg::ListItem::LocalSaveResource(bool fDoOverwrite) { // get associated resource C4Network2Res::Ref pRes = GetRefRes(); if (!pRes) return; const char *szResFile = pRes->getFile(); StdCopyStrBuf strErrCopyFile(LoadResStr("IDS_NET_ERR_COPYFILE")); if (!pRes->isTempFile()) { GetScreen()->ShowMessage(LoadResStr("IDS_NET_ERR_COPYFILE_LOCAL"), strErrCopyFile.getData(), C4GUI::Ico_Error); return; } const char *szFilename = GetFilename(pRes->getCore().getFileName()); /* const char *szSpecialPath = ""; if (WildcardMatch(C4CFN_PlayerFiles, szFilename)) // write players to player path szSpecialPath = Config.General.PlayerPath; */ const char *szTarget = Config.AtUserDataPath(szFilename); if (!fDoOverwrite && ItemExists(szTarget)) { // show a confirmation dlg, asking whether the resource should be overwritten GetScreen()->ShowRemoveDlg(new C4GUI::ConfirmationDialog( FormatString(LoadResStr("IDS_NET_RES_SAVE_OVERWRITE"), GetFilename(szTarget)).getData(), LoadResStr("IDS_NET_RES_SAVE"), new C4GUI::CallbackHandler<C4Network2ResDlg::ListItem>(this, &C4Network2ResDlg::ListItem::OnButtonSaveConfirm), C4GUI::MessageDialog::btnYesNo)); return; } if (!C4Group_CopyItem(szResFile, szTarget)) GetScreen()->ShowMessage(strErrCopyFile.getData(), strErrCopyFile.getData(), C4GUI::Ico_Error); else { GetScreen()->ShowMessage(FormatString(LoadResStr("IDS_NET_RES_SAVED_DESC"), GetFilename(szTarget)).getData(), LoadResStr("IDS_NET_RES_SAVED"), C4GUI::Ico_Save); } }
PyObject *scribus_newline(PyObject* /* self */, PyObject* args) { double x, y, w, h; char *Name = const_cast<char*>(""); if (!PyArg_ParseTuple(args, "dddd|es", &x, &y, &w, &h, "utf-8", &Name)) return NULL; if(!checkHaveDocument()) return NULL; x = pageUnitXToDocX(x); y = pageUnitYToDocY(y); w = pageUnitXToDocX(w); h = pageUnitYToDocY(h); // if (ItemExists(QString::fromUtf8(Name))) // { // PyErr_SetString(NameExistsError, // QObject::tr("An object with the requested name already exists.", // "python error")); // return NULL; // } int i = ScCore->primaryMainWindow()->doc->itemAdd(PageItem::Line, PageItem::Unspecified, x, y, w, h, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineWidth, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeFillColor, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineColor, true); PageItem *it = ScCore->primaryMainWindow()->doc->Items->at(i); it->setRotation(xy2Deg(w-x, h-y)); it->setWidthHeight(sqrt(pow(x-w, 2.0) + pow(y-h, 2.0)), 1.0); it->Sizing = false; it->updateClip(); it->setRedrawBounding(); // ScCore->primaryMainWindow()->doc->setRedrawBounding(it); /* WTF? maybe I'll examine who's author later. Or maybe I'll remove it later ;) it->PoLine.resize(4); it->PoLine.setPoint(0, 0, 0); it->PoLine.setPoint(1, 0, 0); it->PoLine.setPoint(2, w-x, h-y); it->PoLine.setPoint(3, w-x, h-y); FPoint np2 = getMinClipF(&it->PoLine); if (np2.x() < 0) { it->PoLine.translate(-np2.x(), 0); ScCore->primaryMainWindow()->view->MoveItem(np2.x(), 0, it); } if (np2.y() < 0) { it->PoLine.translate(0, -np2.y()); ScCore->primaryMainWindow()->view->MoveItem(0, np2.y(), it); } ScCore->primaryMainWindow()->view->SizeItem(it->PoLine.WidthHeight().x(), it->PoLine.WidthHeight().y(), i, false, false, false); ScCore->primaryMainWindow()->view->AdjustItemSize(it);*/ if (Name != EMPTY_STRING) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(i)->setItemName(objName); } return PyString_FromString(it->itemName().toUtf8()); }
bool C4Video::Start() { // Determine new filename char szFilename[_MAX_PATH+1]; int iIndex=0; do { sprintf(szFilename,"Video%03d.avi",iIndex++); } while (ItemExists(szFilename)); // Start recording return(Start(szFilename)); }
bool C4Language::Init() { // Clear (to allow clean re-init) Clear(); // Make sure Language.ocg is unpacked (TODO: This won't work properly if Language.ocg is in system data path) // Assume for now that Language.ocg is either at a writable location or unpacked already. // TODO: Use all Language.c4gs that we find, and merge them. // TODO: Use gettext instead? StdStrBuf langPath; C4Reloc::iterator iter; for(iter = Reloc.begin(); iter != Reloc.end(); ++iter) { langPath.Copy((*iter).strBuf + DirSep + C4CFN_Languages); if(ItemExists(langPath.getData())) { if(DirectoryExists(langPath.getData())) break; if(C4Group_UnpackDirectory(langPath.getData())) break; } } // Break if no language.ocg found if(iter != Reloc.end()) { // Look for available language packs in Language.ocg C4Group *pPack; char strPackFilename[_MAX_FNAME + 1], strEntry[_MAX_FNAME + 1]; if (PackDirectory.Open(langPath.getData())) { while (PackDirectory.FindNextEntry("*.ocg", strEntry)) { sprintf(strPackFilename, "%s" DirSep "%s", C4CFN_Languages, strEntry); pPack = new C4Group(); if (pPack->Open(strPackFilename)) { Packs.RegisterGroup(*pPack, true, C4GSCnt_Language, false); } else { delete pPack; } } } // Now create a pack group for each language pack (these pack groups are child groups // that browse along each pack to access requested data) for (int iPack = 0; (pPack = Packs.GetGroup(iPack)); iPack++) PackGroups.RegisterGroup(*(new C4Group), true, C4GSPrio_Base, C4GSCnt_Language); } // Load language infos by scanning string tables (the engine doesn't really need this at the moment) InitInfos(); // Done return true; }
void TBarWindow::MessageReceived(BMessage* message) { switch (message->what) { case kFindButton: { BMessenger tracker(kTrackerSignature); tracker.SendMessage(message); break; } case 'gloc': GetLocation(message); break; case 'sloc': SetLocation(message); break; case 'gexp': IsExpanded(message); break; case 'sexp': Expand(message); break; case 'info': ItemInfo(message); break; case 'exst': ItemExists(message); break; case 'cwnt': CountItems(message); break; case 'adon': case 'icon': AddItem(message); break; case 'remv': RemoveItem(message); break; case 'iloc': GetIconFrame(message); break; default: BWindow::MessageReceived(message); break; } }
PyObject *scribus_objectexists(PyObject* /* self */, PyObject* args) { char* name = const_cast<char*>(""); if (!PyArg_ParseTuple(args, "|es", "utf-8", &name)) return NULL; if(!checkHaveDocument()) return NULL; if (ItemExists(QString::fromUtf8(name))) return PyBool_FromLong(static_cast<long>(true)); return PyBool_FromLong(static_cast<long>(false)); }
// Join players (via network/ctrl queue) void C4PlayerList::JoinNew(const char *szFilename) { if (::Network.isEnabled()) { ::Network.Players.JoinLocalPlayer(szFilename); return; } // security if (!ItemExists(szFilename)) return; // join via player info Game.PlayerInfos.DoLocalNonNetworkPlayerJoin(szFilename); }
bool C4Network2ResList::FindTempResFileName(const char *szFilename, char *pTarget) { char safeFilename[_MAX_PATH]; char* safePos = safeFilename; while (*szFilename) { if ((*szFilename >= 'a' && *szFilename <= 'z') || (*szFilename >= 'A' && *szFilename <= 'Z') || (*szFilename >= '0' && *szFilename <= '9') || (*szFilename == '.') || (*szFilename == '/')) *safePos = *szFilename; else *safePos = '_'; ++safePos; ++szFilename; } *safePos = 0; szFilename = safeFilename; // create temporary file SCopy(Config.AtNetworkPath(GetFilename(szFilename)), pTarget, _MAX_PATH); // file name is free? if (!ItemExists(pTarget)) return true; // find another file name char szFileMask[_MAX_PATH+1]; SCopy(pTarget, szFileMask, GetExtension(pTarget)-1-pTarget); SAppend("_%d", szFileMask, _MAX_PATH); SAppend(GetExtension(pTarget)-1, szFileMask, _MAX_PATH); for (int32_t i = 2; i < 1000; i++) { snprintf(pTarget, _MAX_PATH, szFileMask, i); // doesn't exist? if (!ItemExists(pTarget)) return true; } // not found return false; }
bool DocumentAPI::itemExists(QString name) { if (name.isEmpty()) { RAISE("Name cannot be empty"); return false; } if (!check()) { RAISE("No active document"); } if (ItemExists(name)) return true; return false; }
bool C4Reloc::LocateItem(const char* filename, StdStrBuf& str) const { if(IsGlobalPath(filename)) { str.Copy(filename); return true; } for(iterator iter = begin(); iter != end(); ++iter) { str.Copy((*iter).strBuf + DirSep + filename); if(ItemExists(str.getData())) return true; } return false; }
/* 03/31/2004 - xception handling */ PyObject *scribus_pathtext(PyObject* /* self */, PyObject* args) { double x, y; char *Name = const_cast<char*>(""); char *TextB = const_cast<char*>(""); char *PolyB = const_cast<char*>(""); if (!PyArg_ParseTuple(args, "ddeses|es", &x, &y, "utf-8", &TextB, "utf-8", &PolyB, "utf-8", &Name)) return NULL; if(!checkHaveDocument()) return NULL; // if (ItemExists(QString::fromUtf8(Name))) // { // PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error")); // return NULL; // } //FIXME: Why use GetItem not GetUniqueItem? Maybe use GetUniqueItem and use the exceptions // its sets for us? int i = GetItem(QString::fromUtf8(TextB)); int ii = GetItem(QString::fromUtf8(PolyB)); if ((i == -1) || (ii == -1)) { PyErr_SetString(NotFoundError, QObject::tr("Object not found.","python error").toLocal8Bit().constData()); return NULL; } ScCore->primaryMainWindow()->doc->m_Selection->clear(); ScCore->primaryMainWindow()->doc->m_Selection->addItem(ScCore->primaryMainWindow()->doc->Items->at(i)); ScCore->primaryMainWindow()->doc->m_Selection->addItem(ScCore->primaryMainWindow()->doc->Items->at(ii)); PageItem *it = ScCore->primaryMainWindow()->doc->Items->at(i); ScCore->primaryMainWindow()->view->ToPathText(); ScCore->primaryMainWindow()->doc->MoveItem(pageUnitXToDocX(x) - it->xPos(), pageUnitYToDocY(y) - it->yPos(), it); if (Name != EMPTY_STRING) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(i)->setItemName(objName); } return PyString_FromString(it->itemName().toUtf8()); }
PyObject *scribus_newimage(PyObject* /* self */, PyObject* args) { double x, y, w, h; char *Name = const_cast<char*>(""); if (!PyArg_ParseTuple(args, "dddd|es", &x, &y, &w, &h, "utf-8", &Name)) return NULL; if(!checkHaveDocument()) return NULL; int i = ScCore->primaryMainWindow()->doc->itemAdd(PageItem::ImageFrame, PageItem::Unspecified, pageUnitXToDocX(x), pageUnitYToDocY(y), ValueToPoint(w), ValueToPoint(h), 1, ScCore->primaryMainWindow()->doc->itemToolPrefs().imageFillColor, ScCore->primaryMainWindow()->doc->itemToolPrefs().imageStrokeColor); if (strlen(Name) > 0) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(i)->setItemName(objName); } return PyString_FromString(ScCore->primaryMainWindow()->doc->Items->at(i)->itemName().toUtf8()); }
bool DB2Utilities::HasItemSparseEntry(DB2Storage<ItemSparseEntry> const& /*store*/, uint32 id) { return ItemExists(id); }
void QueueEditor::AlignAffectedGroups(DownloadQueue* pDownloadQueue, IDList* pIDList, bool bSmartOrder, int iOffset) { // Build list of all groups; List contains first file of each group FileList cGroupList; BuildGroupList(pDownloadQueue, &cGroupList); // Find affected groups. It includes groups being moved and groups directly // above or under of these groups (those order is also changed) FileList cAffectedGroupList; cAffectedGroupList.clear(); ItemList cItemList; PrepareList(pDownloadQueue, &cItemList, pIDList, bSmartOrder, eaFileMoveOffset, iOffset); for (ItemList::iterator it = cItemList.begin(); it != cItemList.end(); it++) { EditItem* pItem = *it; unsigned int iNum = 0; for (FileList::iterator it = cGroupList.begin(); it != cGroupList.end(); it++, iNum++) { FileInfo* pFileInfo = *it; if (pItem->m_pFileInfo->GetNZBInfo() == pFileInfo->GetNZBInfo()) { if (!ItemExists(&cAffectedGroupList, pFileInfo)) { cAffectedGroupList.push_back(pFileInfo); } if (iOffset < 0) { for (int i = iNum - 1; i >= -iOffset-1; i--) { if (!ItemExists(&cAffectedGroupList, cGroupList[i])) { cAffectedGroupList.push_back(cGroupList[i]); } } } if (iOffset > 0) { for (unsigned int i = iNum + 1; i <= cGroupList.size() - iOffset; i++) { if (!ItemExists(&cAffectedGroupList, cGroupList[i])) { cAffectedGroupList.push_back(cGroupList[i]); } } if (iNum + 1 < cGroupList.size()) { cAffectedGroupList.push_back(cGroupList[iNum + 1]); } } break; } } delete pItem; } cGroupList.clear(); // Aligning groups for (FileList::iterator it = cAffectedGroupList.begin(); it != cAffectedGroupList.end(); it++) { FileInfo* pFileInfo = *it; AlignGroup(pDownloadQueue, pFileInfo->GetNZBInfo()); } }
PyObject *scribus_bezierline(PyObject* /* self */, PyObject* args) { char *Name = const_cast<char*>(""); PyObject *il; // FIXME: PyList_Check failing will cause the function to return NULL w/o an exception. Separarate out the check. if ((!PyArg_ParseTuple(args, "O|es", &il, "utf-8", &Name)) || (!PyList_Check(il))) return NULL; if(!checkHaveDocument()) return NULL; int len = PyList_Size(il); if (len < 8) { PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain at least four points (eight values).","python error").toLocal8Bit().constData()); return NULL; } if ((len % 6) != 0) { PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must have a multiple of six values.","python error").toLocal8Bit().constData()); return NULL; } // if (ItemExists(QString::fromUtf8(Name))) // { // PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error").toLocal8Bit().constData()); // return NULL; // } double x, y, w, h, kx, ky, kx2, ky2; int i = 0; x = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; y = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; kx = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; ky = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; kx2 = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; ky2 = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; //int ic = ScCore->primaryMainWindow()->view->PaintPolyLine(x, y, 1, 1, ScCore->primaryMainWindow()->doc->toolSettings.dWidth, ScCore->primaryMainWindow()->doc->toolSettings.dBrush, ScCore->primaryMainWindow()->doc->toolSettings.dPen); int ic = ScCore->primaryMainWindow()->doc->itemAdd(PageItem::PolyLine, PageItem::Unspecified, x, y, 1, 1, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineWidth, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeFillColor, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineColor, true); PageItem *it = ScCore->primaryMainWindow()->doc->Items->at(ic); it->PoLine.resize(2); it->PoLine.setPoint(0, 0, 0); it->PoLine.setPoint(1, kx-x, ky-y); int pp = 6; for (i = 6; i < len - 6; i += 6) { w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+1)))); kx = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+2)))); ky = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+3)))); kx2 = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+4)))); ky2 = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+5)))); it->PoLine.resize(pp); it->PoLine.setPoint(pp-4, w-x, h-y); it->PoLine.setPoint(pp-3, kx-x, ky-y); it->PoLine.setPoint(pp-2, it->PoLine.point(pp-4)); it->PoLine.setPoint(pp-1, kx2-x, ky2-y); pp += 4; } pp -= 2; w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-6)))); h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-5)))); kx = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-4)))); ky = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-3)))); it->PoLine.resize(pp); it->PoLine.setPoint(pp-2, w-x, h-y); it->PoLine.setPoint(pp-1, kx-x, ky-y); FPoint np2 = getMinClipF(&it->PoLine); if (np2.x() < 0) { it->PoLine.translate(-np2.x(), 0); ScCore->primaryMainWindow()->doc->MoveItem(np2.x(), 0, it); } if (np2.y() < 0) { it->PoLine.translate(0, -np2.y()); ScCore->primaryMainWindow()->doc->MoveItem(0, np2.y(), it); } ScCore->primaryMainWindow()->doc->SizeItem(it->PoLine.WidthHeight().x(), it->PoLine.WidthHeight().y(), ic, false, false, false); ScCore->primaryMainWindow()->doc->AdjustItemSize(it); if (Name != EMPTY_STRING) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(ic)->setItemName(objName); } return PyString_FromString(it->itemName().toUtf8()); }
void TBarWindow::MessageReceived(BMessage* message) { switch (message->what) { case kFindButton: { BMessenger tracker(kTrackerSignature); tracker.SendMessage(message); break; } case kMsgLocation: GetLocation(message); break; case kMsgSetLocation: SetLocation(message); break; case kMsgIsExpanded: IsExpanded(message); break; case kMsgExpand: Expand(message); break; case kMsgGetItemInfo: ItemInfo(message); break; case kMsgHasItem: ItemExists(message); break; case kMsgCountItems: CountItems(message); break; case kMsgMaxItemSize: MaxItemSize(message); break; case kMsgAddAddOn: case kMsgAddView: AddItem(message); break; case kMsgRemoveItem: RemoveItem(message); break; case 'iloc': GetIconFrame(message); break; default: BWindow::MessageReceived(message); break; } }
PyObject *scribus_polygon(PyObject* /* self */, PyObject* args) { char *Name = const_cast<char*>(""); PyObject *il; // FIXME: PyList_Check failing will cause the function to return NULL w/o an exception. Separarate out the check. if ((!PyArg_ParseTuple(args, "O|es", &il, "utf-8", &Name)) || (!PyList_Check(il))) return NULL; if(!checkHaveDocument()) return NULL; int len = PyList_Size(il); if (len < 6) { PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain at least three points (six values).","python error").toLocal8Bit().constData()); return NULL; } if ((len % 2) != 0) { PyErr_SetString(PyExc_ValueError, QObject::tr("Point list must contain an even number of values.","python error").toLocal8Bit().constData()); return NULL; } // if (ItemExists(QString::fromUtf8(Name))) // { // PyErr_SetString(NameExistsError, QObject::tr("An object with the requested name already exists.","python error").toLocal8Bit().constData()); // return NULL; // } double x, y, w, h; int i = 0; x = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; y = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); i++; int ic = ScCore->primaryMainWindow()->doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, x, y, 1, 1, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineWidth, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeFillColor, ScCore->primaryMainWindow()->doc->itemToolPrefs().shapeLineColor); PageItem *it = ScCore->primaryMainWindow()->doc->Items->at(ic); it->PoLine.resize(2); it->PoLine.setPoint(0, 0, 0); it->PoLine.setPoint(1, 0, 0); int pp = 6; for (i = 2; i < len - 2; i += 2) { w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i)))); h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, i+1)))); it->PoLine.resize(pp); it->PoLine.setPoint(pp-4, w-x, h-y); it->PoLine.setPoint(pp-3, w-x, h-y); it->PoLine.setPoint(pp-2, w-x, h-y); it->PoLine.setPoint(pp-1, w-x, h-y); pp += 4; } w = pageUnitXToDocX(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-2)))); h = pageUnitYToDocY(static_cast<double>(PyFloat_AsDouble(PyList_GetItem(il, len-1)))); it->PoLine.resize(pp); it->PoLine.setPoint(pp-4, w-x, h-y); it->PoLine.setPoint(pp-3, w-x, h-y); it->PoLine.setPoint(pp-2, w-x, h-y); it->PoLine.setPoint(pp-1, w-x, h-y); pp += 2; it->PoLine.resize(pp); it->PoLine.setPoint(pp-2, 0, 0); it->PoLine.setPoint(pp-1, 0, 0); FPoint np2 = getMinClipF(&it->PoLine); if (np2.x() < 0) { it->PoLine.translate(-np2.x(), 0); ScCore->primaryMainWindow()->doc->moveItem(np2.x(), 0, it); } if (np2.y() < 0) { it->PoLine.translate(0, -np2.y()); ScCore->primaryMainWindow()->doc->moveItem(0, np2.y(), it); } ScCore->primaryMainWindow()->doc->sizeItem(it->PoLine.WidthHeight().x(), it->PoLine.WidthHeight().y(), it, false, false, false); ScCore->primaryMainWindow()->doc->adjustItemSize(it); if (strlen(Name) > 0) { QString objName = QString::fromUtf8(Name); if (!ItemExists(objName)) ScCore->primaryMainWindow()->doc->Items->at(ic)->setItemName(objName); } return PyString_FromString(it->itemName().toUtf8()); }