/*! Creates the implementation of a layout tag. Called from createObjectImpl(). */ QString Uic::createLayoutImpl( const QDomElement &e, const QString& parentClass, const QString& parent, const QString& layout ) { QDomElement n; QString objClass, objName; objClass = e.tagName(); QString qlayout = "QVBoxLayout"; if ( objClass == "hbox" ) qlayout = "QHBoxLayout"; else if ( objClass == "grid" ) qlayout = "QGridLayout"; bool isGrid = e.tagName() == "grid" ; objName = registerObject( getLayoutName( e ) ); layoutObjects += objName; QString margin = DomTool::readProperty( e, "margin", defMargin ).toString(); QString spacing = DomTool::readProperty( e, "spacing", defSpacing ).toString(); QString resizeMode = DomTool::readProperty( e, "resizeMode", QString::null ).toString(); QString optcells; if ( isGrid ) optcells = "1, 1, "; if ( (parentClass == "QGroupBox" || parentClass == "QButtonGroup") && layout.isEmpty() ) { // special case for group box out << indent << parent << "->setColumnLayout(0, Qt::Vertical );" << endl; out << indent << parent << "->layout()->setSpacing( " << spacing << " );" << endl; out << indent << parent << "->layout()->setMargin( " << margin << " );" << endl; out << indent << objName << " = new " << qlayout << "( " << parent << "->layout() );" << endl; out << indent << objName << "->setAlignment( Qt::AlignTop );" << endl; } else { out << indent << objName << " = new " << qlayout << "( "; if ( layout.isEmpty() ) out << parent; else { out << "0"; if ( !DomTool::hasProperty( e, "margin" ) ) margin = "0"; } out << ", " << optcells << margin << ", " << spacing << ", \"" << objName << "\"); " << endl; } if ( !resizeMode.isEmpty() ) out << indent << objName << "->setResizeMode( QLayout::" << resizeMode << " );" << endl; if ( !isGrid ) { for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { if ( n.tagName() == "spacer" ) { QString child = createSpacerImpl( n, parentClass, parent, objName ); out << indent << objName << "->addItem( " << child << " );" << endl; } else if ( tags.contains( n.tagName() ) ) { QString child = createObjectImpl( n, parentClass, parent, objName ); if ( isLayout( child ) ) out << indent << objName << "->addLayout( " << child << " );" << endl; else out << indent << objName << "->addWidget( " << child << " );" << endl; } } } else { for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) { QDomElement ae = n; int row = ae.attribute( "row" ).toInt(); int col = ae.attribute( "column" ).toInt(); int rowspan = ae.attribute( "rowspan" ).toInt(); int colspan = ae.attribute( "colspan" ).toInt(); if ( rowspan < 1 ) rowspan = 1; if ( colspan < 1 ) colspan = 1; if ( n.tagName() == "spacer" ) { QString child = createSpacerImpl( n, parentClass, parent, objName ); if ( rowspan * colspan != 1 ) out << indent << objName << "->addMultiCell( " << child << ", " << row << ", " << ( row + rowspan - 1 ) << ", " << col << ", " << ( col + colspan - 1 ) << " );" << endl; else out << indent << objName << "->addItem( " << child << ", " << row << ", " << col << " );" << endl; } else if ( tags.contains( n.tagName() ) ) { QString child = createObjectImpl( n, parentClass, parent, objName ); out << endl; QString o = "Widget"; if ( isLayout( child ) ) o = "Layout"; if ( rowspan * colspan != 1 ) out << indent << objName << "->addMultiCell" << o << "( " << child << ", " << row << ", " << ( row + rowspan - 1 ) << ", " << col << ", " << ( col + colspan - 1 ) << " );" << endl; else out << indent << objName << "->add" << o << "( " << child << ", " << row << ", " << col << " );" << endl; } } } return objName; }
static bool skipLayoutAndCommentsOnce(Lexer *self) { while (isLayout(self->currentChar)) { consumeCharacter(self); } while (self->currentChar == '#') { consumeCharacter(self); while (!isCommentCloser(self->currentChar)) { if (isEndOfInput(self->currentChar)) return false; consumeCharacter(self); } while (isLayout(self->currentChar)) { consumeCharacter(self); } return true; } // consume a block comment and its contents if (self->currentChar == '/' && peekAhead(self, 1) == '*') { // consume new comment symbols consumeCharacter(self); consumeCharacter(self); while (true) { consumeCharacter(self); if (isEndOfInput(self->currentChar)) { errorMessage("Unterminated block comment"); return false; } if (self->currentChar == '*' && peekAhead(self, 1) == '/') { // consume the comment symbols consumeCharacter(self); consumeCharacter(self); // eat layout stuff like space etc while (isLayout(self->currentChar)) { consumeCharacter(self); } break; } } return true; } // consume a single line comment while ((self->currentChar == '/' && peekAhead(self, 1) == '/')) { consumeCharacter(self); // eat the / consumeCharacter(self); // eat the / while (!isCommentCloser(self->currentChar)) { if (isEndOfInput(self->currentChar)) return false; consumeCharacter(self); } while (isLayout(self->currentChar)) { consumeCharacter(self); } return true; } return false; }