⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
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;}extern QMap<QWidget*, QString> *qwf_forms;extern QString *qwf_language;extern bool qwf_execute_code;extern bool qwf_stays_on_top;extern QObject* qwf_form_object;extern QString *qwf_plugin_dir;QObjectList *Project::run(){    setupProjectPluginManagers();    if ( !programPluginManager )	return 0;    ProgramInterface *piface = 0;    programPluginManager->queryInterface( language(), &piface);    if ( !piface )	return 0;    static QWidget *invisibleGroupLeader = 0;    if ( !invisibleGroupLeader &&hasGUI() ) {	invisibleGroupLeader =	    new QWidget( 0, "designer_invisible_group_leader", WGroupLeader );	invisibleGroupLeader->hide();    }    if ( MainWindow::self )	MainWindow::self->runProjectPrecondition();    if ( hasGUI() )	QApplication::setOverrideCursor( WaitCursor );    delete qwf_forms;    qwf_forms = 0;    delete qwf_language;    qwf_language = new QString( language() );    qwf_execute_code = FALSE;    for ( QPtrListIterator<FormFile> it = formFiles(); it.current(); ++it ) {	if ( (*it)->isFake() )	    qwf_form_object = objectForFakeFormFile( *it );	else	    qwf_form_object = 0;	QWidget *w = QWidgetFactory::create( makeAbsolute( (*it)->fileName() ), 0,					     invisibleGroupLeader );	if ( w && !(*it)->isFake() )	    w->hide();	QStringList error;	QValueList<uint> line;	if ( !piface->check( (*it)->code(), error, line ) &&	     !error.isEmpty() && !error[ 0 ].isEmpty() ) {	    QStringList l;	    QObjectList l2;	    for ( int i = 0; i < (int)error.count(); ++i ) {		if ( qwf_form_object )		    l << QString( QString( qwf_form_object->					   name() ) +				  " [Source]" );		else		    l << QString( QString( w->name() ) +				  " [Source]" );		l2.append( w ? w : qwf_form_object );	    }	    emit runtimeError( error[0], l[0], line[0] );	    if ( hasGUI() )		QApplication::restoreOverrideCursor();	    if ( MainWindow::self ) {		MainWindow::self->showSourceLine( qwf_form_object ? qwf_form_object : w,						  line[ 0 ] - 1, MainWindow::Error );		MainWindow::self->outputWindow()->setErrorMessages( error, line, FALSE, l, l2 );	    }	    return 0;	}    }    QPtrListIterator<SourceFile> sources( sourceFiles() );    for ( ; sources.current(); ++sources ) {	SourceFile* f = sources.current();	QStringList error;	QValueList<uint> line;	if ( !piface->check( f->text(), error, line ) &&	     !error.isEmpty() && !error[ 0 ].isEmpty() ) {	    QStringList l;	    QObjectList l2;	    for ( int i = 0; i < (int)error.count(); ++i ) {		l << f->fileName();		l2.append( f );	    }	    emit runtimeError( error[0], l[0], line[0] );	    if ( MainWindow::self ) {		MainWindow::self->showSourceLine( f, line[ 0 ] - 1, MainWindow::Error );		MainWindow::self->outputWindow()->setErrorMessages( error, line, FALSE, l, l2 );	    }	    if ( hasGUI() )		QApplication::restoreOverrideCursor();	    return 0;	}    }    delete qwf_forms;    qwf_forms = 0;    delete qwf_language;    qwf_language = new QString( language() );    qwf_execute_code = TRUE;    qwf_stays_on_top = TRUE;    InterpreterInterface *iiface = 0;    if ( !interpreterPluginManager ) {	piface->release();	return 0;    }    iiface = 0;    interpreterPluginManager->queryInterface( language(), &iiface );    if ( !iiface ) {	piface->release();	return 0;    }    if ( MainWindow::self ) {	iiface->onShowDebugStep( MainWindow::self,				 SLOT( showDebugStep( QObject *, int ) ) );	iiface->onShowStackFrame( MainWindow::self,				  SLOT( showStackFrame( QObject *, int ) ) );    }    iiface->onFinish( this, SIGNAL( runFinished() ) );    iiface->onShowError( this, SLOT( emitRuntimeError( QObject *, int, const QString & ) ) );    iiface->init();    for ( sources = sourceFiles();	  sources.current(); ++sources ) {	SourceFile* f = sources.current();	iiface->exec( f, f->text() );    }    QObjectList *l = new QObjectList;    for ( QPtrListIterator<FormFile> forms = formFiles();	  forms.current(); ++forms ) {	FormFile* f = forms.current();	if ( !f->formWindow() )	    continue;	FormWindow* fw = f->formWindow();	QValueList<uint> bps = MetaDataBase::breakPoints( fw );	if ( MainWindow::self && !bps.isEmpty() && MainWindow::self->isVisible() )	    iiface->setBreakPoints( fw, bps );    }    for ( sources = sourceFiles();	  sources.current(); ++sources ) {	SourceFile* f = sources.current();	QValueList<uint> bps = MetaDataBase::breakPoints( f );	if ( MainWindow::self && !bps.isEmpty() && MainWindow::self->isVisible() )	    iiface->setBreakPoints( f, bps );    }    for ( QPtrListIterator<FormFile> it2 = formFiles(); it2.current(); ++it2 ) {	if ( (*it2)->isFake() )	    qwf_form_object = objectForFakeFormFile( *it2 );	else	    qwf_form_object = 0;	QWidget *w = QWidgetFactory::create( (*it2)->absFileName(), 0,					     invisibleGroupLeader );	if ( w ) {	    if ( !qwf_form_object )		l->append( w );	    else		l->append( qwf_form_object );	    if ( !(*it2)->isFake() )		w->hide();	} else {	    l->append( qwf_form_object );	}    }    if ( hasGUI() ) {	for ( QObject *o = l->first(); o; o = l->next() ) {	    FormWindow *fw = (FormWindow*)findRealForm( (QWidget*)o );	    if ( !fw )		continue;	    QValueList<uint> bps = MetaDataBase::breakPoints( fw );	    if ( MainWindow::self && !bps.isEmpty() && MainWindow::self->isVisible() )		iiface->setBreakPoints( o, bps );	}    }    iiface->release();    if ( hasGUI() )	QApplication::restoreOverrideCursor();    qwf_stays_on_top = FALSE;    if ( MainWindow::self )	MainWindow::self->runProjectPostcondition( l );    piface->release();    return l;}QWidget *Project::findRealForm( QWidget *wid ){    if ( MainWindow::self ) {	QWidgetList windows = MainWindow::self->qWorkspace()->windowList();	for ( QWidget *w = windows.first(); w; w = windows.next() ) {	    if ( QString( w->name() ) == QString( wid->name() ) )		return w;	}    }    for ( QPtrListIterator<FormFile> it = formFiles(); it.current(); ++it ) {	if ( (*it)->formWindow() &&	     qstrcmp( (*it)->formWindow()->mainContainer()->name(), wid->name() ) == 0 )	    return (*it)->formWindow();    }    FormFile *ff = fakeFormFileFor( wid );    if ( ff )	return ff->formWindow();    return 0;}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();    }    connect( this, SIGNAL( runFinished() ), MainWindow::self, SLOT( finishedRun() ) );}void Project::emitRuntimeError( QObject *o, int l, const QString &msg ){    emit runtimeError( msg, locationOfObject( o ), l );    if ( MainWindow::self )	MainWindow::self->showErrorMessage( o, l, msg );}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 = 0;	    SourceEditor *se = 0;	    if ( w->inherits( "FormWindow" ) ) {		fw = (FormWindow*)w;		if ( fw->isFake() )		    return objectForFakeForm( fw )->name() + QString( " [Source]" );		else		    return fw->name() + QString( " [Source]" );	    } else if ( w->inherits( "SourceEditor" ) ) {		se = (SourceEditor*)w;		if ( !se->object() )		    continue;		if ( se->formWindow() )		    return se->formWindow()->name() + QString( " [Source]" );		else		    return makeRelative( se->sourceFile()->fileName() );	    }	}    }    if ( o->inherits( "SourceFile" ) ) {	for ( QPtrListIterator<SourceFile> sources = sourceFiles();	      sources.current(); ++sources ) {	    SourceFile* f = sources.current();	    if ( f == o )		return makeRelative( f->fileName() );	}    }    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 + -