diff options
Diffstat (limited to 'kresources/lib/folderconfig.cpp')
-rw-r--r-- | kresources/lib/folderconfig.cpp | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/kresources/lib/folderconfig.cpp b/kresources/lib/folderconfig.cpp new file mode 100644 index 000000000..b02654945 --- /dev/null +++ b/kresources/lib/folderconfig.cpp @@ -0,0 +1,173 @@ +/* + This file is part of libkcal. + + Copyright (c) 2004 Cornelius Schumacher <schumacher@kde.org> + Copyright (c) 2004 Till Adam <adam@kde.org> + Copyright (c) 2005 Reinhold Kainhofer <reinhold@kainhofer.com> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "folderconfig.h" + +#include "folderlister.h" +#include "groupwaredataadaptor.h" +#include "folderlistview.h" + +#include <klistview.h> +#include <klocale.h> +#include <kdebug.h> +#include <kdialog.h> + +#include <qlayout.h> +#include <qgroupbox.h> +#include <qpushbutton.h> +#include <qcombobox.h> +#include <qhbox.h> +#include <qlabel.h> + +using namespace KPIM; + +FolderConfig::FolderConfig( QWidget *parent ) + : QWidget( parent ), mFolderLister( 0 ) +{ + QBoxLayout *topLayout = new QVBoxLayout( this ); + topLayout->addSpacing( KDialog::spacingHint() ); + + QGroupBox *topBox = new QGroupBox( 1, Horizontal, i18n("Folder Selection"), + this ); + topLayout->addWidget( topBox ); + + QPushButton *button = new QPushButton( i18n("Update Folder List"), topBox ); + connect( button, SIGNAL( clicked() ), SIGNAL( updateFoldersClicked() ) ); + + mFolderList = new FolderListView( topBox ); + +/* QHBox *writeBox = new QHBox( topBox ); + + new QLabel( i18n("Write to:"), writeBox ); + + mWriteCombo = new QComboBox( writeBox );*/ +} + +FolderConfig::~FolderConfig() +{ +} + +void FolderConfig::setFolderLister( FolderLister *f ) +{ + mFolderLister = f; + + QValueList<FolderListView::Property> types; + QValueList<FolderLister::ContentType> suptypes( mFolderLister->supportedTypes() ); + if ( suptypes.contains( FolderLister::Event ) ) types << FolderListView::Event; + if ( suptypes.contains( FolderLister::Todo ) ) types << FolderListView::Todo; + if ( suptypes.contains( FolderLister::Journal ) ) types << FolderListView::Journal; + if ( suptypes.contains( FolderLister::Contact ) ) types << FolderListView::Contact; + if ( suptypes.contains( FolderLister::All ) ) types << FolderListView::All; + if ( suptypes.contains( FolderLister::Unknown ) ) types << FolderListView::Unknown; + + mFolderList->setEnabledTypes( types ); + connect( mFolderLister, SIGNAL( foldersRead() ), SLOT( updateFolderList() ) ); +} + +void FolderConfig::retrieveFolderList( const KURL &url ) +{ + kdDebug(7000) << "FolderConfig::retrieveFolderList()" << endl; + if ( !mOldFolderListerURL.isEmpty() ) return; + + if ( mFolderLister->adaptor() ) { + mOldFolderListerURL = mFolderLister->adaptor()->baseURL(); + mFolderLister->adaptor()->setBaseURL( url ); + } + mFolderLister->retrieveFolders( url ); +} + +void FolderConfig::updateFolderList() +{ + mFolderList->clear(); + + QStringList write; + + if ( !mOldFolderListerURL.isEmpty() && mFolderLister->adaptor() ) { + mFolderLister->adaptor()->setBaseURL( mOldFolderListerURL ); + mOldFolderListerURL = KURL(); + } + + FolderLister::Entry::List folders = mFolderLister->folders(); + FolderLister::Entry::List::ConstIterator it; + for( it = folders.begin(); it != folders.end(); ++it ) { + FolderListItem *item = new FolderListItem( mFolderList, (*it) ); + if ( mFolderLister->writeDestinationId( FolderLister::Event ) == (*it).id ) { + item->setDefault( FolderListView::Event ); + } + if ( mFolderLister->writeDestinationId( FolderLister::Todo ) == (*it).id ) { + item->setDefault( FolderListView::Todo ); + } + if ( mFolderLister->writeDestinationId( FolderLister::Journal ) == (*it).id ) { + item->setDefault( FolderListView::Journal ); + } + if ( mFolderLister->writeDestinationId( FolderLister::Contact ) == (*it).id ) { + item->setDefault( FolderListView::Contact ); + } + if ( mFolderLister->writeDestinationId( FolderLister::All ) == (*it).id ) { + item->setDefault( FolderListView::All ); + } + if ( mFolderLister->writeDestinationId( FolderLister::Unknown ) == (*it).id ) { + item->setDefault( FolderListView::Unknown ); + } + } +} + +void FolderConfig::saveSettings() +{ + QPtrList<QListViewItem> lst; + + FolderLister::Entry::List folders; + + QListViewItemIterator it( mFolderList ); + while ( it.current() ) { + FolderListItem *item = dynamic_cast<FolderListItem *>( it.current() ); + if ( item ) { + FolderLister::Entry folder = item->folder(); + folder.active = item->isOn(); + folders.append( folder ); + if ( item->isDefault( FolderListView::Event ) ) { + mFolderLister->setWriteDestinationId( FolderLister::Event, folder.id ); + } + if ( item->isDefault( FolderListView::Todo ) ) { + mFolderLister->setWriteDestinationId( FolderLister::Todo, folder.id ); + } + if ( item->isDefault( FolderListView::Journal ) ) { + mFolderLister->setWriteDestinationId( FolderLister::Journal, folder.id ); + } + if ( item->isDefault( FolderListView::Contact ) ) { + mFolderLister->setWriteDestinationId( FolderLister::Contact, folder.id ); + } + if ( item->isDefault( FolderListView::All ) ) { + mFolderLister->setWriteDestinationId( FolderLister::All, folder.id ); + } + if ( item->isDefault( FolderListView::Unknown ) ) { + mFolderLister->setWriteDestinationId( FolderLister::Unknown, folder.id ); + } + } + ++it; + } + + mFolderLister->setFolders( folders ); +} + +#include "folderconfig.moc" |