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/perforce/commitdlg.cpp

162 lines
4.8 KiB

/***************************************************************************
* Copyright (C) 1999, 2000 by Bernd Gehrmann *
* bernd@kdevelop.org *
* Modified for perforce 2002 by Harald Fernengel <harry@kdevelop.org> *
* *
* 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 "commitdlg.h"
#include <tqlayout.h>
#include <tqlabel.h>
#include <tqtextedit.h>
#include <tqpushbutton.h>
#include <tqregexp.h>
#include <kprocess.h>
#include <kapplication.h>
#include <klocale.h>
#include <klineedit.h>
#include <kmessagebox.h>
#include <kdebug.h>
#include <stdlib.h>
#include "execcommand.h"
CommitDialog::CommitDialog( TQWidget *parent, const char *name )
: KDialogBase( parent, name, true, i18n("Perforce Submit"), Ok|Cancel|Details )
{
TQWidget *w = new TQWidget( this, "main widget" );
setMainWidget( w );
edit = new TQTextEdit( w );
TQFontMetrics fm(edit->fontMetrics());
edit->setMinimumSize(fm.width("0")*40, fm.lineSpacing()*3);
TQVBoxLayout *layout = new TQVBoxLayout( w, 0, spacingHint() );
TQLabel *editLabel = new TQLabel(i18n("&Enter description:"), w);
editLabel->setBuddy(edit);
layout->addWidget(editLabel);
layout->addWidget(edit);
w = new TQWidget( this, "details widget" );
clientEdit = new KLineEdit( w );
userEdit = new KLineEdit( w );
filesBox = new KListBox( w );
layout = new TQVBoxLayout( w, 0, spacingHint() );
TQLabel *clientLabel = new TQLabel(i18n("C&lient:"), w);
clientLabel->setBuddy(clientEdit);
layout->addWidget(clientLabel);
layout->addWidget( clientEdit );
TQLabel *userLabel = new TQLabel(i18n("&User:"), w);
userLabel->setBuddy(userEdit);
layout->addWidget( userLabel );
layout->addWidget( userEdit );
TQLabel *filesLabel = new TQLabel(i18n("&File(s):"), w);
filesLabel->setBuddy(filesBox);
layout->addWidget( filesLabel );
layout->addWidget( filesBox );
setDetailsWidget( w );
autoGuess();
edit->setFocus();
}
CommitDialog::~CommitDialog()
{
}
void CommitDialog::autoGuess()
{
char *cenv;
cenv = getenv( "P4USER" );
if ( cenv ) {
setUser( TQString::fromLocal8Bit( cenv ) );
}
cenv = getenv( "P4CLIENT" );
if ( cenv ) {
setClient( TQString::fromLocal8Bit( cenv ) );
}
}
void CommitDialog::setFiles( const TQStringList& lst )
{
filesBox->clear();
setDepotFiles( lst );
}
void CommitDialog::setDepotFiles( const TQStringList& lst )
{
TQStringList args;
args << "files";
for ( TQStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it ) {
args << (*it);
}
ExecCommand* cmd = new ExecCommand( "p4", args, TQString(), TQStringList(), TQT_TQOBJECT(this) );
connect( cmd, TQT_SIGNAL(finished( const TQString&, const TQString& )),
this, TQT_SLOT(getFilesFinished( const TQString&, const TQString& )) );
}
void CommitDialog::getFilesFinished( const TQString& out, const TQString& /* err */ )
{
TQStringList lst = TQStringList::split( TQChar('\n'), out );
for ( TQStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it ) {
int pos = (*it).find( TQChar('#') );
if ( pos > 1 && (*it).startsWith( "//" ) ) {
filesBox->insertItem( (*it).left( pos ) );
}
}
}
TQString CommitDialog::changeList() const
{
TQString lst;
lst += "Change: new\n"
"Client: " + client() + "\n"
"User: " + user() + "\n"
"Status: new\n"
"Description:\n ";
lst += logMessage().replace(TQRegExp("\n"), "\n ") + "\n\n";
lst += "Files:\n";
for ( uint i = 0; i < filesBox->count(); ++i ) {
lst += " " + filesBox->text( i ) + "\n";
}
return lst;
}
void CommitDialog::accept()
{
if ( client().isEmpty() ) {
setDetails( true );
KMessageBox::error( this, i18n("Please enter the P4 client name.") );
clientEdit->setFocus();
} else if ( user().isEmpty() ) {
setDetails( true );
KMessageBox::error( this, i18n("Please enter the P4 user.") );
userEdit->setFocus();
} else if ( filesBox->count() == 0 ) {
setDetails( true );
KMessageBox::error( this, i18n("The changelist does not contain any files.") );
} else {
KDialogBase::accept();
}
}
#include "commitdlg.moc"