summaryrefslogtreecommitdiff
path: root/quacker
diff options
context:
space:
mode:
Diffstat (limited to 'quacker')
-rw-r--r--quacker/lexicondialog.cpp72
-rw-r--r--quacker/lexicondialog.h7
-rw-r--r--quacker/settings.cpp68
-rw-r--r--quacker/settings.h2
4 files changed, 97 insertions, 52 deletions
diff --git a/quacker/lexicondialog.cpp b/quacker/lexicondialog.cpp
index f92efb1..6630e1f 100644
--- a/quacker/lexicondialog.cpp
+++ b/quacker/lexicondialog.cpp
@@ -40,7 +40,7 @@ public:
};
LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDialog(parent),
- m_wordFactory(NULL)
+ m_deleted(false), m_wordFactory(NULL)
{
m_originalName = originalName;
@@ -57,6 +57,7 @@ LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDi
m_lexiconInformation = new QLabel("");
m_lexiconInformation->setWordWrap(true);
+ m_lexiconInformation->setTextInteractionFlags(Qt::TextBrowserInteraction);
m_saveChanges = new QPushButton(tr("&Save Changes"));
m_cancel = new QPushButton(tr("&Cancel"));
@@ -107,6 +108,7 @@ LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDi
// hook up signals and slots
connect(m_lexiconName, SIGNAL(textEdited(const QString &)), this, SLOT(parametersChanged(const QString &)));
connect(m_addWordsFromFile, SIGNAL(clicked()), this, SLOT(addWordsFromFile()));
+ connect(m_clearAllWords, SIGNAL(clicked()), this, SLOT(loadOriginalDictionary()));
connect(m_saveChanges, SIGNAL(clicked()), this, SLOT(accept()));
connect(m_cancel, SIGNAL(clicked()), this, SLOT(reject()));
connect(m_deleteLexicon, SIGNAL(clicked()), this, SLOT(deleteLexicon()));
@@ -114,26 +116,13 @@ LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDi
setWindowTitle(tr("Configure Lexicon - Quackle"));
- Settings::populateComboFromFilenames(m_alphabetCombo, "alphabets", "");
+ Settings::populateComboFromFilenames(m_alphabetCombo, "alphabets", ".quackle_alphabet", "");
alphabetChanged(m_alphabetCombo->currentText());
- string dawgFileName = originalName.toStdString() + ".dawg";
- QString dawgFullFileName;
- 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));
- addWordsFromDawgFile(dawgFullFileName);
- }
- else
- m_deleteLexicon->setEnabled(false);
-
- updateLexiconInformation(true);
+ loadOriginalDictionary();
}
LexiconDialog::~LexiconDialog()
@@ -144,9 +133,11 @@ LexiconDialog::~LexiconDialog()
void LexiconDialog::deleteLexicon()
{
- delete m_wordFactory;
- m_wordFactory = NULL;
- updateLexiconInformation();
+ string lexiconNameStr = m_originalName.toStdString();
+ string filename = QUACKLE_DATAMANAGER->makeDataFilename("lexica", lexiconNameStr + ".dawg", true);
+ QFile(QString::fromStdString(filename)).remove();
+ m_deleted = true;
+ QDialog::accept();
}
void LexiconDialog::addWordsFromFile()
@@ -245,8 +236,40 @@ void LexiconDialog::addWordsFromTextFile(const QString &textFile)
}
}
+void LexiconDialog::loadOriginalDictionary()
+{
+ delete m_wordFactory;
+ m_wordFactory = NULL;
+ string dawgFileName = m_originalName.toStdString() + ".dawg";
+ QString dawgFullFileName;
+ if (!m_originalName.isEmpty())
+ dawgFullFileName = QString::fromStdString(Quackle::LexiconParameters::findDictionaryFile(dawgFileName));
+
+ if (!dawgFullFileName.isEmpty())
+ {
+ m_deleteLexicon->setEnabled(Quackle::LexiconParameters::hasUserDictionaryFile(dawgFileName));
+ m_lexiconInformation->setText(tr("Loading dictionary..."));
+ show();
+ qApp->processEvents();
+ addWordsFromDawgFile(dawgFullFileName);
+ }
+ else
+ m_deleteLexicon->setEnabled(false);
+
+ updateLexiconInformation(true);
+}
+
void LexiconDialog::accept()
{
+ string lexiconNameStr = m_lexiconName->text().toStdString();
+ string filename = QUACKLE_DATAMANAGER->makeDataFilename("lexica", lexiconNameStr + ".dawg", true);
+ m_lexiconInformation->setText(tr("Compressing and writing dictionary file...\nThis may take a few minutes."));
+ qApp->processEvents();
+ m_wordFactory->generate();
+ m_lexiconInformation->setText(tr("Writing dictionary file..."));
+ qApp->processEvents();
+ m_wordFactory->writeIndex(filename);
+ m_finalLexiconName = m_lexiconName->text();
QDialog::accept();
}
@@ -256,12 +279,6 @@ void LexiconDialog::updateLexiconInformation(bool firstTime)
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)
{
@@ -274,9 +291,7 @@ void LexiconDialog::updateLexiconInformation(bool firstTime)
if (firstTime)
m_originalHash = hash;
- text.append(tr("File name: "));
- text.append(tr("\n\nFile size: "));
- text.append(tr("\n\nWord count: "));
+ text.append(tr("Word count: "));
text.append(QString("%L1").arg(wordCount));
text.append("\n");
text.append(lengthText);
@@ -286,4 +301,5 @@ void LexiconDialog::updateLexiconInformation(bool firstTime)
m_lexiconInformation->setText(text);
m_saveChanges->setEnabled(hash != m_originalHash && !m_lexiconName->text().isEmpty());
+ m_clearAllWords->setEnabled(hash != m_originalHash);
}
diff --git a/quacker/lexicondialog.h b/quacker/lexicondialog.h
index fa80ec1..1f1605b 100644
--- a/quacker/lexicondialog.h
+++ b/quacker/lexicondialog.h
@@ -45,6 +45,9 @@ public:
~LexiconDialog();
virtual void accept();
+ bool itemWasDeleted() { return m_deleted; };
+ const QString &lexiconName() { return m_finalLexiconName; };
+
void updateLexiconInformation(bool firstTime = false);
protected slots:
@@ -52,6 +55,7 @@ protected slots:
void deleteLexicon();
void addWordsFromFile();
void alphabetChanged(const QString &);
+ void loadOriginalDictionary();
protected:
void addWordsFromDawgFile(const QString &dawgfile);
@@ -73,7 +77,8 @@ private:
QString m_originalName;
QString m_alphabetFileName;
QByteArray m_originalHash;
- QByteArray m_previousHash;
+ QString m_finalLexiconName;
+ bool m_deleted;
DawgFactory *m_wordFactory;
};
diff --git a/quacker/settings.cpp b/quacker/settings.cpp
index 3319955..6435605 100644
--- a/quacker/settings.cpp
+++ b/quacker/settings.cpp
@@ -107,7 +107,7 @@ void Settings::createGUI()
m_lexiconNameCombo = new QComboBox;
connect(m_lexiconNameCombo, SIGNAL(activated(const QString &)), this, SLOT(lexiconChanged(const QString &)));
- populateComboFromFilenames(m_lexiconNameCombo, "lexica", "lexicon");
+ populateComboFromFilenames(m_lexiconNameCombo, "lexica", ".dawg", "lexicon");
QLabel *lexiconNameLabel = new QLabel(tr("&Lexicon:"));
lexiconNameLabel->setBuddy(m_lexiconNameCombo);
@@ -118,7 +118,7 @@ void Settings::createGUI()
m_alphabetNameCombo = new QComboBox;
connect(m_alphabetNameCombo, SIGNAL(activated(const QString &)), this, SLOT(alphabetChanged(const QString &)));
- populateComboFromFilenames(m_alphabetNameCombo, "alphabets", "");
+ populateComboFromFilenames(m_alphabetNameCombo, "alphabets", ".quackle_alphabet", "");
QLabel *alphabetNameLabel = new QLabel(tr("&Alphabet:"));
alphabetNameLabel->setBuddy(m_alphabetNameCombo);
@@ -129,7 +129,7 @@ void Settings::createGUI()
m_themeNameCombo = new QComboBox;
connect(m_themeNameCombo, SIGNAL(activated(const QString &)), this, SLOT(themeChanged(const QString &)));
- populateComboFromFilenames(m_themeNameCombo, "themes", "");
+ populateComboFromFilenames(m_themeNameCombo, "themes", ".ini", "");
QLabel *themeNameLabel = new QLabel(tr("&Theme:"));
themeNameLabel->setBuddy(m_themeNameCombo);
@@ -140,7 +140,7 @@ void Settings::createGUI()
m_boardNameCombo = new QComboBox;
connect(m_boardNameCombo, SIGNAL(activated(const QString &)), this, SLOT(boardChanged(const QString &)));
- populateComboFromFilenames(m_boardNameCombo, "boards", "board");
+ populateComboFromFilenames(m_boardNameCombo, "boards", "", "board");
QLabel *boardNameLabel = new QLabel(tr("&Board:"));
boardNameLabel->setBuddy(m_boardNameCombo);
@@ -172,6 +172,8 @@ void Settings::createGUI()
void Settings::load()
{
m_lexiconNameCombo->setCurrentIndex(m_lexiconNameCombo->findText(QuackleIO::Util::stdStringToQString(QUACKLE_LEXICON_PARAMETERS->lexiconName())));
+ if (m_lexiconNameCombo->currentIndex() == -1)
+ m_lexiconNameCombo->setCurrentIndex(m_lexiconNameCombo->findText(QuackleIO::Util::stdStringToQString(QUACKLE_LEXICON_PARAMETERS->lexiconName()) + "*"));
m_lastGoodLexiconValue = m_lexiconNameCombo->currentIndex();
m_alphabetNameCombo->setCurrentIndex(m_alphabetNameCombo->findText(QuackleIO::Util::stdStringToQString(QUACKLE_ALPHABET_PARAMETERS->alphabetName())));
m_themeNameCombo->setCurrentIndex(m_themeNameCombo->findText(m_themeName));
@@ -269,12 +271,12 @@ void Settings::setQuackleToUseLexiconName(const QString &lexiconName)
else
QUACKLE_LEXICON_PARAMETERS->loadGaddag(gaddagFile);
- if (!QUACKLE_LEXICON_PARAMETERS->hasGaddag())
- {
- gaddagFile = QUACKLE_DATAMANAGER->makeDataFilename("lexica", lexiconNameStr + ".gaddag", true);
- buildGaddag(gaddagFile);
- QUACKLE_LEXICON_PARAMETERS->loadGaddag(gaddagFile);
- }
+ // if (!QUACKLE_LEXICON_PARAMETERS->hasGaddag())
+ // {
+ // gaddagFile = QUACKLE_DATAMANAGER->makeDataFilename("lexica", lexiconNameStr + ".gaddag", true);
+ // buildGaddag(gaddagFile);
+ // QUACKLE_LEXICON_PARAMETERS->loadGaddag(gaddagFile);
+ // }
QUACKLE_STRATEGY_PARAMETERS->initialize(lexiconNameStr);
}
@@ -342,6 +344,9 @@ void Settings::setQuackleToUseBoardName(const QString &boardName)
void Settings::lexiconChanged(const QString &lexiconName)
{
+ QString lexicon = lexiconName;
+ if (lexicon.endsWith("*"))
+ lexicon.truncate(lexicon.size() - 1);
if (m_lexiconNameCombo->currentIndex() == m_lexiconNameCombo->count() - 1)
{
editLexicon();
@@ -350,11 +355,11 @@ void Settings::lexiconChanged(const QString &lexiconName)
m_lexiconNameCombo->setCurrentIndex(m_lastGoodLexiconValue);
return;
}
- setQuackleToUseLexiconName(lexiconName);
+ setQuackleToUseLexiconName(lexicon);
m_lastGoodLexiconValue = m_lexiconNameCombo->currentIndex();
CustomQSettings settings;
- settings.setValue("quackle/settings/lexicon-name", lexiconName);
+ settings.setValue("quackle/settings/lexicon-name", lexicon);
emit refreshViews();
}
@@ -465,9 +470,6 @@ void Settings::editBoard()
void Settings::loadBoardNameCombo()
{
- if (m_lexiconNameCombo == 0)
- return;
-
while (m_boardNameCombo->count() > 0)
m_boardNameCombo->removeItem(0);
@@ -489,12 +491,30 @@ void Settings::loadBoardNameCombo()
void Settings::editLexicon()
{
QString name = m_lexiconNameCombo->currentText();
+ if (name.endsWith("*"))
+ name.truncate(name.size() - 1);
if (m_lexiconNameCombo->currentIndex() == m_lexiconNameCombo->count() - 1)
name = "";
LexiconDialog dialog(this, name);
if (dialog.exec())
{
- populateComboFromFilenames(m_lexiconNameCombo, "lexica", "lexicon");
+ populateComboFromFilenames(m_lexiconNameCombo, "lexica", ".dawg", "lexicon");
+ qApp->processEvents();
+ if (dialog.itemWasDeleted())
+ {
+ m_lexiconNameCombo->setCurrentIndex(m_lexiconNameCombo->findText(name));
+ QUACKLE_LEXICON_PARAMETERS->setLexiconName(""); // force lexicon to reload
+ QUACKLE_LEXICON_PARAMETERS->unloadAll();
+ if (m_lexiconNameCombo->currentIndex() != -1)
+ setQuackleToUseLexiconName(name);
+ }
+ else if (!dialog.lexiconName().isEmpty())
+ {
+ QUACKLE_LEXICON_PARAMETERS->setLexiconName(""); // force lexicon to reload
+ QUACKLE_LEXICON_PARAMETERS->unloadAll();
+ setQuackleToUseLexiconName(dialog.lexiconName());
+ m_lexiconNameCombo->setCurrentIndex(m_lexiconNameCombo->findText(name + "*"));
+ }
load();
}
}
@@ -508,7 +528,7 @@ void Settings::editAlphabet()
AlphabetDialog dialog(this);
if (dialog.exec())
{
- populateComboFromFilenames(m_alphabetNameCombo, "alphabets", "alphabet");
+ populateComboFromFilenames(m_alphabetNameCombo, "alphabets", ".quackle_alphabet", "alphabet");
load();
}
#endif // 0
@@ -529,8 +549,11 @@ void Settings::editTheme()
#endif // 0
}
-void Settings::populateComboFromFilenames(QComboBox* combo, const QString &path, const QString &label)
+void Settings::populateComboFromFilenames(QComboBox* combo, const QString &path, const QString &extension, const QString &label)
{
+ while (combo->count() > 0)
+ combo->removeItem(0);
+
QStringList fileList;
QDir dir(self()->m_appDataDir);
if (dir.cd(path))
@@ -547,6 +570,8 @@ void Settings::populateComboFromFilenames(QComboBox* combo, const QString &path,
for (i = fileList.begin(); i != fileList.end(); ++i)
{
fileName = *i;
+ if (!fileName.endsWith(extension))
+ continue;
periodPos = fileName.indexOf('.');
if (periodPos)
{
@@ -555,14 +580,13 @@ void Settings::populateComboFromFilenames(QComboBox* combo, const QString &path,
}
}
- for (i = fileList.begin(); i != fileList.end(); ++i)
+ for (i = list.begin(); i != list.end(); ++i)
{
- QStringList::iterator j = i;
- for (++j; j != fileList.end(); ++j)
+ for (QStringList::iterator j = i + 1; j != list.end(); ++j)
{
if (*i == *j)
{
- *i = "* " + *i;
+ *i = *i + "*";
list.erase(j);
break;
}
diff --git a/quacker/settings.h b/quacker/settings.h
index 7c5738e..babea3c 100644
--- a/quacker/settings.h
+++ b/quacker/settings.h
@@ -42,7 +42,7 @@ public:
static Settings *self();
// load up an item list based on a list of filenames
- static void populateComboFromFilenames(QComboBox* combo, const QString &path, const QString &label);
+ static void populateComboFromFilenames(QComboBox* combo, const QString &path, const QString &extension, const QString &label);
signals:
void refreshViews();