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>
29 #include "categoryselectdialog.h"
30 #include "categoryhierarchyreader.h"
31 #include "autoselectingchecklistitem.h"
33 #include "kpimprefs.h"
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()),
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
)
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();
86 if (item
->text() == path
.first()) {
87 if ( path
.count() == 1 ) {
91 item
= (Q3CheckListItem
*)item
->firstChild();
95 item
= (Q3CheckListItem
*)item
->nextSibling();
100 static QStringList
getSelectedCategories( const Q3ListView
*categoriesView
)
102 QStringList categories
;
103 Q3CheckListItem
*item
= (Q3CheckListItem
*)categoriesView
->firstChild();
106 path
.append( item
->text() );
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();
116 Q3CheckListItem
*next_item
= 0;
117 while ( !next_item
&& item
) {
119 next_item
= (Q3CheckListItem
*)item
->nextSibling();
120 item
= (Q3CheckListItem
*)item
->parent();
128 void CategorySelectWidget::clear()
130 Q3CheckListItem
*item
= (Q3CheckListItem
*)mWidgets
->mCategories
->firstChild();
132 item
->setOn( false );
133 if ( item
->firstChild() ) {
134 item
= (Q3CheckListItem
*)item
->firstChild();
136 Q3CheckListItem
*next_item
= 0;
137 while ( !next_item
&& item
) {
138 next_item
= (Q3CheckListItem
*)item
->nextSibling();
139 item
= (Q3CheckListItem
*)item
->parent();
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
)
172 setCaption( i18n( "Select Categories" ) );
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()
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()
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"