void RubySupportPart::slotRunTestUnderCursor() { // if we can't save all parts, then the user canceled if ( partController()->saveAllFiles() == false ) return; KParts::ReadOnlyPart *ro_part = dynamic_cast<KParts::ReadOnlyPart*>(partController()->activePart()); QString prog; if (ro_part != 0) { prog = ro_part->url().path(); } else return; KTextEditor::ViewCursorInterface* activeViewCursor = dynamic_cast<KTextEditor::ViewCursorInterface*>( ro_part->widget() ); if (!activeViewCursor) return; unsigned int line, column; activeViewCursor->cursorPositionReal(&line, &column); CodeModelUtils::CodeModelHelper hlp(codeModel(), codeModel()->fileByName(prog)); FunctionDom fun = hlp.functionAt(line, column); if (fun == 0) return; QFileInfo program(prog); QString cmd = QString("%1 -K%2 -C\"%3\" -I\"%4\" \"%5\" %6") .arg(interpreter()) .arg(characterCoding()) .arg(runDirectory()) .arg(program.dirPath()) .arg(program.fileName()) .arg(" -n " + fun->name()); startApplication(cmd); }
void AStylePart::cursorPos( KParts::Part *part, uint * line, uint * col ) { if (!part || !part->inherits("KTextEditor::Document")) return; KTextEditor::ViewCursorInterface *iface = dynamic_cast<KTextEditor::ViewCursorInterface*>(part->widget()); if (iface) { iface->cursorPositionReal( line, col ); } }
/** * Returns a the complete word defined by the current cursor position. * Attempts to extract a valid C symbol from the location of the cursor, by * starting at the current line and column, and looking forward and backward * for non-symbol characters. * @return A C symbol under the cursor, if any, or QString::null otherwise */ QString EditorPage::getWordUnderCursor(uint* pPosInWord) { KTextEditor::ViewCursorInterface* pCursor; KTextEditor::EditInterface* pEditIf; QString sLine; uint nLine, nCol, nFrom, nTo, nLast, nLength; QChar ch; // Get a cursor object pCursor = dynamic_cast<KTextEditor::ViewCursorInterface*>(m_pView); if (pCursor == NULL) return QString::null; // Get a pointer to the edit interface pEditIf = dynamic_cast<KTextEditor::EditInterface*>(m_pDoc); if (!pEditIf) return QString::null; // Get the line on which the cursor is positioned pCursor->cursorPositionReal(&nLine, &nCol); sLine = pEditIf->textLine(nLine); // Find the beginning of the current word for (nFrom = nCol; nFrom > 0;) { ch = sLine.at(nFrom - 1); if (!ch.isLetter() && !ch.isDigit() && ch != '_') break; nFrom--; } // Find the end of the current word nLast = sLine.length(); for (nTo = nCol; nTo < nLast;) { ch = sLine.at(nTo); if (!ch.isLetter() && !ch.isDigit() && ch != '_') break; nTo++; } // Mark empty words nLength = nTo - nFrom; if (nLength == 0) return QString::null; // Return the in-word position, if required if (pPosInWord != NULL) *pPosInWord = nCol - nFrom; // Extract the word under the cursor from the entire line return sLine.mid(nFrom, nLength); }
/*! \fn SnippetWidget::insertIntoActiveView(QString text) Inserts the parameter text into the activ view */ void SnippetWidget::insertIntoActiveView(QString text) { //get the interfaces for the KTexteditor parts KTextEditor::ViewCursorInterface *cursorIface = dynamic_cast<KTextEditor::ViewCursorInterface*>(m_part->partController()->activeWidget()); if (!cursorIface) return; KTextEditor::EditInterface* editIface = dynamic_cast<KTextEditor::EditInterface*>( m_part->partController()->activePart() ); if (!editIface) return; uint line, col; cursorIface->cursorPositionReal(&line, &col); editIface->insertText( line, col , text ); }
void KDataToolPluginView::aboutToShow() { kdDebug()<<"KTextEditor::KDataToolPluginView::aboutToShow"<<endl; QString word; m_singleWord = false; m_wordUnderCursor = QString::null; // unplug old actions, if any: KAction *ac; for ( ac = m_actionList.first(); ac; ac = m_actionList.next() ) { m_menu->remove(ac); } if (m_notAvailable) { m_menu->remove(m_notAvailable); delete m_notAvailable; m_notAvailable=0; } if ( selectionInterface(m_view->document())->hasSelection() ) { word = selectionInterface(m_view->document())->selection(); if ( word.find(' ') == -1 && word.find('\t') == -1 && word.find('\n') == -1 ) m_singleWord = true; else m_singleWord = false; } else { // No selection -> use word under cursor KTextEditor::EditInterface *ei; KTextEditor::ViewCursorInterface *ci; KTextEditor::View *v = (KTextEditor::View*)m_view; ei = KTextEditor::editInterface(v->document()); ci = KTextEditor::viewCursorInterface(v); uint line, col; ci->cursorPositionReal(&line, &col); QString tmp_line = ei->textLine(line); m_wordUnderCursor = ""; // find begin of word: m_singleWord_start = 0; for(int i = col; i >= 0; i--) { QChar ch = tmp_line.at(i); if( ! (ch.isLetter() || ch == '-' || ch == '\'') ) { m_singleWord_start = i+1; break; } m_wordUnderCursor = ch + m_wordUnderCursor; } // find end of word: m_singleWord_end = tmp_line.length(); for(uint i = col+1; i < tmp_line.length(); i++) { QChar ch = tmp_line.at(i); if( ! (ch.isLetter() || ch == '-' || ch == '\'') ) { m_singleWord_end = i; break; } m_wordUnderCursor += ch; } if( ! m_wordUnderCursor.isEmpty() ) { m_singleWord = true; m_singleWord_line = line; } else { m_notAvailable = new KAction(i18n("(not available)"), QString::null, 0, this, SLOT(slotNotAvailable()), actionCollection(),"dt_n_av"); m_menu->insert(m_notAvailable); return; } } KInstance *inst=instance(); QValueList<KDataToolInfo> tools; tools += KDataToolInfo::query( "QString", "text/plain", inst ); if( m_singleWord ) tools += KDataToolInfo::query( "QString", "application/x-singleword", inst ); m_actionList = KDataToolAction::dataToolActionList( tools, this, SLOT( slotToolActivated( const KDataToolInfo &, const QString & ) ) ); for ( ac = m_actionList.first(); ac; ac = m_actionList.next() ) { m_menu->insert(ac); } if( m_actionList.isEmpty() ) { m_notAvailable = new KAction(i18n("(not available)"), QString::null, 0, this, SLOT(slotNotAvailable()), actionCollection(),"dt_n_av"); m_menu->insert(m_notAvailable); } }