30 #include "filterimporterexporter.h"
33 #include "kmfilteraction.h"
36 #include <tdeconfig.h>
38 #include <tdefiledialog.h>
39 #include <kdialogbase.h>
40 #include <tdelistview.h>
41 #include <kpushbutton.h>
47 using namespace KMail;
49 FilterSelectionDialog::FilterSelectionDialog( TQWidget * parent )
50 :KDialogBase( parent,
"filterselection", true, i18n(
"Select Filters"),
Ok|Cancel,
Ok, true ),
53 TQWidget *w =
new TQWidget(
this );
54 TQVBoxLayout *top =
new TQVBoxLayout( w );
56 filtersListView =
new TDEListView( w );
57 top->addWidget( filtersListView );
59 filtersListView->setSorting( -1 );
60 filtersListView->setSelectionMode( TQListView::NoSelection );
61 filtersListView->addColumn( i18n(
"Filters"), 300 );
62 filtersListView->setFullWidth(
true );
63 TQHBoxLayout *buttonLayout =
new TQHBoxLayout(
this );
64 top->addLayout( buttonLayout );
65 selectAllButton =
new KPushButton( i18n(
"Select All" ), w );
66 buttonLayout->addWidget( selectAllButton );
67 unselectAllButton =
new KPushButton( i18n(
"Unselect All" ), w );
68 buttonLayout->addWidget( unselectAllButton );
69 connect( selectAllButton, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( slotSelectAllButton() ) );
70 connect( unselectAllButton, TQ_SIGNAL( clicked() ),
this, TQ_SLOT( slotUnselectAllButton() ) );
74 FilterSelectionDialog::~FilterSelectionDialog()
78 void FilterSelectionDialog::slotCancel()
81 KDialogBase::slotCancel();
84 bool FilterSelectionDialog::cancelled()
89 void FilterSelectionDialog::setFilters(
const TQValueList<KMFilter*>& filters )
91 if ( filters.isEmpty() )
93 enableButtonOK(
false );
96 originalFilters = filters;
97 filtersListView->clear();
98 TQValueListConstIterator<KMFilter*> it = filters.constEnd();
99 while ( it != filters.constBegin() ) {
101 KMFilter* filter = *it;
102 TQCheckListItem* item =
new TQCheckListItem( filtersListView, filter->name(), TQCheckListItem::CheckBox );
107 TQValueList<KMFilter*> FilterSelectionDialog::selectedFilters()
const
109 TQValueList<KMFilter*> filters;
110 TQListViewItemIterator it( filtersListView );
112 while( it.current() ) {
113 TQCheckListItem* item =
static_cast<TQCheckListItem*
>( it.current() );
115 filters << originalFilters[i];
121 void FilterSelectionDialog::slotUnselectAllButton()
123 TQListViewItemIterator it( filtersListView );
124 while( it.current() ) {
125 TQCheckListItem* item =
static_cast<TQCheckListItem*
>( it.current() );
126 item->setOn(
false );
131 void FilterSelectionDialog::slotSelectAllButton()
133 TQListViewItemIterator it( filtersListView );
134 while( it.current() ) {
135 TQCheckListItem* item =
static_cast<TQCheckListItem*
>( it.current() );
142 TQValueList<KMFilter*> FilterImporterExporter::readFiltersFromConfig( TDEConfig* config,
bool bPopFilter )
144 TDEConfigGroupSaver saver(config,
"General");
147 numFilters = config->readNumEntry(
"popfilters",0);
149 numFilters = config->readNumEntry(
"filters",0);
151 TQValueList<KMFilter*> filters;
152 for (
int i=0 ; i < numFilters ; ++i ) {
154 grpName.sprintf(
"%s #%d", (bPopFilter ?
"PopFilter" :
"Filter") , i);
155 TDEConfigGroupSaver saver(config, grpName);
156 KMFilter * filter =
new KMFilter(config, bPopFilter);
158 if ( filter->isEmpty() ) {
160 kdDebug(5006) <<
"KMFilter::readConfig: filter\n" << filter->asString()
161 <<
"is empty!" << endl;
165 filters.append(filter);
171 void FilterImporterExporter::writeFiltersToConfig(
const TQValueList<KMFilter*>& filters, TDEConfig* config,
bool bPopFilter )
174 TQStringList filterGroups =
175 config->groupList().grep( TQRegExp( bPopFilter ?
"PopFilter #\\d+" :
"Filter #\\d+" ) );
176 for ( TQStringList::Iterator it = filterGroups.begin() ;
177 it != filterGroups.end() ; ++it )
178 config->deleteGroup( *it );
181 for ( TQValueListConstIterator<KMFilter*> it = filters.constBegin() ;
182 it != filters.constEnd() ; ++it ) {
183 if ( !(*it)->isEmpty() ) {
186 grpName.sprintf(
"PopFilter #%d", i);
188 grpName.sprintf(
"Filter #%d", i);
189 TDEConfigGroupSaver saver(config, grpName);
190 (*it)->writeConfig(config);
194 TDEConfigGroupSaver saver(config,
"General");
196 config->writeEntry(
"popfilters", i);
198 config->writeEntry(
"filters", i);
202 FilterImporterExporter::FilterImporterExporter( TQWidget* parent,
bool popFilter )
203 :mParent( parent), mPopFilter( popFilter )
207 FilterImporterExporter::~FilterImporterExporter()
213 TQString fileName = KFileDialog::getOpenFileName( TQDir::homeDirPath(), TQString(), mParent, i18n(
"Import Filters") );
214 if ( fileName.isEmpty() )
215 return TQValueList<KMFilter*>();
218 TQFile f( fileName );
219 if ( !f.open( IO_ReadOnly ) ) {
220 KMessageBox::error( mParent, i18n(
"The selected file is not readable. Your file access permissions might be insufficient.") );
221 return TQValueList<KMFilter*>();
225 TDEConfig config( fileName );
226 TQValueList<KMFilter*> imported = readFiltersFromConfig( &config, mPopFilter );
227 FilterSelectionDialog dlg( mParent );
228 dlg.setFilters( imported );
230 return dlg.cancelled() ? TQValueList<KMFilter*>() : dlg.selectedFilters();
235 KURL saveUrl = KFileDialog::getSaveURL( TQDir::homeDirPath(), TQString(), mParent, i18n(
"Export Filters") );
237 if ( saveUrl.isEmpty() || !Util::checkOverwrite( saveUrl, mParent ) )
240 TDEConfig config( saveUrl.path() );
241 FilterSelectionDialog dlg( mParent );
242 dlg.setFilters( filters );
244 if ( !dlg.cancelled() )
245 writeFiltersToConfig( dlg.selectedFilters(), &config, mPopFilter );
248 #include "filterimporterexporter.moc"