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