You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/kopete/plugins/autoreplace/autoreplacepreferences.cpp

216 lines
7.2 KiB

/***************************************************************************
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 <tqcheckbox.h>
#include <tqlayout.h>
#include <tqpushbutton.h>
#include <tqgroupbox.h>
#include <tqheader.h>
#include <tqlistview.h>
#include <klocale.h>
#include <klineedit.h>
#include <kglobal.h>
#include <kgenericfactory.h>
#include <kautoconfig.h>
#include "autoreplaceprefs.h"
#include "autoreplacepreferences.h"
#include "autoreplaceconfig.h"
typedef KGenericFactory<AutoReplacePreferences> 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, tqgeometry 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 KCModule::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"
// vim: set noet ts=4 sts=4 sw=4: