void Workspace::setCurrentProject( Project *pro ) { if ( project == pro ) return; if ( project ) { disconnect( project, SIGNAL( sourceFileAdded(SourceFile*) ), this, SLOT( sourceFileAdded(SourceFile*) ) ); disconnect( project, SIGNAL( sourceFileRemoved(SourceFile*) ), this, SLOT( sourceFileRemoved(SourceFile*) ) ); disconnect( project, SIGNAL( formFileAdded(FormFile*) ), this, SLOT( formFileAdded(FormFile*) ) ); disconnect( project, SIGNAL( formFileRemoved(FormFile*) ), this, SLOT( formFileRemoved(FormFile*) ) ); disconnect( project, SIGNAL( objectAdded(QObject*) ), this, SLOT( objectAdded(QObject*) ) ); disconnect( project, SIGNAL( objectRemoved(QObject*) ), this, SLOT( objectRemoved(QObject*) ) ); disconnect( project, SIGNAL( projectModified() ), this, SLOT( update() ) ); } project = pro; connect( project, SIGNAL( sourceFileAdded(SourceFile*) ), this, SLOT( sourceFileAdded(SourceFile*) ) ); connect( project, SIGNAL( sourceFileRemoved(SourceFile*) ), this, SLOT( sourceFileRemoved(SourceFile*) ) ); connect( project, SIGNAL( formFileAdded(FormFile*) ), this, SLOT( formFileAdded(FormFile*) ) ); connect( project, SIGNAL( formFileRemoved(FormFile*) ), this, SLOT( formFileRemoved(FormFile*) ) ); connect( project, SIGNAL( destroyed(QObject*) ), this, SLOT( projectDestroyed(QObject*) ) ); connect( project, SIGNAL( objectAdded(QObject*) ), this, SLOT( objectAdded(QObject*) ) ); connect( project, SIGNAL( objectRemoved(QObject*) ), this, SLOT( objectRemoved(QObject*) ) ); connect( project, SIGNAL( projectModified() ), this, SLOT( update() ) ); clear(); if ( bufferEdit ) bufferEdit->clear(); projectItem = new WorkspaceItem( this, project ); projectItem->setOpen( TRUE ); for ( QPtrListIterator<SourceFile> sources = project->sourceFiles(); sources.current(); ++sources ) { SourceFile* f = sources.current(); (void) new WorkspaceItem( projectItem, f ); } for ( QPtrListIterator<FormFile> forms = project->formFiles(); forms.current(); ++forms ) { FormFile* f = forms.current(); if ( f->isFake() ) continue; (void) new WorkspaceItem( projectItem, f ); } QObjectList l = project->objects(); QObjectListIt objs( l ); for ( ;objs.current(); ++objs ) { QObject* o = objs.current(); (void) new WorkspaceItem( projectItem, o, project ); } updateColors(); completionDirty = TRUE; }
QStringList DesignerProjectImpl::formNames() const { QStringList l; for ( QPtrListIterator<FormFile> forms = project->formFiles(); forms.current(); ++forms ) { FormFile* f = forms.current(); if ( f->isFake() ) continue; l << f->formName(); } return l; }
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(); } }
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; }
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::save( bool onlyProjectFile ) { bool anythingModified = FALSE; // save sources and forms if ( !onlyProjectFile ) { saveConnections(); for ( SourceFile *sf = sourcefiles.first(); sf; sf = sourcefiles.next() ) { anythingModified = anythingModified || sf->isModified(); if ( !sf->save() ) return; } for ( FormFile *ff = formfiles.first(); ff; ff = formfiles.next() ) { anythingModified = anythingModified || ff->isModified(); if ( !ff->save() ) return; } } if ( isDummy() || filename.isEmpty() ) return; if ( !modified ) { if ( singleProjectMode() ) { LanguageInterface *iface = MetaDataBase::languageInterface( language() ); if ( iface && iface->supports( LanguageInterface::CompressProject ) ) iface->compressProject( makeAbsolute( filename ), singleProFileName, anythingModified ); } return; } QFile f( filename ); QString original = ""; // read the existing file bool hasPreviousContents = FALSE; if ( f.open( IO_ReadOnly ) ) { QTextStream ts( &f ); original = ts.read(); f.close(); hasPreviousContents = TRUE; remove_contents( original, "{SOURCES+=" ); // ### compatibility with early 3.0 betas remove_contents( original, "DBFILE" ); remove_contents( original, "LANGUAGE" ); remove_contents( original, "TEMPLATE" ); removePlatformSettings( original, "CONFIG" ); removePlatformSettings( original, "DEFINES" ); removePlatformSettings( original, "LIBS" ); removePlatformSettings( original, "INCLUDEPATH" ); removePlatformSettings( original, "SOURCES" ); removePlatformSettings( original, "HEADERS" ); remove_multiline_contents( original, "FORMS" ); remove_multiline_contents( original, "INTERFACES" ); // compatibility remove_multiline_contents( original, "IMAGES" ); for ( QStringList::Iterator it = csList.begin(); it != csList.end(); ++it ) remove_contents( original, *it ); } if (!original.isEmpty()) { // Removes any new lines at the beginning of the file while (original.startsWith("\n")) original.remove(0, 1); } // the contents of the saved file QString contents; // template contents += "TEMPLATE\t= " + templ + "\n"; // language contents += "LANGUAGE\t= " + lang + "\n"; contents += "\n"; // config writePlatformSettings( contents, "CONFIG", cfg ); LanguageInterface *iface = MetaDataBase::languageInterface( lang ); if ( iface ) { QStringList sourceKeys; iface->sourceProjectKeys( sourceKeys ); for ( QStringList::Iterator spit = sourceKeys.begin(); spit != sourceKeys.end(); ++spit ) remove_multiline_contents( contents, *spit ); } // libs, defines, includes writePlatformSettings( contents, "LIBS", lbs ); writePlatformSettings( contents, "DEFINES", defs ); writePlatformSettings( contents, "INCLUDEPATH", inclPath ); writePlatformSettings( contents, "SOURCES", sources ); writePlatformSettings( contents, "HEADERS", headers ); // unix if ( !hasPreviousContents ) { contents += "unix|os2 {\n" " UI_DIR = .ui\n" " MOC_DIR = .moc\n" " OBJECTS_DIR = .obj\n" "}\n\n"; } // sources if ( !sourcefiles.isEmpty() && iface ) { QMap<QString, QStringList> sourceToKey; for ( SourceFile *f = sourcefiles.first(); f; f = sourcefiles.next() ) { QString key = iface->projectKeyForExtension( QFileInfo( f->fileName() ).extension() ); QStringList lst = sourceToKey[ key ]; lst << makeRelative( f->fileName() ); sourceToKey.replace( key, lst ); } for ( QMap<QString, QStringList>::Iterator skit = sourceToKey.begin(); skit != sourceToKey.end(); ++skit ) { QString part = skit.key() + "\t+= "; QStringList lst = *skit; for ( QStringList::Iterator sit = lst.begin(); sit != lst.end(); ++sit ) { part += *sit; part += ++sit != lst.end() ? " \\\n\t" : ""; --sit; } part += "\n\n"; contents += part; } } // forms and interfaces if ( !formfiles.isEmpty() ) { contents += "FORMS\t= "; for ( QPtrListIterator<FormFile> fit = formfiles; fit.current(); ++fit ) { contents += fit.current()->fileName() + (fit != formfiles.last() ? " \\\n\t" : ""); } contents += "\n\n"; } // images if ( !pixCollection->isEmpty() ) { contents += "IMAGES\t= "; QValueList<PixmapCollection::Pixmap> pixmaps = pixCollection->pixmaps(); for ( QValueList<PixmapCollection::Pixmap>::Iterator it = pixmaps.begin(); it != pixmaps.end(); ++it ) { contents += makeRelative( (*it).absname ); contents += ++it != pixmaps.end() ? " \\\n\t" : ""; --it; } contents += "\n\n"; } // database if ( !dbFile.isEmpty() ) contents += "DBFILE\t= " + dbFile + "\n"; // custom settings for ( QStringList::Iterator it = csList.begin(); it != csList.end(); ++it ) { QString val = *customSettings.find( *it ); if ( !val.isEmpty() ) contents += *it + "\t= " + val + "\n"; } if ( !f.open( IO_WriteOnly | IO_Translate ) ) { QMessageBox::warning( messageBoxParent(), "Save Project Failed", "Couldn't write project file " + filename ); return; } QTextStream os( &f ); os << contents; if (hasPreviousContents) os << original; f.close(); setModified( FALSE ); if ( singleProjectMode() ) { LanguageInterface *iface = MetaDataBase::languageInterface( language() ); if ( iface && iface->supports( LanguageInterface::CompressProject ) ) iface->compressProject( makeAbsolute( filename ), singleProFileName, TRUE ); } }
inline bool operator() (const FormFile& entry) const { return stringsAreEqual(fName, entry.getName()); }