1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
/*
* Quackle -- Crossword game artificial intelligence and analysis tool
* Copyright (C) 2005-2019 Jason Katz-Brown, John O'Laughlin, and John Fultz.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef QUACKLE_LISTER_H
#define QUACKLE_LISTER_H
#include <qdialog.h>
#include <qframe.h>
#include <quackleio/dict.h>
class QCheckBox;
class QLabel;
class QLineEdit;
class QListWidget;
class QListWidgetItem;
class QPushButton;
class QSettings;
class QSpinBox;
class QVBoxLayout;
class Filter;
class ListerDialog : public QDialog
{
Q_OBJECT
public:
enum ListerFlags { FullLister = 0x0000, IgnoreBritishness = 0x0001, ProbabilityInsteadOfPlayability = 0x0002, NothingToReturn = 0x0004 };
ListerDialog(QWidget *parent, const QString &settingsGroup, const QString &appName = QString::null, int flags = FullLister);
~ListerDialog();
// use this for modal running! settingsGroup is like "letterbox"
static QString run(QWidget *parent, const QString &settingsGroup, const QString &appName = QString::null, int flags = FullLister);
Dict::WordList &wordList();
void setWordList(Dict::WordList list);
// map of alphagrams to words
QMap<QString, Dict::WordList> anagramMap();
QString writeList(bool alphagrams);
QString filename() { return m_filename; }
int flags() { return m_flags; }
static QSpinBox *makeSpinBox(int minimum, int maximum, int singleStep);
public slots:
void setQuery(const QString &query);
void queryGo();
void setRemoveSowpods(bool on);
// makes filter widget and save/load settings exactly once
void showFilter(const QString &filterName);
void showFilter(QListWidgetItem *item);
void chooseFilename();
void filenameChanged(const QString &);
void clear();
void openFile();
void writeButtonClicked();
void writeNormalButtonClicked();
void studyButtonClicked();
QString windowTitleWithAppName(const QString &windowTitle);
void accept();
protected:
Dict::WordList m_wordList;
QString m_settingsGroup;
QString m_appName;
int m_flags;
void saveSettings();
void loadSettings();
void resetFocus();
void populateListBox();
private:
// left side
QLineEdit *m_queryEdit;
QPushButton *m_queryButton;
QPushButton *m_closeButton;
QLabel *m_numResultsLabel;
QCheckBox *m_sowpodsChecker;
QCheckBox *m_buildChecker;
// right side
QListWidget *m_filtersBox;
QVBoxLayout *m_filtersLayout;
Filter *m_currentFilter;
QPushButton *m_applyButton;
// bottom
QLineEdit *m_filenameEdit;
QPushButton *m_writeButton;
QPushButton *m_writeNormalButton;
QPushButton *m_studyThisButton;
QListWidget *m_listBox;
QString m_filename;
};
class Filter : public QFrame
{
Q_OBJECT
public:
Filter(ListerDialog *dialog);
public slots:
virtual void apply();
virtual void saveSettings(QSettings *settings);
virtual void loadSettings(QSettings *settings);
protected:
ListerDialog *m_dialog;
QVBoxLayout *m_vbox;
};
class RegexFilter : public Filter
{
Q_OBJECT
public:
RegexFilter(ListerDialog *dialog);
public slots:
virtual void apply();
private:
QLineEdit *m_lineEdit;
};
class PlayabilityFilter : public Filter
{
Q_OBJECT
public:
PlayabilityFilter(ListerDialog *dialog);
public slots:
virtual void apply();
virtual void saveSettings(QSettings *settings);
virtual void loadSettings(QSettings *settings);
private:
QSpinBox *m_minRankSpinner;
QSpinBox *m_maxRankSpinner;
};
class NumAnagramsFilter : public Filter
{
Q_OBJECT
public:
NumAnagramsFilter(ListerDialog *dialog);
public slots:
virtual void apply();
virtual void saveSettings(QSettings *settings);
virtual void loadSettings(QSettings *settings);
private:
QSpinBox *m_twlAnagramsSpinner;
QSpinBox *m_oswOnlyAnagramsSpinner;
};
class KeepBritishFilter : public Filter
{
Q_OBJECT
public:
KeepBritishFilter(ListerDialog *dialog);
public slots:
virtual void apply();
};
#endif
|