📄 project.cpp
字号:
bool b = conn->open( suppressDialog ); return b;#else Q_UNUSED( connection ); Q_UNUSED( suppressDialog ); return FALSE;#endif}/*! Closes the database \a connection.*/void Project::closeDatabase( const QString &connection ){#ifndef QT_NO_SQL DatabaseConnection *conn = databaseConnection( connection ); if ( connection.isEmpty() && !conn ) conn = databaseConnection( "(default)" ); if ( !conn ) return; conn->close();#else Q_UNUSED( connection );#endif}// void Project::formClosed( FormWindow *fw )// {// formWindows.remove( fw );// }QObjectList *Project::formList( bool resolveFakeObjects ) const{ QObjectList *l = new QObjectList; for ( QPtrListIterator<FormFile> forms(formfiles); forms.current(); ++forms ) { FormFile* f = forms.current(); if ( f->formWindow() ) { if ( resolveFakeObjects && f->formWindow()->isFake() ) l->append( objectForFakeForm( f->formWindow() ) ); else l->append( f->formWindow()->child( 0, "QWidget" ) ); } else if ( f->isFake() ) { l->append( objectForFakeFormFile( f ) ); } } return l;}DesignerProject *Project::iFace(){ if ( !iface ) iface = new DesignerProjectImpl( this ); return iface;}void Project::setLanguage( const QString &l ){ if ( l == lang ) return; lang = l; is_cpp = lang == "C++"; updateCustomSettings(); modified = TRUE;}QString Project::language() const{ return lang;}void Project::setCustomSetting( const QString &key, const QString &value ){ customSettings.remove( key ); customSettings.insert( key, value ); modified = TRUE;}QString Project::customSetting( const QString &key ) const{ return *customSettings.find( key );}void Project::updateCustomSettings(){ if ( !projectSettingsPluginManager ) return;/* ProjectSettingsInterface *iface = 0; projectSettingsPluginManager->queryInterface( lang, (QUnknownInterface**)&iface ); if ( !iface ) return; csList = iface->projectSettings(); iface->release();*/ QInterfacePtr<ProjectSettingsInterface> iface; projectSettingsPluginManager->queryInterface( lang, &iface ); if ( !iface ) return; csList = iface->projectSettings(); customSettings.clear();}void Project::setActive( bool b ){ pixCollection->setActive( b );}void Project::addSourceFile( SourceFile *sf ){ sourcefiles.append( sf ); modified = TRUE; emit sourceFileAdded( sf );}SourceFile* Project::findSourceFile( const QString& filename, SourceFile *ignore ) const{ QPtrListIterator<SourceFile> it(sourcefiles); while ( it.current() ) { if ( it.current() != ignore && it.current()->fileName() == filename ) return it.current(); ++it; } return 0;}FormFile* Project::findFormFile( const QString& filename, FormFile *ignore ) const{ QPtrListIterator<FormFile> it(formfiles); while ( it.current() ) { if ( it.current() != ignore && it.current()->fileName() == filename ) return it.current(); ++it; } return 0;}void Project::setIncludePath( const QString &platform, const QString &path ){ if ( inclPath[platform] == path ) return; inclPath.replace( platform, path ); modified = TRUE;}void Project::setLibs( const QString &platform, const QString &path ){ lbs.replace( platform, path );}void Project::setDefines( const QString &platform, const QString &path ){ defs.replace( platform, path );}void Project::setConfig( const QString &platform, const QString &config ){ cfg.replace( platform, config );}QString Project::config( const QString &platform ) const{ return cfg[ platform ];}QString Project::libs( const QString &platform ) const{ return lbs[ platform ];}QString Project::defines( const QString &platform ) const{ return defs[ platform ];}QString Project::includePath( const QString &platform ) const{ return inclPath[ platform ];}QString Project::templte() const{ return templ;}void Project::setTemplate( const QString &t ){ templ = t;}void Project::readPlatformSettings( const QString &contents, const QString &setting, QMap<QString, QString> &res ){ const QString platforms[] = { "", "win32", "unix", "mac", QString::null }; for ( int i = 0; platforms[ i ] != QString::null; ++i ) { QString p = platforms[ i ]; if ( !p.isEmpty() ) p += ":"; QStringList lst = parse_multiline_part( contents, p + setting ); QString s = lst.join( " " ); QString key = platforms[ i ]; if ( key.isEmpty() ) key = "(all)"; res.replace( key, s ); }}void Project::removePlatformSettings( QString &contents, const QString &setting ){ const QString platforms[] = { "win32", "unix", "mac", "", QString::null }; for ( int i = 0; platforms[ i ] != QString::null; ++i ) { QString p = platforms[ i ]; if ( !p.isEmpty() ) p += ":"; remove_multiline_contents( contents, p + setting ); }}void Project::writePlatformSettings( QString &contents, const QString &setting, const QMap<QString, QString> &input ){ const QString platforms[] = { "", "win32", "unix", "mac", QString::null }; int i; LanguageInterface *iface = MetaDataBase::languageInterface( lang ); if (iface && (setting == "SOURCES" || setting == "HEADERS")) // The (all) part will be saved later on i = 1; else i = 0; for (; platforms[ i ] != QString::null; ++i ) { QString p = platforms[ i ]; if ( !p.isEmpty() ) p += ":"; QString key = platforms[ i ]; if ( key.isEmpty() ) key = "(all)"; QMap<QString, QString>::ConstIterator it = input.find( key ); if ( it == input.end() || (*it).isEmpty() ) continue; contents += p + setting + "\t+= " + *it + "\n\n"; }}void Project::addFormFile( FormFile *ff ){ formfiles.append( ff ); modified = TRUE; emit formFileAdded( ff );}bool Project::removeFormFile( FormFile *ff ){ if ( !formfiles.containsRef( ff ) ) return FALSE; if ( !ff->close() ) return FALSE; formfiles.removeRef( ff ); modified = TRUE; emit formFileRemoved( ff ); return TRUE;}void Project::addObject( QObject *o ){ bool wasModified = modified; objs.append( o ); FormFile *ff = new FormFile( "", FALSE, this, "qt_fakewindow" ); ff->setFileName( "__APPOBJ" + QString( o->name() ) + ".ui" ); fakeFormFiles.insert( (void*)o, ff ); MetaDataBase::addEntry( o ); if ( hasGUI() ) { QWidget *parent = MainWindow::self ? MainWindow::self->qWorkspace() : 0; FormWindow *fw = new FormWindow( ff, MainWindow::self, parent, "qt_fakewindow" ); fw->setProject( this ); if ( QFile::exists( ff->absFileName() ) ) Resource::loadExtraSource( ff, ff->absFileName(), MetaDataBase::languageInterface( language() ), FALSE ); if ( MainWindow::self ) fw->setMainWindow( MainWindow::self ); if ( MainWindow::self ) { QApplication::sendPostedEvents( MainWindow::self->qWorkspace(), QEvent::ChildInserted ); connect( fw, SIGNAL( undoRedoChanged( bool, bool, const QString &, const QString & ) ), MainWindow::self, SLOT( updateUndoRedo( bool, bool, const QString &, const QString & ) ) ); } if ( fw->parentWidget() ) { fw->parentWidget()->setFixedSize( 1, 1 ); fw->show(); } } else { if ( QFile::exists( ff->absFileName() ) ) Resource::loadExtraSource( ff, ff->absFileName(), MetaDataBase::languageInterface( language() ), FALSE ); } emit objectAdded( o ); modified = wasModified;}void Project::setObjects( const QObjectList &ol ){ for ( QObjectListIt it( ol ); it.current(); ++it ) addObject( it.current() );}void Project::removeObject( QObject *o ){ bool wasModified = modified; objs.removeRef( o ); MetaDataBase::removeEntry( o ); fakeFormFiles.remove( (void*)o ); emit objectRemoved( o ); modified = wasModified;}QObjectList Project::objects() const{ return objs;}FormFile *Project::fakeFormFileFor( QObject *o ) const{ return fakeFormFiles.find( (void*)o );}QObject *Project::objectForFakeForm( FormWindow *fw ) const{ for ( QPtrDictIterator<FormFile> it( fakeFormFiles ); it.current(); ++it ) { if ( it.current()->formWindow() == fw || it.current() == fw->formFile() ) return (QObject*)it.currentKey(); } return 0;}QObject *Project::objectForFakeFormFile( FormFile *ff ) const{ for ( QPtrDictIterator<FormFile> it( fakeFormFiles ); it.current(); ++it ) { if ( it.current() == ff ) return (QObject*)it.currentKey(); } return 0;}void Project::removeTempProject(){ if ( !singleProjectMode() ) return; QDir d( QFileInfo( filename ).dirPath() ); if ( !d.exists( QFileInfo( filename ).dirPath() ) ) return; QStringList files = d.entryList( QDir::Files ); QStringList::Iterator it; for ( it = files.begin(); it != files.end(); ++it ) { d.remove( *it ); } if ( d.exists( QFileInfo( filename ).dirPath() + "/images" ) ) { d = QDir( QFileInfo( filename ).dirPath() + "/images" ); files = d.entryList( QDir::Files ); for ( it = files.begin(); it != files.end(); ++it ) d.remove( *it ); d = QDir( QFileInfo( filename ).dirPath() ); d.remove( "images" ); } d.remove( QFileInfo( filename ).dirPath() );#if defined(Q_OS_UNIX) // ##### implement for all platforms, ideally should be in Qt ::rmdir( d.absPath().latin1() );#endif}void Project::addAndEditFunction( const QString &function, const QString &functionBody, bool openDeveloper ){ for ( SourceFile *f = sourcefiles.first(); f; f = sourcefiles.next() ) { if ( QFileInfo( f->fileName() ).baseName() == "main" ) { QValueList<LanguageInterface::Function> funcs; LanguageInterface *iface = MetaDataBase::languageInterface( language() ); if ( !iface ) return; iface->functions( f->text(), &funcs ); QString func = function; int i = func.find( '(' ); if ( i != -1 ) func = func.left( i ); bool found = FALSE; for ( QValueList<LanguageInterface::Function>::Iterator it = funcs.begin(); it != funcs.end(); ++it ) { if ( (*it).name.left( (*it).name.find( '(' ) ) == func ) { found = TRUE; break; } } if ( !found ) { QString code = f->text(); if ( functionBody.isEmpty() ) code += "\n\n" + iface->createFunctionStart( "", func, "", "" ) + "()\n{\n\n}\n"; else code += "\n\n" + iface->createFunctionStart( "", func, "", "" ) + "()\n" + functionBody + "\n"; f->setText( code ); if ( f->editor() ) f->editor()->refresh( FALSE ); } if ( openDeveloper ) { if ( MainWindow::self ) MainWindow::self->editSource( f ); f->editor()->setFunction( func, "" ); } break; } }}bool Project::hasParentObject( QObject *o ){ for ( QObject *p = objs.first(); p; p = objs.next() ) { QObject *c = p->child( o->name(), o->className() ); if ( c ) return TRUE; } return FALSE;}QString Project::qualifiedName( QObject *o ){ QString name = o->name(); QObject *p = o->parent(); while ( p ) { name.prepend( QString( p->name() ) + "." ); if ( objs.findRef( p ) != -1 ) break; p = p->parent(); } return name;}bool Project::singleProjectMode() const{ return !MainWindow::self || MainWindow::self->singleProjectMode();}QWidget *Project::messageBoxParent() const{ return MainWindow::self;}void Project::designerCreated(){ for ( FormFile *ff = formfiles.first(); ff; ff = formfiles.next() ) { FormWindow *fw = ff->formWindow(); if ( !fw || fw->mainWindow() ) continue; fw->setMainWindow( MainWindow::self ); connect( fw, SIGNAL( undoRedoChanged( bool, bool, const QString &, const QString & ) ), MainWindow::self, SLOT( updateUndoRedo( bool, bool, const QString &, const QString & ) ) ); fw->reparent( MainWindow::self->qWorkspace(), QPoint( 0, 0 ), FALSE ); QApplication::sendPostedEvents( MainWindow::self->qWorkspace(), QEvent::ChildInserted ); fw->parentWidget()->setFixedSize( 1, 1 ); fw->show(); }}void Project::formOpened( FormWindow *fw ){ if ( fw->isFake() ) return; emit newFormOpened( fw );}QString Project::locationOfObject( QObject *o ){ if ( !o ) return QString::null; if ( MainWindow::self ) { QWidgetList windows = MainWindow::self->qWorkspace()->windowList(); for ( QWidget *w = windows.first(); w; w = windows.next() ) { FormWindow *fw = ::qt_cast<FormWindow*>(w); SourceEditor *se = ::qt_cast<SourceEditor*>(w); if ( fw ) { if ( fw->isFake() ) return objectForFakeForm( fw )->name() + QString( " [Source]" ); else return fw->name() + QString( " [Source]" ); } else if ( se ) { if ( !se->object() ) continue; if ( se->formWindow() ) return se->formWindow()->name() + QString( " [Source]" ); else return makeRelative( se->sourceFile()->fileName() ); } } } if ( ::qt_cast<SourceFile*>(o) ) { for ( QPtrListIterator<SourceFile> sources = sourceFiles(); sources.current(); ++sources ) { SourceFile* f = sources.current(); if ( f == o ) return makeRelative( f->fileName() ); } } extern QMap<QWidget*, QString> *qwf_forms; if ( !qwf_forms ) { qWarning( "Project::locationOfObject: qwf_forms is NULL!" ); return QString::null; } QString s = makeRelative( *qwf_forms->find( (QWidget*)o ) ); s += " [Source]"; return s;}bool Project::hasGUI() const{ return qApp->type() != QApplication::Tty;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -