summaryrefslogtreecommitdiff
path: root/quacker
diff options
context:
space:
mode:
Diffstat (limited to 'quacker')
-rw-r--r--quacker/lexicondialog.cpp43
-rw-r--r--quacker/lexicondialog.h11
2 files changed, 51 insertions, 3 deletions
diff --git a/quacker/lexicondialog.cpp b/quacker/lexicondialog.cpp
index 9d1998c..f9c6399 100644
--- a/quacker/lexicondialog.cpp
+++ b/quacker/lexicondialog.cpp
@@ -25,9 +25,10 @@
#include "customqsettings.h"
#include "settings.h"
#include "geometry.h"
+#include "quackleio/dawgfactory.h"
-
-LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDialog(parent)
+LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDialog(parent),
+ m_wordFactory(NULL)
{
m_originalName = originalName;
@@ -117,7 +118,45 @@ void LexiconDialog::deleteLexicon()
void LexiconDialog::addWordsFromFile()
{
+ QFileDialog browser(this, tr("Choose a file containing words to be added to the lexicon..."));
+}
+
+void LexiconDialog::addWordsFromDawg(const string &dawgfile, const string &alphabetfile)
+{
+ delete m_wordFactory;
+ m_wordFactory = NULL;
+
+ LexiconParameters lexParams;
+ lexParams.loadDawg(dawgfile);
+ if (!lexParams.hasDawg())
+ return;
+ m_wordFactory = new DawgFactory(alphabetfile);
+ Quackle::LetterString word;
+
+ addWordsFromDawgRecursive(lexParams, word, 1);
+}
+
+void LexiconDialog::addWordsFromDawgRecursive(const LexiconParameters &lexParams, Quackle::LetterString &word, int index)
+{
+ unsigned int p;
+ Quackle::Letter letter;
+ bool t;
+ bool lastchild;
+ bool british;
+ int playability;
+
+ do
+ {
+ lexParams.dawgAt(index, p, letter, t, lastchild, british, playability);
+ word.push_back(letter);
+ if (t)
+ m_wordFactory->pushWord(word, !british, playability);
+ if (p)
+ addWordsFromDawgRecursive(lexParams, word, p);
+ index++;
+ word.pop_back();
+ } while (!lastchild);
}
void LexiconDialog::accept()
diff --git a/quacker/lexicondialog.h b/quacker/lexicondialog.h
index cdc0a59..573d48b 100644
--- a/quacker/lexicondialog.h
+++ b/quacker/lexicondialog.h
@@ -20,17 +20,20 @@
#define QUACKER_LEXICONDIALOG_H
#include <string>
-#include <game.h>
+#include "game.h"
+#include "lexiconparameters.h"
#include <QWidget>
#include <QDialog>
using namespace std;
+using namespace Quackle;
class QComboBox;
class QLabel;
class QLineEdit;
class QPushButton;
+class DawgFactory;
class LexiconDialog : public QDialog
{
@@ -47,6 +50,10 @@ protected slots:
void deleteLexicon();
void addWordsFromFile();
+protected:
+ void addWordsFromDawg(const string &dawgfile, const string &alphabetfile);
+ void addWordsFromDawgRecursive(const LexiconParameters &lexParams, Quackle::LetterString &word, int index);
+
private:
QLineEdit *m_lexiconName;
QComboBox *m_alphabetCombo;
@@ -59,6 +66,8 @@ private:
QPushButton *m_deleteLexicon;
QString m_originalName;
+
+ DawgFactory *m_wordFactory;
};
#endif