⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 object.cpp

📁 Trolltech公司发布的基于C++图形开发环境
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************************************************************ Copyright (C) 2000 Trolltech AS.  All rights reserved.**** This file is part of Qt Designer.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition** licenses may use this file in accordance with the Qt Commercial License** Agreement provided with the Software.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for**   information about Qt Commercial License Agreements.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "uic.h"#include "parser.h"#include "domtool.h"#include <qregexp.h>#include <qsizepolicy.h>#include <qstringlist.h>#define NO_STATIC_COLORS#include <globaldefs.h>#include "../interfaces/widgetinterface.h"#include "../shared/widgetdatabase.h"/*!  Creates a declaration for the object given in \a e.  Children are not traversed recursively.  \sa createObjectImpl() */void Uic::createObjectDecl( const QDomElement& e ){    if ( e.tagName() == "vbox" ) {	out << "    QVBoxLayout* " << registerObject(getLayoutName(e) ) << ";" << endl;    } else if ( e.tagName() == "hbox" ) {	out << "    QHBoxLayout* " << registerObject(getLayoutName(e) ) << ";" << endl;    } else if ( e.tagName() == "grid" ) {	out << "    QGridLayout* " << registerObject(getLayoutName(e) ) << ";" << endl;    } else {	QString objClass = getClassName( e );	if ( objClass.isEmpty() )	    return;	QString objName = getObjectName( e );	if ( objName.isEmpty() )	    return;	// ignore QLayoutWidgets	if ( objClass == "QLayoutWidget" )	    return;	// register the object and unify its name	objName = registerObject( objName );	if ( objClass == "Line" )	    objClass = "QFrame";	else if (objClass == "Spacer")	    objClass = "QSpacerItem";	out << "    " << objClass << "* " << objName << ";" << endl;    }}/*!  Creates an implementation for the object given in \a e.  Traverses recursively over all children.  Returns the name of the generated child object.  \sa createObjectDecl() */static bool createdCentralWidget = FALSE;QString Uic::createObjectImpl( const QDomElement &e, const QString& parentClass, const QString& par, const QString& layout ){    QString parent( par );    if ( parent == "this" && isMainWindow ) {	if ( !createdCentralWidget )	    out << indent << "setCentralWidget( new QWidget( this, \"qt_central_widget\" ) );" << endl;	createdCentralWidget = TRUE;	parent = "centralWidget()";    }    QDomElement n;    QString objClass, objName;    int numItems = 0;    int numColumns = 0;    int numRows = 0;    if ( layouts.contains( e.tagName() ) )	return createLayoutImpl( e, parentClass, parent, layout );    objClass = getClassName( e );    if ( objClass.isEmpty() )	return objName;    objName = getObjectName( e );    QString definedName = objName;    bool isTmpObject = objName.isEmpty() || objClass == "QLayoutWidget";    if ( isTmpObject ) {	if ( objClass[0] == 'Q' )	    objName = objClass.mid(1);	else	    objName = objClass.lower();	objName.prepend( "private" );    }    bool isLine = objClass == "Line";    if ( isLine )	objClass = "QFrame";    out << endl;    if ( objClass == "QLayoutWidget" ) {	if ( layout.isEmpty() ) {	    // register the object and unify its name	    objName = registerObject( objName );	    out << "    QWidget* " << objName << " = new QWidget( " << parent << ", \"" << definedName << "\" );" << endl;	} else {	    // the layout widget is not necessary, hide it by creating its child in the parent	    QString result;	    for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {		if (tags.contains( n.tagName() ) )		    result = createObjectImpl( n, parentClass, parent, layout );	    }	    return result;	}    } else if ( objClass != "QToolBar" && objClass != "QMenuBar" ) {	// register the object and unify its name	objName = registerObject( objName );	out << "    ";	if ( isTmpObject )	    out << objClass << "* ";	out << objName << " = new " << createObjectInstance( objClass, parent, objName ) << ";" << endl;    }    if ( objClass == "QAxWidget" ) {	QString controlId;	for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {	    if ( n.tagName() == "property" && n.attribute( "name" ) == "control" ) {		controlId = n.firstChild().toElement().text();	    }	}	out << "    ";	out << objName << "->setControl(\"" << controlId << "\");" << endl;    }    lastItem = "0";    // set the properties and insert items    bool hadFrameShadow = FALSE;    for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {	if ( n.tagName() == "property" ) {	    bool stdset = stdsetdef;	    if ( n.hasAttribute( "stdset" ) )		stdset = toBool( n.attribute( "stdset" ) );	    QString prop = n.attribute( "name" );	    if ( prop == "database" )		continue;	    QString value = setObjectProperty( objClass, objName, prop, n.firstChild().toElement(), stdset );	    if ( value.isEmpty() )		continue;	    if ( prop == "name" )		continue;	    if ( isLine && prop == "frameShadow" )		hadFrameShadow = TRUE;	    if ( prop == "buddy" && value.startsWith("\"") && value.endsWith("\"") ) {		buddies << Buddy( objName, value.mid(1, value.length() - 2 ) );		continue;	    }	    if ( isLine && prop == "orientation" ) {		prop = "frameShape";		if ( value.right(10) == "Horizontal" )		    value = "QFrame::HLine";		else		    value = "QFrame::VLine";		if ( !hadFrameShadow ) {		    prop = "frameStyle";		    value += " | QFrame::Sunken";		}	    }	    if ( prop == "buttonGroupId" ) {		if ( parentClass == "QButtonGroup" )		    out << indent << parent << "->insert( " << objName << ", " << value << " );" << endl;		continue;	    }	    if ( prop == "frameworkCode" )		continue;	    if ( objClass == "QMultiLineEdit" &&		 QRegExp("echoMode|hMargin|maxLength|maxLines|undoEnabled").exactMatch(prop) )		continue;	    QString call = objName + "->";	    if ( stdset ) {		call += mkStdSet( prop ) + "( ";	    } else {		call += "setProperty( \"" + prop + "\", ";	    }	    if ( prop == "accel" )		call += "QKeySequence( " + value + " ) );";	    else		call += value + " );";	    if ( n.firstChild().toElement().tagName() == "string" ||		 prop == "currentItem" ) {		trout << indent << call << endl;	    } else {		out << indent << call << endl;	    }	} else if ( n.tagName() == "item" ) {	    QString call;	    QString value;	    if ( objClass.contains( "ListBox" ) ) {		call = createListBoxItemImpl( n, objName );		if ( !call.isEmpty() ) {		    if ( numItems == 0 )			trout << indent << objName << "->clear();" << endl;		    trout << indent << call << endl;		}	    } else if ( objClass.contains( "ComboBox" ) ) {		call = createListBoxItemImpl( n, objName, &value );		if ( !call.isEmpty() ) {		    if ( numItems == 0 )			trout << indent << objName << "->clear();" << endl;		    trout << indent << call << endl;		}	    } else if ( objClass.contains( "IconView" ) ) {		call = createIconViewItemImpl( n, objName );		if ( !call.isEmpty() ) {		    if ( numItems == 0 )			trout << indent << objName << "->clear();" << endl;		    trout << indent << call << endl;		}	    } else if ( objClass.contains( "ListView" ) ) {		call = createListViewItemImpl( n, objName, QString::null );		if ( !call.isEmpty() ) {		    if ( numItems == 0 )			trout << indent << objName << "->clear();" << endl;		    trout << call << endl;		}	    }	    if ( !call.isEmpty() )		numItems++;	} else if ( n.tagName() == "column" || n.tagName() == "row" ) {	    QString call;	    QString value;	    if ( objClass.contains( "ListView" ) ) {		call = createListViewColumnImpl( n, objName, &value );		if ( !call.isEmpty() ) {		    out << call;		    trout << indent << objName << "->header()->setLabel( "			  << numColumns++ << ", " << value << " );\n";		}	    } else if ( objClass ==  "QTable" || objClass == "QDataTable" ) {		bool isCols = ( n.tagName() == "column" );		call = createTableRowColumnImpl( n, objName, &value );		if ( !call.isEmpty() ) {		    out << call;		    trout << indent << objName << "->"			  << ( isCols ? "horizontalHeader" : "verticalHeader" )			  << "()->setLabel( "			  << ( isCols ? numColumns++ : numRows++ )			  << ", " << value << " );\n";		}	    }	}    }    // create all children, some widgets have special requirements    if ( objClass == "QTabWidget" ) {	for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {	    if ( tags.contains( n.tagName()  ) ) {		QString page = createObjectImpl( n, objClass, objName );		QString comment;		QString label = DomTool::readAttribute( n, "title", "", comment ).toString();		out << indent << objName << "->insertTab( " << page << ", QString::fromLatin1(\"\") );" << endl;		trout << indent << objName << "->changeTab( " << page << ", "		      << trcall( label, comment ) << " );" << endl;	    }	}    } else if ( objClass == "QWidgetStack" ) {	for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {	    if ( tags.contains( n.tagName()  ) ) {		QString page = createObjectImpl( n, objClass, objName );		int id = DomTool::readAttribute( n, "id", "" ).toInt();		out << indent << objName << "->addWidget( " << page << ", " << id << " );" << endl;	    }	}    } else if ( objClass == "QToolBox" ) {	for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {	    if ( tags.contains( n.tagName()  ) ) {		QString page = createObjectImpl( n, objClass, objName );		QString comment;		QString label = DomTool::readAttribute( n, "label", "", comment ).toString();		out << indent << objName << "->addItem( " << page << ", QString::fromLatin1(\"\") );" << endl;		trout << indent << objName << "->setItemLabel( " << objName 		      << "->indexOf(" << page << "), " << trcall( label, comment ) 		      << " );" << endl;	    }	}     } else if ( objClass != "QToolBar" && objClass != "QMenuBar" ) { // standard widgets	 WidgetInterface *iface = 0;	 widgetManager()->queryInterface( objClass, &iface );#ifdef QT_CONTAINER_CUSTOM_WIDGETS	 int id = WidgetDatabase::idFromClassName( objClass );	 if ( WidgetDatabase::isContainer( id ) && WidgetDatabase::isCustomPluginWidget( id ) && iface ) {	     QWidgetContainerInterfacePrivate *iface2 = 0;	     iface->queryInterface( IID_QWidgetContainer, (QUnknownInterface**)&iface2 );	     if ( iface2 ) {		 bool supportsPages = iface2->supportsPages( objClass );		 for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {		     if ( tags.contains( n.tagName()  ) ) {			 if ( supportsPages ) {			     QString page = createObjectImpl( n, objClass, objName );			     QString comment;			     QString label = DomTool::readAttribute( n, "label", "", comment ).toString();			     out << indent << iface2->createCode( objClass, objName, page, label ) << endl;			 } else {			     createObjectImpl( n, objClass, objName );			 }		     }		 }		 iface2->release();	     }	     iface->release();	 } else {#endif	     for ( n = e.firstChild().toElement(); !n.isNull(); n = n.nextSibling().toElement() ) {		 if ( tags.contains( n.tagName() ) )		     createObjectImpl( n, objClass, objName );	     }#ifdef QT_CONTAINER_CUSTOM_WIDGETS	 }#endif     }    return objName;}/*!  Creates declarations for spacer items that are children of \a e.  \sa createObjectDecl()*/void Uic::createSpacerDecl( const QDomElement &e ){    for ( QDomElement n = e.firstChild().toElement();	  !n.isNull(); n = n.nextSibling().toElement() )	if ( n.tagName() == "spacer" )	    out << "    QSpacerItem* " << registerObject(getObjectName(n)) << ";" << endl;}/*!  Creates a set-call for property \a exclusiveProp of the object  given in \a e.  If the object does not have this property, the function does nothing.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -