resource.cpp

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

CPP
1,943
字号
	MetaDataBase::setExportMacro( formwindow->mainContainer(), exportMacro );    }    loadExtraSource();    if ( mainwindow && formwindow )	mainwindow->insertFormWindow( formwindow );    if ( formwindow ) {	formwindow->killAccels( formwindow );	if ( formwindow->layout() )	    formwindow->layout()->activate();	if ( hadGeometry )	    formwindow->resize( formwindow->size().expandedTo( formwindow->minimumSize().							       expandedTo( formwindow->minimumSizeHint() ) ) );	else	    formwindow->resize( formwindow->size().expandedTo( formwindow->sizeHint() ) );    }    return TRUE;}bool Resource::save( const QString& filename, bool formCodeOnly ){    if ( !formwindow || filename.isEmpty() )	return FALSE;    if (!langIface) {	langIface = MetaDataBase::languageInterface( mainwindow->self->currProject()->language() );	if ( langIface )	    langIface->addRef();    }    if ( formCodeOnly && langIface && langIface->supports( LanguageInterface::StoreFormCodeSeperate ) ) {	saveFormCode();	return TRUE; // missing error checking in saveFormCode ?    }    currFileName = filename;    QFile f( filename );    if ( !f.open( IO_WriteOnly ) )	return FALSE;    bool b = save( &f );    f.close();    return b;}bool Resource::save( QIODevice* dev ){    if ( !formwindow )	return FALSE;    if (!langIface) {	langIface = MetaDataBase::languageInterface( mainwindow->self->currProject()->language() );	if ( langIface )	    langIface->addRef();    }    QTextStream ts( dev );    ts.setCodec( QTextCodec::codecForName( "UTF-8" ) );    ts << "<!DOCTYPE UI><UI version=\"3.0\" stdsetdef=\"1\">" << endl;    saveMetaInfoBefore( ts, 0 );    saveObject( formwindow->mainContainer(), 0, ts, 0 );    if ( formwindow->mainContainer()->inherits( "QMainWindow" ) ) {	saveMenuBar( (QMainWindow*)formwindow->mainContainer(), ts, 0 );	saveToolBars( (QMainWindow*)formwindow->mainContainer(), ts, 0 );    }    if ( !MetaDataBase::customWidgets()->isEmpty() && !usedCustomWidgets.isEmpty() )	saveCustomWidgets( ts, 0 );    if ( formwindow->mainContainer()->inherits( "QMainWindow" ) )	saveActions( formwindow->actionList(), ts, 0 );    if ( !images.isEmpty() )	saveImageCollection( ts, 0 );    if ( !MetaDataBase::connections( formwindow ).isEmpty() || !MetaDataBase::slotList( formwindow ).isEmpty() )	saveConnections( ts, 0 );    saveTabOrder( ts, 0 );    saveMetaInfoAfter( ts, 0 );    ts << "</UI>" << endl;    saveFormCode();    images.clear();    return TRUE;}QString Resource::copy(){    if ( !formwindow )	return QString::null;    copying = TRUE;    QString s;    QTextOStream ts( &s );    ts << "<!DOCTYPE UI-SELECTION><UI-SELECTION>" << endl;    QWidgetList widgets = formwindow->selectedWidgets();    QWidgetList tmp( widgets );    for ( QWidget *w = widgets.first(); w; w = widgets.next() ) {	QWidget *p = w->parentWidget();	bool save = TRUE;	while ( p ) {	    if ( tmp.findRef( p ) != -1 ) {		save = FALSE;		break;	    }	    p = p->parentWidget();	}	if ( save )	    saveObject( w, 0, ts, 0 );    }    if ( !MetaDataBase::customWidgets()->isEmpty() && !usedCustomWidgets.isEmpty() )	saveCustomWidgets( ts, 0 );    if ( !images.isEmpty() )	saveImageCollection( ts, 0 );    ts << "</UI-SELECTION>" << endl;    return s;}void Resource::paste( const QString &cb, QWidget *parent ){    if ( !formwindow )	return;    mainContainerSet = TRUE;    pasting = TRUE;    QBuffer buf( QCString( cb.utf8() ) );    buf.open( IO_ReadOnly );    QDomDocument doc;    QString errMsg;    int errLine;    if ( !doc.setContent( &buf, &errMsg, &errLine ) ) {	qDebug( QString("Parse error: ") + errMsg + QString(" in line %d"), errLine );    }    QDomElement firstWidget = doc.firstChild().toElement().firstChild().toElement();    QDomElement imageCollection = firstWidget;    images.clear();    while ( imageCollection.tagName() != "images" && !imageCollection.isNull() )	imageCollection = imageCollection.nextSibling().toElement();    QDomElement customWidgets = firstWidget;    while ( customWidgets.tagName() != "customwidgets" && !customWidgets.isNull() )	customWidgets = customWidgets.nextSibling().toElement();    if ( !imageCollection.isNull() )	loadImageCollection( imageCollection );    if ( !customWidgets.isNull() )	loadCustomWidgets( customWidgets, this );    QWidgetList widgets;    formwindow->clearSelection( FALSE );    formwindow->setPropertyShowingBlocked( TRUE );    formwindow->clearSelection( FALSE );    while ( !firstWidget.isNull() ) {	if ( firstWidget.tagName() == "widget" ) {	    QWidget *w = (QWidget*)createObject( firstWidget, parent, 0 );	    if ( !w )		continue;	    widgets.append( w );	    int x = w->x() + formwindow->grid().x();	    int y = w->y() + formwindow->grid().y();	    if ( w->x() + w->width() > parent->width() )		x = QMAX( 0, parent->width() - w->width() );	    if ( w->y() + w->height() > parent->height() )		y = QMAX( 0, parent->height() - w->height() );	    if ( x != w->x() || y != w->y() )		w->move( x, y );	    formwindow->selectWidget( w );	} else if ( firstWidget.tagName() == "spacer" ) {	    QWidget *w = createSpacer( firstWidget, parent, 0, firstWidget.tagName() == "vspacer" ? Qt::Vertical : Qt::Horizontal );	    if ( !w )		continue;	    widgets.append( w );	    int x = w->x() + formwindow->grid().x();	    int y = w->y() + formwindow->grid().y();	    if ( w->x() + w->width() > parent->width() )		x = QMAX( 0, parent->width() - w->width() );	    if ( w->y() + w->height() > parent->height() )		y = QMAX( 0, parent->height() - w->height() );	    if ( x != w->x() || y != w->y() )		w->move( x, y );	    formwindow->selectWidget( w );	}	firstWidget = firstWidget.nextSibling().toElement();    }    formwindow->setPropertyShowingBlocked( FALSE );    formwindow->emitShowProperties();    buf.close();    PasteCommand *cmd = new PasteCommand( FormWindow::tr( "Paste" ), formwindow, widgets );    formwindow->commandHistory()->addCommand( cmd );}void Resource::saveObject( QObject *obj, QDesignerGridLayout* grid, QTextStream &ts, int indent ){    if ( obj && obj->isWidgetType() && ( (QWidget*)obj )->isHidden() )	return;    QString closeTag;    if ( obj->isWidgetType() ) {	const char* className = WidgetFactory::classNameOf( obj );	if ( obj->isA( "CustomWidget" ) )	    usedCustomWidgets << QString( className );	if ( obj != formwindow && !formwindow->widgets()->find( (QWidget*)obj ) )	    return; // we don't know anything about this thing	QString attributes;	if ( grid ) {	    QDesignerGridLayout::Item item = grid->items[ (QWidget*)obj ];	    attributes += QString(" row=\"") + QString::number(item.row) + "\"";	    attributes += QString(" column=\"") + QString::number(item.column) + "\"";	    if ( item.rowspan * item.colspan != 1 ) {		attributes += QString(" rowspan=\"") + QString::number(item.rowspan) + "\"";		attributes += QString(" colspan=\"") + QString::number(item.colspan) + "\"";	    }	}	if ( qstrcmp( className, "Spacer" ) == 0 ) {	    closeTag = makeIndent( indent ) + "</spacer>\n";	    ts << makeIndent( indent ) << "<spacer" << attributes << ">" << endl;	    ++indent;	} else {	    closeTag = makeIndent( indent ) + "</widget>\n";	    ts << makeIndent( indent ) << "<widget class=\"" << className << "\"" << attributes << ">" << endl;	    ++indent;	}	if ( WidgetFactory::hasItems( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( obj ) ) ) )	    saveItems( obj, ts, indent );	saveObjectProperties( obj, ts, indent );    } else {	// test for other objects we created. Nothing so far.	return;    }    if ( obj->inherits( "QTabWidget" ) ) {	QTabWidget* tw = (QTabWidget*) obj;	QObjectList* tmpl = tw->queryList( "QWidgetStack" );	QWidgetStack *ws = (QWidgetStack*)tmpl->first();	QTabBar *tb = ( (QDesignerTabWidget*)obj )->tabBar();	for ( int i = 0; i < tb->count(); ++i ) {	    QTab *t = tb->tabAt( i );	    if ( !t )		continue;	    QWidget *w = ws->widget( t->identifier() );	    if ( !w )		continue;	    if ( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) == -1 )		continue; // we don't know this widget	    ts << makeIndent( indent ) << "<widget class=\"QWidget\">" << 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=\"title\">" << endl;	    indent++;	    ts << makeIndent( indent ) << "<string>" << entitize( t->text() ) << "</string>" << endl;	    indent--;	    ts << makeIndent( indent ) << "</attribute>" << endl;	    saveChildrenOf( w, ts, indent );	    --indent;	    ts << makeIndent( indent ) << "</widget>" << endl;	}	delete tmpl;    } else if ( obj->inherits( "QWizard" ) ) {	QWizard* wiz = (QWizard*)obj; for ( int i = 0; i < wiz->pageCount(); ++i ) {	    QWidget *w = wiz->page( i );	    if ( !w )		continue;	    if ( WidgetDatabase::idFromClassName( WidgetFactory::classNameOf( w ) ) == -1 )		continue; // we don't know this widget	    ts << makeIndent( indent ) << "<widget class=\"QWidget\">" << 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=\"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 {	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=\"resizeable\">" << 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++;

⌨️ 快捷键说明

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