]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/GuiSpellchecker.cpp
Add session support to spell-checking and search dialogs.
[lyx.git] / src / frontends / qt4 / GuiSpellchecker.cpp
1 /**
2  * \file GuiSpellchecker.cpp
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author John Levon
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "GuiSpellchecker.h"
14
15 #include "ControlSpellchecker.h"
16 #include "qt_helpers.h"
17
18 #include <QProgressBar>
19 #include <QLineEdit>
20 #include <QPushButton>
21 #include <QListWidget>
22 #include <QListWidgetItem>
23 #include <QCloseEvent>
24 #include <QSyntaxHighlighter>
25 #include <QTextCharFormat>
26 #include <QTextDocument>
27
28
29 using std::string;
30
31 namespace lyx {
32 namespace frontend {
33
34 GuiSpellcheckerDialog::GuiSpellcheckerDialog(LyXView & lv)
35         : GuiDialog(lv, "spellchecker")
36 {
37         setupUi(this);
38         setViewTitle(_("Spellchecker"));
39         setController(new ControlSpellchecker(*this));
40
41         connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose()));
42
43         connect(replaceCO, SIGNAL(highlighted(const QString &)),
44                 this, SLOT(replaceChanged(const QString &)));
45         connect(replacePB, SIGNAL(clicked()),
46                 this, SLOT(replaceClicked()));
47         connect(ignorePB, SIGNAL(clicked()),
48                 this, SLOT(ignoreClicked()));
49         connect(replacePB_3, SIGNAL(clicked()),
50                 this, SLOT(acceptClicked()));
51         connect(addPB, SIGNAL(clicked()),
52                 this, SLOT(addClicked()));
53         connect(suggestionsLW, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
54                 this, SLOT(replaceClicked() ) );
55         connect(suggestionsLW, SIGNAL(itemClicked(QListWidgetItem*)),
56                 this, SLOT(suggestionChanged(QListWidgetItem*)));
57
58         wordED->setReadOnly(true);
59
60         bc().setPolicy(ButtonPolicy::NoRepeatedApplyReadOnlyPolicy);
61         bc().setCancel(closePB);
62 }
63
64
65 ControlSpellchecker & GuiSpellcheckerDialog::controller()
66 {
67         return static_cast<ControlSpellchecker &>(GuiDialog::controller());
68 }
69
70
71 void GuiSpellcheckerDialog::acceptClicked()
72 {
73         accept();
74 }
75
76
77 void GuiSpellcheckerDialog::addClicked()
78 {
79         add();
80 }
81
82
83 void GuiSpellcheckerDialog::replaceClicked()
84 {
85         replace();
86 }
87
88
89 void GuiSpellcheckerDialog::ignoreClicked()
90 {
91         ignore();
92 }
93
94
95 void GuiSpellcheckerDialog::suggestionChanged(QListWidgetItem * item)
96 {
97         if (replaceCO->count() != 0)
98                 replaceCO->setItemText(0, item->text());
99         else
100                 replaceCO->addItem(item->text());
101
102         replaceCO->setCurrentIndex(0);
103 }
104
105
106 void GuiSpellcheckerDialog::replaceChanged(const QString & str)
107 {
108         if (suggestionsLW->currentItem()->text() == str)
109                 return;
110
111         for (int i = 0; i < suggestionsLW->count(); ++i) {
112                 if (suggestionsLW->item(i)->text() == str) {
113                         suggestionsLW->setCurrentRow(i);
114                         break;
115                 }
116         }
117 }
118
119
120 void GuiSpellcheckerDialog::closeEvent(QCloseEvent * e)
121 {
122         slotClose();
123         GuiDialog::closeEvent(e);
124 }
125
126
127 void GuiSpellcheckerDialog::reject()
128 {
129         slotClose();
130         QDialog::reject();
131 }
132
133
134 void GuiSpellcheckerDialog::updateContents()
135 {
136         if (isVisibleView() || controller().exitEarly())
137                 controller().check();
138 }
139
140
141 void GuiSpellcheckerDialog::accept()
142 {
143         controller().ignoreAll();
144 }
145
146
147 void GuiSpellcheckerDialog::add()
148 {
149         controller().insert();
150 }
151
152
153 void GuiSpellcheckerDialog::ignore()
154 {
155         controller().check();
156 }
157
158
159 void GuiSpellcheckerDialog::replace()
160 {
161         controller().replace(qstring_to_ucs4(replaceCO->currentText()));
162 }
163
164
165 void GuiSpellcheckerDialog::partialUpdate(int state)
166 {
167         switch (state) {
168                 case ControlSpellchecker::SPELL_PROGRESSED:
169                         spellcheckPR->setValue(controller().getProgress());
170                         break;
171
172                 case ControlSpellchecker::SPELL_FOUND_WORD: {
173                         wordED->setText(toqstr(controller().getWord()));
174                         suggestionsLW->clear();
175
176                         docstring w;
177                         while (!(w = controller().getSuggestion()).empty())
178                                 suggestionsLW->addItem(toqstr(w));
179
180                         if (suggestionsLW->count() == 0)
181                                 suggestionChanged(new QListWidgetItem(wordED->text()));
182                         else
183                                 suggestionChanged(suggestionsLW->item(0));
184
185                         suggestionsLW->setCurrentRow(0);
186                         break;
187                 }
188         }
189 }
190
191 } // namespace frontend
192 } // namespace lyx
193
194 #include "GuiSpellchecker_moc.cpp"