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 KRES::ConfigDialog *dlg = new KRES::ConfigDialog( this, QString("calendar"), resource,
00364 "KRES::ConfigDialog" );
00365
00366 bool success = true;
00367 if ( !dlg || !dlg->exec() )
00368 success = false;
00369
00370 if ( success ) {
00371 resource->setTimeZoneId( KOPrefs::instance()->mTimeZoneId );
00372 if ( resource->isActive() && ( !resource->open() || !resource->load() ) ) {
00373
00374
00375 KMessageBox::error( this, i18n("Unable to create the resource.")
00376 .arg( type ) );
00377 success = false;
00378 }
00379 }
00380
00381 if ( success ) {
00382 manager->add( resource );
00383
00384
00385
00386 mCalendar->resourceAdded( resource );
00387 }
00388
00389 if ( !success )
00390 delete resource;
00391
00392 delete dlg;
00393
00394
00395 emitResourcesChanged();
00396 }
00397
00398 void ResourceView::addResourceItem( ResourceCalendar *resource )
00399 {
00400
00401 ResourceItem *item=new ResourceItem( resource, this, mListView );
00402
00403
00404
00405 if ( !resource->canHaveSubresources() || resource->subresources().isEmpty() ) {
00406 QColor resourceColor = *KOPrefs::instance()->resourceColor(resource->identifier());
00407 item->setResourceColor(resourceColor);
00408 item->update();
00409 }
00410
00411 connect( resource, SIGNAL( signalSubresourceAdded( ResourceCalendar *,
00412 const QString &,
00413 const QString &,
00414 const QString & ) ),
00415 SLOT( slotSubresourceAdded( ResourceCalendar *, const QString &,
00416 const QString &, const QString & ) ) );
00417
00418 connect( resource, SIGNAL( signalSubresourceRemoved( ResourceCalendar *,
00419 const QString &,
00420 const QString & ) ),
00421 SLOT( slotSubresourceRemoved( ResourceCalendar *, const QString &,
00422 const QString & ) ) );
00423
00424 connect( resource, SIGNAL( resourceSaved( ResourceCalendar * ) ),
00425 SLOT( closeResource( ResourceCalendar * ) ) );
00426
00427 updateResourceList();
00428 emit resourcesChanged();
00429 }
00430
00431
00432 void ResourceView::slotSubresourceAdded( ResourceCalendar *calendar,
00433 const QString& ,
00434 const QString& resource,
00435 const QString& label)
00436 {
00437 QListViewItem *i = mListView->findItem( calendar->resourceName(), 0 );
00438 if ( !i )
00439
00440 return;
00441
00442 if ( findItemByIdentifier( resource ) ) return;
00443
00444 ResourceItem *item = static_cast<ResourceItem *>( i );
00445 ResourceItem *newItem = new ResourceItem( calendar, resource, label, this, item );
00446 QColor resourceColor = *KOPrefs::instance()->resourceColor( resource );
00447 newItem->setResourceColor( resourceColor );
00448 }
00449
00450
00451 void ResourceView::slotSubresourceRemoved( ResourceCalendar * ,
00452 const QString &,
00453 const QString &resource )
00454 {
00455 delete findItemByIdentifier( resource );
00456 emit resourcesChanged();
00457 }
00458
00459 void ResourceView::closeResource( ResourceCalendar *r )
00460 {
00461 if ( mResourcesToClose.find( r ) >= 0 ) {
00462 r->close();
00463 mResourcesToClose.remove( r );
00464 }
00465 }
00466
00467 void ResourceView::updateResourceItem( ResourceCalendar *resource )
00468 {
00469 ResourceItem *item = findItem( resource );
00470 if ( item ) {
00471 item->update();
00472 }
00473 }
00474
00475 ResourceItem *ResourceView::currentItem()
00476 {
00477 QListViewItem *item = mListView->currentItem();
00478 ResourceItem *rItem = static_cast<ResourceItem *>( item );
00479 return rItem;
00480 }
00481
00482 void ResourceView::removeResource()
00483 {
00484 ResourceItem *item = currentItem();
00485 if ( !item ) return;
00486
00487
00488 if ( !item->isSubresource() ) {
00489 if ( item->resource() == mCalendar->resourceManager()->standardResource() ) {
00490 KMessageBox::sorry( this,
00491 i18n( "<qt>You may not delete your standard calendar resource.<p>"
00492 "You can change the standard calendar resource in the "
00493 "KDE Control Center using the KDE Resource settings under the "
00494 "KDE Components area.</qt>" ) );
00495 return;
00496 }
00497 }
00498
00499 QString moreInfo;
00500 if ( item->resource()->type() == "imap" || item->resource()->type() == "scalix" ) {
00501 moreInfo = i18n( "This is a groupware folder so you can always re-subscribe to the folder "
00502 "later as you desire." );
00503 } else {
00504 moreInfo = i18n( "The contents will not be removed so you can always re-add this calendar "
00505 "later as you desire." );
00506 }
00507
00508 int km =
00509 KMessageBox::warningContinueCancel(
00510 this,
00511 i18n( "<qt>Do you really want to remove the calendar <b>%1</b>?<p><b>Note:</b> %2</qt>" ).
00512 arg( item->text( 0 ), moreInfo ),
00513 "", KGuiItem( i18n( "&Remove" ) ) );
00514 if ( km == KMessageBox::Cancel ) {
00515 return;
00516 }
00517
00518 if ( item->isSubresource() ) {
00519 if ( !item->resource()->removeSubresource( item->resourceIdentifier() ) )
00520 KMessageBox::sorry( this,
00521 i18n ("<qt>Failed to remove the subresource <b>%1</b>. The "
00522 "reason could be that it is a built-in one which cannot "
00523 "be removed, or that the removal of the underlying storage "
00524 "folder failed.</qt>").arg( item->resource()->name() ) );
00525 return;
00526 } else {
00527 mCalendar->resourceManager()->remove( item->resource() );
00528 }
00529 mListView->takeItem( item );
00530 delete item;
00531
00532 updateResourceList();
00533 emit resourcesChanged();
00534 }
00535
00536 void ResourceView::editResource()
00537 {
00538 bool ok = false;
00539 ResourceItem *item = currentItem();
00540 if (!item) return;
00541 ResourceCalendar *resource = item->resource();
00542
00543 if ( item->isSubresource() ) {
00544 if ( resource->type() == "imap" || resource->type() == "scalix" ) {
00545 QString identifier = item->resourceIdentifier();
00546 const QString newResourceName = KInputDialog::getText( i18n( "Rename Subresource" ),
00547 i18n( "Please enter a new name for the subresource" ), item->text(),
00548 &ok, this );
00549 if ( !ok )
00550 return;
00551
00552 DCOPRef ref( "kmail", "KMailICalIface" );
00553 DCOPReply reply = ref.call( "changeResourceUIName", identifier, newResourceName );
00554 if ( !reply.isValid() ) {
00555 kdDebug() << "DCOP Call changeResourceUIName() failed " << endl;
00556 }
00557 } else {
00558 KMessageBox::sorry( this,
00559 i18n ("<qt>Cannot edit the subresource <b>%1</b>.</qt>").arg( item->resource()->name() ) );
00560 }
00561 } else {
00562 KRES::ConfigDialog dlg( this, QString("calendar"), resource,
00563 "KRES::ConfigDialog" );
00564
00565 if ( dlg.exec() ) {
00566 item->setText( 0, resource->resourceName() );
00567
00568 mCalendar->resourceManager()->change( resource );
00569 }
00570 }
00571 emitResourcesChanged();
00572
00573 }
00574
00575 void ResourceView::currentChanged( QListViewItem *item )
00576 {
00577 ResourceItem *i = currentItem();
00578 if ( !item || i->isSubresource() ) {
00579 mDeleteButton->setEnabled( false );
00580 mEditButton->setEnabled( false );
00581 } else {
00582 mDeleteButton->setEnabled( true );
00583 mEditButton->setEnabled( true );
00584 }
00585 }
00586
00587 ResourceItem *ResourceView::findItem( ResourceCalendar *r )
00588 {
00589 QListViewItem *item;
00590 ResourceItem *i = 0;
00591 for( item = mListView->firstChild(); item; item = item->nextSibling() ) {
00592 i = static_cast<ResourceItem *>( item );
00593 if ( i->resource() == r ) break;
00594 }
00595 return i;
00596 }
00597
00598 ResourceItem *ResourceView::findItemByIdentifier( const QString& id )
00599 {
00600 QListViewItem *item;
00601 ResourceItem *i = 0;
00602 for( item = mListView->firstChild(); item; item = item->itemBelow() ) {
00603 i = static_cast<ResourceItem *>( item );
00604 if ( i->resourceIdentifier() == id )
00605 return i;
00606 }
00607 return 0;
00608 }
00609
00610
00611 void ResourceView::contextMenuRequested ( QListViewItem *i,
00612 const QPoint &pos, int )
00613 {
00614 KCal::CalendarResourceManager *manager = mCalendar->resourceManager();
00615 ResourceItem *item = static_cast<ResourceItem *>( i );
00616
00617 QPopupMenu *menu = new QPopupMenu( this );
00618 connect( menu, SIGNAL( aboutToHide() ), menu, SLOT( deleteLater() ) );
00619 if ( item ) {
00620 int reloadId = menu->insertItem( i18n("Re&load"), this,
00621 SLOT( reloadResource() ) );
00622 menu->setItemEnabled( reloadId, item->resource()->isActive() );
00623 int saveId = menu->insertItem( i18n("&Save"), this,
00624 SLOT( saveResource() ) );
00625 menu->setItemEnabled( saveId, item->resource()->isActive() );
00626 menu->insertSeparator();
00627
00628 menu->insertItem( i18n("Show &Info"), this, SLOT( showInfo() ) );
00629
00630 if ( KOPrefs::instance()->agendaViewColors() != KOPrefs::CategoryOnly ) {
00631 QPopupMenu *assignMenu= new QPopupMenu( menu );
00632 assignMenu->insertItem( i18n( "&Assign Color" ), this, SLOT( assignColor() ) );
00633 if ( item->resourceColor().isValid() )
00634 assignMenu->insertItem( i18n( "&Disable Color" ), this, SLOT( disableColor() ) );
00635 menu->insertItem( i18n( "Resources Colors" ), assignMenu );
00636 }
00637
00638 menu->insertItem( i18n("&Edit..."), this, SLOT( editResource() ) );
00639 menu->insertItem( i18n("&Remove"), this, SLOT( removeResource() ) );
00640 if ( item->resource() != manager->standardResource() ) {
00641 menu->insertSeparator();
00642 menu->insertItem( i18n("Use as &Default Calendar"), this,
00643 SLOT( setStandard() ) );
00644 }
00645
00646 menu->insertSeparator();
00647 }
00648 menu->insertItem( i18n("&Add..."), this, SLOT( addResource() ) );
00649
00650 menu->popup( pos );
00651 }
00652
00653 void ResourceView::assignColor()
00654 {
00655 ResourceItem *item = currentItem();
00656 if ( !item )
00657 return;
00658
00659 QColor myColor;
00660 KCal::ResourceCalendar *cal = item->resource();
00661
00662 QString identifier = cal->identifier();
00663 if ( item->isSubresource() )
00664 identifier = item->resourceIdentifier();
00665
00666 QColor defaultColor =*KOPrefs::instance()->resourceColor( identifier );
00667
00668 int result = KColorDialog::getColor( myColor,defaultColor);
00669
00670 if ( result == KColorDialog::Accepted ) {
00671 KOPrefs::instance()->setResourceColor( identifier, myColor );
00672 item->setResourceColor( myColor );
00673 item->update();
00674 emitResourcesChanged();
00675 }
00676 }
00677
00678 void ResourceView::disableColor()
00679 {
00680 ResourceItem *item = currentItem();
00681 if ( !item )
00682 return;
00683 QColor colorInvalid;
00684 KCal::ResourceCalendar *cal = item->resource();
00685 QString identifier = cal->identifier();
00686 if ( item->isSubresource() )
00687 identifier = item->resourceIdentifier();
00688 KOPrefs::instance()->setResourceColor( identifier, colorInvalid );
00689 item->setResourceColor( colorInvalid );
00690 item->update();
00691 emitResourcesChanged();
00692 }
00693 void ResourceView::showInfo()
00694 {
00695 ResourceItem *item = currentItem();
00696 if ( !item ) return;
00697
00698 QString txt = "<qt>" + item->resource()->infoText() + "</qt>";
00699 KMessageBox::information( this, txt );
00700 }
00701
00702 void ResourceView::reloadResource()
00703 {
00704 ResourceItem *item = currentItem();
00705 if ( !item ) return;
00706
00707 ResourceCalendar *r = item->resource();
00708 r->load();
00709 }
00710
00711 void ResourceView::saveResource()
00712 {
00713 ResourceItem *item = currentItem();
00714 if ( !item ) return;
00715
00716 ResourceCalendar *r = item->resource();
00717 r->save();
00718 }
00719
00720 void ResourceView::setStandard()
00721 {
00722 ResourceItem *item = currentItem();
00723 if ( !item ) return;
00724
00725 ResourceCalendar *r = item->resource();
00726 KCal::CalendarResourceManager *manager = mCalendar->resourceManager();
00727 manager->setStandardResource( r );
00728 updateResourceList();
00729 }
00730
00731 void ResourceView::updateResourceList()
00732 {
00733 QListViewItemIterator it( mListView );
00734 ResourceCalendar* stdRes = mCalendar->resourceManager()->standardResource();
00735 while ( it.current() ) {
00736 ResourceItem *item = static_cast<ResourceItem *>( it.current() );
00737 item->setStandardResource( item->resource() == stdRes );
00738 ++it;
00739 }
00740 }
00741
00742 void ResourceView::showButtons( bool visible )
00743 {
00744 if ( visible ) {
00745 mAddButton->show();
00746 mDeleteButton->show();
00747 mEditButton->show();
00748 } else {
00749 mAddButton->hide();
00750 mDeleteButton->hide();
00751 mEditButton->hide();
00752 }
00753 }
00754
00755 void ResourceView::requestClose( ResourceCalendar *r )
00756 {
00757 mResourcesToClose.append( r );
00758 }
00759
00760 #include "resourceview.moc"