FEATURE: (contracted in prokde35)
[kdepim.git] / libkdepim / categoryselectdialog.cpp
blobe4f53f240834bbc7c93d661d0ef87101e6b98c97
1 /*
2 This file is part of libkdepim.
4 Copyright (c) 2000, 2001, 2002 Cornelius Schumacher <schumacher@kde.org>
5 Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version.
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details.
17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 Boston, MA 02110-1301, USA.
23 #include <q3listview.h>
24 #include <QPushButton>
25 #include <QVBoxLayout>
26 #include <q3header.h>
28 #include <klocale.h>
29 #include "categoryselectdialog.h"
30 #include "categoryhierarchyreader.h"
31 #include "autoselectingchecklistitem.h"
33 #include "kpimprefs.h"
35 using namespace KPIM;
38 CategorySelectWidget::CategorySelectWidget(QWidget *parent, KPimPrefs *prefs)
39 : QWidget(parent), mPrefs( prefs )
41 mWidgets = new CategorySelectWidgetBase(this);
42 connect( mWidgets->mButtonEdit, SIGNAL(clicked()),
43 SIGNAL(editCategories()) );
44 connect( mWidgets->mButtonClear, SIGNAL(clicked()),
45 SLOT(clear()) );
48 CategorySelectWidget::~CategorySelectWidget()
52 Q3ListView *CategorySelectWidget::listView() const
54 return mWidgets->mCategories;
57 void CategorySelectWidget::hideButton()
59 mWidgets->mButtonEdit->hide();
60 mWidgets->mButtonClear->hide();
63 void CategorySelectWidget::setCategories( const QStringList &categoryList )
65 mWidgets->mCategories->clear();
66 mCategoryList.clear();
68 QStringList::ConstIterator it;
70 for ( it = categoryList.begin(); it != categoryList.end(); ++it )
71 if ( !mPrefs->mCustomCategories.contains( *it ) )
72 mPrefs->mCustomCategories.append( *it );
74 CategoryHierarchyReaderQListView( mWidgets->mCategories, false, true ).
75 read( mPrefs->mCustomCategories );
78 void CategorySelectWidget::setSelected(const QStringList &selList)
80 clear();
81 QStringList::ConstIterator it;
82 for ( it = selList.begin(); it != selList.end(); ++it ) {
83 QStringList path = CategoryHierarchyReader::path( *it );
84 Q3CheckListItem *item = (Q3CheckListItem *)mWidgets->mCategories->firstChild();
85 while (item) {
86 if (item->text() == path.first()) {
87 if ( path.count() == 1 ) {
88 item->setOn(true);
89 break;
90 } else {
91 item = (Q3CheckListItem *)item->firstChild();
92 path.pop_front();
94 } else
95 item = (Q3CheckListItem *)item->nextSibling();
100 static QStringList getSelectedCategories( const Q3ListView *categoriesView )
102 QStringList categories;
103 Q3CheckListItem *item = (Q3CheckListItem *)categoriesView->firstChild();
104 QStringList path;
105 while (item) {
106 path.append( item->text() );
107 if (item->isOn()) {
108 QStringList _path = path;
109 _path.replaceInStrings( KPimPrefs::categorySeparator, QString( "\\" ) +
110 KPimPrefs::categorySeparator );
111 categories.append( _path.join( KPimPrefs::categorySeparator ) );
113 if ( item->firstChild() ) {
114 item = (Q3CheckListItem *)item->firstChild();
115 } else {
116 Q3CheckListItem *next_item = 0;
117 while ( !next_item && item ) {
118 path.pop_back();
119 next_item = (Q3CheckListItem *)item->nextSibling();
120 item = (Q3CheckListItem *)item->parent();
122 item = next_item;
125 return categories;
128 void CategorySelectWidget::clear()
130 Q3CheckListItem *item = (Q3CheckListItem *)mWidgets->mCategories->firstChild();
131 while (item) {
132 item->setOn( false );
133 if ( item->firstChild() ) {
134 item = (Q3CheckListItem *)item->firstChild();
135 } else {
136 Q3CheckListItem *next_item = 0;
137 while ( !next_item && item ) {
138 next_item = (Q3CheckListItem *)item->nextSibling();
139 item = (Q3CheckListItem *)item->parent();
141 item = next_item;
146 void CategorySelectWidget::setAutoselectChildren( bool autoselectChildren )
148 for ( Q3ListViewItemIterator it( mWidgets->mCategories ); it.current(); ++it)
149 ( ( AutoselectingCheckListItem *) it.current() )->
150 setAutoselectChildren( autoselectChildren );
153 void CategorySelectWidget::hideHeader()
155 mWidgets->mCategories->header()->hide();
158 QStringList CategorySelectWidget::selectedCategories() const
160 return mCategoryList;
163 void CategorySelectWidget::setCategoryList(const QStringList &categories)
165 mCategoryList = categories;
168 CategorySelectDialog::CategorySelectDialog( KPimPrefs *prefs, QWidget* parent,
169 const char* name, bool modal )
170 : KDialog( parent )
172 setCaption( i18n( "Select Categories" ) );
173 setModal( modal );
174 setButtons( Ok|Apply|Cancel|Help );
175 setObjectName( name );
176 QWidget *page = new QWidget;
177 setMainWidget( page );
178 QVBoxLayout *lay = new QVBoxLayout( page );
180 mWidgets = new CategorySelectWidget(this,prefs);
181 mWidgets->setObjectName( "CategorySelection" );
182 mWidgets->hideHeader();
183 lay->addWidget(mWidgets);
185 mWidgets->setCategories();
187 connect( mWidgets, SIGNAL(editCategories()),
188 SIGNAL(editCategories()) );
191 connect( this, SIGNAL( okClicked() ), this, SLOT( slotOk() ) );
192 connect( this, SIGNAL( applyClicked() ), this, SLOT( slotApply() ) );
195 CategorySelectDialog::~CategorySelectDialog()
197 delete mWidgets;
200 QStringList CategorySelectDialog::selectedCategories() const
202 return mWidgets->selectedCategories();
205 void CategorySelectDialog::slotApply()
207 QStringList categories = getSelectedCategories(mWidgets->listView());
209 QString categoriesStr = categories.join(", ");
211 mWidgets->setCategoryList(categories);
213 emit categoriesSelected(categories);
214 emit categoriesSelected(categoriesStr);
217 void CategorySelectDialog::slotOk()
219 slotApply();
220 accept();
223 void CategorySelectDialog::updateCategoryConfig()
225 QStringList selected = getSelectedCategories( mWidgets->listView() );
227 mWidgets->setCategories();
229 mWidgets->setSelected(selected);
232 void CategorySelectDialog::setAutoselectChildren( bool autoselectChildren )
234 mWidgets->setAutoselectChildren(autoselectChildren);
237 void CategorySelectDialog::setCategoryList(const QStringList &categories)
239 mWidgets->setCategoryList(categories);
242 void CategorySelectDialog::setSelected( const QStringList &selList )
244 mWidgets->setSelected(selList);
248 #include "categoryselectdialog.moc"