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