SnippetCompleter::SnippetCompleter(SnippetCollection *collection, QWidget *parentWidget) : QObject(parentWidget), snippetCollection(collection), completer(new QCompleter(this)) { completer->setWidget(parentWidget); completer->setCompletionMode(QCompleter::PopupCompletion); completer->setCaseSensitivity(Qt::CaseSensitive); connect(completer, SIGNAL(activated(QString)), this, SLOT(insertSnippet(QString))); CompletionListModel *model = new CompletionListModel(completer); connect(collection, SIGNAL(collectionChanged(SnippetCollection::CollectionChangedType,Snippet)), model, SLOT(snippetCollectionChanged(SnippetCollection::CollectionChangedType,Snippet))); completer->setModel(model); }
void SnippetCompleter::performCompletion(const QString &textUnderCursor, const QStringList &words, const QRect &popupRect) { const QString completionPrefix = textUnderCursor; // TODO: find more elegant solution qobject_cast<CompletionListModel*>(completer->model())->setWords(words); if (completionPrefix != completer->completionPrefix()) { completer->setCompletionPrefix(completionPrefix); completer->popup()->setCurrentIndex(completer->completionModel()->index(0, 0)); } if (completer->completionCount() == 1) { insertSnippet(completer->currentCompletion()); } else { QRect rect = popupRect; rect.setWidth(completer->popup()->sizeHintForColumn(0) + completer->popup()->verticalScrollBar()->sizeHint().width()); completer->complete(rect); } }
SnippetWidget::SnippetWidget(KMComposerEditorNg *editor, KActionCollection *actionCollection, QWidget *parent) : QTreeView(parent) { header()->hide(); setAcceptDrops(true); setDragEnabled(true); setRootIsDecorated(true); setAlternatingRowColors(true); mSnippetsManager = new MailCommon::SnippetsManager(actionCollection, this, this); mSnippetsManager->setEditor(editor, "insertPlainText", SIGNAL(insertSnippet())); setModel(mSnippetsManager->model()); setSelectionModel(mSnippetsManager->selectionModel()); connect(this, &QAbstractItemView::activated, mSnippetsManager->editSnippetAction(), &QAction::trigger); connect(mSnippetsManager->model(), &QAbstractItemModel::rowsInserted, this, &QTreeView::expandAll); connect(mSnippetsManager->model(), &QAbstractItemModel::rowsRemoved, this, &QTreeView::expandAll); expandAll(); }
QModelIndex SnippetsTableModel::createSnippet() { Snippet snippet(m_activeGroupId); return insertSnippet(snippet); }