• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • applications API Reference
  • KDE Home
  • Contact Us
 

Kate

  • sources
  • kde-4.12
  • applications
  • kate
  • part
  • completion
katewordcompletion.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE libraries and the Kate part.
2  *
3  * Copyright (C) 2003 Anders Lund <anders.lund@lund.tdcadsl.dk>
4  * Copyright (C) 2010 Christoph Cullmann <cullmann@kde.org>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB. If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  */
21 
22 //BEGIN includes
23 #include "katewordcompletion.h"
24 #include "kateview.h"
25 #include "kateconfig.h"
26 #include "katedocument.h"
27 #include "kateglobal.h"
28 
29 #include <ktexteditor/variableinterface.h>
30 #include <ktexteditor/movingrange.h>
31 #include <ktexteditor/range.h>
32 
33 #include <kconfig.h>
34 #include <kdialog.h>
35 #include <kpluginfactory.h>
36 #include <klocale.h>
37 #include <kaction.h>
38 #include <kactioncollection.h>
39 #include <knotification.h>
40 #include <kparts/part.h>
41 #include <kiconloader.h>
42 #include <kpagedialog.h>
43 #include <kpagewidgetmodel.h>
44 #include <ktoggleaction.h>
45 #include <kconfiggroup.h>
46 #include <kcolorscheme.h>
47 #include <kaboutdata.h>
48 
49 #include <QtCore/QRegExp>
50 #include <QtCore/QString>
51 #include <QtCore/QSet>
52 #include <QtGui/QSpinBox>
53 #include <QtGui/QLabel>
54 #include <QtGui/QLayout>
55 
56 #include <kvbox.h>
57 #include <QtGui/QCheckBox>
58 
59 #include <kdebug.h>
60 //END
61 
63 static const int autoInvocationMaxFilesize = 1000000;
64 
65 //BEGIN KateWordCompletionModel
66 KateWordCompletionModel::KateWordCompletionModel( QObject *parent )
67  : CodeCompletionModel2( parent ), m_automatic(false)
68 {
69  setHasGroups(false);
70 }
71 
72 KateWordCompletionModel::~KateWordCompletionModel()
73 {
74 }
75 
76 void KateWordCompletionModel::saveMatches( KTextEditor::View* view,
77  const KTextEditor::Range& range)
78 {
79  m_matches = allMatches( view, range );
80  m_matches.sort();
81 }
82 
83 QVariant KateWordCompletionModel::data(const QModelIndex& index, int role) const
84 {
85  if( role == UnimportantItemRole )
86  return QVariant(true);
87  if( role == InheritanceDepth )
88  return 10000;
89 
90  if( !index.parent().isValid() ) {
91  //It is the group header
92  switch ( role )
93  {
94  case Qt::DisplayRole:
95  return i18n("Auto Word Completion");
96  case GroupRole:
97  return Qt::DisplayRole;
98  }
99  }
100 
101  if( index.column() == KTextEditor::CodeCompletionModel::Name && role == Qt::DisplayRole )
102  return m_matches.at( index.row() );
103 
104  if( index.column() == KTextEditor::CodeCompletionModel::Icon && role == Qt::DecorationRole ) {
105  static QIcon icon(KIcon("insert-text").pixmap(QSize(16, 16)));
106  return icon;
107  }
108 
109  return QVariant();
110 }
111 
112 QModelIndex KateWordCompletionModel::parent(const QModelIndex& index) const
113 {
114  if(index.internalId())
115  return createIndex(0, 0, 0);
116  else
117  return QModelIndex();
118 }
119 
120 QModelIndex KateWordCompletionModel::index(int row, int column, const QModelIndex& parent) const
121 {
122  if( !parent.isValid()) {
123  if(row == 0)
124  return createIndex(row, column, 0);
125  else
126  return QModelIndex();
127 
128  }else if(parent.parent().isValid())
129  return QModelIndex();
130 
131 
132  if (row < 0 || row >= m_matches.count() || column < 0 || column >= ColumnCount )
133  return QModelIndex();
134 
135  return createIndex(row, column, 1);
136 }
137 
138 int KateWordCompletionModel::rowCount ( const QModelIndex & parent ) const
139 {
140  if( !parent.isValid() && !m_matches.isEmpty() )
141  return 1; //One root node to define the custom group
142  else if(parent.parent().isValid())
143  return 0; //Completion-items have no children
144  else
145  return m_matches.count();
146 }
147 
148 
149 bool KateWordCompletionModel::shouldStartCompletion(KTextEditor::View* view, const QString &insertedText, bool userInsertion, const KTextEditor::Cursor &position)
150 {
151  if (!userInsertion) return false;
152  if (insertedText.isEmpty())
153  return false;
154 
155 
156  KateView *v = qobject_cast<KateView*> (view);
157 
158  if (view->document()->totalCharacters() > autoInvocationMaxFilesize) {
159  // Disable automatic invocation for files larger than 1MB (see benchmarks)
160  return false;
161  }
162 
163  const QString& text = view->document()->line(position.line()).left(position.column());
164  const uint check = v->config()->wordCompletionMinimalWordLength();
165  // Start completion immediately if min. word size is zero
166  if (!check) return true;
167  // Otherwise, check if user has typed long enough text...
168  const int start = text.length();
169  const int end = start - check;
170  if (end < 0) return false;
171  for (int i = start - 1; i >= end; i--) {
172  const QChar c = text.at(i);
173  if (!(c.isLetter() || (c.isNumber()) || c=='_')) return false;
174  }
175 
176  return true;
177 }
178 
179 bool KateWordCompletionModel::shouldAbortCompletion(KTextEditor::View* view, const KTextEditor::Range &range, const QString &currentCompletion) {
180 
181  if (m_automatic) {
182  KateView *v = qobject_cast<KateView*> (view);
183  if (currentCompletion.length()<v->config()->wordCompletionMinimalWordLength()) return true;
184  }
185 
186  return CodeCompletionModelControllerInterface4::shouldAbortCompletion(view,range,currentCompletion);
187 }
188 
189 
190 
191 void KateWordCompletionModel::completionInvoked(KTextEditor::View* view, const KTextEditor::Range& range, InvocationType it)
192 {
193  m_automatic = it == AutomaticInvocation;
194  saveMatches( view, range );
195 }
196 
197 
203 QStringList KateWordCompletionModel::allMatches( KTextEditor::View *view, const KTextEditor::Range &range ) const
204 {
205  QSet<QString> result;
206  const int minWordSize = qMax(2, qobject_cast<KateView*>(view)->config()->wordCompletionMinimalWordLength());
207  const int lines = view->document()->lines();
208  for ( int line = 0; line < lines; line++ ) {
209  const QString& text = view->document()->line(line);
210  int wordBegin = 0;
211  int offset = 0;
212  const int end = text.size();
213  while ( offset < end ) {
214  const QChar c = text.at(offset);
215  // increment offset when at line end, so we take the last character too
216  if ( ( ! c.isLetterOrNumber() && c != '_' ) || (offset == end - 1 && offset++) ) {
217  if ( offset - wordBegin > minWordSize && ( line != range.end().line() || offset != range.end().column() ) ) {
218  result.insert(text.mid(wordBegin, offset - wordBegin));
219  }
220  wordBegin = offset + 1;
221  }
222  if ( c.isSpace() ) {
223  wordBegin = offset + 1;
224  }
225  offset += 1;
226  }
227  }
228  return result.values();
229 }
230 
231 void KateWordCompletionModel::executeCompletionItem2(
232  KTextEditor::Document* document
233  , const KTextEditor::Range& word
234  , const QModelIndex& index
235  ) const
236 {
237  KateView *v = qobject_cast<KateView*> (document->activeView());
238  if (v->config()->wordCompletionRemoveTail())
239  {
240  int tailStart = word.end().column();
241  const QString& line = document->line(word.end().line());
242  int tailEnd = line.length();
243  for (int i = word.end().column(); i < tailEnd; ++i)
244  {
245  // Letters, numbers and underscore are part of a word!
247  if (!line[i].isLetterOrNumber() && line[i] != '_')
248  {
249  tailEnd = i;
250  }
251  }
252 
253  int sizeDiff = m_matches.at(index.row()).size() - (word.end().column() - word.start().column());
254 
255  tailStart += sizeDiff;
256  tailEnd += sizeDiff;
257 
258  KTextEditor::Range tail = word;
259  tail.start().setColumn(tailStart);
260  tail.end().setColumn(tailEnd);
261 
262  document->replaceText(word, m_matches.at(index.row()));
263  v->doc()->editEnd();
264  v->doc()->editStart();
265  document->replaceText(tail, "");
266  }
267  else
268  {
269  document->replaceText(word, m_matches.at(index.row()));
270  }
271 }
272 
273 KTextEditor::CodeCompletionModelControllerInterface3::MatchReaction KateWordCompletionModel::matchingItem(const QModelIndex& /*matched*/)
274 {
275  return HideListIfAutomaticInvocation;
276 }
277 
278 bool KateWordCompletionModel::shouldHideItemsWithEqualNames() const
279 {
280  // We don't want word-completion items if the same items
281  // are available through more sophisticated completion models
282  return true;
283 }
284 
285 // Return the range containing the word left of the cursor
286 KTextEditor::Range KateWordCompletionModel::completionRange(KTextEditor::View* view, const KTextEditor::Cursor &position)
287 {
288  int line = position.line();
289  int col = position.column();
290 
291  KTextEditor::Document *doc = view->document();
292  while ( col > 0 )
293  {
294  const QChar c = ( doc->character( KTextEditor::Cursor( line, col-1 ) ) );
295  if ( c.isLetterOrNumber() || c.isMark() || c == '_' )
296  {
297  col--;
298  continue;
299  }
300 
301  break;
302  }
303 
304  return KTextEditor::Range( KTextEditor::Cursor( line, col ), position );
305 }
306 //END KateWordCompletionModel
307 
308 
309 //BEGIN KateWordCompletionView
310 struct KateWordCompletionViewPrivate
311 {
312  KTextEditor::MovingRange* liRange; // range containing last inserted text
313  KTextEditor::Range dcRange; // current range to be completed by directional completion
314  KTextEditor::Cursor dcCursor; // directional completion search cursor
315  QRegExp re; // hrm
316  int directionalPos; // be able to insert "" at the correct time
317  bool isCompleting; // true when the directional completion is doing a completion
318 };
319 
320 KateWordCompletionView::KateWordCompletionView( KTextEditor::View *view, KActionCollection* ac )
321  : QObject( view ),
322  m_view( view ),
323  m_dWCompletionModel( KateGlobal::self()->wordCompletionModel() ),
324  d( new KateWordCompletionViewPrivate )
325 {
326  d->isCompleting = false;
327  d->dcRange = KTextEditor::Range::invalid();
328 
329  d->liRange = static_cast<KateDocument*>(m_view->document())->newMovingRange(KTextEditor::Range::invalid(), KTextEditor::MovingRange::DoNotExpand);
330 
331  KColorScheme colors(QPalette::Active);
332  KTextEditor::Attribute::Ptr a = KTextEditor::Attribute::Ptr( new KTextEditor::Attribute() );
333  a->setBackground( colors.background(KColorScheme::ActiveBackground) );
334  a->setForeground( colors.foreground(KColorScheme::ActiveText) ); // ### this does 0
335  d->liRange->setAttribute( a );
336 
337  KTextEditor::CodeCompletionInterface *cci = qobject_cast<KTextEditor::CodeCompletionInterface *>(view);
338 
339  KAction *action;
340 
341  if (cci)
342  {
343  cci->registerCompletionModel( m_dWCompletionModel );
344 
345  action = new KAction( i18n("Shell Completion"), this );
346  ac->addAction( "doccomplete_sh", action );
347  connect( action, SIGNAL(triggered()), this, SLOT(shellComplete()) );
348  }
349 
350 
351  action = new KAction( i18n("Reuse Word Above"), this );
352  ac->addAction( "doccomplete_bw", action );
353  action->setShortcut( Qt::CTRL+Qt::Key_8 );
354  connect( action, SIGNAL(triggered()), this, SLOT(completeBackwards()) );
355 
356  action = new KAction( i18n("Reuse Word Below"), this );
357  ac->addAction( "doccomplete_fw", action );
358  action->setShortcut( Qt::CTRL+Qt::Key_9 );
359  connect( action, SIGNAL(triggered()), this, SLOT(completeForwards()) );
360 }
361 
362 KateWordCompletionView::~KateWordCompletionView()
363 {
364  KTextEditor::CodeCompletionInterface *cci = qobject_cast<KTextEditor::CodeCompletionInterface *>(m_view);
365 
366  if (cci) cci->unregisterCompletionModel(m_dWCompletionModel);
367 
368  delete d;
369 }
370 
371 void KateWordCompletionView::completeBackwards()
372 {
373  complete( false );
374 }
375 
376 void KateWordCompletionView::completeForwards()
377 {
378  complete();
379 }
380 
381 // Pop up the editors completion list if applicable
382 void KateWordCompletionView::popupCompletionList()
383 {
384  kDebug( 13040 ) << "entered ...";
385  KTextEditor::Range r = range();
386 
387  KTextEditor::CodeCompletionInterface *cci = qobject_cast<KTextEditor::CodeCompletionInterface *>( m_view );
388  if(!cci || cci->isCompletionActive())
389  return;
390 
391  m_dWCompletionModel->saveMatches( m_view, r );
392 
393  kDebug( 13040 ) << "after save matches ...";
394 
395  if ( ! m_dWCompletionModel->rowCount(QModelIndex()) ) return;
396 
397  cci->startCompletion( r, m_dWCompletionModel );
398 }
399 
400 // Contributed by <brain@hdsnet.hu>
401 void KateWordCompletionView::shellComplete()
402 {
403  KTextEditor::Range r = range();
404 
405  QStringList matches = m_dWCompletionModel->allMatches( m_view, r );
406 
407  if (matches.size() == 0)
408  return;
409 
410  QString partial = findLongestUnique( matches, r.columnWidth() );
411 
412  if ( ! partial.length() )
413  popupCompletionList();
414 
415  else
416  {
417  m_view->document()->insertText( r.end(), partial.mid( r.columnWidth() ) );
418  d->liRange->setView(m_view);
419  d->liRange->setRange( KTextEditor::Range( r.end(), partial.length() - r.columnWidth() ) );
420  connect( m_view, SIGNAL(cursorPositionChanged(KTextEditor::View*,KTextEditor::Cursor)), this, SLOT(slotCursorMoved()) );
421  }
422 }
423 
424 // Do one completion, searching in the desired direction,
425 // if possible
426 void KateWordCompletionView::complete( bool fw )
427 {
428  KTextEditor::Range r = range();
429 
430  int inc = fw ? 1 : -1;
431  KTextEditor::Document *doc = m_view->document();
432 
433  if ( d->dcRange.isValid() )
434  {
435  //kDebug( 13040 )<<"CONTINUE "<<d->dcRange;
436  // this is a repeted activation
437 
438  // if we are back to where we started, reset.
439  if ( ( fw && d->directionalPos == -1 ) ||
440  ( !fw && d->directionalPos == 1 ) )
441  {
442  const int spansColumns = d->liRange->end().column() - d->liRange->start().column();
443  if ( spansColumns > 0 )
444  doc->removeText( *d->liRange );
445 
446  d->liRange->setRange( KTextEditor::Range::invalid() );
447  d->dcCursor = r.end();
448  d->directionalPos = 0;
449 
450  return;
451  }
452 
453  if ( fw ) {
454  const int spansColumns = d->liRange->end().column() - d->liRange->start().column();
455  d->dcCursor.setColumn( d->dcCursor.column() + spansColumns );
456  }
457 
458  d->directionalPos += inc;
459  }
460  else // new completion, reset all
461  {
462  //kDebug( 13040 )<<"RESET FOR NEW";
463  d->dcRange = r;
464  d->liRange->setRange( KTextEditor::Range::invalid() );
465  d->dcCursor = r.start();
466  d->directionalPos = inc;
467 
468  d->liRange->setView( m_view );
469 
470  connect( m_view, SIGNAL(cursorPositionChanged(KTextEditor::View*,KTextEditor::Cursor)), this, SLOT(slotCursorMoved()) );
471 
472  }
473 
474  d->re.setPattern( "\\b" + doc->text( d->dcRange ) + "(\\w+)" );
475  int pos ( 0 );
476  QString ln = doc->line( d->dcCursor.line() );
477 
478  while ( true )
479  {
480  //kDebug( 13040 )<<"SEARCHING FOR "<<d->re.pattern()<<" "<<ln<<" at "<<d->dcCursor;
481  pos = fw ?
482  d->re.indexIn( ln, d->dcCursor.column() ) :
483  d->re.lastIndexIn( ln, d->dcCursor.column() );
484 
485  if ( pos > -1 ) // we matched a word
486  {
487  //kDebug( 13040 )<<"USABLE MATCH";
488  QString m = d->re.cap( 1 );
489  if ( m != doc->text( *d->liRange ) && (d->dcCursor.line() != d->dcRange.start().line() || pos != d->dcRange.start().column() ) )
490  {
491  // we got good a match! replace text and return.
492  d->isCompleting = true;
493  KTextEditor::Range replaceRange(d->liRange->toRange());
494  if (!replaceRange.isValid()) {
495  replaceRange.setRange(r.end(), r.end());
496  }
497  doc->replaceText( replaceRange, m );
498  d->liRange->setRange( KTextEditor::Range( d->dcRange.end(), m.length() ) );
499 
500  d->dcCursor.setColumn( pos ); // for next try
501 
502  d->isCompleting = false;
503  return;
504  }
505 
506  // equal to last one, continue
507  else
508  {
509  //kDebug( 13040 )<<"SKIPPING, EQUAL MATCH";
510  d->dcCursor.setColumn( pos ); // for next try
511 
512  if ( fw )
513  d->dcCursor.setColumn( pos + m.length() );
514 
515  else
516  {
517  if ( pos == 0 )
518  {
519  if ( d->dcCursor.line() > 0 )
520  {
521  int l = d->dcCursor.line() + inc;
522  ln = doc->line( l );
523  d->dcCursor.setPosition( l, ln.length() );
524  }
525  else
526  {
527  KNotification::beep();
528  return;
529  }
530  }
531 
532  else
533  d->dcCursor.setColumn( d->dcCursor.column()-1 );
534  }
535  }
536  }
537 
538  else // no match
539  {
540  //kDebug( 13040 )<<"NO MATCH";
541  if ( (! fw && d->dcCursor.line() == 0 ) || ( fw && d->dcCursor.line() >= doc->lines() ) )
542  {
543  KNotification::beep();
544  return;
545  }
546 
547  int l = d->dcCursor.line() + inc;
548  ln = doc->line( l );
549  d->dcCursor.setPosition( l, fw ? 0 : ln.length() );
550  }
551  } // while true
552 }
553 
554 void KateWordCompletionView::slotCursorMoved()
555 {
556  if ( d->isCompleting) return;
557 
558  d->dcRange = KTextEditor::Range::invalid();
559 
560  disconnect( m_view, SIGNAL(cursorPositionChanged(KTextEditor::View*,KTextEditor::Cursor)), this, SLOT(slotCursorMoved()) );
561 
562  d->liRange->setView(0);
563  d->liRange->setRange(KTextEditor::Range::invalid());
564 }
565 
566 // Contributed by <brain@hdsnet.hu> FIXME
567 QString KateWordCompletionView::findLongestUnique( const QStringList &matches, int lead ) const
568 {
569  QString partial = matches.first();
570 
571  foreach ( const QString& current, matches )
572  {
573  if ( !current.startsWith( partial ) )
574  {
575  while( partial.length() > lead )
576  {
577  partial.remove( partial.length() - 1, 1 );
578  if ( current.startsWith( partial ) )
579  break;
580  }
581 
582  if ( partial.length() == lead )
583  return QString();
584  }
585  }
586 
587  return partial;
588 }
589 
590 // Return the string to complete (the letters behind the cursor)
591 QString KateWordCompletionView::word() const
592 {
593  return m_view->document()->text( range() );
594 }
595 
596 // Return the range containing the word behind the cursor
597 KTextEditor::Range KateWordCompletionView::range() const
598 {
599  return m_dWCompletionModel->completionRange(m_view, m_view->cursorPosition());
600 }
601 //END
602 
603 #include "katewordcompletion.moc"
604 // kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off;
QVariant
KTextEditor::CodeCompletionInterface::unregisterCompletionModel
virtual void unregisterCompletionModel(CodeCompletionModel *model)=0
KTextEditor::CodeCompletionModel::InheritanceDepth
kdialog.h
KTextEditor::Document::insertText
virtual bool insertText(const Cursor &position, const QString &text, bool block=false)=0
KateWordCompletionModel::~KateWordCompletionModel
~KateWordCompletionModel()
Definition: katewordcompletion.cpp:72
KTextEditor::Range::start
Cursor & start()
KSharedPtr< Attribute >
KActionCollection
KTextEditor::CodeCompletionModel::Name
kateview.h
autoInvocationMaxFilesize
static const int autoInvocationMaxFilesize
Amount of characters the document may have to enable automatic invocation (1MB)
Definition: katewordcompletion.cpp:63
Kate::Script::i18n
QScriptValue i18n(QScriptContext *context, QScriptEngine *engine)
i18n("text", arguments [optional])
Definition: katescripthelpers.cpp:186
KColorScheme::background
QBrush background(BackgroundRole=NormalBackground) const
KTextEditor::CodeCompletionModelControllerInterface3::MatchReaction
MatchReaction
kdebug.h
KTextEditor::Attribute
KateWordCompletionModel::executeCompletionItem2
virtual void executeCompletionItem2(KTextEditor::Document *document, const KTextEditor::Range &word, const QModelIndex &index) const
Definition: katewordcompletion.cpp:231
KColorScheme::ActiveBackground
KTextEditor::CodeCompletionModel::InvocationType
InvocationType
KateWordCompletionModel::allMatches
QStringList allMatches(KTextEditor::View *view, const KTextEditor::Range &range) const
Scan throughout the entire document for possible completions, ignoring any dublets and words shorter ...
Definition: katewordcompletion.cpp:203
KTextEditor::CodeCompletionInterface::isCompletionActive
virtual bool isCompletionActive() const =0
KTextEditor::CodeCompletionModel::AutomaticInvocation
KateViewConfig::wordCompletionMinimalWordLength
int wordCompletionMinimalWordLength() const
Definition: kateconfig.cpp:1793
kactioncollection.h
kconfig.h
kpagewidgetmodel.h
KColorScheme::ActiveText
KateWordCompletionModel::completionRange
virtual KTextEditor::Range completionRange(KTextEditor::View *view, const KTextEditor::Cursor &position)
Definition: katewordcompletion.cpp:286
katedocument.h
movingrange.h
KActionCollection::addAction
QAction * addAction(const QString &name, QAction *action)
kiconloader.h
KTextEditor::MovingRange
KTextEditor::MovingRange::DoNotExpand
QString
variableinterface.h
KTextEditor::Range::setRange
virtual void setRange(const Range &range)
QObject
kDebug
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
KTextEditor::Cursor
klocale.h
KTextEditor::CodeCompletionInterface::registerCompletionModel
virtual void registerCompletionModel(CodeCompletionModel *model)=0
KTextEditor::CodeCompletionModel::Icon
KateWordCompletionModel::KateWordCompletionModel
KateWordCompletionModel(QObject *parent)
Definition: katewordcompletion.cpp:66
config
KSharedConfigPtr config()
KateWordCompletionView::~KateWordCompletionView
~KateWordCompletionView()
Definition: katewordcompletion.cpp:362
KTextEditor::Range::columnWidth
int columnWidth() const
KateViewConfig::wordCompletionRemoveTail
bool wordCompletionRemoveTail() const
Definition: kateconfig.cpp:1814
KTextEditor::CodeCompletionModelControllerInterface3::HideListIfAutomaticInvocation
knotification.h
KTextEditor::Document::activeView
virtual View * activeView() const =0
KColorScheme::foreground
QBrush foreground(ForegroundRole=NormalText) const
range.h
KTextEditor::Document::removeText
virtual bool removeText(const Range &range, bool block=false)=0
KateWordCompletionModel::rowCount
int rowCount(const QModelIndex &parent) const
Definition: katewordcompletion.cpp:138
KTextEditor::Document
KTextEditor::Attribute::Ptr
KSharedPtr< Attribute > Ptr
kateglobal.h
QStringList
KTextEditor::Range::invalid
static Range invalid()
KTextEditor::View::document
virtual Document * document() const =0
KateWordCompletionModel::shouldStartCompletion
bool shouldStartCompletion(KTextEditor::View *view, const QString &insertedText, bool userInsertion, const KTextEditor::Cursor &position)
Definition: katewordcompletion.cpp:149
KIcon
KNotification::beep
static void beep(const QString &reason=QString(), QWidget *widget=0L)
KateWordCompletionModel::completionInvoked
void completionInvoked(KTextEditor::View *view, const KTextEditor::Range &range, InvocationType invocationType)
This function is responsible to generating / updating the list of current completions.
Definition: katewordcompletion.cpp:191
KTextEditor::View::cursorPosition
virtual Cursor cursorPosition() const =0
KTextEditor::CodeCompletionModel::UnimportantItemRole
kvbox.h
katewordcompletion.h
KateView
Definition: kateview.h:78
KateWordCompletionModel::saveMatches
void saveMatches(KTextEditor::View *view, const KTextEditor::Range &range)
Definition: katewordcompletion.cpp:76
KTextEditor::Range
KTextEditor::Document::text
virtual QString text() const =0
kaction.h
KTextEditor::CodeCompletionModel::setHasGroups
void setHasGroups(bool hasGroups)
KateDocument
Definition: katedocument.h:74
KTextEditor::CodeCompletionModel::ColumnCount
static const int ColumnCount
QSet< QString >
KateWordCompletionModel::index
virtual QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const
Definition: katewordcompletion.cpp:120
KTextEditor::Document::totalCharacters
virtual int totalCharacters() const =0
KateWordCompletionModel::data
QVariant data(const QModelIndex &index, int role) const
Definition: katewordcompletion.cpp:83
KTextEditor::Document::line
virtual QString line(int line) const =0
KTextEditor::CodeCompletionModel::GroupRole
KTextEditor::Cursor::line
virtual int line() const
KTextEditor::CodeCompletionInterface
KColorScheme
KTextEditor::Document::character
virtual QChar character(const Cursor &position) const =0
KateDocument::editEnd
void editEnd()
End a editor operation.
Definition: katedocument.cpp:796
kpluginfactory.h
KTextEditor::Range::end
Cursor & end()
KAction
KateWordCompletionModel::shouldHideItemsWithEqualNames
virtual bool shouldHideItemsWithEqualNames() const
When multiple completion models are used at the same time, it may happen that multiple models add ite...
Definition: katewordcompletion.cpp:278
kpagedialog.h
KateGlobal
KateGlobal One instance of this class is hold alive during a kate part session, as long as any factor...
Definition: kateglobal.h:70
ktoggleaction.h
QSize
KateView::doc
KateDocument * doc()
accessor to katedocument pointer
Definition: kateview.h:552
KTextEditor::CodeCompletionInterface::startCompletion
virtual void startCompletion(const Range &word, CodeCompletionModel *model)=0
kaboutdata.h
KateDocument::editStart
void editStart()
Enclose editor actions with editStart() and editEnd() to group them.
Definition: katedocument.cpp:776
KTextEditor::View
KateWordCompletionModel::parent
virtual QModelIndex parent(const QModelIndex &index) const
Definition: katewordcompletion.cpp:112
KateView::config
KateViewConfig * config()
Configuration.
Definition: kateview.h:654
KateWordCompletionModel::matchingItem
virtual MatchReaction matchingItem(const QModelIndex &matched)
Definition: katewordcompletion.cpp:273
end
const KShortcut & end()
kateconfig.h
KTextEditor::Cursor::setColumn
virtual void setColumn(int column)
KTextEditor::Cursor::column
int column() const
kcolorscheme.h
KTextEditor::Document::replaceText
virtual bool replaceText(const Range &range, const QString &text, bool block=false)
KateWordCompletionView::KateWordCompletionView
KateWordCompletionView(KTextEditor::View *view, KActionCollection *ac)
Definition: katewordcompletion.cpp:320
KateWordCompletionModel::shouldAbortCompletion
bool shouldAbortCompletion(KTextEditor::View *view, const KTextEditor::Range &range, const QString &currentCompletion)
Definition: katewordcompletion.cpp:179
part.h
kconfiggroup.h
KTextEditor::Document::lines
virtual int lines() const =0
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:31:53 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Kate

Skip menu "Kate"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

applications API Reference

Skip menu "applications API Reference"
  •   kate
  •       kate
  •   KTextEditor
  •   Kate
  • Applications
  •   Libraries
  •     libkonq
  • Konsole

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal