diff options
author | John Fultz <jfultz@wolfram.com> | 2015-10-11 18:19:20 -0500 |
---|---|---|
committer | John Fultz <jfultz@wolfram.com> | 2015-10-11 18:19:20 -0500 |
commit | 6339dec22e2190fd341500206c80425593324bdc (patch) | |
tree | 56edb08f484d4c917289bb51e3e4765f524b3400 /quacker/lexicondialog.cpp | |
parent | 69e3dcefb882c743b136df8e5c81b4182b135f6b (diff) |
Fix up lexicon dialog box checks.
Get enables and disables right, efficient computation
of word counts, etc.
Diffstat (limited to 'quacker/lexicondialog.cpp')
-rw-r--r-- | quacker/lexicondialog.cpp | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/quacker/lexicondialog.cpp b/quacker/lexicondialog.cpp index e11ae41..f92efb1 100644 --- a/quacker/lexicondialog.cpp +++ b/quacker/lexicondialog.cpp @@ -27,6 +27,18 @@ #include "geometry.h" #include "quackleio/dawgfactory.h" +class FileNameValidator : public QValidator +{ +public: + virtual State validate(QString &input, int &pos) const + { + for (QString::ConstIterator i = input.begin(); i != input.end(); ++i) + if (*i == '/' || *i == '?' || *i == '\\' || *i == '*') + return Invalid; + return Acceptable; + } +}; + LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDialog(parent), m_wordFactory(NULL) { @@ -37,6 +49,7 @@ LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDi // construct the UI elements m_lexiconName = new QLineEdit(); m_alphabetCombo = new QComboBox(); + m_fileNameValidator = new FileNameValidator(); m_addWordsFromFile = new QPushButton(tr("Add words from &file...")); m_clearAllWords = new QPushButton(tr("Clear &words and start again")); @@ -92,7 +105,7 @@ LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDi m_saveChanges->setDefault(true); // hook up signals and slots - // connect(m_lexiconName, SIGNAL(textEdited(const QString &)), this, SLOT(parametersChanged(const QString &))); + connect(m_lexiconName, SIGNAL(textEdited(const QString &)), this, SLOT(parametersChanged(const QString &))); connect(m_addWordsFromFile, SIGNAL(clicked()), this, SLOT(addWordsFromFile())); connect(m_saveChanges, SIGNAL(clicked()), this, SLOT(accept())); connect(m_cancel, SIGNAL(clicked()), this, SLOT(reject())); @@ -109,6 +122,9 @@ LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDi if (!originalName.isEmpty()) dawgFullFileName = QString::fromStdString(Quackle::LexiconParameters::findDictionaryFile(dawgFileName)); + m_lexiconName->setValidator(m_fileNameValidator); + m_lexiconName->setText(m_originalName); + if (!dawgFullFileName.isEmpty()) { m_deleteLexicon->setEnabled(Quackle::LexiconParameters::hasUserDictionaryFile(dawgFileName)); @@ -117,12 +133,13 @@ LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDi else m_deleteLexicon->setEnabled(false); - updateLexiconInformation(); + updateLexiconInformation(true); } LexiconDialog::~LexiconDialog() { - + delete m_fileNameValidator; + delete m_wordFactory; } void LexiconDialog::deleteLexicon() @@ -233,15 +250,30 @@ void LexiconDialog::accept() QDialog::accept(); } -void LexiconDialog::updateLexiconInformation() +void LexiconDialog::updateLexiconInformation(bool firstTime) { - int wordCount = m_wordFactory ? m_wordFactory->wordCount() : 0; - QByteArray hash = (m_wordFactory && wordCount) ? QByteArray(m_wordFactory->hashBytes(), 16).toHex() : ""; + QByteArray hash = m_wordFactory ? QByteArray(m_wordFactory->hashBytes(), 16).toHex() : ""; QString text; QString lengthText; + + // only recompute word count when the dictionary changes + if (m_wordFactory && hash != m_previousHash) + { + m_wordFactory->computeWordCount(); + m_previousHash = hash; + } + int wordCount = m_wordFactory ? m_wordFactory->wordCount() : 0; + if (wordCount == 0) + { + delete m_wordFactory; + m_wordFactory = NULL; + } if (m_wordFactory) lengthText = QString::fromStdString(m_wordFactory->letterCountString()); + if (firstTime) + m_originalHash = hash; + text.append(tr("File name: ")); text.append(tr("\n\nFile size: ")); text.append(tr("\n\nWord count: ")); @@ -252,4 +284,6 @@ void LexiconDialog::updateLexiconInformation() text.append(hash.left(8)); m_lexiconInformation->setText(text); + + m_saveChanges->setEnabled(hash != m_originalHash && !m_lexiconName->text().isEmpty()); } |