/*************************************************************************** autoreplacepreferences.cpp - description ------------------- begin : 20030426 copyright : (C) 2003 by Roberto Pariset email : victorheremita@fastwebnet.it ***************************************************************************/ /*************************************************************************** * * * 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 "autoreplaceprefs.h" #include "autoreplacepreferences.h" #include "autoreplaceconfig.h" typedef KGenericFactory AutoReplacePreferencesFactory; K_EXPORT_COMPONENT_FACTORY( kcm_kopete_autoreplace, AutoReplacePreferencesFactory( "kcm_kopete_autoreplace" ) ) AutoReplacePreferences::AutoReplacePreferences( TQWidget *parent, const char * /* name */, const TQStringList &args ) : KCAutoConfigModule( AutoReplacePreferencesFactory::instance(), parent, args ) { ( new TQVBoxLayout( this ) )->setAutoAdd( true ); preferencesDialog = new AutoReplacePrefsUI( this ); // creates table columns (avoids new columns every time) preferencesDialog->m_list->addColumn( i18n("Text" ) ); preferencesDialog->m_list->addColumn( i18n("Replacement" ) ); preferencesDialog->m_list->header()->setStretchEnabled( true , 1 ); // connect SIGNALS/SLOTS connect( preferencesDialog->m_add, TQT_SIGNAL(pressed()), TQT_SLOT( slotAddCouple()) ); connect( preferencesDialog->m_edit, TQT_SIGNAL(pressed()), TQT_SLOT( slotEditCouple()) ); connect( preferencesDialog->m_remove, TQT_SIGNAL(pressed()), TQT_SLOT(slotRemoveCouple()) ); connect( preferencesDialog->m_list, TQT_SIGNAL(selectionChanged()), TQT_SLOT(slotSelectionChanged()) ); connect( preferencesDialog->m_key, TQT_SIGNAL(textChanged ( const TQString & )), TQT_SLOT( slotEnableAddEdit( const TQString & )) ); m_wordListChanged = false; // Sentence options and which messages to apply autoreplace to // are managed by KCMAutoConfigModule. The list of replacements // itself is manually read/written as KCMAutoConfigModule doesn't support it. autoConfig()->ignoreSubWidget( preferencesDialog->replacementsGroup ); setMainWidget( preferencesDialog, "AutoReplace Plugin" ); m_config = new AutoReplaceConfig; load(); } AutoReplacePreferences::~AutoReplacePreferences() { delete m_config; } // reload configuration reading it from kopeterc void AutoReplacePreferences::load() { m_config->load(); // Removes and deletes all the items in this list view and triggers an update preferencesDialog->m_list->clear(); // show keys/values on gui AutoReplaceConfig::WordsToReplace::Iterator it; AutoReplaceConfig::WordsToReplace map = m_config->map(); for ( it = map.begin(); it != map.end(); ++it ) { // notice: insertItem is called automatically by the constructor new TQListViewItem( preferencesDialog->m_list, it.key(), it.data() ); } m_wordListChanged = false; KCAutoConfigModule::load(); } // save list to kopeterc and creates map out of it void AutoReplacePreferences::save() { // make a list reading all values from gui AutoReplaceConfig::WordsToReplace newWords; for ( TQListViewItem * i = preferencesDialog->m_list->firstChild(); i != 0; i = i->nextSibling() ) newWords[ i->text( 0 ) ] = i->text( 1 ); // save the words list m_config->setMap( newWords ); m_config->save(); m_wordListChanged = false; KCAutoConfigModule::save(); } // read m_key m_value, create a TQListViewItem void AutoReplacePreferences::slotAddCouple() { TQString k = preferencesDialog->m_key->text(); TQString v = preferencesDialog->m_value->text(); if ( !k.isEmpty() && !k.isNull() && !v.isEmpty() && !v.isNull() ) { TQListViewItem * lvi; TQListViewItem * oldLvi = 0; // see if we are replacing an existing entry if ( ( oldLvi = preferencesDialog->m_list->findItem( k, 0 ) ) ) delete oldLvi; lvi = new TQListViewItem( preferencesDialog->m_list, k, v ); // Triggers a size, geometry and content update // during the next iteration of the event loop preferencesDialog->m_list->triggerUpdate(); // select last added preferencesDialog->m_list->setSelected( lvi, true ); } m_wordListChanged = true; slotWidgetModified(); } // edit the selected item void AutoReplacePreferences::slotEditCouple() { TQString k = preferencesDialog->m_key->text(); TQString v = preferencesDialog->m_value->text(); TQListViewItem * lvi; if ( ( lvi = preferencesDialog->m_list->selectedItem() ) && !k.isEmpty() && !k.isNull() && !v.isEmpty() && !v.isNull() ) { lvi->setText( 0, k ); lvi->setText( 1, v ); preferencesDialog->m_list->triggerUpdate(); m_wordListChanged = true; slotWidgetModified(); } } // Returns a pointer to the selected item if the list view is in // Single selection mode and an item is selected void AutoReplacePreferences::slotRemoveCouple() { delete preferencesDialog->m_list->selectedItem(); m_wordListChanged = true; slotWidgetModified(); } void AutoReplacePreferences::slotEnableAddEdit( const TQString & keyText ) { preferencesDialog->m_add->setEnabled( !keyText.isEmpty() ); preferencesDialog->m_edit->setEnabled( !keyText.isEmpty() && preferencesDialog->m_list->selectedItem() ); } void AutoReplacePreferences::slotSelectionChanged() { TQListViewItem *selection = 0; if ( ( selection = preferencesDialog->m_list->selectedItem() ) ) { // enable the remove button preferencesDialog->m_remove->setEnabled( true ); // put the selection contents into the text entry widgets so they can be edited preferencesDialog->m_key->setText( selection->text( 0 ) ); preferencesDialog->m_value->setText( selection->text( 1 ) ); } else { preferencesDialog->m_remove->setEnabled( false ); preferencesDialog->m_key->clear(); preferencesDialog->m_value->clear(); } } void AutoReplacePreferences::slotWidgetModified() { emit TDECModule::changed( m_wordListChanged || autoConfig()->hasChanged() ); } void AutoReplacePreferences::defaults() { KCAutoConfigModule::defaults(); preferencesDialog->m_list->clear(); m_config->loadDefaultAutoReplaceList(); AutoReplaceConfig::WordsToReplace::Iterator it; AutoReplaceConfig::WordsToReplace map = m_config->map(); for ( it = map.begin(); it != map.end(); ++it ) { // notice: insertItem is called automatically by the constructor new TQListViewItem( preferencesDialog->m_list, it.key(), it.data() ); } m_wordListChanged = true; slotWidgetModified(); } #include "autoreplacepreferences.moc"