void SimpleAbstractStreamReader::readChildren(AST::UiObjectDefinition *uiObjectDefinition) { Q_ASSERT(uiObjectDefinition); for (AST::UiObjectMemberList *it = uiObjectDefinition->initializer->members; it; it = it->next) { AST::UiObjectMember *member = it->member; AST::UiObjectDefinition *uiObjectDefinition = AST::cast<AST::UiObjectDefinition *>(member); if (uiObjectDefinition) readChild(uiObjectDefinition); } }
//----------------------------------------------------------------- // destructor mgTextBuffer::~mgTextBuffer() { // delete all the child boxes unsigned int posn = 0; while (posn < m_bufferLen) { mgFormatCmd cmd = (mgFormatCmd) m_buffer[posn++]; switch (cmd) { case mgJustifyCmd: case mgLeftMarginCmd: case mgRightMarginCmd: case mgIndentCmd: case mgSpaceCmd: case mgTabCmd: case mgWrapCmd: case mgBreakCmd: case mgClearCmd: case mgFontSizeCmd: case mgFontBoldCmd: case mgFontItalicCmd: case mgDoneCmd: readShort(posn); break; case mgColorCmd: case mgAnchorCmd: case mgTargetCmd: readDWORD(posn); break; case mgFontFaceCmd: case mgTextCmd: { int textLen; const char* text; readText(posn, textLen, text); break; } case mgChildCmd: { // read child box from buffer const void* child; mgTextAlign halign; mgTextAlign valign; readChild(posn, child, halign, valign); break; } } } delete m_buffer; }
bool SimpleAbstractStreamReader::readDocument(AST::UiProgram *ast) { if (!ast) { addError(tr("Could not parse document.")); return false; } AST::UiObjectDefinition *uiObjectDefinition = AST::cast<AST::UiObjectDefinition *>(ast->members->member); if (!uiObjectDefinition) { addError(tr("Expected document to contain a single object definition.")); return false; } readChild(uiObjectDefinition); m_source.clear(); return errors().isEmpty(); }