bool Person::add_role(const std::string &depid, const std::string &srole) { std::string role = to_lower(trim(srole)); if (depid.empty() || role.empty()) { return false; } std::vector<PersonRole> oRet = this->roles(); bool bFound = false; PersonRole temp(depid, role); for (auto it = oRet.begin(); it != oRet.end(); ++it) { if ((*it) == temp) { bFound = true; break; } } if (bFound) { return false; } Array *pAr = this->set_array(DomainConstants::ROLES); if (pAr == nullptr) { return false; } PObject obj = Value::create_object(); Object *p = obj.get(); p->set_string(STRING_DEP, depid); p->set_string(STRING_ROLE, role); pAr->append_object(obj); this->modified(true); return true; }// add_role
void NavigateToPage( HWND appHwnd, Document * doc, NMTREEVIEW * info ) { if (!info->itemNew.hItem) return; Dictionary * dict = (Dictionary *)info->itemNew.lParam; if (!dict) return; PObject dest = dict->Get( "Dest", doc->xrefTable ); if (!dest) return; if (dest->Type() == ObjectType::String) { String * s = (String *)dest.get(); dest = Object::ResolveIndirect_<Object>( NameTreeGetValue( doc, *s ), doc->xrefTable ); } PArray destArray; if (dest->Type() == ObjectType::Dictionary) { PDictionary d = boost::shared_static_cast<Dictionary>(dest); //TODO: Implement link action //For now handle everything as GoTo (here be Raptors) //d->Get<Name>("S", doc->xrefTable); destArray = d->Get<Array>("D", doc->xrefTable); } else if (dest->Type() == ObjectType::Array) destArray = boost::shared_static_cast<Array>(dest); if (destArray) { if (destArray->elements.empty()) return; PDictionary page = Object::ResolveIndirect_<Dictionary>( destArray->elements[0], doc->xrefTable ); SetCurrentPage( page ); } }