📄 workspace.cpp
字号:
QObjectList l = project->objects(); QObjectListIt objs( l ); for ( ;objs.current(); ++objs ) { QObject* o = objs.current(); (void) new WorkspaceItem( projectItem, o, project ); } 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 ){ if ( ff->isFake() ) return; (void) new WorkspaceItem( projectItem, ff ); updateColors();}void Workspace::formFileRemoved( FormFile* ff ){ delete findItem( ff ); updateColors();}void Workspace::objectAdded( QObject *o ){ (void) new WorkspaceItem( projectItem, o, project ); updateColors();}void Workspace::objectRemoved( QObject *o ){ delete findItem( o ); 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;}WorkspaceItem *Workspace::findItem( QObject *o ){ QListViewItemIterator it( this ); for ( ; it.current(); ++it ) { if ( ( (WorkspaceItem*)it.current() )->object == o ) 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; switch( wi->type() ) { case WorkspaceItem::ProjectType: break; // ### TODO case WorkspaceItem::FormFileType: wi->formFile->showFormWindow(); break; case WorkspaceItem::FormSourceType: wi->formFile->showEditor( FALSE ); break; case WorkspaceItem::SourceFileType: mainWindow->editSource( wi->sourceFile ); break; case WorkspaceItem::ObjectType: project->fakeFormFileFor( wi->object )->formWindow()->setFocus(); mainWindow->propertyeditor()->setWidget( wi->object, project->fakeFormFileFor( wi->object )->formWindow() ); mainWindow->objectHierarchy()-> setFormWindow( project->fakeFormFileFor( wi->object )->formWindow(), wi->object ); project->fakeFormFileFor( wi->object )->showEditor(); 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, REMOVE_FORM_SOURCE, OPEN_OBJECT_SOURCE }; QPopupMenu menu( this ); menu.setCheckable( TRUE ); switch ( wi->type() ) { case WorkspaceItem::SourceFileType: menu.insertItem( tr( "&Open source file" ), OPEN_SOURCE ); menu.insertSeparator(); menu.insertItem( QPixmap::fromMimeSource( "editcut.png" ), tr( "&Remove source file from project" ), REMOVE_SOURCE ); break; case WorkspaceItem::FormFileType: menu.insertItem( tr( "&Open form" ), OPEN_FORM ); menu.insertSeparator(); menu.insertItem( QPixmap::fromMimeSource( "editcut.png" ), tr( "&Remove form from project" ), REMOVE_FORM ); break; case WorkspaceItem::FormSourceType: menu.insertItem( tr( "&Open form source" ), OPEN_FORM_SOURCE ); menu.insertSeparator(); if ( project->isCpp() ) menu.insertItem( QPixmap::fromMimeSource( "editcut.png" ), tr( "&Remove source file from form" ), REMOVE_FORM_SOURCE ); else menu.insertItem( QPixmap::fromMimeSource( "editcut.png" ), tr( "&Remove form from project" ), REMOVE_FORM ); break; case WorkspaceItem::ProjectType: MainWindow::self->popupProjectMenu( pos ); return; case WorkspaceItem::ObjectType: menu.insertItem( tr( "&Open source" ), OPEN_OBJECT_SOURCE ); break; } switch ( menu.exec( pos ) ) { case REMOVE_SOURCE: project->removeSourceFile( wi->sourceFile ); break; case REMOVE_FORM: project->removeFormFile( wi->formFile ); break; case REMOVE_FORM_SOURCE: ( (WorkspaceItem*)i )->formFile->setModified( TRUE ); ( (WorkspaceItem*)i )->formFile->setCodeFileState( FormFile::Deleted ); delete ( (WorkspaceItem*)i )->formFile->editor(); break; case OPEN_OBJECT_SOURCE: case OPEN_SOURCE: case OPEN_FORM: case OPEN_FORM_SOURCE: itemClicked( LeftButton, i, pos ); 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 || !MainWindow::self) 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -