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 ¯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->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 + -
显示快捷键?