/*************************************************************************** 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "dictionarycreationwizard.h" #include "wordcompletionwidget.h" #include "wordcompletion.h" #include "klanguagebutton.h" class DictionaryListItem : public KListViewItem { public: DictionaryListItem (TQListView *parent, TQString filename, TQString name, TQString language, TQString languageCode) : KListViewItem (parent, name) { setFilename (filename); setLanguage (language, languageCode); }; DictionaryListItem (TQListView *parent, TQString filename, TQString name, TQString languageCode) : KListViewItem (parent, name) { setFilename (filename); setLanguage (languageCode); }; DictionaryListItem (TQListView *parent, TQListViewItem *after, TQString filename, TQString name, TQString languageCode) : KListViewItem (parent, after, name) { setFilename (filename); setLanguage (languageCode); }; ~DictionaryListItem () { }; TQString filename() { return myFilename; } TQString languageCode() { return myLanguageCode; } void setFilename(TQString filename) { myFilename = filename; } void setLanguage (TQString languageCode) { TQString filename = KGlobal::dirs()->findResource("locale", languageCode + TQString::fromLatin1("/entry.desktop")); KSimpleConfig entry(filename); entry.setGroup(TQString::fromLatin1("KCM Locale")); TQString name = entry.readEntry(TQString::fromLatin1("Name"), i18n("without name")); setLanguage (name + " (" + languageCode + ")", languageCode); } void setLanguage (TQString name, TQString languageCode) { myLanguageCode = languageCode; setText (1, name); } private: TQString myFilename; TQString myLanguageCode; }; /***************************************************************************/ WordCompletionWidget::WordCompletionWidget(TQWidget *parent, const char *name) : WordCompletionUI (parent, name) { dictionaryList->setSorting (-1); // no sorted list // Connect the signals from hte KCMKTTSDWidget to this class connect (addButton, TQT_SIGNAL (clicked()), this, TQT_SLOT(addDictionary()) ); connect (deleteButton, TQT_SIGNAL (clicked()), this, TQT_SLOT (deleteDictionary()) ); connect (moveUpButton, TQT_SIGNAL (clicked()), this, TQT_SLOT (moveUp()) ); connect (moveDownButton, TQT_SIGNAL (clicked()), this, TQT_SLOT (moveDown()) ); connect (exportButton, TQT_SIGNAL (clicked()), this, TQT_SLOT (exportDictionary()) ); connect (dictionaryList, TQT_SIGNAL (selectionChanged()), this, TQT_SLOT (selectionChanged()) ); connect (dictionaryName, TQT_SIGNAL (textChanged (const TQString &)), this, TQT_SLOT (nameChanged (const TQString &)) ); connect (languageButton, TQT_SIGNAL (activated (int)), this, TQT_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) TQStringList groups = config->groupList(); DictionaryListItem *last = 0; for (TQStringList::Iterator it = groups.begin(); it != groups.end(); ++it) if ((*it).startsWith ("Dictionary ")) { config->setGroup(*it); TQString 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"), TQString::fromLatin1("l10n/"), TQString::null); } // Clean up disc space for (TQStringList::Iterator it = newDictionaryFiles.begin(); it != newDictionaryFiles.end(); ++it) { TQString filename = KGlobal::dirs()->findResource ("appdata", *it); if (!filename.isEmpty() && !filename.isNull()) TQFile::remove (filename); } newDictionaryFiles.clear(); } void WordCompletionWidget::save() { TQStringList groups = config->groupList(); for (TQStringList::Iterator it = groups.begin(); it != groups.end(); ++it) if ((*it).startsWith ("Dictionary ")) config->deleteGroup (*it); int number = 0; TQListViewItemIterator it(dictionaryList); while (it.current()) { DictionaryListItem *item = dynamic_cast(it.current()); if (item != 0) { config->setGroup(TQString("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 (TQStringList::Iterator it = removedDictionaryFiles.begin(); it != removedDictionaryFiles.end(); ++it) { TQString filename = KGlobal::dirs()->findResource ("appdata", *it); if (!filename.isEmpty() && !filename.isNull()) TQFile::remove (filename); } removedDictionaryFiles.clear(); } /***************************************************************************/ void WordCompletionWidget::addDictionary() { TQStringList dictionaryNames; TQStringList dictionaryFiles; TQStringList dictionaryLanguages; TQListViewItemIterator it(dictionaryList); while (it.current()) { DictionaryListItem *item = dynamic_cast(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() == TQDialog::Accepted) { TQString filename = wizard->createDictionary(); newDictionaryFiles += filename; TQString languageTag = wizard->language(); if (!languageButton->containsTag(languageTag)) { languageButton->insertLanguage(languageTag, i18n("without name"), TQString::fromLatin1("l10n/"), TQString::null); } KListViewItem *item = new DictionaryListItem (dictionaryList, filename, wizard->name(), languageTag); dictionaryList->setSelected(item, true); } delete wizard; } void WordCompletionWidget::deleteDictionary() { DictionaryListItem *item = dynamic_cast(dictionaryList->selectedItem ()); if (item != 0) { removedDictionaryFiles += item->filename(); delete item; } } void WordCompletionWidget::moveUp() { TQListViewItem *item = dictionaryList->selectedItem (); if (item != 0) { TQListViewItem *above = item->itemAbove(); if (above != 0) { above->moveItem (item); } } } void WordCompletionWidget::moveDown() { TQListViewItem *item = dictionaryList->selectedItem (); if (item != 0) { TQListViewItem *next = item->itemBelow(); if (next != 0) { item->moveItem (next); } } } void WordCompletionWidget::exportDictionary() { DictionaryListItem *item = dynamic_cast(dictionaryList->selectedItem ()); if (item != 0) { KURL url = KFileDialog::getSaveURL(TQString::null, TQString::null, this, i18n("Export Dictionary")); if (url.isEmpty() || !url.isValid()) return; if (KIO::NetAccess::exists(url, false, this)) { if (KMessageBox::warningContinueCancel(0,TQString("%1").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(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 TQString &text) { TQListViewItem *item = dictionaryList->selectedItem (); if (item != 0) { TQString old = item->text(0); if (old != text) { item->setText(0, text); emit changed(true); } } } void WordCompletionWidget::languageSelected (int) { DictionaryListItem *item = dynamic_cast(dictionaryList->selectedItem ()); if (item != 0) { TQString old = item->text(1); TQString text = languageButton->currentTag(); if (old != text) { item->setLanguage(languageButton->text(), text); emit changed(true); } } } #include "wordcompletionwidget.moc"