20 #include "collectionpropertiesdialog.h"
22 #include "cachepolicy.h"
23 #include "cachepolicypage.h"
24 #include "collection.h"
25 #include "collectiongeneralpropertiespage_p.h"
26 #include "collectionmodifyjob.h"
29 #include <ktabwidget.h>
31 #include <QtGui/QBoxLayout>
33 using namespace Akonadi;
38 class CollectionPropertiesDialog::Private
41 Private( CollectionPropertiesDialog *parent,
const Akonadi::Collection &collection,
const QStringList &pageNames );
45 static void registerBuiltinPages();
49 for (
int i = 0; i < mTabWidget->count(); ++i ) {
50 CollectionPropertiesPage *page =
static_cast<CollectionPropertiesPage*
>( mTabWidget->widget( i ) );
51 page->save( mCollection );
54 CollectionModifyJob *job =
new CollectionModifyJob( mCollection, q );
55 connect( job, SIGNAL(result(KJob*)), q, SLOT(saveResult(KJob*)) );
58 void saveResult( KJob *job )
62 kWarning() << job->errorString();
67 CollectionPropertiesDialog *q;
68 Collection mCollection;
69 QStringList mPageNames;
70 KTabWidget* mTabWidget;
73 typedef QList<CollectionPropertiesPageFactory*> CollectionPropertiesPageFactoryList;
75 K_GLOBAL_STATIC( CollectionPropertiesPageFactoryList, s_pages )
77 static
bool s_defaultPage = true;
79 CollectionPropertiesDialog::Private::Private( CollectionPropertiesDialog *qq, const Akonadi::Collection &collection, const QStringList &pageNames )
81 mCollection( collection ),
82 mPageNames( pageNames )
85 registerBuiltinPages();
88 void CollectionPropertiesDialog::Private::registerBuiltinPages()
90 static bool registered =
false;
95 s_pages->append(
new CollectionGeneralPropertiesPageFactory() );
96 s_pages->append(
new CachePolicyPageFactory() );
101 void CollectionPropertiesDialog::Private::init()
103 QBoxLayout *layout =
new QHBoxLayout( q->mainWidget() );
104 layout->setMargin( 0 );
105 mTabWidget =
new KTabWidget( q->mainWidget() );
106 layout->addWidget( mTabWidget );
108 if ( mPageNames.isEmpty() ) {
109 foreach ( CollectionPropertiesPageFactory *factory, *s_pages ) {
110 CollectionPropertiesPage *page = factory->createWidget( mTabWidget );
111 if ( page->canHandle( mCollection ) ) {
112 mTabWidget->addTab( page, page->pageTitle() );
113 page->load( mCollection );
119 QHash<QString, CollectionPropertiesPage*> pages;
121 foreach ( CollectionPropertiesPageFactory *factory, *s_pages ) {
122 CollectionPropertiesPage *page = factory->createWidget( mTabWidget );
123 const QString pageName = page->objectName();
125 if ( page->canHandle( mCollection ) && mPageNames.contains( pageName ) && !pages.contains( pageName ) ) {
126 pages.insert( page->objectName(), page );
132 foreach (
const QString &pageName, mPageNames ) {
133 CollectionPropertiesPage *page = pages.value( pageName );
135 mTabWidget->addTab( page, page->pageTitle() );
136 page->load( mCollection );
141 q->connect( q, SIGNAL(okClicked()), SLOT(save()) );
142 q->connect( q, SIGNAL(cancelClicked()), SLOT(deleteLater()) );
146 CollectionPropertiesDialog::CollectionPropertiesDialog(
const Collection &collection, QWidget *parent )
148 d( new Private( this, collection, QStringList() ) )
153 CollectionPropertiesDialog::CollectionPropertiesDialog(
const Collection &collection,
const QStringList &pages, QWidget *parent )
155 d( new Private( this, collection, pages ) )
160 CollectionPropertiesDialog::~CollectionPropertiesDialog()
165 void CollectionPropertiesDialog::registerPage( CollectionPropertiesPageFactory *factory )
167 if ( s_pages->isEmpty() && s_defaultPage )
168 Private::registerBuiltinPages();
169 s_pages->append( factory );
172 void CollectionPropertiesDialog::useDefaultPage(
bool defaultPage )
174 s_defaultPage = defaultPage;
177 QString CollectionPropertiesDialog::defaultPageObjectName( DefaultPage page )
181 return QLatin1String(
"Akonadi::CollectionGeneralPropertiesPage" );
183 return QLatin1String(
"Akonadi::CachePolicyPage" );
189 #include "collectionpropertiesdialog.moc"