korganizer Library API Documentation

resourceview.cpp

00001 /*
00002     This file is part of KOrganizer.
00003 
00004     Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
00005 
00006     This program is free software; you can redistribute it and/or modify
00007     it under the terms of the GNU General Public License as published by
00008     the Free Software Foundation; either version 2 of the License, or
00009     (at your option) any later version.
00010 
00011     This program is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00014     GNU General Public License for more details.
00015 
00016     You should have received a copy of the GNU General Public License
00017     along with this program; if not, write to the Free Software
00018     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00019 
00020     As a special exception, permission is given to link this program
00021     with any edition of Qt, and distribute the resulting executable,
00022     without including the source code for Qt in the source distribution.
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   // Create new resource
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 // Don't be so restrictive
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"
KDE Logo
This file is part of the documentation for korganizer Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:38:31 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003