You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdevelop/vcs/cvsservice/cvspart.cpp

781 lines
28 KiB

/**************************************************************************
* Copyright (C) 1999-2001 by Bernd Gehrmann *
* bernd@kdevelop.org *
* Copyright (C) 2003 by Mario Scalas *
* mario.scalas@libero.it *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "cvspart.h"
#include <tqdir.h>
#include <tqpopupmenu.h>
#include <tqwhatsthis.h>
#include <tqtimer.h>
#include <tdepopupmenu.h>
#include <kdebug.h>
#include <tdelocale.h>
#include <tdemessagebox.h>
#include <kdialogbase.h>
#include <kstandarddirs.h>
#include <tdeaction.h>
#include <kurl.h>
#include <tdeapplication.h>
#include <tdemainwindow.h>
// Because of KShellProcess::quote()
#include <kprocess.h>
#include <kiconloader.h>
#include <dcopref.h>
#include <repository_stub.h>
#include <cvsservice_stub.h>
#include <cvsjob_stub.h>
#include <tdeparts/part.h>
#include <kdevpartcontroller.h>
#include <kdevgenericfactory.h>
#include "kdevcore.h"
#include "kdevmakefrontend.h"
#include "kdevdifffrontend.h"
#include "kdevappfrontend.h"
#include "kdevplugininfo.h"
#include "domutil.h"
#include "kdevmainwindow.h"
#include "kdevproject.h"
#include "urlutil.h"
#include "cvsform.h"
#include "commitdlg.h"
#include "checkoutdialog.h"
#include "tagdialog.h"
#include "cvsprocesswidget.h"
#include "cvsoptions.h"
#include "cvsoptionswidget.h"
#include "cvspartimpl.h"
#include "cvsdir.h"
///////////////////////////////////////////////////////////////////////////////
// Global vars
///////////////////////////////////////////////////////////////////////////////
// See createNewProject( const TQString &) and slotProjectOpened()
bool g_projectWasJustCreated = false;
///////////////////////////////////////////////////////////////////////////////
// Plugin factory
///////////////////////////////////////////////////////////////////////////////
static const KDevPluginInfo pluginData("kdevcvsservice");
typedef KDevGenericFactory<CvsServicePart> CvsFactory;
K_EXPORT_COMPONENT_FACTORY( libkdevcvsservice, CvsFactory( pluginData ) )
///////////////////////////////////////////////////////////////////////////////
// class CvsServicePart
///////////////////////////////////////////////////////////////////////////////
CvsServicePart::CvsServicePart( TQObject *parent, const char *name, const TQStringList & )
: KDevVersionControl( &pluginData, parent,
name ? name : "CvsService" ),
actionCommit( 0 ), actionDiff( 0 ), actionLog( 0 ), actionAnnotate(0), actionAdd( 0 ),
actionAddBinary( 0 ), actionRemove( 0 ), actionUpdate( 0 ),
actionRemoveSticky( 0 ), actionEdit( 0 ), actionEditors(0), actionUnEdit(0),
actionAddToIgnoreList( 0 ), actionRemoveFromIgnoreList( 0 ),
actionTag( 0 ), actionUnTag( 0 ),
actionLogin( 0), actionLogout( 0 ),
m_impl( 0 )
{
setInstance( CvsFactory::instance() );
m_impl = new CvsServicePartImpl( this );
// Load / store project configuration every time project is opened/closed
connect( core(), TQ_SIGNAL(projectOpened()), this, TQ_SLOT(slotProjectOpened()) );
connect( core(), TQ_SIGNAL(projectClosed()), this, TQ_SLOT(slotProjectClosed()) );
TQTimer::singleShot(0, this, TQ_SLOT(init()));
}
///////////////////////////////////////////////////////////////////////////////
CvsServicePart::~CvsServicePart()
{
delete m_cvsConfigurationForm;
delete m_impl;
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::init()
{
if ( !m_impl->m_widget ) return;
setupActions();
// Re-route our implementation signal for when check-out finishes to the standard signal
connect( m_impl, TQ_SIGNAL(checkoutFinished(TQString)), TQ_SIGNAL(finishedFetching(TQString)) );
// Context menu
connect( core(), TQ_SIGNAL(contextMenu(TQPopupMenu *, const Context *)),
this, TQ_SLOT(contextMenu(TQPopupMenu *, const Context *)) );
connect( core(), TQ_SIGNAL(projectConfigWidget(KDialogBase*)),
this, TQ_SLOT(projectConfigWidget(KDialogBase*)) );
connect( core(), TQ_SIGNAL(stopButtonClicked(KDevPlugin*)),
this, TQ_SLOT(slotStopButtonClicked(KDevPlugin*)) );
m_impl->m_widget->setIcon( UserIcon( "kdev_cvs", TDEIcon::DefaultState, CvsFactory::instance()) );
TQWhatsThis::add( m_impl->processWidget(), i18n("<b>CVS</b><p>Concurrent Versions System operations window. Shows output of Cervisia CVS Service.") );
m_impl->processWidget()->setCaption(i18n("CvsService Output"));
mainWindow()->embedOutputView( m_impl->processWidget(), i18n("CvsService"), i18n("cvs output") );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::setupActions()
{
// This actions are used in the menubar: for context menu we build the
// context at runtime. See CvsServicePart::contextMenu().
actionCommit = new TDEAction( i18n("&Commit to Repository"), 0, this,
TQ_SLOT(slotActionCommit()), actionCollection(), "cvsservice_commit" );
actionCommit->setToolTip( i18n("Commit file(s)") );
actionCommit->setWhatsThis( i18n("<b>Commit file(s)</b><p>Commits file to repository if modified.") );
actionDiff = new TDEAction( i18n("&Difference Between Revisions"), 0, this, TQ_SLOT(slotActionDiff()),
actionCollection(), "cvsservice_diff" );
actionDiff->setToolTip( i18n("Build difference") );
actionDiff->setWhatsThis( i18n("<b>Build difference</b><p>Builds difference between releases.") );
actionLog = new TDEAction( i18n("Generate &Log"), 0, this, TQ_SLOT(slotActionLog()),
actionCollection(), "cvsservice_log" );
actionLog->setToolTip( i18n("Generate log") );
actionLog->setWhatsThis( i18n("<b>Generate log</b><p>Produces log for this file.") );
actionAnnotate = new TDEAction( i18n("&Annotate"), 0, this, TQ_SLOT(slotActionAnnotate()),
actionCollection(), "cvsservice_annotate" );
actionAnnotate->setToolTip( i18n("Generate annotations") );
actionAnnotate->setWhatsThis( i18n("<b>Annotate</b><p>Produces annotations for this file.") );
actionAdd = new TDEAction( i18n("&Add to Repository"), 0, this, TQ_SLOT(slotActionAdd()),
actionCollection(), "cvsservice_add" );
actionAdd->setToolTip( i18n("Add file to repository") );
actionAdd->setWhatsThis( i18n("<b>Add to repository</b><p>Adds file to repository.") );
actionEdit = new TDEAction( i18n("&Edit Files"), 0, this, TQ_SLOT(slotActionEdit()),
actionCollection(), "cvsservice_edit" );
actionEdit->setToolTip( i18n("Mark as being edited") );
actionEdit->setWhatsThis( i18n("<b>Mark as being edited</b><p>Mark the files as being edited.") );
actionUnEdit = new TDEAction( i18n("&Unedit Files"), 0, this, TQ_SLOT(slotActionUnEdit()),
actionCollection(), "cvsservice_unedit" );
actionUnEdit->setToolTip( i18n("Remove editing mark from files") );
actionUnEdit->setWhatsThis( i18n("<b>Remove editing mark</b><p>Remove the editing mark from the files.") );
actionEditors = new TDEAction( i18n("&Show Editors"), 0, this, TQ_SLOT(slotActionEditors()),
actionCollection(), "cvsservice_editors" );
actionEditors->setToolTip( i18n("Show editors") );
actionEditors->setWhatsThis( i18n("<b>Show editors</b><p>Shows the list of users who are editing files.") );
actionAddBinary = new TDEAction( i18n("Add to Repository as &Binary"), 0, this,
TQ_SLOT(slotActionAddBinary()), actionCollection(), "cvsservice_add_bin" );
actionAddBinary->setToolTip( i18n("Add file to repository as binary") );
actionAddBinary->setWhatsThis( i18n("<b>Add to repository as binary</b><p>Adds file to repository as binary (-kb option).") );
actionRemove = new TDEAction( i18n("&Remove From Repository"), 0, this,
TQ_SLOT(slotActionRemove()), actionCollection(), "cvsservice_remove" );
actionRemove->setToolTip( i18n("Remove from repository") );
actionRemove->setWhatsThis( i18n("<b>Remove from repository</b><p>Removes file(s) from repository.") );
actionUpdate = new TDEAction( i18n("&Update/Revert to Another Release"), 0, this,
TQ_SLOT(slotActionUpdate()), actionCollection(), "cvsservice_update" );
actionUpdate->setToolTip( i18n("Update/revert") );
actionUpdate->setWhatsThis( i18n("<b>Update/revert to another release</b><p>Updates/reverts file(s) to another release.") );
actionRemoveSticky = new TDEAction( i18n("R&emove Sticky Flag"), 0,
this, TQ_SLOT(slotActionRemoveSticky()), actionCollection(), "cvsservice_removesticky" );
actionRemoveSticky->setToolTip( i18n("Remove sticky flag") );
actionRemoveSticky->setWhatsThis( i18n("<b>Remove sticky flag</b><p>Removes sticky flag from file(s).") );
actionTag = new TDEAction( i18n("Make &Tag/Branch"), 0,
this, TQ_SLOT(slotActionTag()), actionCollection(), "cvsservice_tag" );
actionTag->setToolTip( i18n("Make tag/branch") );
actionTag->setWhatsThis( i18n("<b>Make tag/branch</b><p>Tags/branches selected file(s).") );
actionUnTag = new TDEAction( i18n("&Delete Tag"), 0,
this, TQ_SLOT(slotActionUnTag()), actionCollection(), "cvsservice_untag" );
actionUnTag->setToolTip( i18n("Delete tag") );
actionUnTag->setWhatsThis( i18n("<b>Delete tag</b><p>Delete tag from selected file(s).") );
actionAddToIgnoreList = new TDEAction( i18n("&Ignore in CVS Operations"), 0,
this, TQ_SLOT(slotActionAddToIgnoreList()), actionCollection(), "cvsservice_ignore" );
actionAddToIgnoreList->setToolTip( i18n("Ignore in CVS operations") );
actionAddToIgnoreList->setWhatsThis( i18n("<b>Ignore in CVS operations</b><p>Ignore file(s) by adding it to .cvsignore file.") );
actionRemoveFromIgnoreList = new TDEAction( i18n("Do &Not Ignore in CVS Operations"), 0,
this, TQ_SLOT(slotActionRemoveFromIgnoreList()), actionCollection(), "cvsservice_donot_ignore" );
actionRemoveFromIgnoreList->setToolTip( i18n("Do not ignore in CVS operations") );
actionRemoveFromIgnoreList->setWhatsThis( i18n("<b>Do not ignore in CVS operations</b><p>Do not ignore file(s) by removing\nit from .cvsignore file.") );
actionLogin = new TDEAction( i18n("&Log to Server"), 0, this,
TQ_SLOT(slotActionLogin()), actionCollection(), "cvsservice_login" );
actionLogin->setToolTip( i18n("Login to server") );
actionLogin->setWhatsThis( i18n("<b>Login to server</b><p>Logs in to the CVS server.") );
actionLogout = new TDEAction( i18n("L&ogout From Server"), 0, this,
TQ_SLOT(slotActionLogout()), actionCollection(), "cvsservice_logout" );
actionLogout->setToolTip( i18n("Logout from server") );
actionLogout->setWhatsThis( i18n("<b>Logout from server</b><p>Logs out from the CVS server.") );
}
///////////////////////////////////////////////////////////////////////////////
bool CvsServicePart::fetchFromRepository()
{
return m_impl->checkout();
}
///////////////////////////////////////////////////////////////////////////////
KDevVCSFileInfoProvider *CvsServicePart::fileInfoProvider() const
{
return m_impl->fileInfoProvider();
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::createNewProject( const TQString &dirName )
{
kdDebug( 9006 ) << "====> CvsServicePart::createNewProject( const TQString& )" << endl;
if (!m_cvsConfigurationForm)
return;
/// \FIXME actually there is no way to inform that a _new_ ("just created")
// project has been opened because projectOpened() is emitted after the project
// has been created :-/ So the only way to inform that slotProjectOpened() to not
// load default settings (overriding the CvsOptions instance is to set this flag
// here ...
g_projectWasJustCreated = true;
m_impl->createNewProject( dirName,
m_cvsConfigurationForm->cvsRsh(), m_cvsConfigurationForm->location(),
m_cvsConfigurationForm->message(), m_cvsConfigurationForm->module(),
m_cvsConfigurationForm->vendor(), m_cvsConfigurationForm->release(),
m_cvsConfigurationForm->mustInitRoot()
);
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::projectConfigWidget( KDialogBase *dlg )
{
TQVBox *vbox = dlg->addVBoxPage( i18n("CvsService"), i18n("CvsService"), BarIcon( info()->icon(), TDEIcon::SizeMedium) );
CvsOptionsWidget *w = new CvsOptionsWidget( (TQWidget *)vbox, "cvs config widget" );
connect( dlg, TQ_SIGNAL(okClicked()), w, TQ_SLOT(accept()) );
}
///////////////////////////////////////////////////////////////////////////////
TQWidget* CvsServicePart::newProjectWidget( TQWidget *parent )
{
m_cvsConfigurationForm = new CvsForm( parent, "cvsform" );
return m_cvsConfigurationForm;
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::contextMenu( TQPopupMenu *popup, const Context *context )
{
kdDebug(9006) << "contextMenu()" << endl;
if (context->hasType( Context::FileContext ) ||
context->hasType( Context::EditorContext ))
{
if (context->hasType( Context::FileContext ))
{
kdDebug(9006) << "Requested for a FileContext" << endl;
const FileContext *fcontext = static_cast<const FileContext*>( context );
m_urls = fcontext->urls();
}
else
{
kdDebug(9006) << "Requested for an EditorContext" << endl;
const EditorContext *editorContext = static_cast<const EditorContext*>( context );
// m_urls << editorContext->url(); // this can't be right?
m_urls = editorContext->url();
}
// THis stuff should end up into prepareOperation()
URLUtil::dump( m_urls );
if (m_urls.count() <= 0)
return;
TDEPopupMenu *subMenu = new TDEPopupMenu( popup );
if (context->hasType( Context::FileContext ))
popup->insertSeparator();
int id = subMenu->insertItem( actionCommit->text(), this, TQ_SLOT(slotCommit()) );
subMenu->setWhatsThis(id, i18n("<b>Commit file(s)</b><p>Commits file to repository if modified."));
// CvsService let to do log and diff operations only on one file (or directory) at time
if (m_urls.count() == 1)
{
id = subMenu->insertItem( actionDiff->text(), this, TQ_SLOT(slotDiff()) );
subMenu->setWhatsThis(id, i18n("<b>Build difference</b><p>Builds difference between releases."));
id = subMenu->insertItem( actionLog->text(), this, TQ_SLOT(slotLog()) );
subMenu->setWhatsThis(id, i18n("<b>Generate log</b><p>Produces log for this file."));
id = subMenu->insertItem( actionAnnotate->text(), this, TQ_SLOT(slotAnnotate()) );
subMenu->setWhatsThis(id, i18n("<b>Generate Annotate</b><p>Produces annotation output for this file."));
}
id = subMenu->insertItem( actionEditors->text(), this, TQ_SLOT(slotEditors()) );
subMenu->setWhatsThis(id, i18n("<b>Show editors</b><p>Shows the list of users who are editing files."));
id = subMenu->insertItem( actionEdit->text(), this, TQ_SLOT(slotEdit()) );
subMenu->setWhatsThis(id, i18n("<b>Mark as beeing edited</b><p>Mark the files as beeing edited."));
id = subMenu->insertItem( actionUnEdit->text(), this, TQ_SLOT(slotUnEdit()) );
subMenu->setWhatsThis(id, i18n("<b>Remove editing mark</b><p>Remove the editing mark from the files."));
id = subMenu->insertItem( actionAdd->text(), this, TQ_SLOT(slotAdd()) );
subMenu->setWhatsThis(id, i18n("<b>Add to repository</b><p>Adds file to repository."));
id = subMenu->insertItem( actionAddBinary->text(), this, TQ_SLOT(slotAddBinary()) );
subMenu->setWhatsThis(id, i18n("<b>Add to repository as binary</b><p>Adds file to repository as binary (-kb option)."));
id = subMenu->insertItem( actionRemove->text(), this, TQ_SLOT(slotRemove()) );
subMenu->setWhatsThis(id, i18n("<b>Remove from repository</b><p>Removes file(s) from repository."));
subMenu->insertSeparator();
id = subMenu->insertItem( actionTag->text(), this, TQ_SLOT(slotTag()) );
subMenu->setWhatsThis(id, i18n("<b>Make tag/branch</b><p>Tags/branches selected file(s)."));
id = subMenu->insertItem( actionUnTag->text(), this, TQ_SLOT(slotUnTag()) );
subMenu->setWhatsThis(id, i18n("<b>Delete tag</b><p>Delete tag from selected file(s)."));
id = subMenu->insertItem( actionUpdate->text(), this, TQ_SLOT(slotUpdate()) );
subMenu->setWhatsThis(id, i18n("<b>Update/revert to another release</b><p>Updates/reverts file(s) to another release."));
id = subMenu->insertItem( actionRemoveSticky->text(), this, TQ_SLOT(slotRemoveSticky()) );
subMenu->setWhatsThis(id, i18n("<b>Remove sticky flag</b><p>Removes sticky flag from file(s)."));
subMenu->insertSeparator();
id = subMenu->insertItem( actionAddToIgnoreList->text(), this, TQ_SLOT(slotAddToIgnoreList()) );
subMenu->setWhatsThis(id, i18n("<b>Ignore in CVS operations</b><p>Ignore file(s) by adding it to .cvsignore file."));
id = subMenu->insertItem( actionRemoveFromIgnoreList->text(), this, TQ_SLOT(slotRemoveFromIgnoreList()) );
subMenu->setWhatsThis(id, i18n("<b>Do not ignore in CVS operations</b><p>Do not ignore file(s) by removing\nit from .cvsignore file."));
// Now insert in parent menu
popup->insertItem( i18n("CvsService"), subMenu );
// If the current project doesn't support CVS, we don't
// want to confuse the user with a CVS popup menu.
if( !project() || !isValidDirectory( project()->projectDirectory() ) )
{
subMenu->setEnabled( false );
}
}
}
///////////////////////////////////////////////////////////////////////////////
bool CvsServicePart::urlFocusedDocument( KURL &url )
{
kdDebug(9006) << "CvsServicePartImpl::retrieveUrlFocusedDocument() here!" << endl;
KParts::ReadOnlyPart *part = dynamic_cast<KParts::ReadOnlyPart*>( partController()->activePart() );
if ( part )
{
if (part->url().isLocalFile() )
{
url = part->url();
return true;
}
else
{
kdDebug(9006) << "Cannot handle non-local files!" << endl;
}
}
return false;
}
///////////////////////////////////////////////////////////////////////////////
bool CvsServicePart::isValidDirectory( const TQString &dirPath ) const
{
return m_impl->isValidDirectory( dirPath );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionLogin()
{
m_impl->login();
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionLogout()
{
m_impl->logout();
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionCommit()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->commit( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionUpdate()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->update( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionAdd()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->add( currDocument, false );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionAnnotate()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->annotate( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionEdit()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->edit( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionEditors()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->editors( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionUnEdit()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->unedit( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionAddBinary()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->add( currDocument, true );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionRemove()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->remove( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionRemoveSticky()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->removeStickyFlag( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionLog()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->log( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionDiff()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->diff( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionTag()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->tag( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionUnTag()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->unTag( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionAddToIgnoreList()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->addToIgnoreList( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotActionRemoveFromIgnoreList()
{
KURL currDocument;
if (urlFocusedDocument( currDocument ))
{
m_impl->removeFromIgnoreList( currDocument );
}
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotCommit()
{
m_impl->commit( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotUpdate()
{
m_impl->update( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotAdd()
{
m_impl->add( m_urls, false );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotAnnotate()
{
m_impl->annotate( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotEdit()
{
m_impl->edit( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotUnEdit()
{
m_impl->unedit( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotEditors()
{
m_impl->editors( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotAddBinary()
{
m_impl->add( m_urls, true );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotRemove()
{
m_impl->remove( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotRemoveSticky()
{
m_impl->removeStickyFlag( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotLog()
{
m_impl->log( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotDiff()
{
m_impl->diff( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotTag()
{
m_impl->tag( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotUnTag()
{
m_impl->unTag( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotAddToIgnoreList()
{
m_impl->addToIgnoreList( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotRemoveFromIgnoreList()
{
m_impl->removeFromIgnoreList( m_urls );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotStopButtonClicked( KDevPlugin* which )
{
if ( which != 0 && which != this )
return;
m_impl->flushJobs();
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotAddFilesToProject( const TQStringList &filesToAdd )
{
m_impl->addFilesToProject( filesToAdd );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotRemovedFilesFromProject(const TQStringList &fileToRemove)
{
m_impl->removedFilesFromProject( fileToRemove );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotProjectOpened()
{
kdDebug(9006) << "CvsServicePart::slotProjectOpened() here!" << endl;
// Avoid bothering the user if this project has no support for CVS
if (!isValidDirectory( project()->projectDirectory() ))
{
kdDebug(9006) << "Project has no CVS Support: too bad!! :-(" << endl;
return;
}
CvsOptions *options = CvsOptions::instance();
// If createNewProject() has set this var then we have to get it.
if (g_projectWasJustCreated)
{
options->save( project() );
g_projectWasJustCreated = false;
}
options->load( project() );
// When files are added to project they may be added to/removed from repository too
connect( project(), TQ_SIGNAL(addedFilesToProject(const TQStringList&)), this, TQ_SLOT(slotAddFilesToProject(const TQStringList &)) );
connect( project(), TQ_SIGNAL(removedFilesFromProject(const TQStringList&)), this, TQ_SLOT(slotRemovedFilesFromProject(const TQStringList &)) );
}
///////////////////////////////////////////////////////////////////////////////
void CvsServicePart::slotProjectClosed()
{
kdDebug(9006) << "CvsServicePart::slotProjectClosed() here!" << endl;
// Avoid bothering the user if this project has no support for CVS
if (!isValidDirectory( project()->projectDirectory() ))
{
kdDebug(9006) << "Project had no CVS Support: too bad!! :-(" << endl;
return;
}
CvsOptions *options = CvsOptions::instance();
options->save( project() );
delete options;
// We don't have a project anymore ...
disconnect( project(), TQ_SIGNAL(addedFilesToProject(const TQStringList&)), this, TQ_SLOT(slotAddFilesToProject(const TQStringList &)) );
disconnect( project(), TQ_SIGNAL(removedFilesFromProject(const TQStringList&)), this, TQ_SLOT(slotRemovedFilesFromProject(const TQStringList &)) );
}
#include "cvspart.moc"