korganizer

resourceview.cpp

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