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
#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
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
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"