00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#include <qlayout.h>
00026
#include <qcheckbox.h>
00027
#include <qgroupbox.h>
00028
#include <qlabel.h>
00029
#include <qlineedit.h>
00030
#include <qlistview.h>
00031
00032
#include <klocale.h>
00033
#include <kmessagebox.h>
00034
#include <ktrader.h>
00035
00036
00037
#include "kocore.h"
00038
#include "koprefs.h"
00039
#include "calendarview.h"
00040
00041
#include "plugindialog.h"
00042
00043
class PluginItem :
public QCheckListItem {
00044
public:
00045 PluginItem(
QListView *parent, KService::Ptr service ) :
00046
QCheckListItem( parent, service->name(),
QCheckListItem::CheckBox ), mService( service )
00047 {
00048 }
00049
00050 KService::Ptr service() {
return mService; }
00051
00052
private:
00053 KService::Ptr mService;
00054 };
00055
00056
00060 PluginDialog::PluginDialog(
QWidget *parent )
00061 : KDialogBase( Plain, i18n(
"Configure Plugins"), Ok | Cancel | User1, Ok,
00062 parent, 0, false, false, KGuiItem( i18n(
"Configure..."),
"configure") )
00063 {
00064
QFrame *topFrame = plainPage();
00065
QVBoxLayout *topLayout =
new QVBoxLayout( topFrame, 0, spacingHint() );
00066
00067 mListView =
new QListView( topFrame );
00068 mListView->addColumn( i18n(
"Name") );
00069 topLayout->addWidget( mListView );
00070
00071 buildList();
00072
00073 connect( mListView, SIGNAL( selectionChanged(
QListViewItem* ) ),
00074
this, SLOT( selectionChanged(
QListViewItem* ) ) );
00075
00076 connect(
this, SIGNAL( user1Clicked() ),SLOT( configure() ) );
00077
00078 mMainView = dynamic_cast<CalendarView *>( parent );
00079
00080 selectionChanged( 0 );
00081 }
00082
00083 PluginDialog::~PluginDialog()
00084 {
00085 }
00086
00087
void PluginDialog::slotCancel()
00088 {
00089 buildList();
00090 reject();
00091 }
00092
00093
void PluginDialog::buildList()
00094 {
00095 mListView->clear();
00096 KTrader::OfferList plugins = KOCore::self()->availablePlugins();
00097 plugins += KOCore::self()->availableParts();
00098
00099
QStringList selectedPlugins = KOPrefs::instance()->mSelectedPlugins;
00100
00101 KTrader::OfferList::ConstIterator it;
00102
for( it = plugins.begin(); it != plugins.end(); ++it ) {
00103
QCheckListItem *item =
new PluginItem( mListView, *it );
00104
if ( selectedPlugins.find( (*it)->desktopEntryName() ) !=
00105 selectedPlugins.end() ) {
00106 item->setOn(
true );
00107 }
00108 }
00109 }
00110
00111
void PluginDialog::slotOk()
00112 {
00113
QStringList selectedPlugins;
00114
00115 PluginItem *item = static_cast<PluginItem *>( mListView->firstChild() );
00116
while( item ) {
00117
if( item->isOn() ) {
00118 selectedPlugins.append( item->service()->desktopEntryName() );
00119 }
00120 item = static_cast<PluginItem *>( item->nextSibling() );
00121 }
00122
00123 KOPrefs::instance()->mSelectedPlugins = selectedPlugins;
00124 emit configChanged();
00125
if ( mMainView ) mMainView->updateView();
00126
00127 accept();
00128 }
00129
00130
void PluginDialog::configure()
00131 {
00132 PluginItem *item = static_cast<PluginItem *>( mListView->selectedItem() );
00133
if ( !item )
return;
00134
00135 KOrg::Plugin *plugin = KOCore::self()->loadPlugin( item->service() );
00136
00137
if ( plugin ) {
00138 plugin->configure(
this );
00139
delete plugin;
00140 }
else {
00141 KMessageBox::sorry(
this, i18n(
"Unable to configure this plugin" ) );
00142 }
00143 }
00144
00145
void PluginDialog::selectionChanged(
QListViewItem *i )
00146 {
00147 PluginItem *item = dynamic_cast<PluginItem*>( i );
00148
if ( !item ) {
00149 enableButton( User1,
false );
00150
return;
00151 }
00152
00153
QVariant variant = item->service()->property(
"X-KDE-KOrganizer-HasSettings" );
00154
00155
bool hasSettings =
true;
00156
if ( variant.isValid() )
00157 hasSettings = variant.toBool();
00158
00159 enableButton( User1, hasSettings );
00160 }
00161
00162
#include "plugindialog.moc"