• 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
kngroupdialog.cpp
Go to the documentation of this file.
1 /*
2  KNode, the KDE newsreader
3  Copyright (c) 1999-2006 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 <QLabel>
16 #include <QRadioButton>
17 #include <QCheckBox>
18 
19 #include <QGridLayout>
20 #include <QGroupBox>
21 #include <QVBoxLayout>
22 
23 #include <kdebug.h>
24 #include <kglobal.h>
25 #include <kdatepicker.h>
26 #include <klocale.h>
27 #include <kmessagebox.h>
28 #include <klineedit.h>
29 
30 #include "utilities.h"
31 #include "knnntpaccount.h"
32 #include "kngroupdialog.h"
33 #include "knglobals.h"
34 #include <QPushButton>
35 
36 
37 KNGroupDialog::KNGroupDialog( QWidget *parent, KNNntpAccount::Ptr a ) :
38  KNGroupBrowser(parent, i18n("Subscribe to Newsgroups"),a, User1 | User2, true, i18n("New &List"), i18n("New &Groups...") )
39 {
40  rightLabel->setText(i18n("Current changes:"));
41  subView=new Q3ListView(page);
42  subView->addColumn(i18n("Subscribe To"));
43  unsubView=new Q3ListView(page);
44  unsubView->addColumn(i18n("Unsubscribe From"));
45 
46  QVBoxLayout *protL=new QVBoxLayout();
47  protL->setSpacing(3);
48  listL->addLayout(protL, 1,2);
49  protL->addWidget(subView);
50  protL->addWidget(unsubView);
51 
52  dir1=right;
53  dir2=left;
54 
55  connect(groupView, SIGNAL(selectionChanged(Q3ListViewItem*)),
56  this, SLOT(slotItemSelected(Q3ListViewItem*)));
57  connect(groupView, SIGNAL(selectionChanged()),
58  this, SLOT(slotSelectionChanged()));
59  connect(subView, SIGNAL(selectionChanged(Q3ListViewItem*)),
60  this, SLOT(slotItemSelected(Q3ListViewItem*)));
61  connect(unsubView, SIGNAL(selectionChanged(Q3ListViewItem*)),
62  this, SLOT(slotItemSelected(Q3ListViewItem*)));
63 
64  connect(arrowBtn1, SIGNAL(clicked()), this, SLOT(slotArrowBtn1()));
65  connect(arrowBtn2, SIGNAL(clicked()), this, SLOT(slotArrowBtn2()));
66 
67  connect( this, SIGNAL(user1Clicked()), SLOT(slotUser1()) );
68  connect( this, SIGNAL(user2Clicked()), SLOT(slotUser2()) );
69 
70  KNHelper::restoreWindowSize("groupDlg", this, QSize(662,393)); // optimized for 800x600
71 
72  setHelp("anc-fetch-group-list");
73 }
74 
75 
76 
77 KNGroupDialog::~KNGroupDialog()
78 {
79  KNHelper::saveWindowSize("groupDlg", this->size());
80 }
81 
82 
83 
84 void KNGroupDialog::itemChangedState(CheckItem *it, bool s)
85 {
86  kDebug(5003) <<"KNGroupDialog::itemChangedState()";
87  if(s){
88  if(itemInListView(unsubView, it->info)) {
89  removeListItem(unsubView, it->info);
90  setButtonDirection(btn2, right);
91  arrowBtn1->setEnabled(false);
92  arrowBtn2->setEnabled(true);
93  }
94  else {
95  new GroupItem(subView, it->info);
96  arrowBtn1->setEnabled(false);
97  arrowBtn2->setEnabled(false);
98  }
99  }
100  else {
101  if(itemInListView(subView, it->info)) {
102  removeListItem(subView, it->info);
103  setButtonDirection(btn1, right);
104  arrowBtn1->setEnabled(true);
105  arrowBtn2->setEnabled(false);
106  }
107  else {
108  new GroupItem(unsubView, it->info);
109  arrowBtn1->setEnabled(false);
110  arrowBtn2->setEnabled(false);
111  }
112  }
113 }
114 
115 
116 
117 void KNGroupDialog::updateItemState(CheckItem *it)
118 {
119  it->setChecked( (it->info.subscribed && !itemInListView(unsubView, it->info)) ||
120  (!it->info.subscribed && itemInListView(subView, it->info)) );
121 
122  if((it->info.subscribed || it->info.newGroup) && it->pixmap(0)==0)
123  it->setPixmap(0, (it->info.newGroup)? pmNew:pmGroup);
124 }
125 
126 
127 
128 void KNGroupDialog::toSubscribe(QList<KNGroupInfo> *l)
129 {
130  l->clear();
131 
132  bool moderated=false;
133  Q3ListViewItemIterator it(subView);
134  for(; it.current(); ++it) {
135  const KNGroupInfo& info = ((static_cast<GroupItem*>(it.current()))->info);
136  l->append(info);
137  if (info.status==KNGroup::moderated)
138  moderated=true;
139  }
140  if (moderated) // warn the user
141  KMessageBox::information( knGlobals.topWidget,
142  i18n("You have subscribed to a moderated newsgroup.\nYour articles will not appear in the group immediately.\nThey have to go through a moderation process."),
143  QString(), "subscribeModeratedWarning" );
144 }
145 
146 
147 
148 void KNGroupDialog::toUnsubscribe(QStringList *l)
149 {
150  l->clear();
151  Q3ListViewItemIterator it(unsubView);
152  for(; it.current(); ++it)
153  l->append(((static_cast<GroupItem*>(it.current()))->info).name);
154 }
155 
156 
157 
158 void KNGroupDialog::setButtonDirection(arrowButton b, arrowDirection d)
159 {
160  QPushButton *btn=0;
161  if(b==btn1 && dir1!=d) {
162  btn=arrowBtn1;
163  dir1=d;
164  }
165  else if(b==btn2 && dir2!=d) {
166  btn=arrowBtn2;
167  dir2=d;
168  }
169 
170  if(btn) {
171  if(d==right)
172  btn->setIcon(pmRight);
173  else
174  btn->setIcon(pmLeft);
175  }
176 }
177 
178 
179 
180 void KNGroupDialog::slotItemSelected(Q3ListViewItem *it)
181 {
182  const QObject *s=sender();
183 
184 
185  if(s==subView) {
186  unsubView->clearSelection();
187  groupView->clearSelection();
188  arrowBtn2->setEnabled(false);
189  arrowBtn1->setEnabled(true);
190  setButtonDirection(btn1, left);
191  }
192  else if(s==unsubView) {
193  subView->clearSelection();
194  groupView->clearSelection();
195  arrowBtn1->setEnabled(false);
196  arrowBtn2->setEnabled(true);
197  setButtonDirection(btn2, left);
198  }
199  else {
200  CheckItem *cit;
201  subView->clearSelection();
202  unsubView->clearSelection();
203  cit=static_cast<CheckItem*>(it);
204  if(!cit->isOn() && !itemInListView(subView, cit->info) && !itemInListView(unsubView, cit->info)) {
205  arrowBtn1->setEnabled(true);
206  arrowBtn2->setEnabled(false);
207  setButtonDirection(btn1, right);
208  }
209  else if(cit->isOn() && !itemInListView(unsubView, cit->info) && !itemInListView(subView, cit->info)) {
210  arrowBtn2->setEnabled(true);
211  arrowBtn1->setEnabled(false);
212  setButtonDirection(btn2, right);
213  }
214  else {
215  arrowBtn1->setEnabled(false);
216  arrowBtn2->setEnabled(false);
217  }
218  }
219 }
220 
221 
222 
223 void KNGroupDialog::slotSelectionChanged()
224 {
225  if (!groupView->selectedItem())
226  arrowBtn1->setEnabled(false);
227 }
228 
229 
230 
231 void KNGroupDialog::slotArrowBtn1()
232 {
233  if(dir1==right) {
234  CheckItem *it=static_cast<CheckItem*>(groupView->selectedItem());
235  if (it) {
236  new GroupItem(subView, it->info);
237  it->setChecked(true);
238  }
239  }
240  else {
241  GroupItem *it=static_cast<GroupItem*>(subView->selectedItem());
242  if (it) {
243  changeItemState(it->info, false);
244  delete it;
245  }
246  }
247 
248  arrowBtn1->setEnabled(false);
249 }
250 
251 
252 void KNGroupDialog::slotArrowBtn2()
253 {
254  if(dir2==right) {
255  CheckItem *it=static_cast<CheckItem*>(groupView->selectedItem());
256  if (it) {
257  new GroupItem(unsubView, it->info);
258  it->setChecked(false);
259  }
260  }
261  else {
262  GroupItem *it=static_cast<GroupItem*>(unsubView->selectedItem());
263  if (it) {
264  changeItemState(it->info, true);
265  delete it;
266  }
267  }
268 
269  arrowBtn2->setEnabled(false);
270 }
271 
272 
273 // new list
274 void KNGroupDialog::slotUser1()
275 {
276  leftLabel->setText(i18n("Downloading groups..."));
277  enableButton(User1,false);
278  enableButton(User2,false);
279  emit(fetchList(a_ccount));
280 }
281 
282 
283 // new groups
284 void KNGroupDialog::slotUser2()
285 {
286  QDate lastDate = a_ccount->lastNewFetch();
287  KDialog *dlg = new KDialog( this );
288  dlg->setCaption( i18n("New Groups") );
289  dlg->setButtons( Ok | Cancel );
290 
291  QGroupBox *btnGrp = new QGroupBox( i18n("Check for New Groups"), dlg );
292  dlg->setMainWidget(btnGrp);
293  QGridLayout *topL = new QGridLayout( btnGrp );
294 
295  QRadioButton *takeLast = new QRadioButton( i18n("Created since last check:"), btnGrp );
296  topL->addWidget(takeLast, 0, 0, 1, 2 );
297 
298  QLabel *l = new QLabel(KGlobal::locale()->formatDate(lastDate, KLocale::LongDate),btnGrp);
299  topL->addWidget(l, 1, 1, Qt::AlignLeft);
300 
301  connect(takeLast, SIGNAL(toggled(bool)), l, SLOT(setEnabled(bool)));
302 
303  QRadioButton *takeCustom = new QRadioButton( i18n("Created since this date:"), btnGrp );
304  topL->addWidget(takeCustom, 2, 0, 1, 2 );
305 
306  dateSel = new KDatePicker( lastDate, btnGrp );
307  dateSel->setMinimumSize(dateSel->sizeHint());
308  topL->addWidget(dateSel, 3, 1, Qt::AlignLeft);
309 
310  connect(takeCustom, SIGNAL(toggled(bool)), this, SLOT(slotDatePickerEnabled(bool)));
311 
312  takeLast->setChecked(true);
313  dateSel->setEnabled(false);
314 
315  topL->addItem( new QSpacerItem(30, 0 ), 0, 0 );
316 
317  if (dlg->exec()) {
318  if (takeCustom->isChecked())
319  lastDate = dateSel->date();
320  a_ccount->setLastNewFetch(QDate::currentDate());
321  leftLabel->setText(i18n("Checking for new groups..."));
322  enableButton(User1,false);
323  enableButton(User2,false);
324  filterEdit->clear();
325  subCB->setChecked(false);
326  newCB->setChecked(true);
327  emit(checkNew(a_ccount,lastDate));
328  incrementalFilter=false;
329  slotRefilter();
330  }
331 
332  delete dlg;
333 }
334 
335 void KNGroupDialog::slotDatePickerEnabled( bool b )
336 {
337  dateSel->setEnabled( b );
338 }
339 
340 
341 //--------------------------------
342 
343 #include "kngroupdialog.moc"
KNGroupBrowser::arrowBtn1
QPushButton * arrowBtn1
Definition: kngroupbrowser.h:89
KNGroupDialog::subView
Q3ListView * subView
Definition: kngroupdialog.h:40
KNGroupDialog::checkNew
void checkNew(KNNntpAccount::Ptr a, QDate date)
KNGroupBrowser::pmRight
QIcon pmRight
Definition: kngroupbrowser.h:91
KNGroupBrowser::changeItemState
void changeItemState(const KNGroupInfo &gi, bool s)
Definition: kngroupbrowser.cpp:177
KNGroupBrowser::leftLabel
QLabel * leftLabel
Definition: kngroupbrowser.h:93
KNGroupBrowser
Base class for group selection dialogs.
Definition: kngroupbrowser.h:32
KNHelper::saveWindowSize
static void saveWindowSize(const QString &name, const QSize &s)
Definition: utilities.cpp:205
kngroupdialog.h
KNGroupBrowser::subCB
QCheckBox * subCB
Definition: kngroupbrowser.h:88
KNGroup::moderated
Definition: kngroup.h:50
utilities.h
KNGroupDialog::btn2
Definition: kngroupdialog.h:35
KNGroupBrowser::pmGroup
QPixmap pmGroup
Definition: kngroupbrowser.h:90
KNGroupDialog::slotArrowBtn1
void slotArrowBtn1()
Definition: kngroupdialog.cpp:231
KNGroupDialog::dir2
arrowDirection dir2
Definition: kngroupdialog.h:41
KNGroupBrowser::page
QWidget * page
Definition: kngroupbrowser.h:84
KNGroupBrowser::removeListItem
void removeListItem(Q3ListView *view, const KNGroupInfo &gi)
Definition: kngroupbrowser.cpp:259
QWidget
KNGroupDialog::dir1
arrowDirection dir1
Definition: kngroupdialog.h:41
KNGroupBrowser::GroupItem
List view item with special handling for displaying moderated groups.
Definition: kngroupbrowser.h:54
KNGroupDialog::right
Definition: kngroupdialog.h:34
KNGroupDialog::toUnsubscribe
void toUnsubscribe(QStringList *l)
Definition: kngroupdialog.cpp:148
KNGroupDialog::arrowDirection
arrowDirection
Definition: kngroupdialog.h:34
KNHelper::restoreWindowSize
static void restoreWindowSize(const QString &name, QWidget *d, const QSize &defaultSize)
Definition: utilities.cpp:212
KDialog
KNGroupDialog::toSubscribe
void toSubscribe(QList< KNGroupInfo > *l)
Definition: kngroupdialog.cpp:128
QObject
KNGroupDialog::KNGroupDialog
KNGroupDialog(QWidget *parent, KNNntpAccount::Ptr a)
Definition: kngroupdialog.cpp:37
KNGroupBrowser::newCB
QCheckBox * newCB
Definition: kngroupbrowser.h:88
KNNntpAccount::Ptr
boost::shared_ptr< KNNntpAccount > Ptr
Shared pointer to a KNNntpAccount.
Definition: knnntpaccount.h:62
KNGroupBrowser::filterEdit
KLineEdit * filterEdit
Definition: kngroupbrowser.h:87
KNGroupBrowser::listL
QGridLayout * listL
Definition: kngroupbrowser.h:92
knnntpaccount.h
KNGroupInfo::newGroup
bool newGroup
Definition: kngroupmanager.h:44
KNGroupDialog::slotDatePickerEnabled
void slotDatePickerEnabled(bool)
Definition: kngroupdialog.cpp:335
KNGroupDialog::slotItemSelected
void slotItemSelected(Q3ListViewItem *it)
Definition: kngroupdialog.cpp:180
KNGroupBrowser::GroupItem::info
KNGroupInfo info
Definition: kngroupbrowser.h:61
QGroupBox
KNGroupBrowser::groupView
Q3ListView * groupView
Definition: kngroupbrowser.h:85
KNGroupDialog::slotUser2
void slotUser2()
new groups
Definition: kngroupdialog.cpp:284
KNGroupDialog::unsubView
Q3ListView * unsubView
Definition: kngroupdialog.h:40
Q3ListViewItem
KNGroupBrowser::CheckItem::setChecked
void setChecked(bool c)
Definition: kngroupbrowser.cpp:447
KNGroupDialog::~KNGroupDialog
~KNGroupDialog()
Definition: kngroupdialog.cpp:77
knglobals.h
KNGroupBrowser::rightLabel
QLabel * rightLabel
Definition: kngroupbrowser.h:93
KNGroupBrowser::incrementalFilter
bool incrementalFilter
Definition: kngroupbrowser.h:96
KNGroupDialog::arrowButton
arrowButton
Definition: kngroupdialog.h:35
KNGroupInfo::subscribed
bool subscribed
Definition: kngroupmanager.h:44
KNGroupDialog::btn1
Definition: kngroupdialog.h:35
KNGroupDialog::updateItemState
void updateItemState(CheckItem *it)
Definition: kngroupdialog.cpp:117
KNGroupDialog::setButtonDirection
void setButtonDirection(arrowButton b, arrowDirection d)
Definition: kngroupdialog.cpp:158
KNGroupDialog::itemChangedState
void itemChangedState(CheckItem *it, bool s)
Definition: kngroupdialog.cpp:84
QLabel
KNGroupBrowser::a_ccount
KNNntpAccount::Ptr a_ccount
Definition: kngroupbrowser.h:98
KNGroupBrowser::CheckItem::info
KNGroupInfo info
Definition: kngroupbrowser.h:46
KNGroupBrowser::itemInListView
bool itemInListView(Q3ListView *view, const KNGroupInfo &gi)
Definition: kngroupbrowser.cpp:187
KNGroupDialog::slotArrowBtn2
void slotArrowBtn2()
Definition: kngroupdialog.cpp:252
KNGroupBrowser::arrowBtn2
QPushButton * arrowBtn2
Definition: kngroupbrowser.h:89
KNGroupDialog::slotSelectionChanged
void slotSelectionChanged()
deactivates the button when a root item is selected
Definition: kngroupdialog.cpp:223
KNGroupBrowser::pmNew
QPixmap pmNew
Definition: kngroupbrowser.h:90
KNGroupBrowser::CheckItem
Checkable list view item with special handling for displaying moderated groups.
Definition: kngroupbrowser.h:38
KNGroupDialog::dateSel
KDatePicker * dateSel
Definition: kngroupdialog.h:42
knGlobals
#define knGlobals
Keep compatibility with the old way.
Definition: knglobals.h:28
KNGroupInfo
Helper classes for the group selection dialog, contains info about a newsgroup (name, description)
Definition: kngroupmanager.h:34
KNGroupBrowser::slotRefilter
void slotRefilter()
Definition: kngroupbrowser.cpp:406
KNGroupDialog::left
Definition: kngroupdialog.h:34
KNGroupBrowser::pmLeft
QIcon pmLeft
Definition: kngroupbrowser.h:91
KNGroupInfo::status
KNGroup::Status status
Definition: kngroupmanager.h:45
KNGroupDialog::fetchList
void fetchList(KNNntpAccount::Ptr a)
QList< KNGroupInfo >
KNGroupDialog::slotUser1
void slotUser1()
new list
Definition: kngroupdialog.cpp:274
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