📄 workspace.cpp
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS. All rights reserved.**** This file is part of Qt Designer.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include <qvariant.h> // HP-UX compiler needs this here#include "workspace.h"#include "formwindow.h"#include "mainwindow.h"#include "globaldefs.h"#include "command.h"#include "project.h"#include "pixmapcollection.h"#include "sourcefile.h"#include "sourceeditor.h"#include "propertyeditor.h"#include <qheader.h>#include <qdragobject.h>#include <qfileinfo.h>#include <qapplication.h>#include <qpainter.h>#include <qpen.h>#include <qobjectlist.h>#include <qworkspace.h>#include <qpopupmenu.h>#include <qtextstream.h>#include "qcompletionedit.h"WorkspaceItem::WorkspaceItem( QListView *parent, Project* p ) : QListViewItem( parent ){ init(); project = p; t = ProjectType; setPixmap( 0, QPixmap::fromMimeSource( "folder.png" ) ); setExpandable( FALSE );}WorkspaceItem::WorkspaceItem( QListViewItem *parent, SourceFile* sf ) : QListViewItem( parent ){ init(); sourceFile = sf; t = SourceFileType; setPixmap( 0, QPixmap::fromMimeSource( "filenew.png" ) );}WorkspaceItem::WorkspaceItem( QListViewItem *parent, QObject *o, Project *p ) : QListViewItem( parent ){ init(); object = o; project = p; t = ObjectType; setPixmap( 0, QPixmap::fromMimeSource( "object.png" ) ); QObject::connect( p->fakeFormFileFor( o ), SIGNAL( somethingChanged(FormFile*) ), listView(), SLOT( update() ) );}WorkspaceItem::WorkspaceItem( QListViewItem *parent, FormFile* ff, Type type ) : QListViewItem( parent ){ init(); formFile = ff; t = type; if ( type == FormFileType ) { setPixmap( 0, QPixmap::fromMimeSource( "form.png" ) ); QObject::connect( ff, SIGNAL( somethingChanged(FormFile*) ), listView(), SLOT( update(FormFile*) ) ); if ( formFile->supportsCodeFile() ) { (void) new WorkspaceItem( this, formFile, FormSourceType ); } } else if ( type == FormSourceType ) { setPixmap( 0, QPixmap::fromMimeSource( "filenew.png" ) ); }}void WorkspaceItem::init(){ autoOpen = FALSE; useOddColor = FALSE; project = 0; sourceFile = 0; formFile = 0;}void WorkspaceItem::paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align ){ QColorGroup g( cg ); g.setColor( QColorGroup::Base, backgroundColor() ); g.setColor( QColorGroup::Foreground, Qt::black ); if ( type() == FormSourceType && ( !formFile->hasFormCode() || ( formFile->codeFileState() == FormFile::Deleted && formFile->formWindow() ) ) && parent() && parent()->parent() && ( (WorkspaceItem*)parent()->parent() )->project && ( (WorkspaceItem*)parent()->parent() )->project->isCpp() ) { g.setColor( QColorGroup::Text, listView()->palette().disabled().color( QColorGroup::Text) ); g.setColor( QColorGroup::HighlightedText, listView()->palette().disabled().color( QColorGroup::Text) ); } else { g.setColor( QColorGroup::Text, Qt::black ); } p->save(); if ( isModified() ) { QFont f = p->font(); f.setBold( TRUE ); p->setFont( f ); } QListViewItem::paintCell( p, g, column, width, align ); p->setPen( QPen( cg.dark(), 1 ) ); if ( column == 0 ) p->drawLine( 0, 0, 0, height() - 1 ); if ( listView()->firstChild() != this ) { if ( nextSibling() != itemBelow() && itemBelow()->depth() < depth() ) { int d = depth() - itemBelow()->depth(); p->drawLine( -listView()->treeStepSize() * d, height() - 1, 0, height() - 1 ); } } p->drawLine( 0, height() - 1, width, height() - 1 ); p->drawLine( width - 1, 0, width - 1, height() ); p->restore();}QString WorkspaceItem::text( int column ) const{ if ( column != 0 ) return QListViewItem::text( column ); switch( t ) { case ProjectType: if ( project->isDummy() ) { return Project::tr("<No Project>" ); } else if ( MainWindow::self->singleProjectMode() ) { return QFileInfo( project->fileName() ).baseName(); } return project->makeRelative( project->fileName() ); case FormFileType: if ( !MainWindow::self->singleProjectMode() ) return formFile->formName() + ": " + formFile->fileName(); return formFile->formName(); case FormSourceType: if ( !MainWindow::self->singleProjectMode() ) return formFile->codeFile(); return formFile->formName() + " [Source]"; case SourceFileType: return sourceFile->fileName(); case ObjectType: if ( !project->hasParentObject( object ) ) return object->name(); return project->qualifiedName( object ); } return QString::null; // shut up compiler}void WorkspaceItem::fillCompletionList( QStringList& completion ){ switch( t ) { case ProjectType: break; case FormFileType: completion += formFile->formName(); completion += formFile->fileName(); break; case FormSourceType: completion += formFile->codeFile(); break; case SourceFileType: completion += sourceFile->fileName(); break; case ObjectType: completion += object->name(); }}bool WorkspaceItem::checkCompletion( const QString& completion ){ switch( t ) { case ProjectType: break; case FormFileType: return completion == formFile->formName() || completion == formFile->fileName(); case FormSourceType: return completion == formFile->codeFile(); case SourceFileType: return completion == sourceFile->fileName(); case ObjectType: return completion == object->name(); } return FALSE;}bool WorkspaceItem::isModified() const{ switch( t ) { case ProjectType: return project->isModified(); case FormFileType: return formFile->isModified( FormFile::WFormWindow ); case FormSourceType: return formFile->isModified( FormFile::WFormCode ); case SourceFileType: return sourceFile->isModified(); case ObjectType: return project->fakeFormFileFor( object )->isModified(); break; } return FALSE; // shut up compiler}QString WorkspaceItem::key( int column, bool ) const{ QString key = text( column ); if ( t == FormFileType ) key.prepend( "0" ); else if ( t == ObjectType ) key.prepend( "a" ); else key.prepend( "A" ); return key;}QColor WorkspaceItem::backgroundColor(){ bool b = useOddColor; if ( t == FormSourceType && parent() ) b = ( ( WorkspaceItem*)parent() )->useOddColor; return b ? *backColor2 : *backColor1;}void WorkspaceItem::setOpen( bool b ){ QListViewItem::setOpen( b ); autoOpen = FALSE;}void WorkspaceItem::setAutoOpen( bool b ){ QListViewItem::setOpen( b ); autoOpen = b;}Workspace::Workspace( QWidget *parent, MainWindow *mw ) : QListView( parent, 0, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_Tool | WStyle_MinMax | WStyle_SysMenu ), mainWindow( mw ), project( 0 ), completionDirty( FALSE ){ init_colors(); setDefaultRenameAction( Accept ); blockNewForms = FALSE; bufferEdit = 0; header()->setStretchEnabled( TRUE ); header()->hide(); setSorting( 0 ); setResizePolicy( QScrollView::Manual );#ifndef Q_WS_MAC QPalette p( palette() ); p.setColor( QColorGroup::Base, QColor( *backColor2 ) ); (void)*selectedBack; // hack setPalette( p );#endif addColumn( tr( "Files" ) ); setAllColumnsShowFocus( TRUE ); connect( this, SIGNAL( mouseButtonClicked( int, QListViewItem *, const QPoint &, int ) ), this, SLOT( itemClicked( int, QListViewItem *, const QPoint& ) ) ), connect( this, SIGNAL( doubleClicked( QListViewItem * ) ), this, SLOT( itemDoubleClicked( QListViewItem * ) ) ), connect( this, SIGNAL( contextMenuRequested( QListViewItem *, const QPoint &, int ) ), this, SLOT( rmbClicked( QListViewItem *, const QPoint& ) ) ), setHScrollBarMode( AlwaysOff ); setVScrollBarMode( AlwaysOn ); viewport()->setAcceptDrops( TRUE ); setAcceptDrops( TRUE ); setColumnWidthMode( 1, Manual );}void Workspace::projectDestroyed( QObject* o ){ if ( o == project ) { project = 0; clear(); }}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 ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -