TextEditor: Introduce AssistProposalItemInterface

For unit test we need to break every dependency to the TextEditor
Widget etc.. With an abstract interface we can implement it in clang
without relying on unwanted dependencies. It makes it also easier to
compute the values deferred.

Change-Id: I1b313a1625f4e80bd324ab4bf1a7c4f6b690abe9
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Marco Bubke
2016-02-01 14:51:01 +01:00
parent e42bf6ebc6
commit c903f4974f
31 changed files with 187 additions and 105 deletions

View File

@@ -54,7 +54,7 @@ struct ContentLessThan
: m_prefix(prefix)
{}
bool operator()(const AssistProposalItem *a, const AssistProposalItem *b)
bool operator()(const AssistProposalItemInterface *a, const AssistProposalItemInterface *b)
{
// The order is case-insensitive in principle, but case-sensitive when this
// would otherwise mean equality
@@ -137,7 +137,7 @@ GenericProposalModel::~GenericProposalModel()
qDeleteAll(m_originalItems);
}
void GenericProposalModel::loadContent(const QList<AssistProposalItem *> &items)
void GenericProposalModel::loadContent(const QList<AssistProposalItemInterface *> &items)
{
m_originalItems = items;
m_currentItems = items;
@@ -170,17 +170,18 @@ QString GenericProposalModel::detail(int index) const
return m_currentItems.at(index)->detail();
}
// make it optional because it is not needed in many cases
void GenericProposalModel::removeDuplicates()
{
QHash<QString, QVariant> unique;
QList<AssistProposalItem *>::iterator it = m_originalItems.begin();
QHash<QString, quint64> unique;
auto it = m_originalItems.begin();
while (it != m_originalItems.end()) {
const AssistProposalItem *item = *it;
const AssistProposalItemInterface *item = *it;
if (unique.contains(item->text())
&& unique.value(item->text(), QVariant()) == item->data()) {
&& unique.value(item->text()) == item->hash()) {
it = m_originalItems.erase(it);
} else {
unique.insert(item->text(), item->data());
unique.insert(item->text(), item->hash());
++it;
}
}
@@ -245,8 +246,7 @@ void GenericProposalModel::filter(const QString &prefix)
QRegExp regExp(keyRegExp);
m_currentItems.clear();
for (auto it = m_originalItems.begin(); it != m_originalItems.end(); ++it) {
AssistProposalItem *item = *it;
foreach (const auto &item, m_originalItems) {
if (regExp.indexIn(item->text()) == 0)
m_currentItems.append(item);
}
@@ -306,7 +306,7 @@ QString GenericProposalModel::proposalPrefix() const
return commonPrefix;
}
AssistProposalItem *GenericProposalModel::proposalItem(int index) const
AssistProposalItemInterface *GenericProposalModel::proposalItem(int index) const
{
return m_currentItems.at(index);
}