📄 hierarchyview.cpp
字号:
insertObject( it.current(), item ); } } if ( fakeMainWindow ) { QObjectList *l = o->parent()->queryList( "QDesignerToolBar" ); for ( QObject *obj = l->first(); obj; obj = l->next() ) insertObject( obj, item ); delete l; QMenuBar *m = (QMenuBar*)o->parent()->child( 0, "QDesignerMenuBar" ); if ( m ) insertObject( m, item ); } else if ( o->inherits( "QDesignerToolBar" ) || o->inherits( "QDesignerPopupMenu" ) ) { QPtrList<QAction> actions; if ( o->inherits( "QDesignerToolBar" ) ) actions = ( (QDesignerToolBar*)o )->insertedActions(); else actions = ( (QDesignerPopupMenu*)o )->insertedActions(); QPtrListIterator<QAction> it( actions ); it.toLast(); while ( it.current() ) { QAction *a = it.current(); if ( a->inherits( "QDesignerAction" ) ) { QDesignerAction *da = (QDesignerAction*)a; if ( da->supportsMenu() ) insertObject( da, item ); else insertObject( da->widget(), item ); } else if ( a->inherits( "QDesignerActionGroup" ) ) { insertObject( a, item ); } --it; } } else if ( o->inherits( "QDesignerActionGroup" ) && o->children() ) { QObjectList *l = (QObjectList*)o->children(); for ( QObject *obj = l->last(); obj; obj = l->prev() ) { if ( obj->inherits( "QDesignerAction" ) ) { QDesignerAction *da = (QDesignerAction*)obj; if ( da->supportsMenu() ) insertObject( da, item ); else insertObject( da->widget(), item ); } else if ( obj->inherits( "QDesignerActionGroup" ) ) { insertObject( obj, item ); } } } else if ( o->inherits( "QMenuBar" ) ) { QMenuBar *mb = (QMenuBar*)o; for ( int i = mb->count() -1; i >= 0; --i ) { QMenuItem *md = mb->findItem( mb->idAt( i ) ); if ( !md || !md->popup() ) continue; insertObject( md->popup(), item ); } } if ( item->firstChild() ) item->setOpen( TRUE );}void HierarchyList::setCurrent( QObject *o ){ QListViewItemIterator it( this ); while ( it.current() ) { if ( ( (HierarchyItem*)it.current() )->object() == o ) { blockSignals( TRUE ); setCurrentItem( it.current() ); ensureItemVisible( it.current() ); blockSignals( FALSE ); return; } ++it; }}void HierarchyList::showRMBMenu( QListViewItem *i, const QPoint & p ){ if ( !i ) return; QObject *o = findObject( i ); if ( !o ) return; if ( !o->isWidgetType() || ( o != formWindow && !formWindow->widgets()->find( (QWidget*)o ) ) ) return; QWidget *w = (QWidget*)o; if ( w->isVisibleTo( formWindow ) ) { if ( !w->inherits( "QTabWidget" ) && !w->inherits( "QWizard" ) ) { if ( !normalMenu ) normalMenu = formWindow->mainWindow()->setupNormalHierarchyMenu( this ); normalMenu->popup( p ); } else { if ( !tabWidgetMenu ) tabWidgetMenu = formWindow->mainWindow()->setupTabWidgetHierarchyMenu( this, SLOT( addTabPage() ), SLOT( removeTabPage() ) ); tabWidgetMenu->popup( p ); } }}void HierarchyList::addTabPage(){ QObject *o = current(); if ( !o || !o->isWidgetType() ) return; QWidget *w = (QWidget*)o; if ( w->inherits( "QTabWidget" ) ) { QTabWidget *tw = (QTabWidget*)w; AddTabPageCommand *cmd = new AddTabPageCommand( tr( "Add Page to %1" ). arg( tw->name() ), formWindow, tw, "Tab" ); formWindow->commandHistory()->addCommand( cmd ); cmd->execute(); } else if ( w->inherits( "QWizard" ) ) { QWizard *wiz = (QWizard*)formWindow->mainContainer(); AddWizardPageCommand *cmd = new AddWizardPageCommand( tr( "Add Page to %1" ). arg( wiz->name() ), formWindow, wiz, "Page" ); formWindow->commandHistory()->addCommand( cmd ); cmd->execute(); }}void HierarchyList::removeTabPage(){ QObject *o = current(); if ( !o || !o->isWidgetType() ) return; QWidget *w = (QWidget*)o; if ( w->inherits( "QTabWidget" ) ) { QTabWidget *tw = (QTabWidget*)w; if ( tw->currentPage() ) { QDesignerTabWidget *dtw = (QDesignerTabWidget*)tw; DeleteTabPageCommand *cmd = new DeleteTabPageCommand( tr( "Delete Page %1 of %2" ). arg( dtw->pageTitle() ).arg( tw->name() ), formWindow, tw, tw->currentPage() ); formWindow->commandHistory()->addCommand( cmd ); cmd->execute(); } } else if ( w->inherits( "QWizard" ) ) { QWizard *wiz = (QWizard*)formWindow->mainContainer(); if ( wiz->currentPage() ) { QDesignerWizard *dw = (QDesignerWizard*)wiz; DeleteWizardPageCommand *cmd = new DeleteWizardPageCommand( tr( "Delete Page %1 of %2" ). arg( dw->pageTitle() ).arg( wiz->name() ), formWindow, wiz, wiz->indexOf( wiz->currentPage() ), TRUE ); formWindow->commandHistory()->addCommand( cmd ); cmd->execute(); } }}// ------------------------------------------------------------FormDefinitionView::FormDefinitionView( QWidget *parent, FormWindow *fw ) : HierarchyList( parent, fw, TRUE ){ header()->hide(); removeColumn( 1 ); connect( this, SIGNAL( itemRenamed( QListViewItem *, int, const QString & ) ), this, SLOT( renamed( QListViewItem * ) ) ); popupOpen = FALSE;}void FormDefinitionView::setup(){ if ( popupOpen || !formWindow ) return; if ( !formWindow->project()->isCpp() ) return; QListViewItem *i = firstChild(); while ( i ) { if ( i->rtti() == HierarchyItem::DefinitionParent ) { QListViewItem *a = i; i = i->nextSibling(); delete a; continue; } i = i->nextSibling(); } LanguageInterface *lIface = MetaDataBase::languageInterface( formWindow->project()->language() ); if ( lIface ) { QStringList defs = lIface->definitions(); for ( QStringList::Iterator dit = defs.begin(); dit != defs.end(); ++dit ) { HierarchyItem *itemDef = new HierarchyItem( HierarchyItem::DefinitionParent, this, 0, tr( *dit ), QString::null, QString::null ); itemDef->setPixmap( 0, QPixmap::fromMimeSource( "folder.png" ) ); itemDef->setOpen( TRUE ); QStringList entries = lIface->definitionEntries( *dit, formWindow->mainWindow()->designerInterface() ); HierarchyItem *item = 0; for ( QStringList::Iterator eit = entries.begin(); eit != entries.end(); ++eit ) { item = new HierarchyItem( HierarchyItem::Definition, itemDef, item, *eit, QString::null, QString::null ); item->setRenameEnabled( 0, TRUE ); } } lIface->release(); } setupVariables(); refresh();}void FormDefinitionView::setupVariables(){ bool pubOpen, protOpen, privOpen; pubOpen = protOpen = privOpen = TRUE; QListViewItem *i = firstChild(); while ( i ) { if ( i->rtti() == HierarchyItem::VarParent ) { QListViewItem *a = i; i = i->firstChild(); while ( i ) { if ( i->rtti() == HierarchyItem::VarPublic ) pubOpen = i->isOpen(); else if ( i->rtti() == HierarchyItem::VarProtected ) protOpen = i->isOpen(); else if ( i->rtti() == HierarchyItem::VarPrivate ) privOpen = i->isOpen(); i = i->nextSibling(); } delete a; break; } i = i->nextSibling(); } HierarchyItem *itemVar = new HierarchyItem( HierarchyItem::VarParent, this, 0, tr( "Class Variables" ), QString::null, QString::null ); itemVar->setPixmap( 0, QPixmap::fromMimeSource( "folder.png" ) ); itemVar->setOpen( TRUE ); itemVarPriv = new HierarchyItem( HierarchyItem::VarPrivate, itemVar, 0, tr( "private" ), QString::null, QString::null ); itemVarProt = new HierarchyItem( HierarchyItem::VarProtected, itemVar, 0, tr( "protected" ), QString::null, QString::null ); itemVarPubl = new HierarchyItem( HierarchyItem::VarPublic, itemVar, 0, tr( "public" ), QString::null, QString::null ); QValueList<MetaDataBase::Variable> varList = MetaDataBase::variables( formWindow ); QValueList<MetaDataBase::Variable>::Iterator it = --( varList.end() ); if ( !varList.isEmpty() && itemVar ) { for (;;) { QListViewItem *item = 0; if ( (*it).varAccess == "public" ) item = new HierarchyItem( HierarchyItem::Variable, itemVarPubl, 0, (*it).varName, QString::null, QString::null ); else if ( (*it).varAccess == "private" ) item = new HierarchyItem( HierarchyItem::Variable, itemVarPriv, 0, (*it).varName, QString::null, QString::null ); else // default is protected item = new HierarchyItem( HierarchyItem::Variable, itemVarProt, 0, (*it).varName, QString::null, QString::null ); item->setPixmap( 0, QPixmap::fromMimeSource( "editslots.png" ) ); if ( it == varList.begin() ) break; --it; } } itemVar->setOpen( TRUE ); itemVarPriv->setOpen( privOpen ); itemVarProt->setOpen( protOpen ); itemVarPubl->setOpen( pubOpen );}void FormDefinitionView::refresh(){ if ( popupOpen || !formWindow || !formWindow->project()->isCpp() ) return; bool fuPub, fuProt, fuPriv, slPub, slProt, slPriv; fuPub = fuProt = fuPriv = slPub = slProt = slPriv = TRUE; QListViewItem *i = firstChild(); while ( i ) { if ( i->rtti() == HierarchyItem::SlotParent || i->rtti() == HierarchyItem::FunctParent ) { QListViewItem *a = i; i = i->firstChild(); while ( i ) { switch( i->rtti() ) { case HierarchyItem::FunctPublic: fuPub = i->isOpen(); case HierarchyItem::FunctProtected: fuProt = i->isOpen(); break; case HierarchyItem::FunctPrivate: fuPriv = i->isOpen(); break; case HierarchyItem::SlotPublic: slPub = i->isOpen(); if ( slPub ) break; case HierarchyItem::SlotProtected: slProt = i->isOpen(); break; case HierarchyItem::SlotPrivate: slPriv = i->isOpen(); } i = i->nextSibling(); } i = a->nextSibling(); delete a; continue; } i = i->nextSibling(); } itemFunct = new HierarchyItem( HierarchyItem::FunctParent, this, 0, tr( "Functions" ), QString::null, QString::null ); itemFunct->moveItem( i ); itemFunct->setPixmap( 0, QPixmap::fromMimeSource( "folder.png" ) ); itemFunctPriv = new HierarchyItem( HierarchyItem::FunctPrivate, itemFunct, 0, tr( "private" ), QString::null, QString::null ); itemFunctProt = new HierarchyItem( HierarchyItem::FunctProtected, itemFunct, 0, tr( "protected" ), QString::null, QString::null ); itemFunctPubl = new HierarchyItem( HierarchyItem::FunctPublic, itemFunct, 0, tr( "public" ), QString::null, QString::null ); itemSlots = new HierarchyItem( HierarchyItem::SlotParent, this, 0, tr( "Slots" ), QString::null, QString::null ); itemSlots->setPixmap( 0, QPixmap::fromMimeSource( "folder.png" ) ); itemPrivate = new HierarchyItem( HierarchyItem::SlotPrivate, itemSlots, 0, tr( "private" ), QString::null, QString::null ); itemProtected = new HierarchyItem( HierarchyItem::SlotProtected, itemSlots, 0, tr( "protected" ), QString::null, QString::null ); itemPublic = new HierarchyItem( HierarchyItem::SlotPublic, itemSlots, 0, tr( "public" ), QString::null, QString::null ); QValueList<MetaDataBase::Function> functionList = MetaDataBase::functionList( formWindow ); QValueList<MetaDataBase::Function>::Iterator it = --( functionList.end() ); if ( !functionList.isEmpty() && itemFunct ) { for (;;) { QListViewItem *item = 0; if ( (*it).type == "slot" ) { if ( (*it).access == "protected" ) item = new HierarchyItem( HierarchyItem::Slot, itemProtected, 0, (*it).function, QString::null, QString::null ); else if ( (*it).access == "private" ) item = new HierarchyItem( HierarchyItem::Slot, itemPrivate, 0, (*it).function, QString::null, QString::null ); else // default is public item = new HierarchyItem( HierarchyItem::Slot, itemPublic, 0, (*it).function, QString::null, QString::null ); } else { if ( (*it).access == "protected" ) item = new HierarchyItem( HierarchyItem::Function, itemFunctProt, 0, (*it).function, QString::null, QString::null ); else if ( (*it).access == "private" ) item = new HierarchyItem( HierarchyItem::Function, itemFunctPriv, 0, (*it).function, QString::null, QString::null ); else // default is public item = new HierarchyItem( HierarchyItem::Function, itemFunctPubl, 0, (*it).function, QString::null, QString::null ); } item->setPixmap( 0, QPixmap::fromMimeSource( "editslots.png" ) ); if ( it == functionList.begin() ) break; --it; } } itemFunct->setOpen( TRUE ); itemFunctPubl->setOpen( fuPub ); itemFunctProt->setOpen( fuProt ); itemFunctPriv->setOpen( fuPriv ); itemSlots->setOpen( TRUE ); itemPublic->setOpen( slPub ); itemProtected->setOpen( slProt ); itemPrivate->setOpen( slPriv );}void FormDefinitionView::setCurrent( QWidget * ){}void FormDefinitionView::objectClicked( QListViewItem *i ){ if ( !i ) return; if ( (i->rtti() == HierarchyItem::Slot) || (i->rtti() == HierarchyItem::Function) ) formWindow->mainWindow()->editFunction( i->text( 0 ) );}static HierarchyItem::Type getChildType( int type ){ switch ( (HierarchyItem::Type)type ) { case HierarchyItem::Widget: qWarning( "getChildType: Inserting childs dynamically to Widget or SlotParent is not allwowed!" ); break; case HierarchyItem::SlotParent: case HierarchyItem::SlotPublic: case HierarchyItem::SlotProtected: case HierarchyItem::SlotPrivate: case HierarchyItem::Slot: return HierarchyItem::Slot; case HierarchyItem::DefinitionParent: case HierarchyItem::Definition: return HierarchyItem::Definition; case HierarchyItem::Event: case HierarchyItem::EventFunction: return HierarchyItem::Event; case HierarchyItem::FunctParent: case HierarchyItem::FunctPublic: case HierarchyItem::FunctProtected: case HierarchyItem::FunctPrivate: case HierarchyItem::Function: return HierarchyItem::Function; case HierarchyItem::VarParent: case HierarchyItem::VarPublic: case HierarchyItem::VarProtected: case HierarchyItem::VarPrivate: case HierarchyItem::Variable: return HierarchyItem::Variable; } return (HierarchyItem::Type)type;}void HierarchyList::insertEntry( QListViewItem *i, const QPixmap &pix, const QString &s ){ QListViewItem *after = i->firstChild(); while ( after && after->nextSibling() ) after = after->nextSibling(); HierarchyItem *item = new HierarchyItem( getChildType( i->rtti() ), i, after, s, QString::null, QString::null ); if ( !pix.isNull() ) item->setPixmap( 0, pix ); item->setRenameEnabled( 0, TRUE ); setCurrentItem( item ); ensureItemVisible( item ); qApp->processEvents(); newItem = item; item->startRename( 0 );}void FormDefinitionView::contentsMouseDoubleClickEvent( QMouseEvent *e ){ QListViewItem *i = itemAt( contentsToViewport( e->pos() ) ); if ( !i ) return; if ( i->rtti() == HierarchyItem::SlotParent || i->rtti() == HierarchyItem::FunctParent || i->rtti() == HierarchyItem::VarParent ) return; HierarchyItem::Type t = getChildType( i->rtti() ); if ( (int)t == i->rtti() ) i = i->parent(); if ( formWindow->project()->isCpp() ) switch( i->rtti() ) { case HierarchyItem::FunctPublic: execFunctionDialog( "public", "function", TRUE ); break; case HierarchyItem::FunctProtected: execFunctionDialog( "protected", "function", TRUE ); break; case HierarchyItem::FunctPrivate: execFunctionDialog( "private", "function", TRUE ); break; 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::VarPublic: case HierarchyItem::VarProtected: case HierarchyItem::VarPrivate: { VariableDialog varDia( formWindow, this ); varDia.exec(); break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -