⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hierarchyview.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}	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 + -