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
00026 #include "resourceview.h"
00027
00028 #include <dcopref.h>
00029 #include <kcolordialog.h>
00030 #include <kdialog.h>
00031 #include <klistview.h>
00032 #include <klocale.h>
00033 #include <kdebug.h>
00034 #include <kglobal.h>
00035 #include <kmessagebox.h>
00036 #include <kinputdialog.h>
00037 #include <kiconloader.h>
00038 #include <kresources/resource.h>
00039 #include <kresources/configdialog.h>
00040 #include <libkcal/calendarresources.h>
00041 #include <kconfig.h>
00042
00043 #include <qhbox.h>
00044 #include <qheader.h>
00045 #include <qlayout.h>
00046 #include <qlabel.h>
00047 #include <qpainter.h>
00048 #include <qpushbutton.h>
00049 #include <qpopupmenu.h>
00050 #include <qtooltip.h>
00051 #include <qwhatsthis.h>
00052
00053 #include "koprefs.h"
00054
00055 using namespace KCal;
00056
00057 ResourceViewFactory::ResourceViewFactory( KCal::CalendarResources *calendar,
00058 CalendarView *view )
00059 : mCalendar( calendar ), mView( view ), mResourceView( 0 )
00060 {
00061 }
00062
00063 CalendarViewExtension *ResourceViewFactory::create( QWidget *parent )
00064 {
00065 mResourceView = new ResourceView( mCalendar, parent );
00066
00067 QObject::connect( mResourceView, SIGNAL( resourcesChanged() ),
00068 mView, SLOT( resourcesChanged() ) );
00069 QObject::connect( mResourceView, SIGNAL( resourcesChanged() ),
00070 mView, SLOT( updateCategories() ) );
00071
00072 QObject::connect( mCalendar,
00073 SIGNAL( signalResourceAdded( ResourceCalendar * ) ),
00074 mResourceView,
00075 SLOT( addResourceItem( ResourceCalendar * ) ) );
00076 QObject::connect( mCalendar,
00077 SIGNAL( signalResourceModified( ResourceCalendar * ) ),
00078 mResourceView,
00079 SLOT( updateResourceItem( ResourceCalendar * ) ) );
00080 QObject::connect( mCalendar, SIGNAL( signalResourceAdded( ResourceCalendar * ) ),
00081 mView, SLOT( updateCategories() ) );
00082 QObject::connect( mCalendar, SIGNAL( signalResourceModified( ResourceCalendar * ) ),
00083 mView, SLOT( updateCategories() ) );
00084
00085 return mResourceView;
00086 }
00087
00088 ResourceView *ResourceViewFactory::resourceView() const
00089 {
00090 return mResourceView;
00091 }
00092
00093 ResourceItem::ResourceItem( ResourceCalendar *resource, ResourceView *view,
00094 KListView *parent )
00095 : QCheckListItem( parent, resource->resourceName(), CheckBox ),
00096 mResource( resource ), mView( view ), mBlockStateChange( false ),
00097 mIsSubresource( false ), mResourceIdentifier( QString::null ),
00098 mSubItemsCreated( false ), mIsStandardResource( false )
00099 {
00100 mResourceColor = QColor();
00101 setGuiState();
00102
00103 if ( mResource->isActive() ) {
00104 createSubresourceItems();
00105 }
00106 }
00107
00108 void ResourceItem::createSubresourceItems()
00109 {
00110 const QStringList subresources = mResource->subresources();
00111 if ( !subresources.isEmpty() ) {
00112 setOpen( true );
00113 setExpandable( true );
00114
00115 QStringList::ConstIterator it;
00116 for ( it=subresources.begin(); it!=subresources.end(); ++it ) {
00117 ResourceItem *item = new ResourceItem( mResource, *it, mResource->labelForSubresource( *it ),
00118 mView, this );
00119 QColor resourceColor = *KOPrefs::instance()->resourceColor( *it );
00120 item->setResourceColor( resourceColor );
00121 item->update();
00122 }
00123 }
00124 mSubItemsCreated = true;
00125 }
00126
00127 ResourceItem::ResourceItem( KCal::ResourceCalendar *resource,
00128 const QString& sub, const QString& label,
00129 ResourceView *view, ResourceItem* parent )
00130
00131 : QCheckListItem( parent, label, CheckBox ), mResource( resource ),
00132 mView( view ), mBlockStateChange( false ), mIsSubresource( true ),
00133 mSubItemsCreated( false ), mIsStandardResource( false )
00134 {
00135 mResourceColor = QColor();
00136 mResourceIdentifier = sub;
00137 setGuiState();
00138 }
00139
00140 void ResourceItem::setGuiState()
00141 {
00142 mBlockStateChange = true;
00143 if ( mIsSubresource )
00144 setOn( mResource->subresourceActive( mResourceIdentifier ) );
00145 else
00146 setOn( mResource->isActive() );
00147 mBlockStateChange = false;
00148 }
00149
00150 void ResourceItem::stateChange( bool active )
00151 {
00152 if ( mBlockStateChange ) return;
00153
00154 if ( mIsSubresource ) {
00155 mResource->setSubresourceActive( mResourceIdentifier, active );
00156 } else {
00157 if ( active ) {
00158 if ( mResource->load() ) {
00159 mResource->setActive( true );
00160 if ( !mSubItemsCreated )
00161 createSubresourceItems();
00162 }
00163 } else {
00164
00165
00166 mView->requestClose( mResource );
00167 if ( mResource->save() ) {
00168 mResource->setActive( false );
00169 }
00170 }
00171
00172 setOpen( mResource->isActive() && childCount() > 0 );
00173
00174 setGuiState();
00175 }
00176
00177 mView->emitResourcesChanged();
00178 }
00179
00180 void ResourceItem::update()
00181 {
00182 setGuiState();
00183 }
00184
00185 void ResourceItem::setResourceColor(QColor& color)
00186 {
00187 if ( color.isValid() ) {
00188 if ( mResourceColor != color ) {
00189 QPixmap px(height()-4,height()-4);
00190 mResourceColor = color;
00191 px.fill(color);
00192 setPixmap(0,px);
00193 }
00194 } else {
00195 mResourceColor = color ;
00196 setPixmap(0,0);
00197 }
00198 }
00199
00200 void ResourceItem::setStandardResource( bool std )
00201 {
00202 if ( mIsStandardResource != std ) {
00203 mIsStandardResource = std;
00204 repaint();
00205 }
00206 }
00207
00208 void ResourceItem::paintCell(QPainter *p, const QColorGroup &cg,
00209 int column, int width, int alignment)
00210 {
00211 QFont oldFont = p->font();
00212 QFont newFont = oldFont;
00213 newFont.setBold( mIsStandardResource && !mIsSubresource );
00214 p->setFont( newFont );
00215 QCheckListItem::paintCell( p, cg, column, width, alignment );
00216 p->setFont( oldFont );
00217
00218
00219
00220 }
00221
00222
00223 ResourceView::ResourceView( KCal::CalendarResources *calendar,
00224 QWidget *parent, const char *name )
00225 : CalendarViewExtension( parent, name ), mCalendar( calendar )
00226 {
00227 QBoxLayout *topLayout = new QVBoxLayout( this, 0, KDialog::spacingHint() );
00228
00229 QHBoxLayout *buttonBox = new QHBoxLayout();
00230 buttonBox->setSpacing( KDialog::spacingHint() );
00231 topLayout->addLayout( buttonBox );
00232
00233 QLabel *calLabel = new QLabel( i18n( "Calendar" ), this );
00234 buttonBox->addWidget( calLabel );
00235 buttonBox->addStretch( 1 );
00236
00237 mAddButton = new QPushButton( this, "add" );
00238 mAddButton->setIconSet( SmallIconSet( "add" ) );
00239 buttonBox->addWidget( mAddButton );
00240 QToolTip::add( mAddButton, i18n( "Add calendar" ) );
00241 QWhatsThis::add( mAddButton,
00242 i18n( "<qt><p>Press this button to add a resource to "
00243 "KOrganizer.</p>"
00244 "<p>Events, journal entries and to-dos are retrieved "
00245 "and stored on resources. Available "
00246 "resources include groupware servers, local files, "
00247 "journal entries as blogs on a server, etc... </p>"
00248 "<p>If you have more than one active resource, "
00249 "when creating incidents you will either automatically "
00250 "use the default resource or be prompted "
00251 "to select the resource to use.</p></qt>" ) );
00252 mEditButton = new QPushButton( this, "edit" );
00253 mEditButton->setIconSet( SmallIconSet( "edit" ) );
00254 buttonBox->addWidget( mEditButton );
00255 QToolTip::add( mEditButton, i18n( "Edit calendar settings" ) );
00256 QWhatsThis::add( mEditButton,
00257 i18n( "Press this button to edit the resource currently "
00258 "selected on the KOrganizer resources list above." ) );
00259 mDeleteButton = new QPushButton( this, "del" );
00260 mDeleteButton->setIconSet( SmallIconSet( "remove" ) );
00261 buttonBox->addWidget( mDeleteButton );
00262 QToolTip::add( mDeleteButton, i18n( "Remove calendar" ) );
00263 QWhatsThis::add( mDeleteButton,
00264 i18n( "Press this button to delete the resource currently "
00265 "selected on the KOrganizer resources list above." ) );
00266 mDeleteButton->setDisabled( true );
00267 mEditButton->setDisabled( true );
00268
00269 mListView = new KListView( this );
00270 mListView->header()->hide();
00271 QWhatsThis::add( mListView,
00272 i18n( "<qt><p>Select on this list the active KOrganizer "
00273 "resources. Check the resource box to make it "
00274 "active. Press the \"Add...\" button below to add new "
00275 "resources to the list.</p>"
00276 "<p>Events, journal entries and to-dos are retrieved "
00277 "and stored on resources. Available "
00278 "resources include groupware servers, local files, "
00279 "journal entries as blogs on a server, etc...</p>"
00280 "<p>If you have more than one active resource, "
00281 "when creating incidents you will either automatically "
00282 "use the default resource or be prompted "
00283 "to select the resource to use.</p></qt>" ) );
00284 mListView->addColumn( i18n("Calendar") );
00285 mListView->setResizeMode( QListView::LastColumn );
00286 topLayout->addWidget( mListView );
00287
00288 connect( mListView, SIGNAL( clicked( QListViewItem * ) ),
00289 SLOT( currentChanged( QListViewItem * ) ) );
00290 connect( mAddButton, SIGNAL( clicked() ), SLOT( addResource() ) );
00291 connect( mDeleteButton, SIGNAL( clicked() ), SLOT( removeResource() ) );
00292 connect( mEditButton, SIGNAL( clicked() ), SLOT( editResource() ) );
00293 connect( mListView, SIGNAL( doubleClicked ( QListViewItem *, const QPoint &,
00294 int ) ),
00295 SLOT( editResource() ) );
00296 connect( mListView, SIGNAL( contextMenuRequested ( QListViewItem *,
00297 const QPoint &, int ) ),
00298 SLOT( contextMenuRequested( QListViewItem *, const QPoint &,
00299 int ) ) );
00300
00301 updateView();
00302 }
00303
00304 ResourceView::~ResourceView()
00305 {
00306 }
00307
00308 void ResourceView::updateView()
00309 {
00310 mListView->clear();
00311
00312 KCal::CalendarResourceManager *manager = mCalendar->resourceManager();
00313
00314 KCal::CalendarResourceManager::Iterator it;
00315 for( it = manager->begin(); it != manager->end(); ++it ) {
00316 addResourceItem( *it );
00317 }
00318 }
00319
00320 void ResourceView::emitResourcesChanged()
00321 {
00322 mCalendar->resourceManager()->writeConfig();
00323 emit resourcesChanged();
00324 }
00325
00326 void ResourceView::addResource()
00327 {
00328 bool ok = false;
00329 KCal::CalendarResourceManager *manager = mCalendar->resourceManager();
00330 ResourceItem *i = static_cast<ResourceItem*>( mListView->selectedItem() );
00331 if ( i && ( i->isSubresource() || i->resource()->canHaveSubresources() ) ) {
00332 const QString folderName = KInputDialog::getText( i18n( "Add Subresource" ),
00333 i18n( "Please enter a name for the new subresource" ), QString::null,
00334 &ok, this );
00335 if ( !ok )
00336 return;
00337 const QString parentId = i->isSubresource() ? i->resourceIdentifier() : QString:: null;
00338 if ( !i->resource()->addSubresource( folderName, parentId ) ) {
00339 KMessageBox::error( this, i18n("<qt>Unable to create subresource <b>%1</b>.</qt>")
00340 .arg( folderName ) );
00341 }
00342 return;
00343 }
00344
00345 QStringList types = manager->resourceTypeNames();
00346 QStringList descs = manager->resourceTypeDescriptions();
00347 QString desc = KInputDialog::getItem( i18n( "Resource Configuration" ),
00348 i18n( "Please select type of the new resource:" ), descs, 0, false, &ok,
00349 this );
00350 if ( !ok )
00351 return;
00352
00353 QString type = types[ descs.findIndex( desc ) ];
00354
00355
00356 ResourceCalendar *resource = manager->createResource( type );
00357 if( !resource ) {
00358 KMessageBox::error( this, i18n("<qt>Unable to create resource of type <b>%1</b>.</qt>")
00359 .arg( type ) );
00360 return;
00361 }
00362
00363 resource->setResourceName( i18n("%1 resource").arg( type ) );
00364
00365 KRES::ConfigDialog *dlg = new KRES::ConfigDialog( this, QString("calendar"), resource,
00366 "KRES::ConfigDialog" );
00367
00368 bool success = true;
00369 if ( !dlg || !dlg->exec() )
00370 success = false;
00371
00372 if ( success ) {
00373 resource->setTimeZoneId( KOPrefs::instance()->mTimeZoneId );
00374 if ( resource->isActive() && ( !resource->open() || !resource->load() ) ) {
00375
00376
00377 KMessageBox::error( this, i18n("Unable to create the resource.")
00378 .arg( type ) );
00379 success = false;
00380 }
00381 }
00382
00383 if ( success ) {
00384 manager->add( resource );
00385
00386
00387
00388 mCalendar->resourceAdded( resource );
00389 }
00390
00391 if ( !success )
00392 delete resource;
00393
00394 delete dlg;
00395
00396
00397 emitResourcesChanged();
00398 }
00399
00400 void ResourceView::addResourceItem( ResourceCalendar *resource )
00401 {
00402
00403 ResourceItem *item=new ResourceItem( resource, this, mListView );
00404
00405
00406
00407 if ( !resource->canHaveSubresources() || resource->subresources().isEmpty() ) {
00408 QColor resourceColor = *KOPrefs::instance()->resourceColor(resource->identifier());
00409 item->setResourceColor(resourceColor);
00410 item->update();
00411 }
00412
00413 connect( resource, SIGNAL( signalSubresourceAdded( ResourceCalendar *,
00414 const QString &,
00415 const QString &,
00416 const QString & ) ),
00417 SLOT( slotSubresourceAdded( ResourceCalendar *, const QString &,
00418 const QString &, const QString & ) ) );
00419
00420 connect( resource, SIGNAL( signalSubresourceRemoved( ResourceCalendar *,
00421 const QString &,
00422 const QString & ) ),
00423 SLOT( slotSubresourceRemoved( ResourceCalendar *, const QString &,
00424 const QString & ) ) );
00425
00426 connect( resource, SIGNAL( resourceSaved( ResourceCalendar * ) ),
00427 SLOT( closeResource( ResourceCalendar * ) ) );
00428
00429 updateResourceList();
00430 emit resourcesChanged();
00431 }
00432
00433
00434 void ResourceView::slotSubresourceAdded( ResourceCalendar *calendar,
00435 const QString& ,
00436 const QString& resource,
00437 const QString& label)
00438 {
00439 QListViewItem *i = mListView->findItem( calendar->resourceName(), 0 );
00440 if ( !i )
00441
00442 return;
00443
00444 if ( findItemByIdentifier( resource ) ) return;
00445
00446 ResourceItem *item = static_cast<ResourceItem *>( i );
00447 ResourceItem *newItem = new ResourceItem( calendar, resource, label, this, item );
00448 QColor resourceColor = *KOPrefs::instance()->resourceColor( resource );
00449 newItem->setResourceColor( resourceColor );
00450 }
00451
00452
00453 void ResourceView::slotSubresourceRemoved( ResourceCalendar * ,
00454 const QString &,
00455 const QString &resource )
00456 {
00457 delete findItemByIdentifier( resource );
00458 emit resourcesChanged();
00459 }
00460
00461 void ResourceView::closeResource( ResourceCalendar *r )
00462 {
00463 if ( mResourcesToClose.find( r ) >= 0 ) {
00464 r->close();
00465 mResourcesToClose.remove( r );
00466 }
00467 }
00468
00469 void ResourceView::updateResourceItem( ResourceCalendar *resource )
00470 {
00471 ResourceItem *item = findItem( resource );
00472 if ( item ) {
00473 item->update();
00474 }
00475 }
00476
00477 ResourceItem *ResourceView::currentItem()
00478 {
00479 QListViewItem *item = mListView->currentItem();
00480 ResourceItem *rItem = static_cast<ResourceItem *>( item );
00481 return rItem;
00482 }
00483
00484 void ResourceView::removeResource()
00485 {
00486 ResourceItem *item = currentItem();
00487 if ( !item ) return;
00488
00489 const QString warningMsg = item->isSubresource() ?
00490 i18n("<qt>Do you really want to remove the subresource <b>%1</b>? "
00491 "Note that its contents will be completely deleted. This "
00492 "operation cannot be undone. </qt>").arg( item->text( 0 ) ) :
00493 i18n("<qt>Do you really want to remove the resource <b>%1</b>?</qt>").arg( item->text( 0 ) );
00494
00495 int km = KMessageBox::warningContinueCancel( this, warningMsg, "",
00496 KGuiItem( i18n("&Remove" ), "editdelete") );
00497 if ( km == KMessageBox::Cancel ) return;
00498
00499
00500 #if 0
00501 if ( item->resource() == mCalendar->resourceManager()->standardResource() ) {
00502 KMessageBox::sorry( this,
00503 i18n( "You cannot delete your standard resource." ) );
00504 return;
00505 }
00506 #endif
00507 if ( item->isSubresource() ) {
00508 if ( !item->resource()->removeSubresource( item->resourceIdentifier() ) )
00509 KMessageBox::sorry( this,
00510 i18n ("<qt>Failed to remove the subresource <b>%1</b>. The "
00511 "reason could be that it is a built-in one which cannot "
00512 "be removed, or that the removal of the underlying storage "
00513 "folder failed.</qt>").arg( item->resource()->name() ) );
00514 return;
00515 } else {
00516 mCalendar->resourceManager()->remove( item->resource() );
00517 }
00518 mListView->takeItem( item );
00519 delete item;
00520
00521 updateResourceList();
00522 emit resourcesChanged();
00523 }
00524
00525 void ResourceView::editResource()
00526 {
00527 bool ok = false;
00528 ResourceItem *item = currentItem();
00529 if (!item) return;
00530 ResourceCalendar *resource = item->resource();
00531
00532 if ( item->isSubresource() ) {
00533 if ( resource->type() == "imap" || resource->type() == "scalix" ) {
00534 QString identifier = item->resourceIdentifier();
00535 const QString newResourceName = KInputDialog::getText( i18n( "Rename Subresource" ),
00536 i18n( "Please enter a new name for the subresource" ), item->text(),
00537 &ok, this );
00538 if ( !ok )
00539 return;
00540
00541 DCOPRef ref( "kmail", "KMailICalIface" );
00542 DCOPReply reply = ref.call( "changeResourceUIName", identifier, newResourceName );
00543 if ( !reply.isValid() ) {
00544 kdDebug() << "DCOP Call changeResourceUIName() failed " << endl;
00545 }
00546 } else {
00547 KMessageBox::sorry( this,
00548 i18n ("<qt>Cannot edit the subresource <b>%1</b>.</qt>").arg( item->resource()->name() ) );
00549 }
00550 } else {
00551 KRES::ConfigDialog dlg( this, QString("calendar"), resource,
00552 "KRES::ConfigDialog" );
00553
00554 if ( dlg.exec() ) {
00555 item->setText( 0, resource->resourceName() );
00556
00557 mCalendar->resourceManager()->change( resource );
00558 }
00559 }
00560 emitResourcesChanged();
00561
00562 }
00563
00564 void ResourceView::currentChanged( QListViewItem *item )
00565 {
00566 ResourceItem *i = currentItem();
00567 if ( !item || i->isSubresource() ) {
00568 mDeleteButton->setEnabled( false );
00569 mEditButton->setEnabled( false );
00570 } else {
00571 mDeleteButton->setEnabled( true );
00572 mEditButton->setEnabled( true );
00573 }
00574 }
00575
00576 ResourceItem *ResourceView::findItem( ResourceCalendar *r )
00577 {
00578 QListViewItem *item;
00579 ResourceItem *i = 0;
00580 for( item = mListView->firstChild(); item; item = item->nextSibling() ) {
00581 i = static_cast<ResourceItem *>( item );
00582 if ( i->resource() == r ) break;
00583 }
00584 return i;
00585 }
00586
00587 ResourceItem *ResourceView::findItemByIdentifier( const QString& id )
00588 {
00589 QListViewItem *item;
00590 ResourceItem *i = 0;
00591 for( item = mListView->firstChild(); item; item = item->itemBelow() ) {
00592 i = static_cast<ResourceItem *>( item );
00593 if ( i->resourceIdentifier() == id )
00594 return i;
00595 }
00596 return 0;
00597 }
00598
00599
00600 void ResourceView::contextMenuRequested ( QListViewItem *i,
00601 const QPoint &pos, int )
00602 {
00603 KCal::CalendarResourceManager *manager = mCalendar->resourceManager();
00604 ResourceItem *item = static_cast<ResourceItem *>( i );
00605
00606 QPopupMenu *menu = new QPopupMenu( this );
00607 connect( menu, SIGNAL( aboutToHide() ), menu, SLOT( deleteLater() ) );
00608 if ( item ) {
00609 int reloadId = menu->insertItem( i18n("Re&load"), this,
00610 SLOT( reloadResource() ) );
00611 menu->setItemEnabled( reloadId, item->resource()->isActive() );
00612 int saveId = menu->insertItem( i18n("&Save"), this,
00613 SLOT( saveResource() ) );
00614 menu->setItemEnabled( saveId, item->resource()->isActive() );
00615 menu->insertSeparator();
00616
00617 menu->insertItem( i18n("Show &Info"), this, SLOT( showInfo() ) );
00618
00619 if ( KOPrefs::instance()->agendaViewColors() != KOPrefs::CategoryOnly ) {
00620 QPopupMenu *assignMenu= new QPopupMenu( menu );
00621 assignMenu->insertItem( i18n( "&Assign Color" ), this, SLOT( assignColor() ) );
00622 if ( item->resourceColor().isValid() )
00623 assignMenu->insertItem( i18n( "&Disable Color" ), this, SLOT( disableColor() ) );
00624 menu->insertItem( i18n( "Resources Colors" ), assignMenu );
00625 }
00626
00627 menu->insertItem( i18n("&Edit..."), this, SLOT( editResource() ) );
00628 menu->insertItem( i18n("&Remove"), this, SLOT( removeResource() ) );
00629 if ( item->resource() != manager->standardResource() ) {
00630 menu->insertSeparator();
00631 menu->insertItem( i18n("Use as &Default Calendar"), this,
00632 SLOT( setStandard() ) );
00633 }
00634
00635 menu->insertSeparator();
00636 }
00637 menu->insertItem( i18n("&Add..."), this, SLOT( addResource() ) );
00638
00639 menu->popup( pos );
00640 }
00641
00642 void ResourceView::assignColor()
00643 {
00644 ResourceItem *item = currentItem();
00645 if ( !item )
00646 return;
00647
00648 QColor myColor;
00649 KCal::ResourceCalendar *cal = item->resource();
00650
00651 QString identifier = cal->identifier();
00652 if ( item->isSubresource() )
00653 identifier = item->resourceIdentifier();
00654
00655 QColor defaultColor =*KOPrefs::instance()->resourceColor( identifier );
00656
00657 int result = KColorDialog::getColor( myColor,defaultColor);
00658
00659 if ( result == KColorDialog::Accepted ) {
00660 KOPrefs::instance()->setResourceColor( identifier, myColor );
00661 item->setResourceColor( myColor );
00662 item->update();
00663 emitResourcesChanged();
00664 }
00665 }
00666
00667 void ResourceView::disableColor()
00668 {
00669 ResourceItem *item = currentItem();
00670 if ( !item )
00671 return;
00672 QColor colorInvalid;
00673 KCal::ResourceCalendar *cal = item->resource();
00674 QString identifier = cal->identifier();
00675 if ( item->isSubresource() )
00676 identifier = item->resourceIdentifier();
00677 KOPrefs::instance()->setResourceColor( identifier, colorInvalid );
00678 item->setResourceColor( colorInvalid );
00679 item->update();
00680 emitResourcesChanged();
00681 }
00682 void ResourceView::showInfo()
00683 {
00684 ResourceItem *item = currentItem();
00685 if ( !item ) return;
00686
00687 QString txt = "<qt>" + item->resource()->infoText() + "</qt>";
00688 KMessageBox::information( this, txt );
00689 }
00690
00691 void ResourceView::reloadResource()
00692 {
00693 ResourceItem *item = currentItem();
00694 if ( !item ) return;
00695
00696 ResourceCalendar *r = item->resource();
00697 r->load();
00698 }
00699
00700 void ResourceView::saveResource()
00701 {
00702 ResourceItem *item = currentItem();
00703 if ( !item ) return;
00704
00705 ResourceCalendar *r = item->resource();
00706 r->save();
00707 }
00708
00709 void ResourceView::setStandard()
00710 {
00711 ResourceItem *item = currentItem();
00712 if ( !item ) return;
00713
00714 ResourceCalendar *r = item->resource();
00715 KCal::CalendarResourceManager *manager = mCalendar->resourceManager();
00716 manager->setStandardResource( r );
00717 updateResourceList();
00718 }
00719
00720 void ResourceView::updateResourceList()
00721 {
00722 QListViewItemIterator it( mListView );
00723 ResourceCalendar* stdRes = mCalendar->resourceManager()->standardResource();
00724 while ( it.current() ) {
00725 ResourceItem *item = static_cast<ResourceItem *>( it.current() );
00726 item->setStandardResource( item->resource() == stdRes );
00727 ++it;
00728 }
00729 }
00730
00731 void ResourceView::showButtons( bool visible )
00732 {
00733 if ( visible ) {
00734 mAddButton->show();
00735 mDeleteButton->show();
00736 mEditButton->show();
00737 } else {
00738 mAddButton->hide();
00739 mDeleteButton->hide();
00740 mEditButton->hide();
00741 }
00742 }
00743
00744 void ResourceView::requestClose( ResourceCalendar *r )
00745 {
00746 mResourcesToClose.append( r );
00747 }
00748
00749 #include "resourceview.moc"