📄 hierarchyview.cpp
字号:
} default: insertEntry( i ); } else insertEntry( i );}void FormDefinitionView::execFunctionDialog( const QString &access, const QString &type, bool addFunc ){ EditFunctions dlg( this, formWindow ); if ( addFunc ) dlg.functionAdd( access, type ); dlg.exec();}void FormDefinitionView::showRMBMenu( QListViewItem *i, const QPoint &pos ){ if ( !i ) return; const int EDIT = 1; const int NEW = 2; const int DEL = 3; const int PROPS = 4; const int GOIMPL = 5; QPopupMenu menu; bool insertDelete = FALSE; if ( i->rtti() == HierarchyItem::FunctParent || i->rtti() == HierarchyItem::SlotParent || i->rtti() == HierarchyItem::VarParent ) { menu.insertItem( QPixmap::fromMimeSource( "editslots.png" ), tr( "Edit..." ), EDIT ); } else menu.insertItem( QPixmap::fromMimeSource( "filenew.png" ), tr( "New" ), NEW ); if ( i->rtti() == HierarchyItem::DefinitionParent || i->rtti() == HierarchyItem::Variable || i->rtti() == HierarchyItem::Definition ) { menu.insertItem( QPixmap::fromMimeSource( "editslots.png" ), tr( "Edit..." ), EDIT ); } if ( i->rtti() == HierarchyItem::Function || i->rtti() == HierarchyItem::Slot ) { if ( formWindow->project()->isCpp() ) menu.insertItem( QPixmap::fromMimeSource( "editslots.png" ), tr( "Properties..." ), PROPS ); if ( MetaDataBase::hasEditor( formWindow->project()->language() ) ) menu.insertItem( tr( "Goto Implementation" ), GOIMPL ); insertDelete = TRUE; } if ( insertDelete || i->rtti() == HierarchyItem::Variable || i->rtti() == HierarchyItem::Function || i->rtti() == HierarchyItem::Slot || i->rtti() == HierarchyItem::Definition ) { menu.insertSeparator(); menu.insertItem( QPixmap::fromMimeSource( "editcut.png" ), tr( "Delete..." ), DEL ); } popupOpen = TRUE; int res = menu.exec( pos ); popupOpen = FALSE; if ( res == -1 ) return; if ( res == EDIT ) { switch( i->rtti() ) { case HierarchyItem::FunctParent: execFunctionDialog( "public", "function", FALSE ); break; case HierarchyItem::SlotParent: execFunctionDialog( "public", "slot", FALSE ); break; case HierarchyItem::VarParent: case HierarchyItem::VarPublic: case HierarchyItem::VarProtected: case HierarchyItem::VarPrivate: case HierarchyItem::Variable: { VariableDialog varDia( formWindow, this ); if ( varDia.exec() == QDialog::Accepted ) formWindow->commandHistory()->setModified( TRUE ); break; } case HierarchyItem::Definition: case HierarchyItem::DefinitionParent: LanguageInterface *lIface = MetaDataBase::languageInterface( formWindow->project()->language() ); if ( !lIface ) return; if ( i->rtti() == HierarchyItem::Definition ) i = i->parent(); ListEditor dia( this, 0, TRUE ); dia.setCaption( tr( "Edit %1" ).arg( i->text( 0 ) ) ); QStringList entries = lIface->definitionEntries( i->text( 0 ), MainWindow::self->designerInterface() ); dia.setList( entries ); dia.exec(); Command *cmd = new EditDefinitionsCommand( tr( "Edit " ) + i->text( 0 ), formWindow, lIface, i->text( 0 ), dia.items() ); formWindow->commandHistory()->addCommand( cmd ); cmd->execute(); } } else if ( res == NEW ) { HierarchyItem::Type t = getChildType( i->rtti() ); if ( (int)t == i->rtti() ) i = i->parent(); switch( i->rtti() ) { case HierarchyItem::SlotPublic: execFunctionDialog( "public", "slot", TRUE ); break; case HierarchyItem::SlotProtected: execFunctionDialog( "protected", "slot", TRUE ); break; case HierarchyItem::SlotPrivate: execFunctionDialog( "private" , "slot", TRUE ); break; case HierarchyItem::FunctPublic: execFunctionDialog( "public", "function", TRUE ); break; case HierarchyItem::FunctProtected: execFunctionDialog( "protected", "function", TRUE ); break; case HierarchyItem::FunctPrivate: execFunctionDialog( "private" , "function", TRUE ); break; default: insertEntry( i ); } } else if ( res == DEL ) { if ( i->rtti() == HierarchyItem::Slot || i->rtti() == HierarchyItem::Function ) { QCString funct( MetaDataBase::normalizeFunction( i->text( 0 ) ).latin1() ); Command *cmd = new RemoveFunctionCommand( tr( "Remove function" ), formWindow, funct, QString::null, QString::null, QString::null, QString::null, formWindow->project()->language() ); formWindow->commandHistory()->addCommand( cmd ); cmd->execute(); formWindow->mainWindow()->objectHierarchy()->updateFormDefinitionView(); } else if ( i->rtti() == HierarchyItem::Variable ) { Command *cmd = new RemoveVariableCommand( tr( "Remove variable" ), formWindow, i->text( 0 ) ); formWindow->commandHistory()->addCommand( cmd ); cmd->execute(); } else { QListViewItem *p = i->parent(); delete i; save( p, 0 ); } } else if ( res == PROPS ) { if ( i->rtti() == HierarchyItem::Slot || i->rtti() == HierarchyItem::Function ) { EditFunctions dlg( this, formWindow ); dlg.setCurrentFunction( MetaDataBase::normalizeFunction( i->text( 0 ) ) ); dlg.exec(); } } else if ( res == GOIMPL ) { if ( i->rtti() == HierarchyItem::Slot || i->rtti() == HierarchyItem::Function ) { formWindow->mainWindow()->editFunction( i->text( 0 ) ); } }}void FormDefinitionView::renamed( QListViewItem *i ){ if ( newItem == i ) newItem = 0; if ( !i->parent() ) return; save( i->parent(), i );}void FormDefinitionView::save( QListViewItem *p, QListViewItem *i ){ if ( i && i->text( 0 ).isEmpty() ) { delete i; return; } if ( i && i->rtti() == HierarchyItem::Variable ) { i->setRenameEnabled( 0, FALSE ); QString varName = i->text( 0 ); varName = varName.simplifyWhiteSpace(); if ( varName[(int)varName.length() - 1] != ';' ) varName += ";"; if ( MetaDataBase::hasVariable( formWindow, varName ) ) { QMessageBox::information( this, tr( "Edit Variables" ), tr( "This variable has already been declared!" ) ); } else { if ( p->rtti() == HierarchyItem::VarPublic ) addVariable( varName, "public" ); else if ( p->rtti() == HierarchyItem::VarProtected ) addVariable( varName, "protected" ); else if ( p->rtti() == HierarchyItem::VarPrivate ) addVariable( varName, "private" ); } } else { LanguageInterface *lIface = MetaDataBase::languageInterface( formWindow->project()->language() ); if ( !lIface ) return; QStringList lst; i = p->firstChild(); while ( i ) { lst << i->text( 0 ); i = i->nextSibling(); } Command *cmd = new EditDefinitionsCommand( tr( "Edit " ) + p->text( 0 ), formWindow, lIface, p->text( 0 ), lst ); formWindow->commandHistory()->addCommand( cmd ); cmd->execute(); }}void FormDefinitionView::addVariable( const QString &varName, const QString &access ){ Command *cmd = new AddVariableCommand( tr( "Add variable" ), formWindow, varName, access ); formWindow->commandHistory()->addCommand( cmd ); cmd->execute();}// ------------------------------------------------------------HierarchyView::HierarchyView( QWidget *parent ) : QTabWidget( parent, 0, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_Tool |WStyle_MinMax | WStyle_SysMenu ){ formwindow = 0; editor = 0; listview = new HierarchyList( this, formWindow() ); fView = new FormDefinitionView( this, formWindow() ); if ( !MainWindow::self->singleProjectMode() ) { addTab( listview, tr( "Objects" ) ); setTabToolTip( listview, tr( "List of all widgets and objects of the current form in hierarchical order" ) ); addTab( fView, tr( "Members" ) ); setTabToolTip( fView, tr( "List of all members of the current form" ) ); } else { listview->hide(); fView->hide(); } if ( !classBrowserInterfaceManager ) { classBrowserInterfaceManager = new QPluginManager<ClassBrowserInterface>( IID_ClassBrowser, QApplication::libraryPaths(), MainWindow::self->pluginDirectory() ); } classBrowsers = new QMap<QString, ClassBrowser>(); QStringList langs = MetaDataBase::languages(); for ( QStringList::Iterator it = langs.begin(); it != langs.end(); ++it ) { QInterfacePtr<ClassBrowserInterface> ciface = 0; classBrowserInterfaceManager->queryInterface( *it, &ciface ); if ( ciface ) { ClassBrowser cb( ciface->createClassBrowser( this ), ciface ); addTab( cb.lv, tr( "Class Declarations" ) ); setTabToolTip( cb.lv, tr( "List of all classes and its declarations of the current source file" ) ); ciface->onClick( this, SLOT( jumpTo( const QString &, const QString &, int ) ) ); classBrowsers->insert( *it, cb ); setTabEnabled( cb.lv, FALSE ); } }}HierarchyView::~HierarchyView(){}void HierarchyView::clear(){ listview->clear(); fView->clear(); for ( QMap<QString, ClassBrowser>::Iterator it = classBrowsers->begin(); it != classBrowsers->end(); ++it ) { (*it).iface->clear(); }}void HierarchyView::setFormWindow( FormWindow *fw, QObject *o ){ bool fake = fw && qstrcmp( fw->name(), "qt_fakewindow" ) == 0; if ( fw == 0 || o == 0 ) { listview->clear(); fView->clear(); listview->setFormWindow( fw ); fView->setFormWindow( fw ); formwindow = 0; editor = 0; } setTabEnabled( listview, TRUE ); setTabEnabled( fView, fw && fw->project()->isCpp() ); if ( fw == formwindow ) { if ( fw ) { if ( !fake ) listview->setCurrent( (QWidget*)o ); else listview->clear(); if ( MainWindow::self->qWorkspace()->activeWindow() == fw ) showPage( listview ); else if ( fw->project()->isCpp() ) showPage( fView ); else showClasses( fw->formFile()->editor() ); } } formwindow = fw; if ( !fake ) { listview->setFormWindow( fw ); } else { listview->setFormWindow( 0 ); listview->clear(); } fView->setFormWindow( fw ); if ( !fake ) { listview->setup(); listview->setCurrent( (QWidget*)o ); } fView->setup(); for ( QMap<QString, ClassBrowser>::Iterator it = classBrowsers->begin(); it != classBrowsers->end(); ++it ) { (*it).iface->clear(); setTabEnabled( (*it).lv, fw && !fw->project()->isCpp() ); } if ( MainWindow::self->qWorkspace()->activeWindow() == fw ) showPage( listview ); else if ( fw && fw->project()->isCpp() ) showPage( fView ); else if ( fw ) showClasses( fw->formFile()->editor() ); editor = 0;}void HierarchyView::showClasses( SourceEditor *se ){ if ( !se->object() ) return; lastSourceEditor = se; QTimer::singleShot( 100, this, SLOT( showClassesTimeout() ) );}void HierarchyView::showClassesTimeout(){ if ( !lastSourceEditor ) return; SourceEditor *se = (SourceEditor*)lastSourceEditor; if ( !se->object() ) return; if ( se->formWindow() && se->formWindow()->project()->isCpp() ) { setFormWindow( se->formWindow(), se->formWindow()->currentWidget() ); MainWindow::self->propertyeditor()->setWidget( se->formWindow()->currentWidget(), se->formWindow() ); return; } setTabEnabled( listview, !!se->formWindow() && !se->formWindow()->isFake() ); setTabEnabled( fView, FALSE ); formwindow = 0; listview->setFormWindow( 0 ); fView->setFormWindow( 0 ); listview->clear(); fView->clear(); if ( !se->formWindow() ) MainWindow::self->propertyeditor()->setWidget( 0, 0 ); editor = se; for ( QMap<QString, ClassBrowser>::Iterator it = classBrowsers->begin(); it != classBrowsers->end(); ++it ) { if ( it.key() == se->project()->language() ) { (*it).iface->update( se->text() ); setTabEnabled( (*it).lv, TRUE ); showPage( (*it).lv ); } else { setTabEnabled( (*it).lv, FALSE ); (*it).iface->clear(); } }}void HierarchyView::updateClassBrowsers(){ if ( !editor ) return; for ( QMap<QString, ClassBrowser>::Iterator it = classBrowsers->begin(); it != classBrowsers->end(); ++it ) { if ( it.key() == editor->project()->language() ) (*it).iface->update( editor->text() ); else (*it).iface->clear(); }}FormWindow *HierarchyView::formWindow() const{ return formwindow;}void HierarchyView::closeEvent( QCloseEvent *e ){ emit hidden(); e->accept();}void HierarchyView::widgetInserted( QWidget * ){ listview->setup();}void HierarchyView::widgetRemoved( QWidget * ){ listview->setup();}void HierarchyView::widgetsInserted( const QWidgetList & ){ listview->setup();}void HierarchyView::widgetsRemoved( const QWidgetList & ){ listview->setup();}void HierarchyView::namePropertyChanged( QWidget *w, const QVariant & ){ QWidget *w2 = w; if ( w->inherits( "QMainWindow" ) ) w2 = ( (QMainWindow*)w )->centralWidget(); listview->changeNameOf( w2, w->name() );}void HierarchyView::databasePropertyChanged( QWidget *w, const QStringList& info ){#ifndef QT_NO_SQL QString i = info.join( "." ); listview->changeDatabaseOf( w, i );#endif}void HierarchyView::tabsChanged( QTabWidget * ){ listview->setup();}void HierarchyView::pagesChanged( QWizard * ){ listview->setup();}void HierarchyView::rebuild(){ listview->setup();}void HierarchyView::closed( FormWindow *fw ){ if ( fw == formwindow ) { listview->clear(); fView->clear(); }}void HierarchyView::updateFormDefinitionView(){ fView->setup();}void HierarchyView::jumpTo( const QString &func, const QString &clss, int type ){ if ( !editor ) return; if ( type == ClassBrowserInterface::Class ) editor->setClass( func ); else editor->setFunction( func, clss );}HierarchyView::ClassBrowser::ClassBrowser( QListView *l, ClassBrowserInterface *i ) : lv( l ), iface( i ){}HierarchyView::ClassBrowser::~ClassBrowser(){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -