resource.cpp

来自「qt-x11-free-3.0.3.tar.gz minigui图形界面工具」· C++ 代码 · 共 1,943 行 · 第 1/5 页

CPP
1,943
字号
		    ts << makeIndent( indent ) << "<string>" << entitize( *columnFields.find( l[ 0 ] ) ) << "</string>" << endl;		    indent--;		    ts << makeIndent( indent ) << "</property>" << endl;		}		indent--;		ts << makeIndent( indent ) << "</column>" << endl;	    }	}	for ( i = 0; i < table->verticalHeader()->count(); ++i ) {	    if ( !table->verticalHeader()->label( i ).isNull() &&		 table->verticalHeader()->label( i ).toInt() != i + 1 ||		 table->verticalHeader()->iconSet( i ) ) {		ts << makeIndent( indent ) << "<row>" << endl;		indent++;		QStringList l;		l << table->verticalHeader()->label( i );		QPtrList<QPixmap> pix;		pix.setAutoDelete( TRUE );		if ( table->verticalHeader()->iconSet( i ) )		    pix.append( new QPixmap( table->verticalHeader()->iconSet( i )->pixmap() ) );		saveItem( l, pix, ts, indent );		indent--;		ts << makeIndent( indent ) << "</row>" << endl;	    }	}    }#endif}void Resource::saveItem( QListViewItem *i, QTextStream &ts, int indent ){    QListView *lv = i->listView();    while ( i ) {	ts << makeIndent( indent ) << "<item>" << endl;	indent++;	QPtrList<QPixmap> pixmaps;	QStringList textes;	for ( int c = 0; c < lv->columns(); ++c ) {	    pixmaps.append( i->pixmap( c ) );	    textes << i->text( c );	}	saveItem( textes, pixmaps, ts, indent );	if ( i->firstChild() )	    saveItem( i->firstChild(), ts, indent );	indent--;	ts << makeIndent( indent ) << "</item>" << endl;	i = i->nextSibling();    }}void Resource::savePixmap( const QPixmap &p, QTextStream &ts, int indent, const QString &tagname ){    if ( p.isNull() ) {	ts << makeIndent( indent ) << "<" + tagname + "></"  + tagname + ">" << endl;	return;    }    if ( formwindow && formwindow->savePixmapInline() )	ts << makeIndent( indent ) << "<" + tagname + ">" << saveInCollection( p ) << "</" + tagname + ">" << endl;    else if ( formwindow && formwindow->savePixmapInProject() )	ts << makeIndent( indent ) << "<" + tagname + ">" << MetaDataBase::pixmapKey( formwindow, p.serialNumber() )	   << "</" + tagname + ">" << endl;    else	ts << makeIndent( indent ) << "<" + tagname + ">" << MetaDataBase::pixmapArgument( formwindow, p.serialNumber() )	   << "</" + tagname + ">" << endl;}QPixmap Resource::loadPixmap( const QDomElement &e, const QString &/*tagname*/ ){    QString arg = e.firstChild().toText().data();    if ( formwindow && formwindow->savePixmapInline() ) {	QImage img = loadFromCollection( arg );	QPixmap pix;	pix.convertFromImage( img );	MetaDataBase::setPixmapArgument( formwindow, pix.serialNumber(), arg );	return pix;    } else if ( formwindow && formwindow->savePixmapInProject() ) {	QPixmap pix;	if ( mainwindow && mainwindow->currProject() )	    pix = mainwindow->currProject()->pixmapCollection()->pixmap( arg );	else	    pix = PixmapChooser::loadPixmap( "image.xpm" );	MetaDataBase::setPixmapKey( formwindow, pix.serialNumber(), arg );	return pix;    }    QPixmap pix = PixmapChooser::loadPixmap( "image.xpm" );    MetaDataBase::setPixmapArgument( formwindow, pix.serialNumber(), arg );    return pix;}void Resource::saveItem( const QStringList &text, const QPtrList<QPixmap> &pixmaps, QTextStream &ts, int indent ){    QStringList::ConstIterator it = text.begin();    for ( ; it != text.end(); ++it ) {	ts << makeIndent( indent ) << "<property name=\"text\">" << endl;	indent++;	ts << makeIndent( indent ) << "<string>" << entitize( *it ) << "</string>" << endl;	indent--;	ts << makeIndent( indent ) << "</property>" << endl;    }    for ( int i = 0; i < (int)pixmaps.count(); ++i ) {	QPixmap *p = ( (QPtrList<QPixmap>)pixmaps ).at( i );	ts << makeIndent( indent ) << "<property name=\"pixmap\">" << endl;	indent++;	if ( p )	    savePixmap( *p, ts, indent );	else	    savePixmap( QPixmap(), ts, indent );	indent--;	ts << makeIndent( indent ) << "</property>" << endl;    }}void Resource::saveChildrenOf( QObject* obj, QTextStream &ts, int indent ){    const QObjectList *l = obj->children();    if ( !l )	return; // no children to save    QString closeTag;    // if the widget has a layout we pretend that all widget's childs are childs of the layout - makes the structure nicer    QLayout *layout = 0;    QDesignerGridLayout* grid = 0;    if ( !obj->inherits( "QSplitter" ) &&	 WidgetDatabase::isContainer( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( obj ) ) ) &&	 obj->isWidgetType() &&	 WidgetFactory::layoutType( (QWidget*)obj, layout ) != WidgetFactory::NoLayout ) {	WidgetFactory::LayoutType lay = WidgetFactory::layoutType( (QWidget*)obj, layout );	switch ( lay ) {	case WidgetFactory::HBox:	    closeTag = makeIndent( indent ) + "</hbox>";	    ts << makeIndent( indent ) << "<hbox>" << endl;	    ++indent;	    break;	case WidgetFactory::VBox:	    closeTag = makeIndent( indent ) + "</vbox>";	    ts << makeIndent( indent ) << "<vbox>" << endl;	    ++indent;	    break;	case WidgetFactory::Grid:	    closeTag = makeIndent( indent ) + "</grid>";	    ts << makeIndent( indent ) << "<grid>" << endl;	    ++indent;	    grid = (QDesignerGridLayout*) layout;	    break;	default:	    break;	}	// save properties of layout	if ( lay != WidgetFactory::NoLayout )	    saveObjectProperties( layout, ts, indent );    }    for ( QPtrListIterator<QObject> it ( *l ); it.current(); ++it )	saveObject( it.current(), grid, ts, indent );    if ( !closeTag.isEmpty() ) {	indent--;	ts << closeTag << endl;    }}void Resource::saveObjectProperties( QObject *w, QTextStream &ts, int indent ){    QStringList saved;    QStringList changed;    changed = MetaDataBase::changedProperties( w );    if ( w->isWidgetType() ) {	if ( w->inherits( "Spacer" ) ) {	    if ( changed.find( "sizeHint" ) == changed.end() )		changed << "sizeHint";	}    } else if ( w->inherits( "QLayout" ) ) { // #### should be cleaner (RS)	changed << "margin" << "spacing";    }    if ( w == formwindow->mainContainer() ) {	if ( changed.findIndex( "geometry" ) == -1 )	    changed << "geometry";	if ( changed.findIndex( "caption" ) == -1 )	    changed << "caption";    }    if ( changed.isEmpty() )	    return;    bool inLayout = w != formwindow->mainContainer() && !copying && w->isWidgetType() && ( (QWidget*)w )->parentWidget() &&		    WidgetFactory::layoutType( ( (QWidget*)w )->parentWidget() ) != WidgetFactory::NoLayout;    QStrList lst = w->metaObject()->propertyNames( !w->inherits( "Spacer" ) );    for ( QPtrListIterator<char> it( lst ); it.current(); ++it ) {	if ( changed.find( QString::fromLatin1( it.current() ) ) == changed.end() )	    continue;	if ( saved.find( QString::fromLatin1( it.current() ) ) != saved.end() )	    continue;	saved << QString::fromLatin1( it.current() );	const QMetaProperty* p = w->metaObject()->				 property( w->metaObject()->findProperty( it.current(), TRUE ), TRUE );	if ( !p || !p->stored( w ) || ( inLayout && qstrcmp( p->name(), "geometry" ) == 0 ) )	    continue;	if ( w->inherits( "QLabel" ) && qstrcmp( p->name(), "pixmap" ) == 0 &&	     ( !( (QLabel*)w )->pixmap() || ( (QLabel*)w )->pixmap()->isNull() ) )	    continue;	if ( w->inherits( "QDesignerMenuBar" ) &&	     ( qstrcmp( p->name(), "itemName" ) == 0 || qstrcmp( p->name(), "itemNumber" ) == 0 ||	       qstrcmp( p->name(), "itemText" ) == 0 ) )	    continue;	if ( qstrcmp( p->name(), "name" ) == 0 )	    knownNames << w->property( "name" ).toString();	ts << makeIndent( indent ) << "<property";	ts << " name=\"" << it.current() << "\"";	if ( !p->testFlags( QMetaProperty::StdSet ) )	    ts << " stdset=\"0\"";	ts << ">" << endl;	indent++;	if ( p->isSetType() ) {	    saveSetProperty( w, it.current(), QVariant::nameToType( p->type() ), ts, indent );	} else if ( p->isEnumType() ) {	    saveEnumProperty( w, it.current(), QVariant::nameToType( p->type() ), ts, indent );	} else {	    saveProperty( w, it.current(), w->property( p->name() ), QVariant::nameToType( p->type() ), ts, indent );	}	indent--;	ts << makeIndent( indent ) << "</property>" << endl;    }    if ( w->isWidgetType() && MetaDataBase::fakeProperties( w ) ) {	QMap<QString, QVariant>* fakeProperties = MetaDataBase::fakeProperties( w );	for ( QMap<QString, QVariant>::Iterator fake = fakeProperties->begin();	      fake != fakeProperties->end(); ++fake ) {	    if ( MetaDataBase::isPropertyChanged( w, fake.key() ) ) {		if ( w->inherits( "CustomWidget" ) ) {		    MetaDataBase::CustomWidget *cw = ( (CustomWidget*)w )->customWidget();		    if ( cw && !cw->hasProperty( fake.key().latin1() ) && fake.key() != "toolTip" && fake.key() != "whatsThis" )			continue;		}		ts << makeIndent( indent ) << "<property name=\"" << fake.key() << "\" stdset=\"0\">" << endl;		indent++;		saveProperty( w, fake.key(), *fake, (*fake).type(), ts, indent );		indent--;		ts << makeIndent( indent ) << "</property>" << endl;	    }	}    }}void Resource::saveSetProperty( QObject *w, const QString &name, QVariant::Type, QTextStream &ts, int indent ){    const QMetaProperty *p = w->metaObject()->property( w->metaObject()->findProperty( name, TRUE ), TRUE );    QStrList l( p->valueToKeys( w->property( name ).toInt() ) );    QString v;    for ( uint i = 0; i < l.count(); ++i ) {	v += l.at( i );	if ( i < l.count() - 1 )	    v += "|";    }    ts << makeIndent( indent ) << "<set>" << v << "</set>" << endl;}void Resource::saveEnumProperty( QObject *w, const QString &name, QVariant::Type, QTextStream &ts, int indent ){    const QMetaProperty *p = w->metaObject()->property( w->metaObject()->findProperty( name, TRUE ), TRUE );    ts << makeIndent( indent ) << "<enum>" << p->valueToKey( w->property( name ).toInt() ) << "</enum>" << endl;}void Resource::saveProperty( QObject *w, const QString &name, const QVariant &value, QVariant::Type t, QTextStream &ts, int indent ){    if ( name == "hAlign" || name =="vAlign" || name == "wordwrap" || name == "layoutMargin" || name =="layoutSpacing" )	return;    int num, unum;    double dob;    QString comment;    if ( w && formwindow->widgets()->find( (QWidget*)w ) )	comment = MetaDataBase::propertyComment( w, name );    switch ( t ) {    case QVariant::String:	ts << makeIndent( indent ) << "<string>" << entitize( value.toString() ) << "</string>" << endl;	if ( !comment.isEmpty() )	    ts << makeIndent( indent ) << "<comment>" << entitize( comment ) << "</comment>" << endl;	break;    case QVariant::CString:	ts << makeIndent( indent ) << "<cstring>" << entitize( value.toCString() ).latin1() << "</cstring>" << endl;	break;    case QVariant::Bool:	ts << makeIndent( indent ) << "<bool>" << mkBool( value.toBool() ) << "</bool>" << endl;	break;    case QVariant::Int:	num = value.toInt();	if ( w && w->inherits( "QLayout" ) ) {	    if ( name == "spacing" )		num = MetaDataBase::spacing( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)w ) ) );	    else if ( name == "margin" )		num = MetaDataBase::margin( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)w ) ) );	}	ts << makeIndent( indent ) << "<number>" << QString::number( num ) << "</number>" << endl;	break;    case QVariant::Double:	dob = value.toDouble();	ts << makeIndent( indent ) << "<number>" << QString::number( dob ) << "</number>" << endl;	break;    case QVariant::KeySequence:	num = value.toInt();	ts << makeIndent( indent ) << "<number>" << QString::number( num ) << "</number>" << endl;	break;    case QVariant::UInt:	unum = value.toUInt();	if ( w && w->inherits( "QLayout" ) ) {	    if ( name == "spacing" )		num = MetaDataBase::spacing( WidgetFactory::layoutParent( (QLayout*)w ) );	    else if ( name == "margin" )		num = MetaDataBase::margin( WidgetFactory::layoutParent( (QLayout*)w ) );	}	ts << makeIndent( indent ) << "<number>" << QString::number( unum ) << "</number>" << endl;	break;    case QVariant::Rect: {	QVariant v( value );	ts << makeIndent( indent ) << "<rect>" << endl;	indent++;	ts << makeIndent( indent ) << "<x>" << QString::number( v.toRect().x() ) << "</x>" << endl;	ts << makeIndent( indent ) << "<y>" << QString::number( v.toRect().y() ) << "</y>" << endl;	ts << makeIndent( indent ) << "<width>" << QString::number( v.toRect().width() ) << "</width>" << endl;	ts << makeIndent( indent ) << "<height>" << QString::number( v.toRect().height() ) << "</height>" << endl;	indent--;	ts << makeIndent( indent ) << "</rect>" << endl;    } break;    case QVariant::Point: {	QVariant v( value );	ts << makeIndent( indent ) << "<point>" << endl;	indent++;	ts << makeIndent( indent ) << "<x>" << QString::number( v.toPoint().x() ) << "</x>" << endl;	ts << makeIndent( indent ) << "<y>" << QString::number( v.toPoint().y() ) << "</y>" << endl;	indent--;	ts << makeIndent( indent ) << "</point>" << endl;    } break;    case QVariant::Size: {	QVariant v( value );	ts << makeIndent( indent ) << "<size>" << endl;	indent++;	ts << makeIndent( indent ) << "<width>" << QString::number( v.toSize().width() ) << "</width>" << endl;	ts << makeIndent( indent ) << "<height>" << QString::number( v.toSize().height() ) << "</height>" << endl;	indent--;	ts << makeIndent( indent ) << "</size>" << endl;    } break;    case QVariant::Color: {	QVariant v( value );	ts << makeIndent( indent ) << "<color>" << endl;	indent++;	saveColor( ts, indent, v.toColor() );	indent--;	ts << makeIndent( indent ) << "</color>" << endl;    } break;    case QVariant::Font: {	QVariant v( value );	ts << makeIndent( indent ) << "<font>" << endl;	QFont f( qApp->font() );	if ( w && w->isWidgetType() && ((QWidget*)w)->parentWidget() )	    f = ((QWidget*)w)->parentWidget()->font();	QFont f2( v.toFont() );	indent++;	if ( f.family() != f2.family() )	    ts << makeIndent( indent ) << "<family>" << f2.family() << "</family>" << endl;	if ( f.pointSize() != f2.pointSize() )	    ts << makeIndent( indent ) << "<pointsize>" << QString::number( f2.pointSize() ) << "</pointsize>" << endl;	if ( f.bold() != f2.bold() )	    ts << makeIndent( indent ) << "<bold>" << QString::number( (int)f2.bold() ) << "</bold>" << endl;	if ( f.italic() != f2.italic() )	    ts << makeIndent( indent ) << "<italic>" << QString::number( (int)f2.italic() ) << "</italic>" << endl;	if ( f.underline() != f2.underline() )	    ts << makeIndent( indent ) << "<underline>" << QString::number( (int)f2.underline() ) << "</underline>" << endl;	if ( f.strikeOut() != f2.strikeOut() )	    ts << makeIndent( indent ) << "<strikeout>" << QString::number( (int)f2.strikeOut() ) << "</strikeout>" << endl;	indent--;	ts << makeIndent( indent ) << "</font>" << endl;    } break;    case QVariant::SizePolicy: {	QSizePolicy sp( value.toSizePolicy() );	ts << makeIndent( indent ) << "<sizepolicy>" << endl;	indent++;	ts << makeIndent( indent ) << "<hsizetype>" << (int)sp.horData() << "</hsizetype>" << endl;	ts << makeIndent( indent ) << "<vsizetype>" << (int)sp.verData() << "</vsizetype>" << endl;	ts << makeIndent( indent ) << "<horstretch>" << (int)sp.horStretch() << "</horstretch>" << endl;	ts << makeIndent( indent ) << "<verstretch>" << (int)sp.verStretch() << "</verstretch>" << endl;

⌨️ 快捷键说明

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