QFCItem::QFCItem(QListViewItem *parent, const FieldContainerPtr &pFC) : Inherited(parent), _pFC (pFC ) { if(getFC() != NullFC) { setText(0, QString(getFC()->getType().getCName())); if(getName(AttachmentContainerPtr::dcast(getFC()))) setText(1, QString(getName(AttachmentContainerPtr::dcast(getFC())))); else setText(1, QString("unnamed") ); } }
void QFCItem::addParents(MFFieldContainerPtr *pMFFCPtr) { if(!pMFFCPtr) return; MFFieldContainerPtr::reverse_iterator mfIter = pMFFCPtr->rbegin(); MFFieldContainerPtr::reverse_iterator mfEnd = pMFFCPtr->rend(); if((mfIter == mfEnd) || (pMFFCPtr->size() <= 1)) return; QHeaderItem *pHeaderItem = new QHeaderItem(this, "parents"); for( ; mfIter != mfEnd; ++mfIter) { if(*mfIter == getFC()) continue; if((*mfIter)->getType().isNode()) { new QNodeItem(pHeaderItem, NodePtr::dcast(*mfIter)); } else if((*mfIter)->getType().isNodeCore()) { new QNodeCoreItem(pHeaderItem, NodeCorePtr::dcast(*mfIter)); } else { new QFCItem(pHeaderItem, *mfIter); } } }
void QFCItem::setup(void) { FieldContainer *pFCAsp = getFC().getAspectCPtr(getAspect()); if(!pFCAsp) return; UInt32 uiNumFields = pFCAsp->getType().getNumFieldDescs(); for(UInt32 fieldId = 1; fieldId <= uiNumFields; ++fieldId) { FieldDescription *pDesc = pFCAsp->getType().getFieldDescription (fieldId); Field *pField = pFCAsp->getField(fieldId); if(isSFFieldContainerPtr(pField)) { if(stringcmp(pDesc->getCName(), "parent" ) == 0) continue; SFFieldContainerPtr *pSFFCPtr = reinterpret_cast<SFFieldContainerPtr *>(pField); if(pSFFCPtr->getValue() != NullFC) { setExpandable(this); break; } } else if(isMFFieldContainerPtr(pField)) { MFFieldContainerPtr *pMFFCPtr = reinterpret_cast<MFFieldContainerPtr *>(pField); if(stringcmp(pDesc->getCName(), "parents") == 0) { if(pMFFCPtr->size() > 1) { setExpandable(this); break; } } else { if(pMFFCPtr->size() > 0) { setExpandable(this); break; } } } } Inherited::setup(); }
void QFCItem::expand(void) { if(childCount() != 0) return; FieldContainer *pFCAsp = getFC().getAspectCPtr(getAspect()); if(!pFCAsp) return; FieldContainerType &fcType = pFCAsp->getType(); UInt32 uiNumFields = fcType.getNumFieldDescs(); for(UInt32 fieldId = 1; fieldId <= uiNumFields; ++fieldId) { FieldDescription *pFieldDesc = fcType.getFieldDescription(fieldId); Field *pField = pFCAsp->getField (fieldId); //add Items for all referenced containers (except parents) if(isSFFieldContainerPtr(pField)) { if(stringcmp(pFieldDesc->getCName(), "parent" ) == 0) continue; addRefedContainer( reinterpret_cast<SFFieldContainerPtr *>(pField)); } else if(isMFFieldContainerPtr(pField)) { if(stringcmp(pFieldDesc->getCName(), "parents") == 0) { addParents( reinterpret_cast<MFFieldContainerPtr *>(pField)); } else { addRefedContainer( reinterpret_cast<MFFieldContainerPtr *>(pField), pFieldDesc ); } } //add attachments if(stringcmp(pFieldDesc->getCName(), "attachments") == 0) { addAttachments(dynamic_cast<SFAttachmentMap *>(pField)); } } PNOTICE << endLog; }
void WrdPAPXFKP::appendGrpprl( const ChBYTE *in_grpprl, ChUINT4 in_ulGrpprlSize, ChUINT4 in_ulStartFC, ChUINT4 in_ulEndFC ) { ChUINT2 unGrpprlOffset = 0; ChUINT2 unFoundOffset = s_unUndefinedOffset; // preconditions ChASSERT( m_pPageData != NULL ); // The number of bytes that we need to write has to be even!!! // First, determine what the total bytes being written is, // which includes the grpprl size byte itself. // If the input grpprl size is even, then that means that with // the addition of the grpprl size byte, we have an odd number // of bytes, which means that a pad byte will be added when we // write the grpprl size, therefore, we need to increment the // total number of bytes written by 1. ChUINT4 ulBytesToWrite = in_ulGrpprlSize + 1; if (in_ulGrpprlSize % 2 == 0) { ulBytesToWrite += 1; } // check of grpprl is the same some previous grpprl, and just store // offset to it rather than appending another unFoundOffset = findGrpprlOffset( in_ulGrpprlSize, in_grpprl ); if (getNumberOfRuns() == 0) { ChASSERT( isRoomForGrpprl( in_ulGrpprlSize ) ); // Set up initial data setNumberOfRuns( 1 ); setFC( 0, in_ulStartFC ); setFC( 1, in_ulEndFC ); // Offset (in bytes) of grpprl. NOTE: Even though the # of runs // is at location s_unPageBufferSize - 1, the grpprls need to be // written on word boundaries, which means they also need to // end at word boundaries, therefore, really need to think that // the # of runs storage takes 2 bytes. unGrpprlOffset = (s_unPageBufferSize - 2) - ulBytesToWrite; ChASSERT( unGrpprlOffset < s_unPageBufferSize ); } else { ChASSERT( in_ulStartFC == getFC(getNumberOfRuns()) ); ChASSERT( ((4 * (getNumberOfRuns() + 1)) + (getNumberOfRuns() * SIZEOF_BX)) < s_unPageBufferSize); // Offset (in bytes) of grpprl unGrpprlOffset = getSmallestGrpprlOffset(); ChASSERT( unGrpprlOffset >= ulBytesToWrite); unGrpprlOffset -= ulBytesToWrite; ChASSERT( unGrpprlOffset < s_unPageBufferSize ); ChASSERT( (unGrpprlOffset) > 0 ); // Move offset array over to make room for another FC memmove( &(m_pPageData[4 * (getNumberOfRuns() + 2)]), &(m_pPageData[4 * (getNumberOfRuns() + 1)]), getNumberOfRuns() * SIZEOF_BX ); // set up initial data setNumberOfRuns( getNumberOfRuns() + 1 ); setFC( getNumberOfRuns(), in_ulEndFC ); } if (unFoundOffset == s_unUndefinedOffset) { ChASSERT( (unGrpprlOffset) > 0 ); ChASSERT( unGrpprlOffset < s_unPageBufferSize ); setGrpprlOffset( getNumberOfRuns() - 1, unGrpprlOffset ); // Grpprl size setGrpprlSize( getNumberOfRuns() - 1, (ChUINT2)in_ulGrpprlSize ); // Actual Grpprl... don't forget size byte if ( in_ulGrpprlSize > 0 ) { ChASSERT( ((unGrpprlOffset + 1) + (in_ulGrpprlSize)) < s_unPageBufferSize); // If the input grpprl size is even, then the # of bytes to write the size // is 2, therefore, start writing the grpprl at the offset + 2. If the input // grpprl size is odd, then the # of bytes to write the size is 1, therefore // start writing the grpprl at the offset + 1. if (in_ulGrpprlSize % 2 == 0) { memcpy( &m_pPageData[unGrpprlOffset + 2], in_grpprl, in_ulGrpprlSize ); } else { memcpy( &m_pPageData[unGrpprlOffset + 1], in_grpprl, in_ulGrpprlSize ); } } } else { setGrpprlOffset( getNumberOfRuns() - 1, unFoundOffset ); } }