00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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
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
00065
00066
00067 bool g_projectWasJustCreated =
false;
00068
00070
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
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
00119
m_impl =
new CvsServicePartImpl(
this );
00120 connect(
m_impl, SIGNAL(checkoutFinished(
QString)), SIGNAL(finishedFetching(
QString)) );
00121
00122
00123 connect(
core(), SIGNAL(projectOpened()),
this, SLOT(
slotProjectOpened()) );
00124 connect(
core(), SIGNAL(projectClosed()),
this, SLOT(
slotProjectClosed()) );
00125
00126
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
00144
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
00243
00244
00245
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
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
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
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
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
00638
if (
g_projectWasJustCreated)
00639 {
00640 options->
save(
project() );
00641
g_projectWasJustCreated =
false;
00642 }
00643 options->
load(
project() );
00644
00645
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
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
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