- dic_search.cpp: Do not add twice the same word in a 7+1 search (this can happen when using jokers)

- dic_tools_widget.cpp: Allow up to 2 jokers in the 7+1 search
This commit is contained in:
Olivier Teulière 2008-10-30 19:03:07 +00:00
parent 4686153a7a
commit 003b403422
2 changed files with 22 additions and 8 deletions

View file

@ -112,7 +112,10 @@ void Dictionary::searchWordByLen(struct params_7plus1_t *params,
{
if (edgeptr->term)
{
(*params->results)[params->added_char].push_back(params->search_wordtst);
// Add the solution
vector<wstring> &sols = (*params->results)[params->added_char];
if (sols.empty() || sols.back() != params->search_wordtst)
sols.push_back(params->search_wordtst);
}
}
else
@ -132,7 +135,10 @@ void Dictionary::searchWordByLen(struct params_7plus1_t *params,
{
if (edgeptr->term)
{
(*params->results)[params->added_char].push_back(params->search_wordtst);
// Add the solution
vector<wstring> &sols = (*params->results)[params->added_char];
if (sols.empty() || sols.back() != params->search_wordtst)
sols.push_back(params->search_wordtst);
}
}
else

View file

@ -43,11 +43,13 @@ class DicRackValidator: public QValidator
{
public:
explicit DicRackValidator(QObject *parent,
const Dictionary *iDic);
const Dictionary *iDic,
bool acceptJoker = false);
virtual State validate(QString &input, int &pos) const;
private:
const Dictionary *m_dic;
const bool m_acceptJoker;
};
@ -114,7 +116,7 @@ void DicToolsWidget::setDic(const Dictionary *iDic)
lineEditRegexp->clear();
// Create new validators
lineEditCheck->setValidator(new DicRackValidator(this, m_dic));
lineEditPlus1->setValidator(new DicRackValidator(this, m_dic));
lineEditPlus1->setValidator(new DicRackValidator(this, m_dic, true));
lineEditRegexp->setValidator(new RegexpValidator(this, m_dic));
// Refresh
refreshCheck();
@ -177,7 +179,7 @@ void DicToolsWidget::refreshPlus1()
if (rack->text() != "")
{
map<wchar_t, vector<wstring> > wordList;
m_dic->search7pl1(qtw(rack->text()), wordList, false);
m_dic->search7pl1(qtw(rack->text()), wordList, true);
int rowNum = 0;
map<wchar_t, vector<wstring> >::const_iterator it;
@ -311,8 +313,9 @@ void DicToolsWidget::refreshDicInfo()
DicRackValidator::DicRackValidator(QObject *parent,
const Dictionary *iDic)
: QValidator(parent), m_dic(iDic)
const Dictionary *iDic,
bool acceptJoker)
: QValidator(parent), m_dic(iDic), m_acceptJoker(acceptJoker)
{
}
@ -329,7 +332,12 @@ QValidator::State DicRackValidator::validate(QString &input, int &) const
// The string is invalid if it contains characters not present
// in the dictionary or if it contains a '?'
if (!m_dic->validateLetters(qtw(input)) || input.contains('?'))
if (!m_dic->validateLetters(qtw(input)))
return Invalid;
if (!m_acceptJoker && input.contains('?'))
return Invalid;
// Do not accept more than 2 jokers
if (input.count('?') > 2)
return Invalid;
return Acceptable;
}