KDevelop API Documentation

vcs/cvsservice/cvspart.cpp

Go to the documentation of this file.
00001 /************************************************************************** 00002 * Copyright (C) 1999-2001 by Bernd Gehrmann * 00003 * bernd@kdevelop.org * 00004 * Copyright (C) 2003 by Mario Scalas * 00005 * mario.scalas@libero.it * 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 ***************************************************************************/ 00013 00014 #include <qdir.h> 00015 #include <qpopupmenu.h> 00016 #include <qwhatsthis.h> 00017 00018 #include <kpopupmenu.h> 00019 #include <kdebug.h> 00020 #include <klocale.h> 00021 #include <kmessagebox.h> 00022 #include <kdialogbase.h> 00023 #include <kstandarddirs.h> 00024 #include <kaction.h> 00025 #include <kurl.h> 00026 #include <kapplication.h> 00027 #include <kmainwindow.h> 00028 // Because of KShellProcess::quote() 00029 #include <kprocess.h> 00030 #include <kiconloader.h> 00031 00032 #include <dcopref.h> 00033 #include <repository_stub.h> 00034 #include <cvsservice_stub.h> 00035 #include <cvsjob_stub.h> 00036 00037 #include <kparts/part.h> 00038 #include <kdevpartcontroller.h> 00039 #include <kdevgenericfactory.h> 00040 00041 #include "kdevcore.h" 00042 #include "kdevmakefrontend.h" 00043 #include "kdevdifffrontend.h" 00044 #include "kdevappfrontend.h" 00045 #include "domutil.h" 00046 #include "kdevmainwindow.h" 00047 #include "kdevproject.h" 00048 #include "urlutil.h" 00049 00050 #include "cvsform.h" 00051 #include "commitdlg.h" 00052 #include "checkoutdialog.h" 00053 #include "tagdialog.h" 00054 #include "cvsprocesswidget.h" 00055 #include "cvsoptions.h" 00056 #include "cvsoptionswidget.h" 00057 #include "cvspartimpl.h" 00058 #include "cvsdir.h" 00059 00060 #include "cvspart.h" 00061 00063 // Global vars 00065 00066 // See createNewProject( const QString &) and slotProjectOpened() 00067 bool g_projectWasJustCreated = false; 00068 00070 // Plugin factory 00072 00073 static const KAboutData data("kdevcvsservice", I18N_NOOP("CvsService"), "1.0"); 00074 typedef KDevGenericFactory<CvsServicePart> CvsFactory; 00075 K_EXPORT_COMPONENT_FACTORY( libkdevcvsservice, CvsFactory( &data ) ) 00076 00077 00078 // class CvsServicePart 00080 00081 CvsServicePart::CvsServicePart( QObject *parent, const char *name, const QStringList & ) 00082 : KDevVersionControl( "KDevCvsServicePart", "kdevcvsservicepart", parent, 00083 name ? name : "CvsService" ), 00084 actionCommit( 0 ), actionDiff( 0 ), actionLog( 0 ), actionAdd( 0 ), 00085 actionAddBinary( 0 ), actionRemove( 0 ), actionUpdate( 0 ), 00086 actionRemoveSticky( 0 ), 00087 actionAddToIgnoreList( 0 ), actionRemoveFromIgnoreList( 0 ), 00088 actionTag( 0 ), actionUnTag( 0 ), 00089 actionLogin( 0), actionLogout( 0 ), 00090 m_impl( 0 ) 00091 { 00092 setInstance( CvsFactory::instance() ); 00093 00094 setXMLFile( "kdevcvsservicepart.rc" ); 00095 00096 init(); 00097 00100 setVersionControl( this ); 00101 } 00102 00104 00105 CvsServicePart::~CvsServicePart() 00106 { 00107 delete m_cvsConfigurationForm; 00108 delete m_impl; 00109 } 00110 00112 00113 void CvsServicePart::init() 00114 { 00115 setupActions(); 00116 00117 // Here we change the implementation 00119 m_impl = new CvsServicePartImpl( this ); 00120 connect( m_impl, SIGNAL(checkoutFinished(QString)), SIGNAL(finishedFetching(QString)) ); 00121 00122 // Load / store project configuration every time project is opened/closed 00123 connect( core(), SIGNAL(projectOpened()), this, SLOT(slotProjectOpened()) ); 00124 connect( core(), SIGNAL(projectClosed()), this, SLOT(slotProjectClosed()) ); 00125 00126 // Context menu 00127 connect( core(), SIGNAL(contextMenu(QPopupMenu *, const Context *)), 00128 this, SLOT(contextMenu(QPopupMenu *, const Context *)) ); 00129 connect( core(), SIGNAL(projectConfigWidget(KDialogBase*)), 00130 this, SLOT(projectConfigWidget(KDialogBase*)) ); 00131 connect( core(), SIGNAL(stopButtonClicked(KDevPlugin*)), 00132 this, SLOT(slotStopButtonClicked(KDevPlugin*)) ); 00133 00134 m_impl->m_widget->setIcon( UserIcon( "kdev_cvs", KIcon::DefaultState, CvsFactory::instance()) ); 00135 QWhatsThis::add( m_impl->processWidget(), i18n("<b>CVS</b><p>Concurrent Versions System operations window. Shows output of Cervisia CVS Service.") ); 00136 mainWindow()->embedOutputView( m_impl->processWidget(), i18n("CvsService"), i18n("cvs output") ); 00137 } 00138 00140 00141 void CvsServicePart::setupActions() 00142 { 00143 // This actions are used in the menubar: for context menu we build the 00144 // context at runtime. See CvsServicePart::contextMenu(). 00145 00146 actionCommit = new KAction( i18n("&Commit to Repository"), 0, this, 00147 SLOT(slotActionCommit()), actionCollection(), "cvsservice_commit" ); 00148 actionCommit->setToolTip( i18n("Commit file(s)") ); 00149 actionCommit->setWhatsThis( i18n("<b>Commit file(s)</b><p>Commits file to repository if modified.") ); 00150 00151 actionDiff = new KAction( i18n("&Difference Between Revisions"), 0, this, SLOT(slotActionDiff()), 00152 actionCollection(), "cvsservice_diff" ); 00153 actionDiff->setToolTip( i18n("Build difference") ); 00154 actionDiff->setWhatsThis( i18n("<b>Build difference</b><p>Builds difference between releases.") ); 00155 00156 actionLog = new KAction( i18n("Generate &Log"), 0, this, SLOT(slotActionLog()), 00157 actionCollection(), "cvsservice_log" ); 00158 actionLog->setToolTip( i18n("Generate log") ); 00159 actionLog->setWhatsThis( i18n("<b>Generate log</b><p>Produces log for this file.") ); 00160 00161 actionAdd = new KAction( i18n("&Add to Repository"), 0, this, SLOT(slotActionAdd()), 00162 actionCollection(), "cvsservice_add" ); 00163 actionAdd->setToolTip( i18n("Add file to repository") ); 00164 actionAdd->setWhatsThis( i18n("<b>Add to repository</b><p>Adds file to repository.") ); 00165 00166 actionAddBinary = new KAction( i18n("Add to Repository as &Binary"), 0, this, 00167 SLOT(slotActionAddBinary()), actionCollection(), "cvsservice_add_bin" ); 00168 actionAddBinary->setToolTip( i18n("Add file to repository as binary") ); 00169 actionAddBinary->setWhatsThis( i18n("<b>Add to repository as binary</b><p>Adds file to repository as binary (-kb option).") ); 00170 00171 actionRemove = new KAction( i18n("&Remove From Repository"), 0, this, 00172 SLOT(slotActionRemove()), actionCollection(), "cvsservice_remove" ); 00173 actionRemove->setToolTip( i18n("Remove from repository") ); 00174 actionRemove->setWhatsThis( i18n("<b>Remove from repository</b><p>Removes file(s) from repository.") ); 00175 00176 actionUpdate = new KAction( i18n("&Update/Revert to Another Release"), 0, this, 00177 SLOT(slotActionUpdate()), actionCollection(), "cvsservice_update" ); 00178 actionUpdate->setToolTip( i18n("Update/revert") ); 00179 actionUpdate->setWhatsThis( i18n("<b>Update/revert to another release</b><p>Updates/reverts file(s) to another release.") ); 00180 00181 actionRemoveSticky = new KAction( i18n("R&emove Sticky Flag"), 0, 00182 this, SLOT(slotActionRemoveSticky()), actionCollection(), "cvsservice_removesticky" ); 00183 actionRemoveSticky->setToolTip( i18n("Remove sticky flag") ); 00184 actionRemoveSticky->setWhatsThis( i18n("<b>Remove sticky flag</b><p>Removes sticky flag from file(s).") ); 00185 00186 actionTag = new KAction( i18n("Make &Tag/Branch"), 0, 00187 this, SLOT(slotActionTag()), actionCollection(), "cvsservice_tag" ); 00188 actionTag->setToolTip( i18n("Make tag/branch") ); 00189 actionTag->setWhatsThis( i18n("<b>Make tag/branch</b><p>Tags/branches selected file(s).") ); 00190 00191 actionUnTag = new KAction( i18n("&Delete Tag/Branch"), 0, 00192 this, SLOT(slotActionUnTag()), actionCollection(), "cvsservice_untag" ); 00193 actionUnTag->setToolTip( i18n("Delete tag/branch") ); 00194 actionUnTag->setWhatsThis( i18n("<b>Delete tag/branch</b><p>Delete tag/branches from selected file(s).") ); 00195 00196 actionAddToIgnoreList = new KAction( i18n("&Ignore in CVS Operations"), 0, 00197 this, SLOT(slotActionAddToIgnoreList()), actionCollection(), "cvsservice_ignore" ); 00198 actionAddToIgnoreList->setToolTip( i18n("Ignore in CVS operations") ); 00199 actionAddToIgnoreList->setWhatsThis( i18n("<b>Ignore in CVS operations</b><p>Ignore file(s) by adding it to .cvsignore file.") ); 00200 00201 actionRemoveFromIgnoreList = new KAction( i18n("Do &Not Ignore in CVS Operations"), 0, 00202 this, SLOT(slotActionRemoveFromIgnoreList()), actionCollection(), "cvsservice_donot_ignore" ); 00203 actionRemoveFromIgnoreList->setToolTip( i18n("Do not ignore in CVS operations") ); 00204 actionRemoveFromIgnoreList->setWhatsThis( i18n("<b>Do not ignore in CVS operations</b><p>Do not ignore file(s) by removing\nit from .cvsignore file.") ); 00205 00206 actionLogin = new KAction( i18n("&Log to Server"), 0, this, 00207 SLOT(slotActionLogin()), actionCollection(), "cvsservice_login" ); 00208 actionLogin->setToolTip( i18n("Login to server") ); 00209 actionLogin->setWhatsThis( i18n("<b>Login to server</b><p>Logs in to the CVS server.") ); 00210 00211 actionLogout = new KAction( i18n("L&ogout From Server"), 0, this, 00212 SLOT(slotActionLogout()), actionCollection(), "cvsservice_logout" ); 00213 actionLogout->setToolTip( i18n("Logout from server") ); 00214 actionLogout->setWhatsThis( i18n("<b>Logout from server</b><p>Logs out from the CVS server.") ); 00215 } 00216 00218 00219 bool CvsServicePart::fetchFromRepository() 00220 { 00221 m_impl->checkout(); 00222 return true; 00223 } 00224 00226 00227 KDevVCSFileInfoProvider *CvsServicePart::fileInfoProvider() const 00228 { 00229 return m_impl->fileInfoProvider(); 00230 } 00231 00233 00234 void CvsServicePart::createNewProject( const QString &dirName ) 00235 { 00236 kdDebug( 9006 ) << "====> CvsServicePart::createNewProject( const QString& )" << endl; 00237 00238 if (!m_cvsConfigurationForm) 00239 return; 00240 00242 // project has been opened because projectOpened() is emitted after the project 00243 // has been created :-/ So the only way to inform that slotProjectOpened() to not 00244 // load default settings (overriding the CvsOptions instance is to set this flag 00245 // here ... 00246 g_projectWasJustCreated = true; 00247 00248 m_impl->createNewProject( dirName, 00249 m_cvsConfigurationForm->cvsRsh(), m_cvsConfigurationForm->location(), 00250 m_cvsConfigurationForm->message(), m_cvsConfigurationForm->module(), 00251 m_cvsConfigurationForm->vendor(), m_cvsConfigurationForm->release(), 00252 m_cvsConfigurationForm->mustInitRoot() 00253 ); 00254 } 00255 00257 00258 void CvsServicePart::projectConfigWidget( KDialogBase *dlg ) 00259 { 00260 QVBox *vbox = dlg->addVBoxPage( i18n("CvsService") ); 00261 CvsOptionsWidget *w = new CvsOptionsWidget( (QWidget *)vbox, "cvs config widget" ); 00262 connect( dlg, SIGNAL(okClicked()), w, SLOT(accept()) ); 00263 } 00264 00266 00267 QWidget* CvsServicePart::newProjectWidget( QWidget *parent ) 00268 { 00269 m_cvsConfigurationForm = new CvsForm( parent, "cvsform" ); 00270 return m_cvsConfigurationForm; 00271 } 00272 00274 00275 void CvsServicePart::contextMenu( QPopupMenu *popup, const Context *context ) 00276 { 00277 kdDebug(9006) << "contextMenu()" << endl; 00278 if (context->hasType( Context::FileContext ) || 00279 context->hasType( Context::EditorContext )) 00280 { 00281 00282 if (context->hasType( Context::FileContext )) 00283 { 00284 kdDebug(9006) << "Requested for a FileContext" << endl; 00285 const FileContext *fcontext = static_cast<const FileContext*>( context ); 00286 m_urls = fcontext->urls(); 00287 } 00288 else 00289 { 00290 kdDebug(9006) << "Requested for an EditorContext" << endl; 00291 const EditorContext *editorContext = static_cast<const EditorContext*>( context ); 00292 m_urls << editorContext->url(); 00293 } 00294 // THis stuff should end up into prepareOperation() 00295 URLUtil::dump( m_urls ); 00296 if (m_urls.count() <= 0) 00297 return; 00298 00299 KPopupMenu *subMenu = new KPopupMenu( popup ); 00300 popup->insertSeparator(); 00301 00302 int id = subMenu->insertItem( actionCommit->text(), this, SLOT(slotCommit()) ); 00303 subMenu->setWhatsThis(id, i18n("<b>Commit file(s)</b><p>Commits file to repository if modified.")); 00304 // CvsService let to do log and diff operations only on one file (or directory) at time 00305 if (m_urls.count() == 1) 00306 { 00307 id = subMenu->insertItem( actionDiff->text(), this, SLOT(slotDiff()) ); 00308 subMenu->setWhatsThis(id, i18n("<b>Build difference</b><p>Builds difference between releases.")); 00309 id = subMenu->insertItem( actionLog->text(), this, SLOT(slotLog()) ); 00310 subMenu->setWhatsThis(id, i18n("<b>Generate log</b><p>Produces log for this file.")); 00311 } 00312 id = subMenu->insertItem( actionAdd->text(), this, SLOT(slotAdd()) ); 00313 subMenu->setWhatsThis(id, i18n("<b>Add to repository</b><p>Adds file to repository.")); 00314 id = subMenu->insertItem( actionAddBinary->text(), this, SLOT(slotAddBinary()) ); 00315 subMenu->setWhatsThis(id, i18n("<b>Add to repository as binary</b><p>Adds file to repository as binary (-kb option).")); 00316 id = subMenu->insertItem( actionRemove->text(), this, SLOT(slotRemove()) ); 00317 subMenu->setWhatsThis(id, i18n("<b>Remove from repository</b><p>Removes file(s) from repository.")); 00318 00319 subMenu->insertSeparator(); 00320 id = subMenu->insertItem( actionTag->text(), this, SLOT(slotTag()) ); 00321 subMenu->setWhatsThis(id, i18n("<b>Make tag/branch</b><p>Tags/branches selected file(s).")); 00322 id = subMenu->insertItem( actionUnTag->text(), this, SLOT(slotUnTag()) ); 00323 subMenu->setWhatsThis(id, i18n("<b>Delete tag/branch</b><p>Delete tag/branches from selected file(s).")); 00324 id = subMenu->insertItem( actionUpdate->text(), this, SLOT(slotUpdate()) ); 00325 subMenu->setWhatsThis(id, i18n("<b>Update/revert to another release</b><p>Updates/reverts file(s) to another release.")); 00326 id = subMenu->insertItem( actionRemoveSticky->text(), this, SLOT(slotRemoveSticky()) ); 00327 subMenu->setWhatsThis(id, i18n("<b>Remove sticky flag</b><p>Removes sticky flag from file(s).")); 00328 00329 subMenu->insertSeparator(); 00330 id = subMenu->insertItem( actionAddToIgnoreList->text(), this, SLOT(slotAddToIgnoreList()) ); 00331 subMenu->setWhatsThis(id, i18n("<b>Ignore in CVS operations</b><p>Ignore file(s) by adding it to .cvsignore file.")); 00332 id = subMenu->insertItem( actionRemoveFromIgnoreList->text(), this, SLOT(slotRemoveFromIgnoreList()) ); 00333 subMenu->setWhatsThis(id, i18n("<b>Do not ignore in CVS operations</b><p>Do not ignore file(s) by removing\nit from .cvsignore file.")); 00334 00335 // Now insert in parent menu 00336 popup->insertItem( i18n("CvsService"), subMenu ); 00337 } 00338 } 00339 00341 00342 bool CvsServicePart::urlFocusedDocument( KURL &url ) 00343 { 00344 kdDebug(9006) << "CvsServicePartImpl::retrieveUrlFocusedDocument() here!" << endl; 00345 KParts::ReadOnlyPart *part = dynamic_cast<KParts::ReadOnlyPart*>( partController()->activePart() ); 00346 if ( part ) 00347 { 00348 if (part->url().isLocalFile() ) 00349 { 00350 url = part->url(); 00351 return true; 00352 } 00353 else 00354 { 00355 kdDebug(9006) << "Cannot handle non-local files!" << endl; 00356 } 00357 } 00358 return false; 00359 } 00360 00362 00363 bool CvsServicePart::isValidDirectory( const QString &dirPath ) const 00364 { 00365 return m_impl->isValidDirectory( dirPath ); 00366 } 00367 00369 00370 void CvsServicePart::slotActionLogin() 00371 { 00372 m_impl->login(); 00373 } 00374 00376 00377 void CvsServicePart::slotActionLogout() 00378 { 00379 m_impl->logout(); 00380 } 00381 00383 00384 void CvsServicePart::slotActionCommit() 00385 { 00386 KURL currDocument; 00387 if (urlFocusedDocument( currDocument )) 00388 { 00389 m_impl->commit( currDocument ); 00390 } 00391 } 00392 00394 00395 void CvsServicePart::slotActionUpdate() 00396 { 00397 KURL currDocument; 00398 if (urlFocusedDocument( currDocument )) 00399 { 00400 m_impl->update( currDocument ); 00401 } 00402 } 00403 00405 00406 void CvsServicePart::slotActionAdd() 00407 { 00408 KURL currDocument; 00409 if (urlFocusedDocument( currDocument )) 00410 { 00411 m_impl->add( currDocument, false ); 00412 } 00413 } 00414 00416 00417 void CvsServicePart::slotActionAddBinary() 00418 { 00419 KURL currDocument; 00420 if (urlFocusedDocument( currDocument )) 00421 { 00422 m_impl->add( currDocument, true ); 00423 } 00424 } 00425 00427 00428 void CvsServicePart::slotActionRemove() 00429 { 00430 KURL currDocument; 00431 if (urlFocusedDocument( currDocument )) 00432 { 00433 m_impl->remove( currDocument ); 00434 } 00435 } 00436 00438 00439 void CvsServicePart::slotActionRemoveSticky() 00440 { 00441 KURL currDocument; 00442 if (urlFocusedDocument( currDocument )) 00443 { 00444 m_impl->removeStickyFlag( currDocument ); 00445 } 00446 } 00447 00449 00450 void CvsServicePart::slotActionLog() 00451 { 00452 KURL currDocument; 00453 if (urlFocusedDocument( currDocument )) 00454 { 00455 m_impl->log( currDocument ); 00456 } 00457 } 00458 00460 00461 void CvsServicePart::slotActionDiff() 00462 { 00463 KURL currDocument; 00464 if (urlFocusedDocument( currDocument )) 00465 { 00466 m_impl->diff( currDocument ); 00467 } 00468 } 00469 00471 00472 void CvsServicePart::slotActionTag() 00473 { 00474 KURL currDocument; 00475 if (urlFocusedDocument( currDocument )) 00476 { 00477 m_impl->tag( currDocument ); 00478 } 00479 } 00480 00482 00483 void CvsServicePart::slotActionUnTag() 00484 { 00485 KURL currDocument; 00486 if (urlFocusedDocument( currDocument )) 00487 { 00488 m_impl->unTag( currDocument ); 00489 } 00490 } 00491 00493 00494 void CvsServicePart::slotActionAddToIgnoreList() 00495 { 00496 KURL currDocument; 00497 if (urlFocusedDocument( currDocument )) 00498 { 00499 m_impl->addToIgnoreList( currDocument ); 00500 } 00501 } 00502 00504 00505 void CvsServicePart::slotActionRemoveFromIgnoreList() 00506 { 00507 KURL currDocument; 00508 if (urlFocusedDocument( currDocument )) 00509 { 00510 m_impl->removeFromIgnoreList( currDocument ); 00511 } 00512 } 00513 00515 00516 void CvsServicePart::slotCommit() 00517 { 00518 m_impl->commit( m_urls ); 00519 } 00520 00522 00523 void CvsServicePart::slotUpdate() 00524 { 00525 m_impl->update( m_urls ); 00526 } 00527 00529 00530 void CvsServicePart::slotAdd() 00531 { 00532 m_impl->add( m_urls, false ); 00533 } 00534 00536 00537 void CvsServicePart::slotAddBinary() 00538 { 00539 m_impl->add( m_urls, true ); 00540 } 00541 00543 00544 void CvsServicePart::slotRemove() 00545 { 00546 m_impl->remove( m_urls ); 00547 } 00548 00550 00551 void CvsServicePart::slotRemoveSticky() 00552 { 00553 m_impl->removeStickyFlag( m_urls ); 00554 } 00555 00557 00558 void CvsServicePart::slotLog() 00559 { 00560 m_impl->log( m_urls ); 00561 } 00562 00564 00565 void CvsServicePart::slotDiff() 00566 { 00567 m_impl->diff( m_urls ); 00568 } 00569 00571 00572 void CvsServicePart::slotTag() 00573 { 00574 m_impl->tag( m_urls ); 00575 } 00576 00578 00579 void CvsServicePart::slotUnTag() 00580 { 00581 m_impl->unTag( m_urls ); 00582 } 00583 00585 00586 void CvsServicePart::slotAddToIgnoreList() 00587 { 00588 m_impl->addToIgnoreList( m_urls ); 00589 } 00590 00592 00593 void CvsServicePart::slotRemoveFromIgnoreList() 00594 { 00595 m_impl->removeFromIgnoreList( m_urls ); 00596 } 00597 00599 00600 void CvsServicePart::slotStopButtonClicked( KDevPlugin* which ) 00601 { 00602 if ( which != 0 && which != this ) 00603 return; 00604 00605 m_impl->flushJobs(); 00606 } 00607 00609 00610 void CvsServicePart::slotAddFilesToProject( const QStringList &filesToAdd ) 00611 { 00612 m_impl->addFilesToProject( filesToAdd ); 00613 } 00614 00616 00617 void CvsServicePart::slotRemovedFilesFromProject(const QStringList &fileToRemove) 00618 { 00619 m_impl->removedFilesFromProject( fileToRemove ); 00620 } 00621 00623 00624 void CvsServicePart::slotProjectOpened() 00625 { 00626 kdDebug(9006) << "CvsServicePart::slotProjectOpened() here!" << endl; 00627 00628 // Avoid bothering the user if this project has no support for CVS 00629 if (!isValidDirectory( project()->projectDirectory() )) 00630 { 00631 kdDebug(9006) << "Project has no CVS Support: too bad!! :-(" << endl; 00632 return; 00633 } 00634 00635 CvsOptions *options = CvsOptions::instance(); 00636 00637 // If createNewProject() has set this var then we have to get it. 00638 if (g_projectWasJustCreated) 00639 { 00640 options->save( project() ); 00641 g_projectWasJustCreated = false; 00642 } 00643 options->load( project() ); 00644 00645 // When files are added to project they may be added to/removed from repository too 00646 connect( project(), SIGNAL(addedFilesToProject(const QStringList&)), this, SLOT(slotAddFilesToProject(const QStringList &)) ); 00647 connect( project(), SIGNAL(removedFilesFromProject(const QStringList&)), this, SLOT(slotRemovedFilesFromProject(const QStringList &)) ); 00648 } 00649 00651 00652 void CvsServicePart::slotProjectClosed() 00653 { 00654 kdDebug(9006) << "CvsServicePart::slotProjectClosed() here!" << endl; 00655 00656 // Avoid bothering the user if this project has no support for CVS 00657 if (!isValidDirectory( project()->projectDirectory() )) 00658 { 00659 kdDebug(9006) << "Project had no CVS Support: too bad!! :-(" << endl; 00660 return; 00661 } 00662 00663 CvsOptions *options = CvsOptions::instance(); 00664 options->save( project() ); 00665 delete options; 00666 00667 // We don't have a project anymore ... 00668 disconnect( project(), SIGNAL(addedFilesToProject(const QStringList&)), this, SLOT(slotAddFilesToProject(const QStringList &)) ); 00669 disconnect( project(), SIGNAL(removedFilesFromProject(const QStringList&)), this, SLOT(slotRemovedFilesFromProject(const QStringList &)) ); 00670 } 00671 00672 #include "cvspart.moc" 00673
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:53 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003