• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

knode

  • sources
  • kde-4.12
  • kdepim
  • knode
knfiltermanager.cpp
Go to the documentation of this file.
1 /*
2  KNode, the KDE newsreader
3  Copyright (c) 1999-2005 the KNode authors.
4  See file AUTHORS for details
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10  You should have received a copy of the GNU General Public License
11  along with this program; if not, write to the Free Software Foundation,
12  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
13 */
14 
15 #include <klocale.h>
16 #include <kmessagebox.h>
17 #include <kmenu.h>
18 #include <kstandarddirs.h>
19 #include <kconfig.h>
20 #include <kicon.h>
21 
22 #include "utilities.h"
23 #include "knglobals.h"
24 #include "knarticlefilter.h"
25 #include "knfilterdialog.h"
26 #include "knfiltermanager.h"
27 #include "knconfig.h"
28 #include "knconfigwidgets.h"
29 
30 
31 KNFilterSelectAction::KNFilterSelectAction( const QString& text, const QString& pix,
32  KActionCollection* parent, const char *name )
33  : KActionMenu(text, parent), currentItem(-42)
34 {
35  setIcon(KIcon(pix));
36  menu()->setCheckable(true);
37  connect(menu(),SIGNAL(activated(int)),this,SLOT(slotMenuActivated(int)));
38  setDelayed(false);
39  parent->addAction(name, this);
40 }
41 
42 
43 
44 KNFilterSelectAction::~KNFilterSelectAction()
45 {
46 }
47 
48 void KNFilterSelectAction::setCurrentItem(int id)
49 {
50  menu()->setItemChecked(currentItem, false);
51  menu()->setItemChecked(id, true);
52  currentItem = id;
53 }
54 
55 
56 void KNFilterSelectAction::slotMenuActivated(int id)
57 {
58  setCurrentItem(id);
59  emit(activated(id));
60 }
61 
62 
63 //==============================================================================
64 
65 KNFilterManager::KNFilterManager( QObject * parent )
66  : QObject( parent ), fset(0), currFilter(0), a_ctFilter(0)
67 {
68  loadFilters();
69 
70  KConfigGroup conf(knGlobals.config(), "READNEWS");
71  setFilter(conf.readEntry("lastFilterID", 1));
72 }
73 
74 
75 
76 KNFilterManager::~KNFilterManager()
77 {
78  qDeleteAll( mFilterList );
79 }
80 
81 
82 
83 void KNFilterManager::readOptions()
84 {
85 }
86 
87 
88 
89 void KNFilterManager::saveOptions()
90 {
91 }
92 
93 
94 void KNFilterManager::prepareShutdown()
95 {
96  if (currFilter) {
97  KConfig *conf=knGlobals.config();
98  KConfigGroup group = conf->group("READNEWS");
99  group.writeEntry("lastFilterID", currFilter->id());
100  }
101 }
102 
103 
104 void KNFilterManager::loadFilters()
105 {
106  QString fname( KStandardDirs::locate( "data","knode/filters/filters.rc" ) );
107 
108  if (!fname.isNull()) {
109  KConfig conf( fname, KConfig::SimpleConfig);
110  KConfigGroup grp( &conf, QString());
111  QList<int> activeFilters = grp.readEntry("Active",QList<int>());
112  menuOrder = grp.readEntry("Menu",QList<int>());
113 
114  foreach ( int filterId, activeFilters ) {
115  KNArticleFilter *f = new KNArticleFilter( filterId );
116  if ( f->loadInfo() )
117  addFilter( f );
118  else
119  delete f;
120  }
121  }
122  updateMenu();
123 }
124 
125 
126 
127 void KNFilterManager::saveFilterLists()
128 {
129  QString dir( KStandardDirs::locateLocal( "data","knode/filters/" ) );
130 
131  if (dir.isNull()) {
132  KNHelper::displayInternalFileError();
133  return;
134  }
135  KConfig conf(dir+"filters.rc", KConfig::SimpleConfig);
136  KConfigGroup grp(&conf, QString());
137  QList<int> activeFilters;
138  foreach ( KNArticleFilter *filter, mFilterList )
139  activeFilters << filter->id();
140 
141  grp.writeEntry("Active",activeFilters);
142  grp.writeEntry("Menu",menuOrder);
143 }
144 
145 
146 
147 void KNFilterManager::startConfig(KNode::FilterListWidget *fs)
148 {
149  fset=fs;
150  commitNeeded = false;
151 
152  foreach ( KNArticleFilter* filter, mFilterList )
153  fset->addItem( filter );
154 
155  foreach ( int id, menuOrder ) {
156  if (id!=-1)
157  fset->addMenuItem(byID(id));
158  else
159  fset->addMenuItem(0);
160  }
161 }
162 
163 
164 
165 void KNFilterManager::endConfig()
166 {
167  fset=0;
168 }
169 
170 
171 
172 void KNFilterManager::commitChanges()
173 {
174  menuOrder = fset->menuOrder();
175  saveFilterLists();
176 
177  if(currFilter)
178  if(!currFilter->isEnabled()) currFilter=0;
179 
180  updateMenu();
181 
182  if (commitNeeded)
183  emit filterChanged(currFilter);
184 }
185 
186 
187 
188 void KNFilterManager::newFilter()
189 {
190  KNArticleFilter *f=new KNArticleFilter();
191  editFilter(f);
192 }
193 
194 
195 
196 void KNFilterManager::addFilter(KNArticleFilter *f)
197 {
198  if ( f->id() == -1 ) { // new filter, find suitable ID
199  QList<int> activeFilters;
200  // ok, this is a ugly hack: we want to reuse old id's, so we try to find the first unused id
201  foreach ( KNArticleFilter *filter, mFilterList )
202  activeFilters << filter->id();
203  int newId = 1;
204  while ( activeFilters.contains( newId ) > 0 )
205  newId++;
206  f->setId( newId );
207  }
208  mFilterList.append( f );
209 }
210 
211 
212 
213 void KNFilterManager::editFilter(KNArticleFilter *f)
214 {
215  if (!f->loaded() && f->id()!=-1)
216  f->load();
217 
218  KNFilterDialog *fdlg=new KNFilterDialog(f,(fset)? fset:knGlobals.topWidget);
219 
220  if (fdlg->exec()) {
221  commitNeeded = true;
222  if(f->id()==-1) { // new filter
223  addFilter(f);
224  f->setLoaded(true);
225  if(fset) { // updating settings tab
226  fset->addItem(f);
227  if(f->isEnabled())
228  fset->addMenuItem(f);
229  }
230  } else {
231  if(fset) { // updating settings tab
232  if(f->isEnabled())
233  fset->addMenuItem(f);
234  else
235  fset->removeMenuItem(f);
236  fset->updateItem(f);
237  }
238  }
239  f->save();
240  } else {
241  if(f->id()==-1) // new filter
242  delete f;
243  }
244 
245  delete fdlg;
246 }
247 
248 
249 void KNFilterManager::copyFilter(KNArticleFilter *f)
250 {
251  if (!f->loaded())
252  f->load();
253  KNArticleFilter *newf=new KNArticleFilter(*f);
254  editFilter(newf);
255 }
256 
257 
258 void KNFilterManager::deleteFilter(KNArticleFilter *f)
259 {
260  if ( KMessageBox::warningContinueCancel( fset ? fset : knGlobals.topWidget,
261  i18n("Do you really want to delete this filter?"), QString(), KGuiItem( i18n("&Delete"), "edit-delete" ) )
262  == KMessageBox::Continue ) {
263  if ( mFilterList.removeAll( f ) ) { // does not delete surplus config files
264  if ( fset ) { // we reuse ids to reduce the number of dead files
265  fset->removeItem( f );
266  fset->removeMenuItem( f );
267  }
268  if ( currFilter == f ) {
269  currFilter = 0;
270  emit filterChanged( currFilter );
271  }
272  }
273  }
274 }
275 
276 
277 bool KNFilterManager::newNameIsOK(KNArticleFilter *f, const QString &newName)
278 {
279  foreach ( KNArticleFilter *filter, mFilterList )
280  if ( filter != f && newName == filter->translatedName() )
281  return false;
282 
283  return true;
284 }
285 
286 
287 
288 KNArticleFilter* KNFilterManager::setFilter(const int id)
289 {
290  KNArticleFilter *bak=currFilter;
291 
292  currFilter=byID(id);
293 
294  if(currFilter) {
295  if(a_ctFilter)
296  a_ctFilter->setCurrentItem(currFilter->id());
297  emit(filterChanged(currFilter));
298  } else
299  currFilter=bak;
300 
301  return currFilter;
302 }
303 
304 
305 
306 KNArticleFilter* KNFilterManager::byID(int id)
307 {
308  foreach ( KNArticleFilter *filter, mFilterList )
309  if ( filter->id() == id )
310  return filter;
311 
312  return 0;
313 }
314 
315 
316 
317 void KNFilterManager::updateMenu()
318 {
319  if(!a_ctFilter)
320  return;
321 
322  a_ctFilter->menu()->clear();
323  KNArticleFilter *f=0;
324 
325  foreach ( int id, menuOrder ) {
326  if ( id != -1 ) {
327  if ( ( f = byID( id ) ) )
328  a_ctFilter->menu()->insertItem( f->translatedName(), f->id() );
329  } else
330  a_ctFilter->menu()->addSeparator();
331  }
332 
333  if(currFilter)
334  a_ctFilter->setCurrentItem(currFilter->id());
335 }
336 
337 
338 
339 void KNFilterManager::slotMenuActivated(int id)
340 {
341  KNArticleFilter *f=setFilter(id);
342 
343  if (!f)
344  KMessageBox::error(knGlobals.topWidget, i18n("ERROR: no such filter."));
345 }
346 
347 
348 void KNFilterManager::slotShowFilterChooser()
349 {
350  KNArticleFilter *f=0;
351  QStringList items;
352  QList<int> ids;
353 
354  foreach ( int id, menuOrder ) {
355  if ( id != -1 )
356  if ( ( f = byID( id ) ) ) {
357  items.append( f->translatedName() );
358  ids.append( id );
359  }
360  }
361 
362  int currentItem=0;
363  if (currFilter)
364  currentItem=ids.indexOf(currFilter->id());
365  if (currentItem==-1)
366  currentItem=0;
367 
368  int newFilter = KNHelper::selectDialog(knGlobals.topWidget, i18n("Select Filter"), items, currentItem);
369  if (newFilter != -1)
370  setFilter(ids[newFilter]);
371 }
372 
373 
374 void KNFilterManager::setMenuAction(KNFilterSelectAction *a, QAction *keybA)
375 {
376  if(a) {
377  a_ctFilter = a;
378  connect(a_ctFilter, SIGNAL(activated(int)), this, SLOT(slotMenuActivated(int)));
379  }
380  if(keybA)
381  connect(keybA, SIGNAL(activated()), this, SLOT(slotShowFilterChooser()));
382 
383  updateMenu();
384 }
385 
386 //--------------------------------
387 
388 #include "knfiltermanager.moc"
KNArticleFilter::loaded
bool loaded() const
Definition: knarticlefilter.h:58
KNFilterManager::currFilter
KNArticleFilter * currFilter
Definition: knfiltermanager.h:94
KNFilterSelectAction::KNFilterSelectAction
KNFilterSelectAction(const QString &text, const QString &pix, KActionCollection *parent, const char *name)
Definition: knfiltermanager.cpp:31
utilities.h
text
virtual QByteArray text(quint32 serialNumber) const =0
KNFilterManager::~KNFilterManager
~KNFilterManager()
Definition: knfiltermanager.cpp:76
KNFilterManager::saveOptions
void saveOptions()
Definition: knfiltermanager.cpp:89
KNFilterManager::menuOrder
QList< int > menuOrder
Definition: knfiltermanager.h:96
KNFilterSelectAction::~KNFilterSelectAction
~KNFilterSelectAction()
Definition: knfiltermanager.cpp:44
knconfigwidgets.h
KNFilterManager::commitChanges
void commitChanges()
Definition: knfiltermanager.cpp:172
KNFilterManager::loadFilters
void loadFilters()
Definition: knfiltermanager.cpp:104
knfiltermanager.h
QObject
KNFilterManager::deleteFilter
void deleteFilter(KNArticleFilter *f)
Definition: knfiltermanager.cpp:258
KNArticleFilter::setLoaded
void setLoaded(bool l)
Definition: knarticlefilter.h:63
KNFilterManager::readOptions
void readOptions()
Definition: knfiltermanager.cpp:83
KNFilterManager::commitNeeded
bool commitNeeded
Definition: knfiltermanager.h:97
KNFilterManager::setFilter
KNArticleFilter * setFilter(const int id)
Definition: knfiltermanager.cpp:288
KNArticleFilter::translatedName
QString translatedName()
tries to translate the name
Definition: knarticlefilter.cpp:306
KNFilterManager::mFilterList
QList< KNArticleFilter * > mFilterList
Definition: knfiltermanager.h:92
KNFilterManager::endConfig
void endConfig()
Definition: knfiltermanager.cpp:165
KNFilterManager::copyFilter
void copyFilter(KNArticleFilter *f)
Definition: knfiltermanager.cpp:249
KNode::FilterListWidget::addItem
void addItem(KNArticleFilter *f)
Definition: knconfigwidgets.cpp:1095
KNHelper::displayInternalFileError
static void displayInternalFileError(QWidget *w=0)
use this for all internal files
Definition: utilities.cpp:344
KNode::FilterListWidget::menuOrder
QList< int > menuOrder()
Definition: knconfigwidgets.cpp:1160
KNArticleFilter
Article filter.
Definition: knarticlefilter.h:33
KNArticleFilter::setId
void setId(int i)
Definition: knarticlefilter.h:61
KNArticleFilter::save
void save()
Definition: knarticlefilter.cpp:137
KNFilterManager::startConfig
void startConfig(KNode::FilterListWidget *fs)
Definition: knfiltermanager.cpp:147
KNFilterManager::editFilter
void editFilter(KNArticleFilter *f)
Definition: knfiltermanager.cpp:213
KNFilterManager::fset
KNode::FilterListWidget * fset
Definition: knfiltermanager.h:93
KNFilterSelectAction::setCurrentItem
void setCurrentItem(int id)
Definition: knfiltermanager.cpp:48
KNArticleFilter::load
void load()
Definition: knarticlefilter.cpp:97
KNFilterSelectAction::activated
void activated(int id)
KNode::FilterListWidget
Configuration widget for filters.
Definition: knconfigwidgets.h:379
KNArticleFilter::loadInfo
bool loadInfo()
Definition: knarticlefilter.cpp:75
knfilterdialog.h
knglobals.h
KNArticleFilter::isEnabled
bool isEnabled() const
Definition: knarticlefilter.h:57
KActionMenu
KNFilterDialog
Filter configuration dialog.
Definition: knfilterdialog.h:28
KNFilterManager::slotShowFilterChooser
void slotShowFilterChooser()
Definition: knfiltermanager.cpp:348
KNFilterManager::addFilter
void addFilter(KNArticleFilter *f)
Definition: knfiltermanager.cpp:196
KNFilterManager::prepareShutdown
void prepareShutdown()
Definition: knfiltermanager.cpp:94
KNode::FilterListWidget::addMenuItem
void addMenuItem(KNArticleFilter *f)
Definition: knconfigwidgets.cpp:1138
KNFilterManager::a_ctFilter
KNFilterSelectAction * a_ctFilter
Definition: knfiltermanager.h:95
KNHelper::selectDialog
static int selectDialog(QWidget *parent, const QString &caption, const QStringList &options, int initialValue)
list selection dialog, used instead of a popup menu when a select action is called via the keyboard...
Definition: utilities.cpp:163
KNFilterManager::updateMenu
void updateMenu()
Definition: knfiltermanager.cpp:317
KNArticleFilter::id
int id() const
Definition: knarticlefilter.h:52
KNFilterManager::newFilter
void newFilter()
Definition: knfiltermanager.cpp:188
knconfig.h
KNFilterManager::slotMenuActivated
void slotMenuActivated(int id)
Definition: knfiltermanager.cpp:339
KNFilterManager::filterChanged
void filterChanged(KNArticleFilter *f)
KNFilterSelectAction::slotMenuActivated
void slotMenuActivated(int id)
Definition: knfiltermanager.cpp:56
KNFilterSelectAction
Filter selection action.
Definition: knfiltermanager.h:32
knGlobals
#define knGlobals
Keep compatibility with the old way.
Definition: knglobals.h:28
KNFilterManager::saveFilterLists
void saveFilterLists()
Definition: knfiltermanager.cpp:127
KNFilterManager::newNameIsOK
bool newNameIsOK(KNArticleFilter *f, const QString &newName)
Definition: knfiltermanager.cpp:277
KNFilterManager::setMenuAction
void setMenuAction(KNFilterSelectAction *a, QAction *keybA)
Allow to delay the setup of UI elements, since the knode part may not be available when the config di...
Definition: knfiltermanager.cpp:374
KNFilterManager::byID
KNArticleFilter * byID(int id)
Definition: knfiltermanager.cpp:306
QList< int >
knarticlefilter.h
KNFilterManager::KNFilterManager
KNFilterManager(QObject *parent=0)
Definition: knfiltermanager.cpp:65
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:36 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

knode

Skip menu "knode"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal