ui v3 to 4
[kdeaccessibility.git] / kmouth / wordcompletion / dictionarycreationwizard.cpp
blobea80a6a67acb078d649fdf093d04f85e0766e7f7
1 /***************************************************************************
2 wordcompletionwidget.cpp - description
3 -------------------
4 begin : Tue Apr 29 2003
5 copyright : (C) 2002 by Gunnar Schmi Dt
6 email : kmouth@schmi-dt.de
7 ***************************************************************************/
9 /***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
18 #include <QLayout>
19 #include <QLabel>
20 #include <QCheckBox>
21 #include <QRadioButton>
22 #include <QLineEdit>
23 #include <QComboBox>
24 #include <QTextCodec>
26 //Added by qt3to4:
27 #include <QTextStream>
28 #include <QGridLayout>
30 #include <k3listview.h>
31 #include <klineedit.h>
32 #include <kurlrequester.h>
33 #include <klocale.h>
34 #include <kcombobox.h>
35 #include <ksconfig.h>
36 #include <kapplication.h>
37 #include <kstandarddirs.h>
38 #include <kprogressbar.h>
39 #include <kconfig.h>
40 #include <kprogressdialog.h>
41 #include "dictionarycreationwizard.h"
42 #include "klanguagebutton.h"
43 #include "klanguagebuttonhelper.h"
44 #include "wordlist.h"
46 DictionaryCreationWizard::DictionaryCreationWizard (QWidget *parent, const char *name,
47 QStringList dictionaryNames, QStringList dictionaryFiles,
48 QStringList dictionaryLanguages)
49 : K3Wizard (parent, name)
51 buildCodecList ();
53 creationSource = new CreationSourceWidget(this, "source page");
54 addPage (creationSource, i18n("Source of New Dictionary (1)"));
55 setHelpEnabled (creationSource, false);
56 setFinishEnabled (creationSource, false);
58 fileWidget= new CreationSourceDetailsWidget (this, "file source page");
59 addPage (fileWidget, i18n("Source of New Dictionary (2)"));
60 buildCodecCombo (fileWidget->encodingCombo);
62 dirWidget= new CreationSourceDetailsWidget (this, "directory source page");
63 addPage (dirWidget, i18n("Source of New Dictionary (2)"));
64 dirWidget->urlLabel->setText (i18n("&Directory:"));
65 dirWidget->urlLabel->setWhatsThis( i18n("With this input field you specify which directory you want to load for creating the new dictionary."));
66 dirWidget->url->setMode(KFile::Directory);
67 dirWidget->url->setWhatsThis( i18n("With this input field you specify which directory you want to load for creating the new dictionary."));
68 buildCodecCombo (dirWidget->encodingCombo);
70 kdeDocWidget= new KDEDocSourceWidget (this, "KDE documentation source page");
71 addPage (kdeDocWidget, i18n("Source of New Dictionary (2)"));
72 loadLanguageList(kdeDocWidget->languageButton);
74 mergeWidget = new MergeWidget (this, "merge source page", dictionaryNames, dictionaryFiles, dictionaryLanguages);
75 addPage (mergeWidget, i18n("Source of New Dictionary (2)"));
77 connect (creationSource->fileButton, SIGNAL (toggled(bool)), this, SLOT(calculateAppropriate(bool)) );
78 connect (creationSource->directoryButton,SIGNAL(toggled(bool)), this, SLOT(calculateAppropriate(bool)) );
79 connect (creationSource->kdeDocButton, SIGNAL (toggled(bool)), this, SLOT(calculateAppropriate(bool)) );
80 connect (creationSource->mergeButton, SIGNAL (toggled(bool)), this, SLOT(calculateAppropriate(bool)) );
81 connect (creationSource->emptyButton, SIGNAL (toggled(bool)), this, SLOT(calculateAppropriate(bool)) );
83 calculateAppropriate (true);
86 DictionaryCreationWizard::~DictionaryCreationWizard () {
87 delete codecList;
88 removePage (fileWidget); delete fileWidget;
89 removePage (dirWidget); delete dirWidget;
90 removePage (kdeDocWidget); delete kdeDocWidget;
91 removePage (mergeWidget); delete mergeWidget;
94 void DictionaryCreationWizard::buildCodecList () {
95 codecList = new QList<QTextCodec*>;
96 QList<QByteArray> availableCodecs = QTextCodec::availableCodecs();
97 for (int i = 0; i < availableCodecs.count(); ++i) {
98 QTextCodec *codec = QTextCodec::codecForName(availableCodecs[i]);
99 codecList->append (codec);
103 void DictionaryCreationWizard::buildCodecCombo (QComboBox *combo) {
104 QString local = i18n("Local")+" (";
105 local += QTextCodec::codecForLocale()->name();
106 local += ")";
107 combo->addItem (local, 0);
108 combo->addItem (i18n("Latin1"), 1);
109 combo->addItem (i18n("Unicode"), 2);
110 for (int i = 0; i < codecList->count(); i++ )
111 combo->addItem (codecList->at(i)->name(), i+3);
114 void DictionaryCreationWizard::calculateAppropriate (bool) {
115 if (creationSource->mergeButton->isChecked()) {
116 setFinishEnabled (creationSource, false);
117 removePage (fileWidget);
118 removePage (dirWidget);
119 removePage (kdeDocWidget);
120 addPage (mergeWidget, i18n("Source of New Dictionary (2)"));
121 setHelpEnabled (mergeWidget, false);
122 setFinishEnabled (mergeWidget, true);
124 else if (creationSource->emptyButton->isChecked()) {
125 removePage (fileWidget);
126 removePage (dirWidget);
127 removePage (kdeDocWidget);
128 removePage (mergeWidget);
129 setFinishEnabled (creationSource, true);
131 else if (creationSource->fileButton->isChecked()) {
132 setFinishEnabled (creationSource, false);
133 removePage (dirWidget);
134 removePage (kdeDocWidget);
135 removePage (mergeWidget);
136 addPage (fileWidget, i18n("Source of New Dictionary (2)"));
137 setHelpEnabled (fileWidget, false);
138 setFinishEnabled (fileWidget, true);
140 else if (creationSource->directoryButton->isChecked()) {
141 setFinishEnabled (creationSource, false);
142 removePage (fileWidget);
143 removePage (kdeDocWidget);
144 removePage (mergeWidget);
145 addPage (dirWidget, i18n("Source of New Dictionary (2)"));
146 setHelpEnabled (dirWidget, false);
147 setFinishEnabled (dirWidget, true);
149 else { // creationSource->kdeDocButton must be checked
150 setFinishEnabled (creationSource, false);
151 removePage (fileWidget);
152 removePage (dirWidget);
153 removePage (mergeWidget);
154 addPage (kdeDocWidget, i18n("Source of New Dictionary (2)"));
155 setHelpEnabled (kdeDocWidget, false);
156 setFinishEnabled (kdeDocWidget, true);
160 QString DictionaryCreationWizard::createDictionary() {
161 WordList::WordMap map;
162 QString dicFile = "";
163 KProgressDialog *pdlg = WordList::progressDialog();
165 if (creationSource->mergeButton->isChecked()) {
166 map = WordList::mergeFiles (mergeWidget->mergeParameters(), pdlg);
167 dicFile.clear();
169 else if (creationSource->emptyButton->isChecked()) {
170 dicFile.clear();
172 else if (creationSource->fileButton->isChecked()) {
173 QString filename = fileWidget->url->url().path();
174 int encoding = fileWidget->encodingCombo->currentIndex();
175 if (fileWidget->spellCheckBox->isChecked())
176 dicFile = fileWidget->ooDictURL->url().path();
177 switch (encoding) {
178 case 0:
179 map = WordList::parseFile (filename, QTextStream::Locale, 0, pdlg);
180 break;
181 case 1:
182 map = WordList::parseFile (filename, QTextStream::Latin1, 0, pdlg);
183 break;
184 case 2:
185 map = WordList::parseFile (filename, QTextStream::Unicode, 0, pdlg);
186 break;
187 default:
188 map = WordList::parseFile (filename, (QTextStream::Encoding)0, codecList->at(encoding-3), pdlg);
191 else if (creationSource->directoryButton->isChecked()) {
192 QString directory = dirWidget->url->url().path();
193 int encoding = dirWidget->encodingCombo->currentIndex();
194 if (dirWidget->spellCheckBox->isChecked())
195 dicFile = dirWidget->ooDictURL->url().path();
196 switch (encoding) {
197 case 0:
198 map = WordList::parseDir (directory, QTextStream::Locale, 0, pdlg);
199 break;
200 case 1:
201 map = WordList::parseDir (directory, QTextStream::Latin1, 0, pdlg);
202 break;
203 case 2:
204 map = WordList::parseDir (directory, QTextStream::Unicode, 0, pdlg);
205 break;
206 default:
207 map = WordList::parseDir (directory, (QTextStream::Encoding)0, codecList->at(encoding-3), pdlg);
210 else { // creationSource->kdeDocButton must be checked
211 QString language = kdeDocWidget->languageButton->current();
212 if (kdeDocWidget->spellCheckBox->isChecked())
213 dicFile = kdeDocWidget->ooDictURL->url().path();
214 map = WordList::parseKDEDoc (language, pdlg);
217 if (!dicFile.isEmpty() && !dicFile.isNull())
218 map = WordList::spellCheck (map, dicFile, pdlg);
219 pdlg->close();
220 delete pdlg;
222 int dictnumber = 0;
223 QString filename;
224 QString dictionaryFile;
225 do {
226 dictnumber++;
227 filename = QString("wordcompletion%1.dict").arg(dictnumber);
228 dictionaryFile = KApplication::kApplication()->dirs()->findResource("appdata", filename);
230 while (KStandardDirs::exists(dictionaryFile));
232 dictionaryFile = KApplication::kApplication()->dirs()->saveLocation ("appdata", "/") + filename;
233 if (WordList::saveWordList (map, dictionaryFile))
234 return filename;
235 else
236 return "";
239 QString DictionaryCreationWizard::name() {
240 if (creationSource->mergeButton->isChecked()) {
241 return i18n("Merge result");
243 else if (creationSource->emptyButton->isChecked()) {
244 return i18nc("In the sense of a blank word list", "Empty list");
246 else if (creationSource->fileButton->isChecked()) {
247 return fileWidget->url->url().path();
249 else if (creationSource->directoryButton->isChecked()) {
250 return dirWidget->url->url().path();
252 else { // creationSource->kdeDocButton must be checked
253 return i18n("KDE Documentation");
257 QString DictionaryCreationWizard::language() {
258 if (creationSource->mergeButton->isChecked()) {
259 return mergeWidget->language();
261 else if (creationSource->emptyButton->isChecked()) {
262 if (KGlobal::locale())
263 return KGlobal::locale()->language();
264 else
265 return KLocale::defaultLanguage();
267 else if (creationSource->fileButton->isChecked()) {
268 return fileWidget->languageButton->current();
270 else if (creationSource->directoryButton->isChecked()) {
271 return dirWidget->languageButton->current();
273 else { // creationSource->kdeDocButton must be checked
274 return kdeDocWidget->languageButton->current();
278 /***************************************************************************/
280 MergeWidget::MergeWidget(K3Wizard *parent, const char *name,
281 QStringList dictionaryNames, QStringList dictionaryFiles,
282 QStringList dictionaryLanguages)
283 : Q3ScrollView (parent, name) {
284 dictionaries.setAutoDelete (false);
285 weights.setAutoDelete (false);
287 QWidget *contents = new QWidget(viewport());
288 addChild(contents);
289 QGridLayout *layout = new QGridLayout (contents);
290 setResizePolicy (Q3ScrollView::AutoOneFit);
291 layout->setColumnStretch (0, 0);
292 layout->setColumnStretch (1, 1);
294 int row = 0;
295 QStringList::Iterator nIt = dictionaryNames.begin();
296 QStringList::Iterator fIt = dictionaryFiles.begin();
297 QStringList::Iterator lIt = dictionaryLanguages.begin();
298 for (; nIt != dictionaryNames.end(); ++nIt, ++fIt, ++lIt) {
299 QCheckBox *checkbox = new QCheckBox(*nIt, contents);
300 KIntNumInput *numInput = new KIntNumInput(contents);
301 layout->addWidget (checkbox, row, 0);
302 layout->addWidget (numInput, row, 1);
304 checkbox->setChecked (true);
305 numInput->setRange (1, 100, 10, true);
306 numInput->setValue (100);
307 connect (checkbox, SIGNAL (toggled(bool)), numInput, SLOT(setEnabled(bool)));
309 dictionaries.insert(*fIt, checkbox);
310 weights.insert(*fIt, numInput);
311 languages [*fIt] = *lIt;
312 row++;
316 MergeWidget::~MergeWidget() {
319 QMap <QString, int> MergeWidget::mergeParameters () {
320 QMap <QString, int> files;
321 Q3DictIterator<QCheckBox> it(dictionaries);
322 for (; it.current(); ++it) {
323 if (it.current()->isChecked()) {
324 QString name = it.currentKey();
325 QString dictionaryFile = KApplication::kApplication()->dirs()->findResource("appdata", name);
326 files[dictionaryFile] = weights[name]->value();
330 return files;
333 QString MergeWidget::language () {
334 Q3DictIterator<QCheckBox> it(dictionaries);
335 for (; it.current(); ++it) {
336 if (it.current()->isChecked()) {
337 return languages [it.currentKey()];
341 return QString();
344 /***************************************************************************/
346 CompletionWizardWidget::CompletionWizardWidget (K3Wizard *parent, const char *name)
347 : QWidget (parent) {
348 setupUi(this);
349 setObjectName(name);
352 CompletionWizardWidget::~CompletionWizardWidget() {
355 void CompletionWizardWidget::ok (KConfig *config) {
356 WordList::WordMap map;
357 KProgressDialog *pdlg = WordList::progressDialog();
359 QString language = languageButton->current();
360 map = WordList::parseKDEDoc (language, pdlg);
362 if (spellCheckBox->isChecked())
363 map = WordList::spellCheck (map, ooDictURL->url().path(), pdlg);
365 pdlg->close();
366 delete pdlg;
368 QString filename;
369 QString dictionaryFile;
371 dictionaryFile = KApplication::kApplication()->dirs()->saveLocation ("appdata", "/") + "wordcompletion1.dict";
372 if (WordList::saveWordList (map, dictionaryFile)) {
373 config->setGroup("Dictionary 0");
374 config->writeEntry ("Filename", "wordcompletion1.dict");
375 config->writeEntry ("Name", i18n("Default"));
376 config->writeEntry ("Language", language);
377 config->sync();
381 #include "dictionarycreationwizard.moc"