コード例 #1
0
ファイル: wb_session.cpp プロジェクト: siamect/proview
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;
}
コード例 #2
0
ファイル: wb_session.cpp プロジェクト: siamect/proview
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;
}
コード例 #3
0
ファイル: wb_session.cpp プロジェクト: siamect/proview
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;
}
コード例 #4
0
ファイル: wb_session.cpp プロジェクト: siamect/proview
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;
}
コード例 #5
0
ファイル: wb_session.cpp プロジェクト: siamect/proview
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;
}
コード例 #6
0
ファイル: wb_session.cpp プロジェクト: siamect/proview
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;
}
コード例 #7
0
ファイル: Node.cpp プロジェクト: chxyfish/merkaartor
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);
        }
    }
}
コード例 #8
0
ファイル: wb_session.cpp プロジェクト: siamect/proview
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;
}
コード例 #9
0
ファイル: wb_session.cpp プロジェクト: siamect/proview
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;
}