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 Wed Jul 28 23:58:14 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003