metadatabase.cpp

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

CPP
1,625
字号
void MetaDataBase::setPixmapArgument( QObject *o, int pixmap, const QString &arg ){    if ( !o )	return;    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->pixmapArguments.remove( pixmap );    r->pixmapArguments.insert( pixmap, arg );}QString MetaDataBase::pixmapArgument( QObject *o, int pixmap ){    if ( !o )	return QString::null;    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;    }    return *r->pixmapArguments.find( pixmap );}void MetaDataBase::clearPixmapArguments( QObject *o ){    if ( !o )	return;    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->pixmapArguments.clear();}void MetaDataBase::setPixmapKey( QObject *o, int pixmap, const QString &arg ){    if ( !o )	return;    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->pixmapKeys.remove( pixmap );    r->pixmapKeys.insert( pixmap, arg );}QString MetaDataBase::pixmapKey( QObject *o, int pixmap ){    if ( !o )	return QString::null;    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;    }    return *r->pixmapKeys.find( pixmap );}void MetaDataBase::clearPixmapKeys( QObject *o ){    if ( !o )	return;    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->pixmapKeys.clear();}void MetaDataBase::setColumnFields( QObject *o, const QMap<QString, QString> &columnFields ){    if ( !o )	return;    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->columnFields = columnFields;}QMap<QString, QString> MetaDataBase::columnFields( QObject *o ){    if ( !o )	return QMap<QString, QString>();    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 QMap<QString, QString>();    }    return r->columnFields;}bool MetaDataBase::hasEvents( const QString &lang ){    EventInterface* iface = 0;    eventInterfaceManager->queryInterface( lang, &iface );    if ( iface )	iface->release();    return iface != 0;}static QStringList get_arguments( const QString &s ){    QString str = s.mid( s.find( "(" ) + 1, s.find( ")" ) - 1 - s.find( "(" ) );    str = str.simplifyWhiteSpace();    return QStringList::split( ',', str );}QValueList<MetaDataBase::EventDescription> MetaDataBase::events( QObject *o, const QString &lang ){    if ( !o )	return QValueList<EventDescription>();    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<EventDescription>();    }    if ( !eventInterfaceManager || langList.count() == 1 )	return QValueList<EventDescription>();    EventInterface *iface = 0;    eventInterfaceManager->queryInterface( lang, &iface );    QValueList<EventDescription> list;    if ( !iface )	return list;    QStringList lst = iface->events( o );    for ( QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {	EventDescription d;	d.name = *it;	d.args = get_arguments( *it );	list << d;    }    iface->release();    return list;}bool MetaDataBase::setEventFunctions( QObject *o, QObject *form, const QString &lang,				      const QString &e, const QStringList &functions,				      bool addIfNotExisting ){    if ( !o )	return FALSE;    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 ( !form )	return FALSE;    MetaDataBaseRecord *r2 = db->find( (void*)form );    if ( !r2 ) {	qWarning( "No entry for %p (%s, %s) found in MetaDataBase",		  form, form->name(), form->className() );	return FALSE;    }    QString event = e;    event = event.simplifyWhiteSpace();    LanguageInterface *liface = languageInterface( lang );    if ( liface )	event = liface->cleanSignature( event );    r->eventFunctions.remove( event );    EventDescription ed;    ed.name = "<none>";    QValueList<EventDescription> eds = events( o, lang );    for ( QValueList<EventDescription>::Iterator eit = eds.begin(); eit != eds.end(); ++eit ) {	if ( (*eit).name == e ) {	    ed = *eit;	    break;	}    }    bool slotExists = TRUE;    for ( QStringList::ConstIterator fit = functions.begin(); fit != functions.end(); ++fit ) {	QString fName = *fit + "(";	if ( ed.name != "<none>" ) {	    QStringList args;	    for ( QStringList::Iterator it = ed.args.begin(); it != ed.args.end(); ++it )		args << *it;	    LanguageInterface *iface = languageInterface( lang );	    if ( iface )		fName += iface->createArguments( args );	}	fName += ")";	fName = normalizeSlot( fName );	bool needAddSlot = TRUE;	for ( QValueList<Slot>::Iterator it = r2->slotList.begin(); it != r2->slotList.end(); ++it ) {	    Slot s = *it;	    QString sName = normalizeSlot( s.slot );	    if ( sName.left( sName.find( '(' ) ) == fName.left( fName.find( '(' ) ) &&		 liface->canConnect( sName, fName ) ) {		needAddSlot = FALSE;		break;	    }	}	if ( needAddSlot )	    slotExists = FALSE;	if ( needAddSlot && addIfNotExisting )	    addSlot( form, fName.latin1(), "virtual", "public", lang, "void" );    }    r->eventFunctions.insert( event, functions );    return !slotExists;}QStringList MetaDataBase::eventFunctions( QObject *o, const QString &e, const QString &lang ){    if ( !o )	return QStringList();    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 event = e;    event = event.simplifyWhiteSpace();    QStringList l = *r->eventFunctions.find( event );    if ( l.isEmpty() ) {	LanguageInterface *liface = languageInterface( lang );	if ( liface ) {	    QString cleanSig = liface->cleanSignature( event );	    for ( QMap<QString, QStringList>::Iterator it = r->eventFunctions.begin();		  it != r->eventFunctions.end(); ++it ) {		if ( liface->cleanSignature( it.key() ) == cleanSig )		    return *it;	    }	}    }#if 0 // ### for conversation from old to new    if ( l.isEmpty() ) {	int i = event.find( "(" );	if ( i != -1 )	    event = event.left( i );	l = *r->eventFunctions.find( event );    }#endif    return l;}QMap<QString, QStringList> MetaDataBase::eventFunctions( QObject *o ){    if ( !o )	return QMap<QString, QStringList>();    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 QMap<QString, QStringList>();    }    return r->eventFunctions;}void MetaDataBase::setEditor( const QStringList &langs ){    editorLangList = langs;}bool MetaDataBase::hasEditor( const QString &lang ){    return editorLangList.find( lang ) != editorLangList.end();}void MetaDataBase::setFunctionComments( QObject *o, const QString &func, const QString &comments ){    if ( !o )	return;    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->functionComments.replace( func, comments );}QString MetaDataBase::functionComments( QObject *o, const QString &func ){    if ( !o )	return QString::null;    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;    }    return *r->functionComments.find( func );}void MetaDataBase::setFunctionBodies( QObject *o, const QMap<QString, QString> &bodies, const QString &lang, const QString &returnType ){    if ( !o )	return;    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;    }    if ( !lang.isEmpty() ) {	r->functionBodies.clear();	for ( QMap<QString, QString>::ConstIterator it = bodies.begin(); it != bodies.end(); ++it ) {	    r->functionBodies.insert( normalizeSlot( it.key() ), *it );	    bool foundSlot = FALSE;	    int idx = 0;	    for ( QValueList<Slot>::Iterator sit = r->slotList.begin(); sit != r->slotList.end(); ++sit, ++idx ) {		Slot s = *sit;		if ( normalizeSlot( s.slot ) == normalizeSlot( it.key() ) ) {		    foundSlot = TRUE;		    if ( QString( s.slot ) != it.key() ) {			s.slot = make_pretty( it.key() ).latin1();			r->slotList[idx] = s;		    }		    break;		}	    }	    if ( !foundSlot ) {		Slot sl;		sl.slot = make_pretty( it.key() ).latin1();		sl.specifier = "virtual";		sl.access = "public";		sl.language = lang;		sl.returnType = returnType;		r->slotList.append( sl );	    }	}    } else {	r->functionBodies = bodies;    }}QMap<QString, QString> MetaDataBase::functionBodies( QObject *o ){    if ( !o )	return QMap<QString, QString>();    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 QMap<QString, QString>();    }    return r->functionBodies;}void MetaDataBase::setupInterfaceManagers(){    if ( !eventInterfaceManager )	eventInterfaceManager = new QPluginManager<EventInterface>( IID_Event, QApplication::libraryPaths(), "/designer" );    if ( !languageInterfaceManager ) {	languageInterfaceManager = new QPluginManager<LanguageInterface>( IID_Language, QApplication::libraryPaths(), "/designer" );	langList = languageInterfaceManager->featureList();	langList.remove( "C++" );	langList << "C++";    }}QStringList MetaDataBase::languages(){    return langList;}QString MetaDataBase::normalizeSlot( const QString &s ){    return Parser::cleanArgs( s );}LanguageInterface *MetaDataBase::languageInterface( const QString &lang ){    LanguageInterface* iface = 0;    languageInterfaceManager->queryInterface( lang, &iface );    return iface;}void MetaDataBase::clear( QObject *o ){    if ( !o )	return;    setupDataBase();    db->remove( (void*)o );    for ( QPtrDictIterator<QWidget> it( *( (FormWindow*)o )->widgets() ); it.current(); ++it )	db->remove( (void*)it.current() );}void MetaDataBase::setBreakPoints( QObject *o, const QValueList<int> &l ){    if ( !o )	return;    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->breakPoints = l;}QValueList<int> MetaDataBase::breakPoints( QObject *o ){    if ( !o )	return QValueList<int>();    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<int>();    }    return r->breakPoints;}bool MetaDataBase::hasEventFunctions( QObject *o ){    if ( !o )	return FALSE;    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;    }    return !r->eventFunctions.isEmpty();}void MetaDataBase::setExportMacro( QObject *o, const QString &macro ){    if ( !o )	return;    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->exportMacro = macro;}QString MetaDataBase::exportMacro( QObject *o ){    if ( !o )	return "";    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 "";    }    return r->exportMacro;}bool MetaDataBase::hasObject( QObject *o ){    return !!db->find( o );}void MetaDataBase::functionNameChanged( QObject *o, const QString &oldName, const QString &newName ){    if ( !o )	return;    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;    }    QMap<QString, QString>::Iterator it = r->functionBodies.find( normalizeSlot( oldName ) );    if ( it == r->functionBodies.end() )	return;    QString body = *it;    r->functionBodies.remove( it );    r->functionBodies.insert( normalizeSlot( newName ), body );    ( (FormWindow*)o )->formFile()->functionNameChanged( oldName, newName );}

⌨️ 快捷键说明

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