bool wb_session::cutOset(pwr_sAttrRef* arp, bool keepref) { if (isReadonly()) throw wb_error_str("ReadOnlySession"); m_sts = LDH__SUCCESS; copyOset(arp, keepref, false, false); if (EVEN(m_sts)) return false; // ldh_sEvent *ep = m_srep->eventStart( pwr_cNOid, // ldh_eEvent_ObjectTreeDeleted); pwr_sAttrRef* ap = arp; while (cdh_ObjidIsNotNull(ap->Objid)) { wb_object o = object(ap->Objid); if (!o) { ap++; continue; } ldh_sEvent* ep = m_srep->eventStart(o.oid(), ldh_eEvent_ObjectDeleted); m_srep->eventOldFamily(ep, o); deleteFamily(o, 0); m_srep->eventSend(ep); ap++; } m_srep->update(); // m_srep->eventSend( ep); return true; }
bool wb_session::deleteFamily(wb_object o, bool storeix) { if (isReadonly()) throw wb_error_str("ReadOnlySession"); if (!isLocal(o)) { m_sts = LDH__OTHERVOLUME; return false; } pwr_tStatus sts; wb_object parent = o.parent(); sts = triggAnteUnadopt(parent, o); ldh_sEvent* ep = m_srep->eventStart(o.oid(), ldh_eEvent_ObjectDeleted); m_srep->eventOldFamily(ep, o); sts = triggPostUnadopt(parent, o); if (storeix) m_srep->recix_add(o); bool rsts = m_vrep->deleteFamily(&m_sts, (wb_orep*)o); m_srep->update(); m_srep->eventSend(ep); return rsts; }
bool wb_session::moveObject(wb_object o, wb_destination d) { if (isReadonly()) throw wb_error_str("ReadOnlySession"); validateDestination(d, o.cid()); if (evenSts()) return false; // Check that object is not ancestor to destination wb_object dest = object(d.oid()); while (dest) { if (cdh_ObjidIsEqual(dest.oid(), o.oid())) throw wb_error(LDH__BADDEST); dest = dest.parent(); } wb_object parent; switch (d.code()) { case ldh_eDest_IntoFirst: case ldh_eDest_IntoLast: parent = object(d.oid()); break; case ldh_eDest_After: case ldh_eDest_Before: parent = object(d.oid()).parent(); break; default: throw wb_error(LDH__NODEST); } wb_object old_parent = o.parent(); m_sts = triggAnteMove(o, parent, old_parent); if (evenSts()) return false; m_sts = triggAnteUnadopt(old_parent, o); if (evenSts()) return false; m_sts = triggAnteAdopt(parent, o.cid()); if (evenSts()) return false; ldh_sEvent* ep = m_srep->eventStart(o.oid(), ldh_eEvent_ObjectMoved); m_srep->eventOldFamily(ep, o); bool rsts = m_vrep->moveObject(&m_sts, (wb_orep*)o, d); m_srep->update(); triggPostMove(o); triggPostUnadopt(old_parent, o); triggPostAdopt(parent, o); m_srep->eventNewFamily(ep, o); m_srep->eventSend(ep); return rsts; }
bool wb_session::writeAttribute(wb_attribute& a, void* p, size_t size) { if (isReadonly()) throw wb_error_str("ReadOnlySession"); bool sts = m_vrep->writeAttribute( &m_sts, (wb_orep*)a, a.bix(), a.offset(), a.size(), p); m_srep->update(); ldh_sEvent* ep = m_srep->eventStart(a.aoid(), ldh_eEvent_AttributeModified); m_srep->eventSend(ep); return sts; }
wb_object wb_session::createObject(wb_cdef cdef, wb_destination d, wb_name name) { wb_orep* orep = 0; if (isReadonly()) throw wb_error_str("ReadOnlySession"); validateDestination(d, cdef.cid()); if (evenSts()) throw wb_error(sts()); wb_object parent; switch (d.code()) { case ldh_eDest_IntoFirst: case ldh_eDest_IntoLast: parent = object(d.oid()); break; case ldh_eDest_After: case ldh_eDest_Before: parent = object(d.oid()).parent(); break; default: throw wb_error(LDH__NODEST); } m_sts = triggAnteCreate(parent, cdef.cid()); if (evenSts()) throw wb_error(sts()); m_sts = triggAnteAdopt(parent, cdef.cid()); if (evenSts()) throw wb_error(sts()); orep = m_vrep->createObject(&m_sts, cdef, d, name); if (evenSts()) throw wb_error(sts()); m_srep->update(); wb_object o = wb_object(m_sts, orep); ldh_sEvent* ep = m_srep->eventStart(o.oid(), ldh_eEvent_ObjectCreated); m_srep->eventNewFamily(ep, o); triggPostCreate(o); triggPostAdopt(parent, o); m_srep->eventSend(ep); return o; }
bool wb_session::renameObject(wb_object o, wb_name name) { m_sts = LDH__SUCCESS; if (isReadonly()) throw wb_error_str("ReadOnlySession"); bool ok = m_vrep->renameObject(&m_sts, (wb_orep*)o, name); if (!ok) return ok; triggPostRename(o); m_srep->update(); ldh_sEvent* ep = m_srep->eventStart(o.oid(), ldh_eEvent_ObjectRenamed); m_srep->eventSend(ep); return ok; }
void Node::drawSimple(QPainter &P, MapView *theView) { // if (!M_PREFS->getWireframeView() && !TEST_RFLAGS(RendererOptions::Interacting)) // return; if (! ((isReadonly() || !isSelectable(theView->pixelPerM(), theView->renderOptions())) && (!isPOI() && !isWaypoint()))) // if (!Pt->isReadonly() && Pt->isSelectable(r)) { if (!layer()) { qDebug() << "Node without layer: " << id().numId << xmlId(); return; } qreal WW = theView->nodeWidth(); if (WW >= 1) { QColor theColor = QColor(0,0,0,128); if (M_PREFS->getUseStyledWireframe() && hasPainter()) { const FeaturePainter* thePainter = getCurrentPainter(); if (thePainter->DrawForeground) theColor = thePainter->ForegroundColor; else if (thePainter->DrawBackground) theColor = thePainter->BackgroundColor; } QPointF Pp(theView->toView(this)); if (layer()->classGroups() & Layer::Special) { QRect R2(Pp.x()-(WW+4)/2, Pp.y()-(WW+4)/2, WW+4, WW+4); P.fillRect(R2,QColor(255,0,255,192)); } else if (isWaypoint()) { QRect R2(Pp.x()-(WW+4)/2, Pp.y()-(WW+4)/2, WW+4, WW+4); P.fillRect(R2,QColor(255,0,0,192)); } QRect R(Pp.x()-WW/2, Pp.y()-WW/2, WW, WW); P.fillRect(R,theColor); } } }
bool wb_session::pasteOset( pwr_tOid doid, ldh_eDest dest, bool keepoid, bool recycleix, char* buffer) { if (isReadonly()) throw wb_error_str("ReadOnlySession"); m_sts = LDH__SUCCESS; wb_destination d = wb_destination(doid, dest); wb_vrepmem* mem; // Get last buffer if (!buffer) { mem = (wb_vrepmem*)m_vrep->erep()->bufferVolume(&m_sts); if (EVEN(m_sts)) return false; wb_vrepmem* prev = NULL; while (mem) { prev = mem; mem = (wb_vrepmem*)mem->next(); } mem = prev; } else { // Get specified buffer mem = (wb_vrepmem*)m_vrep->erep()->bufferVolume(&m_sts, buffer); if (EVEN(m_sts)) return false; } if (mem == m_vrep) { m_sts = LDH__PASTESELF; return false; } // Check that rootobjects are valid for this destination pwr_tStatus sts; wb_orep* orep = mem->object(&sts); while (ODD(sts)) { orep->ref(); validateDestination(d, orep->cid()); if (evenSts()) return false; wb_orep* prev = orep; orep = orep->after(&sts); prev->unref(); } // Trigg ante adopt wb_object parent; switch (dest) { case ldh_eDest_IntoFirst: case ldh_eDest_IntoLast: parent = object(doid); break; case ldh_eDest_After: case ldh_eDest_Before: parent = object(doid).parent(); break; default: throw wb_error(LDH__NODEST); } if (parent) { wb_orep* orep = mem->object(&sts); while (ODD(sts)) { orep->ref(); m_sts = triggAnteAdopt(parent, orep->cid()); if (evenSts()) return false; wb_orep* prev = orep; orep = orep->after(&sts); prev->unref(); } } wb_recix* recix = 0; if (recycleix) recix = m_srep->recix(); pwr_tOid* olist; mem->exportPaste(*m_vrep, doid, dest, keepoid, recix, &olist); m_srep->update(); if (recycleix) m_srep->recix_clear(); if (parent) { for (pwr_tOid* oidp = olist; cdh_ObjidIsNotNull(*oidp); oidp++) { wb_object o = object(*oidp); triggPostAdopt(parent, o); } } free(olist); if (dest == ldh_eDest_After || dest == ldh_eDest_Before) doid = pwr_cNOid; ldh_sEvent* ep = m_srep->eventStart(doid, ldh_eEvent_ObjectTreeCopied); m_srep->eventSend(ep); return true; }
wb_object wb_session::copyObject(wb_object o, wb_destination d, wb_name name) { wb_orep* orep = 0; if (isReadonly()) throw wb_error_str("ReadOnlySession"); validateDestination(d, o.cid()); if (evenSts()) throw wb_error(sts()); wb_object parent; switch (d.code()) { case ldh_eDest_IntoFirst: case ldh_eDest_IntoLast: parent = object(d.oid()); break; case ldh_eDest_After: case ldh_eDest_Before: parent = object(d.oid()).parent(); break; default: throw wb_error(LDH__NODEST); } m_sts = triggAnteCreate(parent, o.cid()); if (evenSts()) throw wb_error(sts()); m_sts = triggAnteAdopt(parent, o.cid()); if (evenSts()) throw wb_error(sts()); if (m_vrep->vid() == o.vid()) { orep = m_vrep->copyObject(&m_sts, (wb_orep*)o, d, name); if (evenSts()) throw wb_error(sts()); orep->ref(); } else { wb_cdef c = cdef(o.cid()); orep = m_vrep->createObject(&m_sts, c, d, name); orep->ref(); wb_attribute rba(o.sts(), (wb_orep*)o, "RtBody"); if (rba) { void* p = rba.value(); wb_attribute rban(m_sts, orep, "RtBody"); writeAttribute(rban, p); } wb_attribute dba(o.sts(), (wb_orep*)o, "DevBody"); if (dba) { void* p = dba.value(); wb_attribute dban(m_sts, orep, "DevBody"); writeAttribute(dban, p); } wb_attribute sba(o.sts(), (wb_orep*)o, "SysBody"); if (sba) { void* p = sba.value(); wb_attribute sban(m_sts, orep, "SysBody"); writeAttribute(sban, p); } } m_srep->update(); wb_object onew = wb_object(m_sts, orep); orep->unref(); ldh_sEvent* ep = m_srep->eventStart(onew.oid(), ldh_eEvent_ObjectCreated); m_srep->eventNewFamily(ep, onew); triggPostCreate(onew); triggPostAdopt(parent, onew); m_srep->eventSend(ep); return onew; }