diff options
Diffstat (limited to 'kmouth/wordcompletion/wordcompletionwidget.cpp')
-rw-r--r-- | kmouth/wordcompletion/wordcompletionwidget.cpp | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/kmouth/wordcompletion/wordcompletionwidget.cpp b/kmouth/wordcompletion/wordcompletionwidget.cpp new file mode 100644 index 0000000..e5eab23 --- /dev/null +++ b/kmouth/wordcompletion/wordcompletionwidget.cpp @@ -0,0 +1,325 @@ +/*************************************************************************** + wordcompletionwidget.cpp - description + ------------------- + begin : Tue Apr 29 2003 + copyright : (C) 2002 by Gunnar Schmi Dt + email : kmouth@schmi-dt.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include <qlayout.h> +#include <qlabel.h> +#include <qcheckbox.h> +#include <qlineedit.h> + +#include <klistview.h> +#include <klineedit.h> +#include <kurlrequester.h> +#include <klocale.h> +#include <kglobal.h> +#include <kstandarddirs.h> +#include <kconfig.h> +#include <ksimpleconfig.h> +#include <kfiledialog.h> +#include <kio/netaccess.h> +#include <kmessagebox.h> + +#include "dictionarycreationwizard.h" +#include "wordcompletionwidget.h" +#include "wordcompletion.h" +#include "klanguagebutton.h" + +class DictionaryListItem : public KListViewItem { +public: + DictionaryListItem (QListView *parent, QString filename, QString name, QString language, QString languageCode) + : KListViewItem (parent, name) { + setFilename (filename); + setLanguage (language, languageCode); + }; + DictionaryListItem (QListView *parent, QString filename, QString name, QString languageCode) + : KListViewItem (parent, name) { + setFilename (filename); + setLanguage (languageCode); + }; + DictionaryListItem (QListView *parent, QListViewItem *after, QString filename, QString name, QString languageCode) + : KListViewItem (parent, after, name) { + setFilename (filename); + setLanguage (languageCode); + }; + ~DictionaryListItem () { + }; + + QString filename() { + return myFilename; + } + + QString languageCode() { + return myLanguageCode; + } + + void setFilename(QString filename) { + myFilename = filename; + } + + void setLanguage (QString languageCode) { + QString filename = KGlobal::dirs()->findResource("locale", + languageCode + QString::fromLatin1("/entry.desktop")); + + KSimpleConfig entry(filename); + entry.setGroup(QString::fromLatin1("KCM Locale")); + QString name = entry.readEntry(QString::fromLatin1("Name"), i18n("without name")); + setLanguage (name + " (" + languageCode + ")", languageCode); + } + + void setLanguage (QString name, QString languageCode) { + myLanguageCode = languageCode; + setText (1, name); + } + +private: + QString myFilename; + QString myLanguageCode; +}; + +/***************************************************************************/ + +WordCompletionWidget::WordCompletionWidget(QWidget *parent, const char *name) : WordCompletionUI (parent, name) { + dictionaryList->setSorting (-1); // no sorted list + + // Connect the signals from hte KCMKTTSDWidget to this class + connect (addButton, SIGNAL (clicked()), this, SLOT(addDictionary()) ); + connect (deleteButton, SIGNAL (clicked()), this, SLOT (deleteDictionary()) ); + connect (moveUpButton, SIGNAL (clicked()), this, SLOT (moveUp()) ); + connect (moveDownButton, SIGNAL (clicked()), this, SLOT (moveDown()) ); + connect (exportButton, SIGNAL (clicked()), this, SLOT (exportDictionary()) ); + + connect (dictionaryList, SIGNAL (selectionChanged()), this, SLOT (selectionChanged()) ); + connect (dictionaryName, SIGNAL (textChanged (const QString &)), this, SLOT (nameChanged (const QString &)) ); + connect (languageButton, SIGNAL (activated (int)), this, SLOT (languageSelected(int)) ); + + // Object for the KCMKTTSD configuration + config = new KConfig("kmouthrc"); + + // Load the configuration from the file + load(); +} + +/** + * Destructor + */ +WordCompletionWidget::~WordCompletionWidget() { + delete config; +} + +/***************************************************************************/ + +void WordCompletionWidget::load() { + dictionaryList->clear(); + + // Set the group general for the configuration of kttsd itself (no plug ins) + QStringList groups = config->groupList(); + DictionaryListItem *last = 0; + for (QStringList::Iterator it = groups.begin(); it != groups.end(); ++it) + if ((*it).startsWith ("Dictionary ")) { + config->setGroup(*it); + QString languageTag = config->readEntry("Language"); + last = new DictionaryListItem (dictionaryList, last, + config->readEntry("Filename"), + config->readEntry("Name"), + languageTag); + if (!languageButton->containsTag(languageTag)) + languageButton->insertLanguage(languageTag, i18n("without name"), QString::fromLatin1("l10n/"), QString::null); + } + + // Clean up disc space + for (QStringList::Iterator it = newDictionaryFiles.begin(); it != newDictionaryFiles.end(); ++it) { + QString filename = KGlobal::dirs()->findResource ("appdata", *it); + if (!filename.isEmpty() && !filename.isNull()) + QFile::remove (filename); + } + newDictionaryFiles.clear(); +} + +void WordCompletionWidget::save() { + QStringList groups = config->groupList(); + for (QStringList::Iterator it = groups.begin(); it != groups.end(); ++it) + if ((*it).startsWith ("Dictionary ")) + config->deleteGroup (*it); + + int number = 0; + QListViewItemIterator it(dictionaryList); + while (it.current()) { + DictionaryListItem *item = dynamic_cast<DictionaryListItem*>(it.current()); + if (item != 0) { + config->setGroup(QString("Dictionary %1").arg(number)); + config->writeEntry ("Filename", item->filename()); + config->writeEntry ("Name", item->text (0)); + config->writeEntry ("Language", item->languageCode()); + number++; + } + ++it; + } + config->sync(); + + // Clean up disc space + for (QStringList::Iterator it = removedDictionaryFiles.begin(); it != removedDictionaryFiles.end(); ++it) { + QString filename = KGlobal::dirs()->findResource ("appdata", *it); + if (!filename.isEmpty() && !filename.isNull()) + QFile::remove (filename); + } + removedDictionaryFiles.clear(); +} + +/***************************************************************************/ + +void WordCompletionWidget::addDictionary() { + QStringList dictionaryNames; + QStringList dictionaryFiles; + QStringList dictionaryLanguages; + QListViewItemIterator it(dictionaryList); + while (it.current()) { + DictionaryListItem *item = dynamic_cast<DictionaryListItem*>(it.current()); + if (item != 0) { + dictionaryNames += item->text (0); + dictionaryFiles += item->filename(); + dictionaryLanguages += item->languageCode(); + } + ++it; + } + DictionaryCreationWizard *wizard = new DictionaryCreationWizard (this, "Dictionary creation wizard", dictionaryNames, dictionaryFiles, dictionaryLanguages); + if (wizard->exec() == QDialog::Accepted) { + QString filename = wizard->createDictionary(); + newDictionaryFiles += filename; + QString languageTag = wizard->language(); + if (!languageButton->containsTag(languageTag)) { + languageButton->insertLanguage(languageTag, i18n("without name"), QString::fromLatin1("l10n/"), QString::null); + } + KListViewItem *item = new DictionaryListItem (dictionaryList, + filename, wizard->name(), languageTag); + dictionaryList->setSelected(item, true); + } + delete wizard; +} + +void WordCompletionWidget::deleteDictionary() { + DictionaryListItem *item = dynamic_cast<DictionaryListItem*>(dictionaryList->selectedItem ()); + + if (item != 0) { + removedDictionaryFiles += item->filename(); + delete item; + } +} + +void WordCompletionWidget::moveUp() { + QListViewItem *item = dictionaryList->selectedItem (); + + if (item != 0) { + QListViewItem *above = item->itemAbove(); + + if (above != 0) { + above->moveItem (item); + } + } +} + +void WordCompletionWidget::moveDown() { + QListViewItem *item = dictionaryList->selectedItem (); + + if (item != 0) { + QListViewItem *next = item->itemBelow(); + + if (next != 0) { + item->moveItem (next); + } + } +} + +void WordCompletionWidget::exportDictionary() { + DictionaryListItem *item = dynamic_cast<DictionaryListItem*>(dictionaryList->selectedItem ()); + + if (item != 0) { + KURL url = KFileDialog::getSaveURL(QString::null, QString::null, this, i18n("Export Dictionary")); + if (url.isEmpty() || !url.isValid()) + return; + + if (KIO::NetAccess::exists(url, false, this)) { + if (KMessageBox::warningContinueCancel(0,QString("<qt>%1</qt>").arg(i18n("The file %1 already exists. " + "Do you want to overwrite it?").arg(url.url())),i18n("File Exists"),i18n("&Overwrite"))==KMessageBox::Cancel) { + return; + } + } + KURL src; + src.setPath( KGlobal::dirs()->findResource ("appdata", item->filename()) ); + KIO::NetAccess::copy (src, url, this); + } +} + +void WordCompletionWidget::selectionChanged() { + DictionaryListItem *item = dynamic_cast<DictionaryListItem*>(dictionaryList->selectedItem ()); + + if (item != 0) { + deleteButton->setEnabled(true); + moveUpButton->setEnabled(true); + moveDownButton->setEnabled(true); + exportButton->setEnabled(true); + selectedDictionaryDetails->setEnabled(true); + languageLabel->setEnabled(true); + dictionaryNameLabel->setEnabled(true); + dictionaryName->setEnabled(true); + languageButton->setEnabled(true); + + dictionaryName->setText(item->text(0)); + languageButton->setCurrentItem(item->languageCode()); + } + else { + deleteButton->setEnabled(false); + moveUpButton->setEnabled(false); + moveDownButton->setEnabled(false); + exportButton->setEnabled(false); + selectedDictionaryDetails->setEnabled(false); + languageLabel->setEnabled(false); + dictionaryNameLabel->setEnabled(false); + dictionaryName->setEnabled(false); + languageButton->setEnabled(false); + + dictionaryName->setText(""); + languageButton->setText(""); + } +} + +void WordCompletionWidget::nameChanged (const QString &text) { + QListViewItem *item = dictionaryList->selectedItem (); + + if (item != 0) { + QString old = item->text(0); + + if (old != text) { + item->setText(0, text); + emit changed(true); + } + } +} + +void WordCompletionWidget::languageSelected (int) { + DictionaryListItem *item = dynamic_cast<DictionaryListItem*>(dictionaryList->selectedItem ()); + + if (item != 0) { + QString old = item->text(1); + QString text = languageButton->currentTag(); + + if (old != text) { + item->setLanguage(languageButton->text(), text); + emit changed(true); + } + } +} + +#include "wordcompletionwidget.moc" |