metadatabase.cpp

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

CPP
1,625
字号
		  o, o->name(), o->className() );	return;    }    for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {	Slot s = *it;	if ( s.slot == slot &&	     s.specifier == specifier &&	     s.access == access &&	     ( language.isEmpty() || s.language == language ) &&	       ( returnType.isEmpty() || s.returnType == returnType ) ) {	    r->slotList.remove( it );	    break;	}    }}void MetaDataBase::removeSlot( QObject *o, const QString &slot ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return;    }    for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {	Slot s = *it;	if ( normalizeSlot( s.slot ) == normalizeSlot( slot ) ) {	    r->slotList.remove( it );	    break;	}    }}QValueList<MetaDataBase::Slot> MetaDataBase::slotList( QObject *o ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return QValueList<Slot>();    }    return r->slotList;}bool MetaDataBase::isSlotUsed( QObject *o, const QCString &slot ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return FALSE;    }    QValueList<Connection> conns = connections( o );    for ( QValueList<Connection>::Iterator it = conns.begin(); it != conns.end(); ++it ) {	if ( (*it).slot == slot )	    return TRUE;    }    return FALSE;}void MetaDataBase::changeSlot( QObject *o, const QCString &slot, const QCString &newName ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return;    }    for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {	Slot s = *it;	if ( normalizeSlot( s.slot ) == normalizeSlot( slot ) ) {	    (*it).slot = newName;	    return;	}    }}void MetaDataBase::changeSlotAttributes( QObject *o, const QCString &slot,					 const QString& specifier, const QString &access,					 const QString &language, const QString &returnType ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return;    }    for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {	Slot s = *it;	if ( normalizeSlot( s.slot ) == normalizeSlot( slot ) ) {	    (*it).specifier = specifier;	    (*it).access = access;	    (*it).language = language;	    (*it).returnType = returnType;	    return;	}    }}bool MetaDataBase::hasSlot( QObject *o, const QCString &slot, bool onlyCustom ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return FALSE;    }    if ( !onlyCustom ) {	QStrList slotList = o->metaObject()->slotNames( TRUE );	if ( slotList.find( slot ) != -1 )	    return TRUE;	if ( o->inherits( "FormWindow" ) ) {	    o = ( (FormWindow*)o )->mainContainer();	    slotList = o->metaObject()->slotNames( TRUE );	    if ( slotList.find( slot ) != -1 )		return TRUE;	}	if ( o->inherits( "CustomWidget" ) ) {	    MetaDataBase::CustomWidget *w = ( (::CustomWidget*)o )->customWidget();	    for ( QValueList<Slot>::Iterator it = w->lstSlots.begin(); it != w->lstSlots.end(); ++it ) {		QCString s = (*it).slot;		if ( !s.data() )		    continue;		if ( s == slot )		    return TRUE;	    }	}    }    for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {	Slot s = *it;	if ( normalizeSlot( s.slot ) == normalizeSlot( slot ) )	    return TRUE;    }    return FALSE;}QString MetaDataBase::languageOfSlot( QObject *o, const QCString &slot ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return QString::null;    }    QString sl = slot;    sl = normalizeSlot( sl );    for ( QValueList<Slot>::Iterator it = r->slotList.begin(); it != r->slotList.end(); ++it ) {	Slot s = *it;	QString sl2 = s.slot;	sl2 = normalizeSlot( sl2 );	if ( sl == sl2 )	    return s.language;    }    return QString::null;}bool MetaDataBase::addCustomWidget( CustomWidget *wid ){    setupDataBase();    for ( CustomWidget *w = cWidgets->first(); w; w = cWidgets->next() ) {	if ( *wid == *w ) {	    for ( QValueList<QCString>::ConstIterator it = wid->lstSignals.begin(); it != wid->lstSignals.end(); ++it ) {		if ( !w->hasSignal( *it ) )		    w->lstSignals.append( *it );	    }	    for ( QValueList<Slot>::ConstIterator it2 = wid->lstSlots.begin(); it2 != wid->lstSlots.end(); ++it2 ) {		if ( !w->hasSlot( MetaDataBase::normalizeSlot( (*it2).slot ).latin1() ) )		    w->lstSlots.append( *it2 );	    }	    for ( QValueList<Property>::ConstIterator it3 = wid->lstProperties.begin(); it3 != wid->lstProperties.end(); ++it3 ) {		if ( !w->hasProperty( (*it3).property ) )		    w->lstProperties.append( *it3 );	    }	    delete wid;	    return FALSE;	}    }    WidgetDatabaseRecord *r = new WidgetDatabaseRecord;    r->name = wid->className;    r->group = WidgetDatabase::widgetGroup( "Custom" );    r->toolTip = wid->className;    r->icon = new QIconSet( *wid->pixmap, *wid->pixmap );    r->isContainer = wid->isContainer;    wid->id = WidgetDatabase::addCustomWidget( r );    cWidgets->append( wid );    return TRUE;}void MetaDataBase::removeCustomWidget( CustomWidget *w ){    cWidgets->removeRef( w );}QPtrList<MetaDataBase::CustomWidget> *MetaDataBase::customWidgets(){    setupDataBase();    return cWidgets;}MetaDataBase::CustomWidget *MetaDataBase::customWidget( int id ){    for ( CustomWidget *w = cWidgets->first(); w; w = cWidgets->next() ) {	if ( id == w->id )	    return w;    }    return 0;}bool MetaDataBase::isWidgetNameUsed( CustomWidget *wid ){    for ( CustomWidget *w = cWidgets->first(); w; w = cWidgets->next() ) {	if ( w == wid )	    continue;	if ( wid->className == w->className )	    return TRUE;    }    return FALSE;}bool MetaDataBase::hasCustomWidget( const QString &className ){    for ( CustomWidget *w = cWidgets->first(); w; w = cWidgets->next() ) {	if ( w->className == className )	    return TRUE;    }    return FALSE;}void MetaDataBase::setTabOrder( QWidget *w, const QWidgetList &order ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*) w );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  w, w->name(), w->className() );	return;    }    r->tabOrder = order;}QWidgetList MetaDataBase::tabOrder( QWidget *w ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*) w );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  w, w->name(), w->className() );	return QWidgetList();    }    return r->tabOrder;}void MetaDataBase::setIncludes( QObject *o, const QValueList<Include> &incs ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return;    }    r->includes = incs;}QValueList<MetaDataBase::Include> MetaDataBase::includes( QObject *o ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return QValueList<Include>();    }    return r->includes;}void MetaDataBase::setForwards( QObject *o, const QStringList &fwds ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return;    }    r->forwards = fwds;}QStringList MetaDataBase::forwards( QObject *o ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return QStringList();    }    return r->forwards;}void MetaDataBase::setVariables( QObject *o, const QStringList &vars ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return;    }    r->variables = vars;}QStringList MetaDataBase::variables( QObject *o ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return QStringList();    }    return r->variables;}void MetaDataBase::setSignalList( QObject *o, const QStringList &sigs ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return;    }    r->sigs.clear();    for ( QStringList::ConstIterator it = sigs.begin(); it != sigs.end(); ++it ) {	QString s = (*it).simplifyWhiteSpace();	bool hasSemicolon = s.endsWith( ";" );	if ( hasSemicolon )	    s = s.left( s.length() - 1 );	int p = s.find( '(' );	if ( p < 0 )	    p = s.length();	int sp = s.find( ' ' );	if ( sp >= 0 && sp < p ) {	    s = s.mid( sp+1 );	    p -= sp + 1;	}	if ( p == (int) s.length() )	    s += "()";	if ( hasSemicolon )	    s += ";";	r->sigs << s;    }}QStringList MetaDataBase::signalList( QObject *o ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return QStringList();    }    return r->sigs;}void MetaDataBase::setMetaInfo( QObject *o, MetaInfo mi ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return;    }    r->metaInfo = mi;}MetaDataBase::MetaInfo MetaDataBase::metaInfo( QObject *o ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)o );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  o, o->name(), o->className() );	return MetaInfo();    }    return r->metaInfo;}MetaDataBase::CustomWidget::CustomWidget(){    className = "MyCustomWidget";    includeFile = "mywidget.h";    includePolicy = Local;    sizeHint = QSize( -1, -1 );    pixmap = new QPixmap( PixmapChooser::loadPixmap( "customwidget.xpm" ) );    id = -1;    sizePolicy = QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );    isContainer = FALSE;}MetaDataBase::CustomWidget::CustomWidget( const CustomWidget &w ){    className = w.className;    includeFile = w.includeFile;    includePolicy = w.includePolicy;    sizeHint = w.sizeHint;    if ( w.pixmap )	pixmap = new QPixmap( *w.pixmap );    else	pixmap = 0;    id = w.id;    isContainer = w.isContainer;}void MetaDataBase::setCursor( QWidget *w, const QCursor &c ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)w );    if ( !r ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  w, w->name(), w->className() );	return;    }    r->cursor = c;}QCursor MetaDataBase::cursor( QWidget *w ){    setupDataBase();    MetaDataBaseRecord *r = db->find( (void*)w );    if ( !r ) {	w->unsetCursor();	return w->cursor();    }    return r->cursor;}bool MetaDataBase::CustomWidget::operator==( const CustomWidget &w ) const{    return className == w.className;}MetaDataBase::CustomWidget &MetaDataBase::CustomWidget::operator=( const CustomWidget &w ){    delete pixmap;    className = w.className;    includeFile = w.includeFile;    includePolicy = w.includePolicy;    sizeHint = w.sizeHint;    if ( w.pixmap )	pixmap = new QPixmap( *w.pixmap );    else	pixmap = 0;    lstSignals = w.lstSignals;    lstSlots = w.lstSlots;    lstProperties = w.lstProperties;    id = w.id;    isContainer = w.isContainer;    return *this;}bool MetaDataBase::CustomWidget::hasSignal( const QCString &signal ) const{    QStrList sigList = QWidget::staticMetaObject()->signalNames( TRUE );    if ( sigList.find( signal ) != -1 )	return TRUE;    for ( QValueList<QCString>::ConstIterator it = lstSignals.begin(); it != lstSignals.end(); ++it ) {	if ( normalizeSlot( *it ) == normalizeSlot( signal ) )	    return TRUE;    }    return FALSE;}bool MetaDataBase::CustomWidget::hasSlot( const QCString &slot ) const{    QStrList slotList = QWidget::staticMetaObject()->slotNames( TRUE );    if ( slotList.find( normalizeSlot( slot ) ) != -1 )	return TRUE;    for ( QValueList<MetaDataBase::Slot>::ConstIterator it = lstSlots.begin(); it != lstSlots.end(); ++it ) {	if ( normalizeSlot( (*it).slot ) == normalizeSlot( slot ) )	    return TRUE;    }    return FALSE;}bool MetaDataBase::CustomWidget::hasProperty( const QCString &prop ) const{    QStrList propList = QWidget::staticMetaObject()->propertyNames( TRUE );    if ( propList.find( prop ) != -1 )	return TRUE;    for ( QValueList<MetaDataBase::Property>::ConstIterator it = lstProperties.begin(); it != lstProperties.end(); ++it ) {	if ( (*it).property == prop )	    return TRUE;    }    return FALSE;}

⌨️ 快捷键说明

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