📄 resource.cpp
字号:
++indent; ts << makeIndent( indent ) << "<property name=\"name\">" << endl; indent++; ts << makeIndent( indent ) << "<cstring>" << entitize( w->name() ) << "</cstring>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; ts << makeIndent( indent ) << "<attribute name=\"title\">" << endl; indent++; ts << makeIndent( indent ) << "<string>" << entitize( wiz->title( w ) ) << "</string>" << endl; indent--; ts << makeIndent( indent ) << "</attribute>" << endl; saveChildrenOf( w, ts, indent ); --indent; ts << makeIndent( indent ) << "</widget>" << endl; } } else if ( obj->inherits( "QMainWindow" ) ) { saveChildrenOf( ( (QMainWindow*)obj )->centralWidget(), ts, indent ); } else { bool saved = FALSE;#ifdef QT_CONTAINER_CUSTOM_WIDGETS if ( WidgetDatabase::isCustomPluginWidget( WidgetDatabase::idFromClassName( className ) ) ) { WidgetInterface *iface = 0; widgetManager()->queryInterface( className, &iface ); if ( iface ) { QWidgetContainerInterfacePrivate *iface2 = 0; iface->queryInterface( IID_QWidgetContainer, (QUnknownInterface**)&iface2 ); if ( iface2 ) { if ( iface2->supportsPages( className ) ) { QWidgetList containers = iface2->pages( className, (QWidget*)obj ); if ( !containers.isEmpty() ) { saved = TRUE; int i = 0; for ( QWidget *w = containers.first(); w; w = containers.next(), ++i ) { if ( WidgetDatabase:: idFromClassName( WidgetFactory::classNameOf( w ) ) == -1 ) continue; // we don't know this widget ts << makeIndent( indent ) << "<widget class=\"" << WidgetFactory::classNameOf( w ) << "\">" << endl; ++indent; ts << makeIndent( indent ) << "<property name=\"name\">" << endl; indent++; ts << makeIndent( indent ) << "<cstring>" << entitize( w->name() ) << "</cstring>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; ts << makeIndent( indent ) << "<attribute name=\"label\">" << endl; indent++; ts << makeIndent( indent ) << "<cstring>" << entitize( iface2->pageLabel( className, (QWidget*)obj, i ) ) << "</cstring>" << endl; indent--; ts << makeIndent( indent ) << "</attribute>" << endl; saveChildrenOf( w, ts, indent ); --indent; ts << makeIndent( indent ) << "</widget>" << endl; } } } else { saved = TRUE; QWidget *w = iface2->containerOfWidget( className, (QWidget*)obj ); ts << makeIndent( indent ) << "<widget class=\"" << WidgetFactory::classNameOf( w ) << "\">" << endl; ++indent; ts << makeIndent( indent ) << "<property name=\"name\">" << endl; indent++; ts << makeIndent( indent ) << "<cstring>" << entitize( w->name() ) << "</cstring>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; saveChildrenOf( w, ts, indent ); --indent; ts << makeIndent( indent ) << "</widget>" << endl; } iface2->release(); } iface->release(); } }#endif if ( !saved ) saveChildrenOf( obj, ts, indent ); } indent--; ts << closeTag;}void Resource::saveItems( QObject *obj, QTextStream &ts, int indent ){ if ( obj->inherits( "QListBox" ) || obj->inherits( "QComboBox" ) ) { QListBox *lb = 0; if ( obj->inherits( "QListBox" ) ) lb = (QListBox*)obj; else lb = ( (QComboBox*)obj )->listBox(); QListBoxItem *i = lb->firstItem(); for ( ; i; i = i->next() ) { ts << makeIndent( indent ) << "<item>" << endl; indent++; QStringList text; text << i->text(); QPtrList<QPixmap> pixmaps; if ( i->pixmap() ) pixmaps.append( i->pixmap() ); saveItem( text, pixmaps, ts, indent ); indent--; ts << makeIndent( indent ) << "</item>" << endl; } } else if ( obj->inherits( "QIconView" ) ) { QIconView *iv = (QIconView*)obj; QIconViewItem *i = iv->firstItem(); for ( ; i; i = i->nextItem() ) { ts << makeIndent( indent ) << "<item>" << endl; indent++; QStringList text; text << i->text(); QPtrList<QPixmap> pixmaps; if ( i->pixmap() ) pixmaps.append( i->pixmap() ); saveItem( text, pixmaps, ts, indent ); indent--; ts << makeIndent( indent ) << "</item>" << endl; } } else if ( obj->inherits( "QListView" ) ) { QListView *lv = (QListView*)obj; int i; for ( i = 0; i < lv->header()->count(); ++i ) { ts << makeIndent( indent ) << "<column>" << endl; indent++; QStringList l; l << lv->header()->label( i ); QPtrList<QPixmap> pix; pix.setAutoDelete( TRUE ); if ( lv->header()->iconSet( i ) ) pix.append( new QPixmap( lv->header()->iconSet( i )->pixmap() ) ); saveItem( l, pix, ts, indent ); ts << makeIndent( indent ) << "<property name=\"clickable\">" << endl; indent++; ts << makeIndent( indent ) << "<bool>" << mkBool( lv->header()->isClickEnabled( i ) )<< "</bool>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; ts << makeIndent( indent ) << "<property name=\"resizable\">" << endl; indent++; ts << makeIndent( indent ) << "<bool>" << mkBool( lv->header()->isResizeEnabled( i ) ) << "</bool>" << endl; indent--; ts << makeIndent( indent ) << "</property>" << endl; indent--; ts << makeIndent( indent ) << "</column>" << endl; } saveItem( lv->firstChild(), ts, indent - 1 ); }#ifndef QT_NO_TABLE else if ( obj->inherits( "QTable" ) ) { QTable *table = (QTable*)obj; int i; QMap<QString, QString> columnFields = MetaDataBase::columnFields( table ); bool isDataTable = table->inherits( "QDataTable" ); for ( i = 0; i < table->horizontalHeader()->count(); ++i ) { if ( !table->horizontalHeader()->label( i ).isNull() && table->horizontalHeader()->label( i ).toInt() != i + 1 || table->horizontalHeader()->iconSet( i ) || isDataTable ) { ts << makeIndent( indent ) << "<column>" << endl; indent++; QStringList l; l << table->horizontalHeader()->label( i ); QPtrList<QPixmap> pix; pix.setAutoDelete( TRUE ); if ( table->horizontalHeader()->iconSet( i ) ) pix.append( new QPixmap( table->horizontalHeader()->iconSet( i )->pixmap() ) ); saveItem( l, pix, ts, indent ); if ( table->inherits( "QDataTable" ) && !columnFields.isEmpty() ) { ts << makeIndent( indent ) << "<property name=\"field\">" << endl; indent++; 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 = QPixmap::fromMimeSource( "image.png" ); MetaDataBase::setPixmapKey( formwindow, pix.serialNumber(), arg ); return pix; } QPixmap pix = QPixmap::fromMimeSource( "image.png" ); 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.contains( "sizeHint" ) ) changed << "sizeHint"; if ( !changed.contains( "geometry" ) ) changed << "geometry"; } } else if ( w->inherits( "QLayout" ) ) { if ( MetaDataBase::spacing( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)w ) ) ) > -1 ) changed << "spacing"; if ( MetaDataBase::margin( WidgetFactory::containerOfWidget( WidgetFactory::layoutParent( (QLayout*)w ) ) ) > -1 ) changed << "margin"; } 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" ) );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -