void KeywordsCompletionAssistProcessor::addWordsToProposalList(QList<BasicProposalItem *> *items, const QStringList &words, const QIcon &icon) { if (!items) return; for (int i = 0; i < words.count(); ++i) { BasicProposalItem *item = new KeywordsAssistProposalItem(m_keywords); item->setText(words.at(i)); item->setIcon(icon); items->append(item); } }
IAssistProposal *ProFileCompletionAssistProcessor::perform(const IAssistInterface *interface) { m_interface.reset(interface); if (isInComment()) return 0; if (interface->reason() == IdleEditor && !acceptsIdleEditor()) return 0; if (m_startPosition == -1) m_startPosition = findStartOfName(); QList<TextEditor::BasicProposalItem *> items; QStringList keywords = ProFileKeywords::variables() + ProFileKeywords::functions(); for (int i = 0; i < keywords.count(); i++) { BasicProposalItem *item = new ProFileAssistProposalItem; item->setText(keywords[i]); item->setIcon(ProFileKeywords::isFunction(item->text()) ? m_functionIcon : m_variableIcon); items.append(item); } return new GenericProposal(m_startPosition, new ProFileAssistProposalModel(items)); }
IAssistProposal *QssCompletionAssistProcessor::perform(const IAssistInterface *interface) { m_interface.reset(interface); if (isInComment()) return 0; if (interface->reason() == IdleEditor && !acceptsIdleEditor()) return 0; if (m_startPosition == -1) m_startPosition = findStartOfName(); QTextBlock block = interface->textDocument()->findBlock(interface->position()); QTextBlock prevBlock = block.previous(); Lexer lexer; Parser parser; if (prevBlock.isValid()) { lexer.setState(qssLexerState(prevBlock.userState())); parser.setState(qssParserState(prevBlock.userState())); } QList<Token> tokenList = lexer.scanMore(block.text()); int index = m_startPosition - block.position(); Q_FOREACH (const Token &t, tokenList) { if (index <= t.begin()) break; parser.parseMore(t); } QStringList keywords; QIcon icon; switch (parser.state()) { case Parser::ObjectState: keywords << Lexer::objects(); icon = QIcon(":/qsseditor/images/class.png"); break; case Parser::PseudoStatesState: keywords << Lexer::pseudoStates(); icon = QIcon(":/qsseditor/images/func.png"); break; case Parser::SubControlState: keywords << Lexer::subControls(); icon = QIcon(":/qsseditor/images/func.png"); break; case Parser::AttributeNameState: keywords << Lexer::attributeNames(); icon = QIcon(":/qsseditor/images/var.png"); break; case Parser::AttributeBodyState: keywords << Lexer::attributeCtors() << Lexer::attributeKeywords(); icon = QIcon(":/qsseditor/images/keyword.png"); break; default: ; } keywords.removeDuplicates(); QList<TextEditor::BasicProposalItem *> items; for (int i = 0; i < keywords.count(); i++) { BasicProposalItem *item = new QssAssistProposalItem; item->setText(keywords[i]); item->setIcon(icon); items.append(item); } return new GenericProposal(m_startPosition, new QssAssistProposalModel(items)); }