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 "resourceview.h"
00026
00027 #include <klistview.h>
00028 #include <klocale.h>
00029 #include <kdebug.h>
00030 #include <kglobal.h>
00031 #include <kmessagebox.h>
00032 #include <kresources/resource.h>
00033 #include <kresources/configdialog.h>
00034 #include <kinputdialog.h>
00035
00036 #include <qlayout.h>
00037 #include <qlabel.h>
00038
00039 using namespace KCal;
00040
00041 ResourceViewFactory::ResourceViewFactory( KCal::CalendarResources *calendar,
00042 CalendarView *view )
00043 {
00044 mCalendar = calendar;
00045 mView = view;
00046 }
00047
00048 CalendarViewExtension *ResourceViewFactory::create( QWidget *parent )
00049 {
00050 ResourceView *view = new ResourceView( mCalendar->resourceManager(), parent );
00051 view->updateView();
00052 QObject::connect( view, SIGNAL( resourcesChanged() ),
00053 mView, SLOT( updateView() ) );
00054 QObject::connect( mCalendar, SIGNAL( signalResourceAdded( ResourceCalendar * ) ),
00055 view, SLOT( addResourceItem( ResourceCalendar * ) ) );
00056
00057 return view;
00058 }
00059
00060 ResourceItem::ResourceItem( ResourceCalendar *resource, ResourceView *view,
00061 KListView *parent )
00062 : QCheckListItem( parent, resource->resourceName(), CheckBox ),
00063 mResource( resource ), mView( view )
00064 {
00065 mStartUp = true;
00066 setOn( mResource->isActive() );
00067 mStartUp = false;
00068 }
00069
00070 void ResourceItem::stateChange( bool active )
00071 {
00072 if ( mStartUp )
00073 return;
00074
00075 if ( active ) {
00076 mResource->open();
00077 mResource->load();
00078 } else {
00079 mResource->save();
00080 mResource->close();
00081 }
00082 mResource->setActive( active );
00083
00084 mView->emitResourcesChanged();
00085 }
00086
00087 ResourceView::ResourceView( KCal::CalendarResourceManager *manager,
00088 QWidget *parent, const char *name )
00089 : CalendarViewExtension( parent, name ),
00090 mManager( manager )
00091 {
00092 QBoxLayout *topLayout = new QVBoxLayout( this );
00093
00094 mListView = new KListView( this );
00095 mListView->addColumn( i18n("Calendar") );
00096 mListView->setResizeMode( QListView::LastColumn );
00097 topLayout->addWidget( mListView );
00098
00099 QHBox *buttonBox = new QHBox( this );
00100 topLayout->addWidget( buttonBox );
00101
00102 mAddButton = new QPushButton( i18n("Add..."), buttonBox, "add" );
00103 mDeleteButton = new QPushButton( i18n("Remove"), buttonBox, "del" );
00104 mEditButton = new QPushButton( i18n("Edit..."), buttonBox, "edit" );
00105 mDeleteButton->setDisabled( true );
00106 mEditButton->setDisabled( true );
00107
00108 connect( mListView, SIGNAL( clicked( QListViewItem * ) ),
00109 SLOT( currentChanged( QListViewItem * ) ) );
00110 connect( mAddButton, SIGNAL( clicked() ), SLOT( addResource() ) );
00111 connect( mDeleteButton, SIGNAL( clicked() ), SLOT( removeResource() ) );
00112 connect( mEditButton, SIGNAL( clicked() ), SLOT( editResource() ) );
00113 connect( mListView, SIGNAL( doubleClicked ( QListViewItem *, const QPoint &, int ) ), SLOT( editResource() ) );
00114 updateView();
00115 }
00116
00117 ResourceView::~ResourceView()
00118 {
00119 }
00120
00121 void ResourceView::updateView()
00122 {
00123 mListView->clear();
00124
00125 KCal::CalendarResourceManager::Iterator it;
00126 for( it = mManager->begin(); it != mManager->end(); ++it ) {
00127 addResourceItem( *it );
00128 }
00129 }
00130
00131 void ResourceView::emitResourcesChanged()
00132 {
00133 emit resourcesChanged();
00134 }
00135
00136 void ResourceView::addResource()
00137 {
00138 kdDebug(5850) << "ResourceView::addResource()" << endl;
00139 QStringList types = mManager->resourceTypeNames();
00140 QStringList descs = mManager->resourceTypeDescriptions();
00141 bool ok = false;
00142 QString desc = KInputDialog::getItem( i18n( "Resource Configuration" ),
00143 i18n( "Please select type of the new resource:" ), descs, 0, false, &ok,
00144 this );
00145 if ( !ok )
00146 return;
00147
00148 QString type = types[ descs.findIndex( desc ) ];
00149
00150
00151 ResourceCalendar *resource = mManager->createResource( type );
00152 if( !resource ) {
00153 KMessageBox::error( this, i18n("<qt>Unable to create resource of type <b>%1</b>.</qt>")
00154 .arg( type ) );
00155 return;
00156 }
00157
00158 resource->setResourceName( i18n("%1 resource").arg( type ) );
00159
00160 KRES::ConfigDialog dlg( this, QString("calendar"), resource,
00161 "KRES::ConfigDialog" );
00162
00163 if ( dlg.exec() ) {
00164 mManager->add( resource );
00165 addResourceItem( resource );
00166 } else {
00167 delete resource;
00168 resource = 0;
00169 }
00170 }
00171
00172 void ResourceView::addResourceItem( ResourceCalendar *resource )
00173 {
00174 new ResourceItem( resource, this, mListView );
00175 }
00176
00177 void ResourceView::removeResource()
00178 {
00179 QListViewItem *item = mListView->currentItem();
00180 ResourceItem *rItem = static_cast<ResourceItem *>( item );
00181
00182 if ( !rItem )
00183 return;
00184
00185 int km = KMessageBox::warningYesNo( this,
00186 i18n("<qt>Do you really want to delete the resource <b>%1</b>?</qt>")
00187 .arg( rItem->resource()->resourceName() ) );
00188 if ( km == KMessageBox::No ) return;
00189
00190
00191 #if 0
00192 if ( rItem->resource() == mManager->standardResource() ) {
00193 KMessageBox::sorry( this,
00194 i18n( "You cannot remove your standard resource!" ) );
00195 return;
00196 }
00197 #endif
00198
00199 mManager->remove( rItem->resource() );
00200
00201 mListView->takeItem( item );
00202 delete item;
00203 }
00204
00205 void ResourceView::editResource()
00206 {
00207 QListViewItem *item = mListView->currentItem();
00208 ResourceItem *rItem = static_cast<ResourceItem *>( item );
00209 if ( !rItem )
00210 return;
00211
00212 ResourceCalendar *resource = rItem->resource();
00213
00214 KRES::ConfigDialog dlg( this, QString("calendar"), resource,
00215 "KRES::ConfigDialog" );
00216
00217 if ( dlg.exec() ) {
00218 rItem->setText( 0, resource->resourceName() );
00219
00220 mManager->change( resource );
00221 }
00222 }
00223
00224 void ResourceView::currentChanged( QListViewItem *item)
00225 {
00226 bool selected = true;
00227 if ( !item ) selected = false;
00228 mDeleteButton->setEnabled( selected );
00229 mEditButton->setEnabled( selected );
00230 }
00231
00232 #include "resourceview.moc"