KDevelop API Documentation

commitdlg.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 1999, 2000 by Bernd Gehrmann                            *
00003  *   bernd@kdevelop.org                                                    *
00004  *   Modified for perforce 2002 by Harald Fernengel <harry@kdevelop.org>   *
00005  *                                                                         *
00006  *   This program is free software; you can redistribute it and/or modify  *
00007  *   it under the terms of the GNU General Public License as published by  *
00008  *   the Free Software Foundation; either version 2 of the License, or     *
00009  *   (at your option) any later version.                                   *
00010  *                                                                         *
00011  ***************************************************************************/
00012 
00013 #include "commitdlg.h"
00014 
00015 #include <qlayout.h>
00016 #include <qlabel.h>
00017 #include <qtextedit.h>
00018 #include <qpushbutton.h>
00019 #include <qregexp.h>
00020 #include <kprocess.h>
00021 #include <kapplication.h>
00022 #include <klocale.h>
00023 #include <klineedit.h>
00024 #include <kmessagebox.h>
00025 #include <kdebug.h>
00026 
00027 #include <stdlib.h>
00028 
00029 #include "execcommand.h"
00030 
00031 CommitDialog::CommitDialog( QWidget *parent, const char *name )
00032     : KDialogBase( parent, name, true, i18n("Perforce Submit"), Ok|Cancel|Details )
00033 {
00034     QWidget *w = new QWidget( this, "main widget" );
00035     setMainWidget( w );
00036 
00037     edit = new QTextEdit( w );
00038     QFontMetrics fm(edit->fontMetrics());
00039     edit->setMinimumSize(fm.width("0")*40, fm.lineSpacing()*3);
00040 
00041     QVBoxLayout *layout = new QVBoxLayout( w, 0, spacingHint() );
00042     QLabel *editLabel = new QLabel(i18n("&Enter description:"), w);
00043     editLabel->setBuddy(edit);
00044     layout->addWidget(editLabel);
00045     layout->addWidget(edit);
00046 
00047     w = new QWidget( this, "details widget" );
00048 
00049     clientEdit = new KLineEdit( w );
00050     userEdit = new KLineEdit( w );
00051     filesBox = new KListBox( w );
00052 
00053     layout = new QVBoxLayout( w, 0, spacingHint() );
00054     QLabel *clientLabel = new QLabel(i18n("C&lient:"), w);
00055     clientLabel->setBuddy(clientEdit);
00056     layout->addWidget(clientLabel);
00057     layout->addWidget( clientEdit );
00058     QLabel *userLabel = new QLabel(i18n("&User:"), w);
00059     userLabel->setBuddy(userEdit);
00060     layout->addWidget( userLabel );
00061     layout->addWidget( userEdit );
00062     QLabel *filesLabel = new QLabel(i18n("&File(s):"), w);
00063     filesLabel->setBuddy(filesBox);
00064     layout->addWidget( filesLabel );
00065     layout->addWidget( filesBox );
00066 
00067     setDetailsWidget( w );
00068     autoGuess();
00069     edit->setFocus();
00070 }
00071 
00072 CommitDialog::~CommitDialog()
00073 {
00074 }
00075 
00076 void CommitDialog::autoGuess()
00077 {
00078     char *cenv;
00079 
00080     cenv = getenv( "P4USER" );
00081     if ( cenv ) {
00082         setUser( QString::fromLocal8Bit( cenv ) );
00083     }
00084 
00085     cenv = getenv( "P4CLIENT" );
00086     if ( cenv ) {
00087         setClient( QString::fromLocal8Bit( cenv ) );
00088     }
00089 }
00090 
00091 void CommitDialog::setFiles( const QStringList& lst )
00092 {
00093     filesBox->clear();
00094     setDepotFiles( lst );
00095 }
00096 
00097 void CommitDialog::setDepotFiles( const QStringList& lst )
00098 {
00099     QStringList args;
00100 
00101     args << "files";
00102     for ( QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it ) {
00103         args << (*it);
00104     }
00105 
00106     ExecCommand* cmd = new ExecCommand( "p4", args, QString::null, QStringList(), this );
00107     connect( cmd, SIGNAL(finished( const QString&, const QString& )),
00108          this, SLOT(getFilesFinished( const QString&, const QString& )) );
00109 }
00110 
00111 void CommitDialog::getFilesFinished( const QString& out, const QString& /* err */ )
00112 {
00113     QStringList lst = QStringList::split( QChar('\n'), out );
00114     for ( QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it ) {
00115         int pos = (*it).find( QChar('#') );
00116         if ( pos > 1 && (*it).startsWith( "//" ) ) {
00117             filesBox->insertItem( (*it).left( pos ) );
00118         }
00119     }
00120 }
00121 
00122 QString CommitDialog::changeList() const
00123 {
00124     QString lst;
00125 
00126     lst += "Change: new\n"
00127            "Client: " + client() + "\n"
00128            "User: " + user() + "\n"
00129            "Status: new\n"
00130            "Description:\n        ";
00131 
00132     lst += logMessage().replace(QRegExp("\n"), "\n        ") + "\n\n";
00133 
00134     lst += "Files:\n";
00135 
00136     for ( uint i = 0; i < filesBox->count(); ++i ) {
00137         lst += "       " + filesBox->text( i ) + "\n";
00138     }
00139 
00140     return lst;
00141 }
00142 
00143 void CommitDialog::accept()
00144 {
00145     if ( client().isEmpty() ) {
00146         setDetails( true );
00147         KMessageBox::error( this, i18n("Please enter the P4 client name.") );
00148         clientEdit->setFocus();
00149     } else if ( user().isEmpty() ) {
00150         setDetails( true );
00151         KMessageBox::error( this, i18n("Please enter the P4 user.") );
00152         userEdit->setFocus();
00153     } else if ( filesBox->count() == 0 ) {
00154         setDetails( true );
00155         KMessageBox::error( this, i18n("The changelist does not contain any files.") );
00156     } else {
00157         KDialogBase::accept();
00158     }
00159 }
00160 
00161 #include "commitdlg.moc"
KDE Logo
This file is part of the documentation for KDevelop Version 3.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 00:03:59 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003