void QuickOpenFunctionDialog::gotoFile( QString name ) { FunctionModel *fmodel; FunctionList funcList; FunctionDom fdom; for( FunctionList::ConstIterator it = m_functionDefList.begin() ; it!=m_functionDefList.end() ; ++it ){ fdom = *it; fmodel = fdom.data(); if( fmodel->name() == name ){ funcList.append( fdom ); } } if( funcList.count() == 1 ){ fdom = funcList.first(); fmodel = fdom.data(); QString fileNameStr = fmodel->fileName(); int startline, startcol; fmodel->getStartPosition( &startline, &startcol ); m_part->partController()->editDocument( KURL( fileNameStr), startline, startcol ); selectClassViewItem( ItemDom(&(*fmodel)) ); }else if( funcList.count() > 1 ){ QString fileStr; QuickOpenFunctionChooseForm fdlg( this, name.ascii() ); for( FunctionList::Iterator it = funcList.begin() ; it!=funcList.end() ; ++it ){ fmodel = (*it).data(); fdlg.argBox->insertItem( m_part->languageSupport()->formatModelItem(fmodel) + (fmodel->scope().isEmpty() ? "" : " (in " + fmodel->scope().join("::") + ")")); fileStr = KURL( fmodel->fileName() ).fileName(); KURL full_url( fmodel->fileName() ); KURL base_url( part()->project()->projectDirectory()+"/" ); fdlg.setRelativePath(fdlg.fileBox->count(), KURL::relativeURL( base_url, full_url )); fdlg.fileBox->insertItem(fileStr); } if( fdlg.exec() ){ int id = fdlg.argBox->currentItem(); if( id>-1 && id < (int) funcList.count() ){ FunctionModel *model = funcList[id].data(); int line, col; model->getStartPosition( &line, &col ); selectClassViewItem( ItemDom(&(*model)) ); QString fileNameStr = model->fileName(); m_part->partController()->editDocument( KURL(fileNameStr), line ); } } } else{ KMessageBox::error( this, i18n("Error: cannot find matching name function.") ); } accept(); }
void Navigator::selectFunctionNav(QListViewItem *item) { FunctionNavItem *nav = dynamic_cast<FunctionNavItem*>(item); if (!nav) return; FileDom file = m_part->codeModel()->fileByName(m_part->m_activeFileName); if (!file) return; switch (nav->type()) { case FunctionNavItem::Definition: //jump to definition { FileList files = file->wholeGroup(); FunctionDefinitionList deflist; CodeModelUtils::findFunctionDefinitions(NavOp(this, nav->text(0)), files, deflist); if (deflist.count() < 1) return; FunctionDefinitionDom fun = deflist.first(); if (!fun) return; int startLine = 0, startColumn = 0; fun->getStartPosition(&startLine, &startColumn); m_part->partController()->editDocument(KURL(fun->fileName()), startLine); break; } case FunctionNavItem::Declaration: //jump to declaration { FileList files = file->wholeGroup(); FunctionList declist; CodeModelUtils::findFunctionDeclarations(NavOp(this, nav->text(0)), files, declist); if (declist.count() < 1) return; FunctionDom fun = declist.first(); if (!fun) return; int startLine = 0, startColumn = 0; fun->getStartPosition(&startLine, &startColumn); m_part->partController()->editDocument(KURL(fun->fileName()), startLine); break; } } }