workspace.cpp

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

CPP
674
字号
    }    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( 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();	(void) new WorkspaceItem( projectItem, f );    }    updateColors();    completionDirty = TRUE;}void Workspace::sourceFileAdded( SourceFile* sf ){    (void) new WorkspaceItem( projectItem, sf );    updateColors();}void Workspace::sourceFileRemoved( SourceFile* sf ){    delete findItem( sf );    updateColors();}void Workspace::formFileAdded( FormFile* ff ){    (void) new WorkspaceItem( projectItem, ff );    updateColors();}void Workspace::formFileRemoved( FormFile* ff ){    delete findItem( ff );    updateColors();}void Workspace::update(){    completionDirty = TRUE;    triggerUpdate();}void Workspace::update( FormFile* ff ){    QListViewItem* i = findItem( ff );    if ( i ) {	i->repaint();	if ( (i = i->firstChild()) )	    i->repaint();    }}void Workspace::activeFormChanged( FormWindow *fw ){    WorkspaceItem *i = findItem( fw->formFile() );    if ( i ) {	setCurrentItem( i );	setSelected( i, TRUE );	if ( !i->isOpen() )	    i->setAutoOpen( TRUE );    }    closeAutoOpenItems();}void Workspace::activeEditorChanged( SourceEditor *se ){    if ( !se->object() )	return;    if ( se->formWindow() ) {	WorkspaceItem *i = findItem( se->formWindow()->formFile() );	if ( i && i->firstChild() ) {	    if ( !i->isOpen() )		i->setAutoOpen( TRUE );	    setCurrentItem( i->firstChild() );	    setSelected( i->firstChild(), TRUE );	}    } else {	WorkspaceItem *i = findItem( se->sourceFile() );	if ( i ) {	    setCurrentItem( i );	    setSelected( i, TRUE );	}    }    closeAutoOpenItems();}WorkspaceItem *Workspace::findItem( FormFile* ff){    QListViewItemIterator it( this );    for ( ; it.current(); ++it ) {	if ( ( (WorkspaceItem*)it.current() )->formFile == ff )	    return (WorkspaceItem*)it.current();    }    return 0;}WorkspaceItem *Workspace::findItem( SourceFile *sf ){    QListViewItemIterator it( this );    for ( ; it.current(); ++it ) {	if ( ( (WorkspaceItem*)it.current() )->sourceFile == sf )	    return (WorkspaceItem*)it.current();    }    return 0;}void Workspace::closeAutoOpenItems(){    QListViewItemIterator it( this );    for ( ; it.current(); ++it ) {	WorkspaceItem* i = (WorkspaceItem*) it.current();	WorkspaceItem* ip = (WorkspaceItem*) i->parent();	if ( i->type() == WorkspaceItem::FormSourceType ) {	    if ( !i->isSelected() && !ip->isSelected()		 && ip->isAutoOpen() ) {		ip->setAutoOpen( FALSE );	    }	}    }}void Workspace::closeEvent( QCloseEvent *e ){    e->accept();}void Workspace::itemDoubleClicked( QListViewItem *i ){    if ( ( (WorkspaceItem*)i)->type()== WorkspaceItem::ProjectType )	i->setOpen( TRUE );}void Workspace::itemClicked( int button, QListViewItem *i, const QPoint& ){    if ( !i || button != LeftButton )	return;    closeAutoOpenItems();    WorkspaceItem* wi = (WorkspaceItem*)i;    if ( wi->type() == WorkspaceItem::SourceFileType )	mainWindow->editSource( wi->sourceFile );    switch( wi->type() ) {    case WorkspaceItem::ProjectType:	break; // ### TODO    case WorkspaceItem::FormFileType:	wi->formFile->showFormWindow();	break;    case WorkspaceItem::FormSourceType:	wi->formFile->showEditor();	break;    case WorkspaceItem::SourceFileType:	mainWindow->editSource( wi->sourceFile );	break;    }}void Workspace::contentsDropEvent( QDropEvent *e ){    if ( !QUriDrag::canDecode( e ) ) {	e->ignore();    } else {	QStringList files;	QUriDrag::decodeLocalFiles( e, files );	if ( !files.isEmpty() ) {	    for ( QStringList::Iterator it = files.begin(); it != files.end(); ++it ) {		QString fn = *it;		mainWindow->fileOpen( "", "", fn );	    }	}    }}void Workspace::contentsDragEnterEvent( QDragEnterEvent *e ){    if ( !QUriDrag::canDecode( e ) )	e->ignore();    else	e->accept();}void Workspace::contentsDragMoveEvent( QDragMoveEvent *e ){    if ( !QUriDrag::canDecode( e ) )	e->ignore();    else	e->accept();}void Workspace::rmbClicked( QListViewItem *i, const QPoint& pos ){    if ( !i )	return;    WorkspaceItem* wi = (WorkspaceItem*)i;    enum { OPEN_SOURCE, REMOVE_SOURCE, OPEN_FORM, REMOVE_FORM, OPEN_FORM_SOURCE };    QPopupMenu menu( this );    switch ( wi->type() ) {    case WorkspaceItem::SourceFileType:	menu.insertItem( tr( "&Open source file..." ), OPEN_SOURCE );	menu.insertSeparator();	menu.insertItem( PixmapChooser::loadPixmap( "editcut" ),			 tr( "&Remove source file from project" ), REMOVE_SOURCE );	break;    case WorkspaceItem::FormFileType:	menu.insertItem( tr( "&Open form..." ), OPEN_FORM );	menu.insertSeparator();	menu.insertItem( PixmapChooser::loadPixmap( "editcut" ),			 tr( "&Remove form from project" ), REMOVE_FORM );	break;    case WorkspaceItem::FormSourceType:	menu.insertItem( tr( "&Open form source..." ), OPEN_FORM_SOURCE );	menu.insertSeparator();	menu.insertItem( PixmapChooser::loadPixmap( "editcut" ),			 tr( "&Remove form from project" ), REMOVE_FORM );	break;    case WorkspaceItem::ProjectType:	MainWindow::self->popupProjectMenu( pos );	return;    default:	return;    }    switch ( menu.exec( pos ) ) {    case REMOVE_SOURCE:	project->removeSourceFile( wi->sourceFile );	break;    case OPEN_SOURCE:	itemClicked( LeftButton, i, pos );	break;    case REMOVE_FORM:	project->removeFormFile( wi->formFile );	break;    case OPEN_FORM:	itemClicked( LeftButton, i, pos );	break;    case OPEN_FORM_SOURCE:	itemClicked( LeftButton, i, pos );	break;    default:	break;    }}bool Workspace::eventFilter( QObject *o, QEvent * e ){    // Reggie, on what type of events do we have to execute updateBufferEdit()    if ( o ==bufferEdit && e->type() != QEvent::ChildRemoved )	updateBufferEdit();    return QListView::eventFilter( o, e );}void Workspace::setBufferEdit( QCompletionEdit *edit ){    bufferEdit = edit;    connect( bufferEdit, SIGNAL( chosen( const QString & ) ),	     this, SLOT( bufferChosen( const QString & ) ) );    bufferEdit->installEventFilter( this );}void Workspace::updateBufferEdit(){    if ( !bufferEdit || !completionDirty )	return;    completionDirty = FALSE;    QStringList completion = MainWindow::self->projectFileNames();    QListViewItemIterator it( this );    while ( it.current() ) {	( (WorkspaceItem*)it.current())->fillCompletionList( completion );	++it;    }    completion.sort();    bufferEdit->setCompletionList( completion );}void Workspace::bufferChosen( const QString &buffer ){    if ( bufferEdit )	bufferEdit->setText( "" );    if ( MainWindow::self->projectFileNames().contains( buffer ) ) {	MainWindow::self->setCurrentProjectByFilename( buffer );	return;    }    QListViewItemIterator it( this );    while ( it.current() ) {	if ( ( (WorkspaceItem*)it.current())->checkCompletion( buffer ) ) {	    itemClicked( LeftButton, it.current(), QPoint() );	    break;	}	++it;    }}void Workspace::updateColors(){    QListViewItem* i = firstChild();    if ( i )	i = i->firstChild();    bool b = TRUE;    while ( i ) {	WorkspaceItem* wi = ( WorkspaceItem*) i;	i = i->nextSibling();	wi->useOddColor = b;	b = !b;    }}

⌨️ 快捷键说明

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