branches/KDE/4.3/kdesdk/kompare
Ramon Zarazua
killerfox512 at gmail.com
Thu Aug 27 02:34:42 UTC 2009
SVN commit 1016107 by rzarazua:
Port over changes in interface & implementation for linking with KDevelop
CCMAIL: kdevelop-devel at barney.cs.uni-potsdam.de
M +12 -0 interfaces/kompareinterface.h
M +63 -28 komparepart/kompare_part.cpp
M +8 -2 komparepart/kompare_part.h
M +8 -6 libdiff2/kompare.h
M +15 -52 libdiff2/komparemodellist.cpp
M +1 -4 libdiff2/komparemodellist.h
M +35 -12 libdiff2/kompareprocess.cpp
M +4 -1 libdiff2/kompareprocess.h
--- branches/KDE/4.3/kdesdk/kompare/interfaces/kompareinterface.h #1016106:1016107
@@ -67,6 +67,16 @@
* appropriate method(s)
*/
virtual void compare( const KUrl& sourceFile, const KUrl& destinationFile ) = 0;
+
+ /**
+ * Compare a Source file to a custom Destination string
+ */
+ virtual void compareFileString( const KUrl & sourceFile, const QString & destination) = 0;
+
+ /**
+ * Compare a custom Source string to a Destination file
+ */
+ virtual void compareStringFile( const QString & source, const KUrl & destinationFile) = 0;
/**
* Compare, with diff, source with destination files
@@ -118,4 +128,6 @@
QString m_encoding;
};
+Q_DECLARE_INTERFACE(KompareInterface, "com.kde.Kompare.KompareInterface/4.0")
+
#endif /* _KOMPARE_INTERFACE_H */
--- branches/KDE/4.3/kdesdk/kompare/komparepart/kompare_part.cpp #1016106:1016107
@@ -402,15 +402,39 @@
emit kompareInfo( &m_info );
- if ( !m_info.localSource.isEmpty() && !m_info.localDestination.isEmpty() )
- {
- m_modelList->compare();
- updateCaption();
- updateStatus();
- }
- updateActions();
+ compareAndUpdateAll();
}
+void KomparePart::compareFileString( const KUrl & sourceFile, const QString & destination)
+{
+ //Set the modeto specify that the source is a file, and the destination is a string
+ m_info.mode = Kompare::ComparingFileString;
+
+ m_info.source = sourceFile;
+ m_info.localDestination = destination;
+
+ fetchURL(sourceFile, true);
+
+ emit kompareInfo( &m_info );
+
+ compareAndUpdateAll();
+}
+
+void KomparePart::compareStringFile( const QString & source, const KUrl & destinationFile)
+{
+ //Set the modeto specify that the source is a file, and the destination is a string
+ m_info.mode = Kompare::ComparingStringFile;
+
+ m_info.localSource = source;
+ m_info.destination = destinationFile;
+
+ fetchURL(destinationFile, false);
+
+ emit kompareInfo( &m_info );
+
+ compareAndUpdateAll();
+}
+
void KomparePart::compareFiles( const KUrl& sourceFile, const KUrl& destinationFile )
{
m_info.mode = Kompare::ComparingFiles;
@@ -425,13 +449,7 @@
emit kompareInfo( &m_info );
- if ( !m_info.localSource.isEmpty() && !m_info.localDestination.isEmpty() )
- {
- m_modelList->compareFiles();
- updateCaption();
- updateStatus();
- }
- updateActions();
+ compareAndUpdateAll();
}
void KomparePart::compareDirs( const KUrl& sourceDirectory, const KUrl& destinationDirectory )
@@ -446,13 +464,7 @@
emit kompareInfo( &m_info );
- if ( !m_info.localSource.isEmpty() && !m_info.localDestination.isEmpty() )
- {
- m_modelList->compareDirs();
- updateCaption();
- updateStatus();
- }
- updateActions();
+ compareAndUpdateAll();
}
void KomparePart::compare3Files( const KUrl& /*originalFile*/, const KUrl& /*changedFile1*/, const KUrl& /*changedFile2*/ )
@@ -474,13 +486,7 @@
emit kompareInfo( &m_info );
- if ( !m_info.localSource.isEmpty() && !m_info.localDestination.isEmpty() )
- {
- m_modelList->openFileAndDiff();
- updateCaption();
- updateStatus();
- }
- updateActions();
+ compareAndUpdateAll();
}
void KomparePart::openDirAndDiff ( const KUrl& dir, const KUrl& diffFile )
@@ -497,6 +503,7 @@
if ( !m_info.localSource.isEmpty() && !m_info.localDestination.isEmpty() )
{
m_modelList->openDirAndDiff();
+ //Must this be in here? couldn't we use compareAndUpdateAll as well?
updateActions();
updateCaption();
updateStatus();
@@ -720,6 +727,34 @@
emit setStatusBarText( text );
}
+void KomparePart::compareAndUpdateAll()
+{
+ if ( !m_info.localSource.isEmpty() && !m_info.localDestination.isEmpty() )
+ {
+ switch(m_info.mode)
+ {
+ default:
+ case Kompare::UnknownMode:
+ m_modelList->compare();
+ break;
+
+ case Kompare::ComparingStringFile:
+ case Kompare::ComparingFileString:
+ case Kompare::ComparingFiles:
+ case Kompare::ComparingDirs:
+ m_modelList->compare(m_info.mode);
+ break;
+
+ case Kompare::BlendingFile:
+ m_modelList->openFileAndDiff();
+ break;
+ }
+ updateCaption();
+ updateStatus();
+ }
+ updateActions();
+}
+
void KomparePart::slotShowError( QString error )
{
KMessageBox::error( widget(), error );
--- branches/KDE/4.3/kdesdk/kompare/komparepart/kompare_part.h #1016106:1016107
@@ -31,7 +31,6 @@
class QWidget;
class KTemporaryFile;
-class KToggleAction;
class KUrl;
class KAboutData;
class KAction;
@@ -45,7 +44,6 @@
class DiffSettings;
class ViewSettings;
class KompareSplitter;
-class KompareProcess;
/**
* This is a "Part". It does all the real work in a KPart
@@ -60,6 +58,7 @@
public KompareInterface
{
Q_OBJECT
+ Q_INTERFACES(KompareInterface)
public:
/**
* Default constructor
@@ -104,6 +103,12 @@
/** Compare, with diff, source with destination */
virtual void compare( const KUrl& sourceFile, const KUrl& destinationFile );
+
+ /** Compare a Source file to a custom Destination string */
+ virtual void compareFileString( const KUrl & sourceFile, const QString & destination);
+
+ /** Compare a custom Source string to a Destination file */
+ virtual void compareStringFile( const QString & source, const KUrl & destinationFile);
/** Compare, with diff, source with destination */
virtual void compareFiles( const KUrl& sourceFile, const KUrl& destinationFile );
@@ -194,6 +199,7 @@
void updateActions();
void updateCaption();
void updateStatus();
+ void compareAndUpdateAll();
void slotPaintRequested( QPrinter* );
--- branches/KDE/4.3/kdesdk/kompare/libdiff2/kompare.h #1016106:1016107
@@ -52,12 +52,14 @@
};
enum Mode {
- ComparingFiles, // compareFiles
- ComparingDirs, // compareDirs
- ShowingDiff, // openDiff
- BlendingDir, // openDirAnfDiff
- BlendingFile, // openFileAndDiff
- UnknownMode // Used to initialize the Infoi struct
+ ComparingFiles, // compareFiles
+ ComparingFileString, // Compare a source file with a destination string
+ ComparingStringFile, // Compare a source string with a destination file
+ ComparingDirs, // compareDirs
+ ShowingDiff, // openDiff
+ BlendingDir, // openDirAnfDiff
+ BlendingFile, // openFileAndDiff
+ UnknownMode // Used to initialize the Infoi struct
};
enum DiffMode {
--- branches/KDE/4.3/kdesdk/kompare/libdiff2/komparemodellist.cpp #1016106:1016107
@@ -136,7 +136,7 @@
if ( sourceIsDirectory && destinationIsDirectory )
{
m_info->mode = Kompare::ComparingDirs;
- result = compareDirs();
+ result = compare(m_info->mode);
}
else if ( !sourceIsDirectory && !destinationIsDirectory )
{
@@ -173,7 +173,7 @@
{
kDebug(8101) << "Comparing source with destination" << endl;
m_info->mode = Kompare::ComparingFiles;
- result = compareFiles();
+ result = compare(m_info->mode);
}
}
else if ( sourceIsDirectory && !destinationIsDirectory )
@@ -194,20 +194,11 @@
return result;
}
-bool KompareModelList::compareFiles()
+bool KompareModelList::compare(Kompare::Mode mode)
{
clear(); // Destroy the old models...
-// m_fileWatch = new KDirWatch( this, "filewatch" );
-// m_fileWatch->addFile( m_source );
-// m_fileWatch->addFile( m_destination );
-
-// connect( m_fileWatch, SIGNAL( dirty( const QString& ) ), this, SLOT( slotFileChanged( const QString& ) ) );
-// connect( m_fileWatch, SIGNAL( created( const QString& ) ), this, SLOT( slotFileChanged( const QString& ) ) );
-// connect( m_fileWatch, SIGNAL( deleted( const QString& ) ), this, SLOT( slotFileChanged( const QString& ) ) );
-
-// m_fileWatch->startScan();
- m_diffProcess = new KompareProcess( m_diffSettings, Kompare::Custom, m_info->localSource, m_info->localDestination );
+ m_diffProcess = new KompareProcess( m_diffSettings, Kompare::Custom, m_info->localSource, m_info->localDestination, QString(), mode );
m_diffProcess->setEncoding( m_encoding );
connect( m_diffProcess, SIGNAL(diffHasFinished( bool )),
@@ -219,32 +210,6 @@
return true;
}
-bool KompareModelList::compareDirs()
-{
- clear(); // Destroy the old models...
-
-// m_dirWatch = new KDirWatch( this, "dirwatch" );
- // Watch files in the dirs and watch the dirs recursively
-// m_dirWatch->addDir( m_source, true, true );
-// m_dirWatch->addDir( m_destination, true, true );
-
-// connect( m_dirWatch, SIGNAL( dirty ( const QString& ) ), this, SLOT( slotDirectoryChanged( const QString& ) ) );
-// connect( m_dirWatch, SIGNAL( created( const QString& ) ), this, SLOT( slotDirectoryChanged( const QString& ) ) );
-// connect( m_dirWatch, SIGNAL( deleted( const QString& ) ), this, SLOT( slotDirectoryChanged( const QString& ) ) );
-
-// m_dirWatch->startScan();
- m_diffProcess = new KompareProcess( m_diffSettings, Kompare::Custom, m_info->localSource, m_info->localDestination );
- m_diffProcess->setEncoding( m_encoding );
-
- connect( m_diffProcess, SIGNAL(diffHasFinished( bool )),
- this, SLOT(slotDiffProcessFinished( bool )) );
-
- emit status( Kompare::RunningDiff );
- m_diffProcess->start();
-
- return true;
-}
-
bool KompareModelList::openFileAndDiff()
{
clear();
@@ -324,15 +289,15 @@
QTextStream stream( &temp );
QStringList list;
- DiffHunkListConstIterator hunkIt = model->hunks()->begin();
- DiffHunkListConstIterator hEnd = model->hunks()->end();
+ DiffHunkListConstIterator hunkIt = model->hunks()->constBegin();
+ DiffHunkListConstIterator hEnd = model->hunks()->constEnd();
for( ; hunkIt != hEnd; ++hunkIt )
{
DiffHunk* hunk = *hunkIt;
- DifferenceListConstIterator diffIt = hunk->differences().begin();
- DifferenceListConstIterator dEnd = hunk->differences().end();
+ DifferenceListConstIterator diffIt = hunk->differences().constBegin();
+ DifferenceListConstIterator dEnd = hunk->differences().constEnd();
Difference* diff;
for( ; diffIt != dEnd; ++diffIt )
@@ -423,15 +388,15 @@
// If saving was fine set all differences to saved so we can start again with a clean slate
if ( result )
{
- DifferenceListConstIterator diffIt = model->differences()->begin();
- DifferenceListConstIterator endIt = model->differences()->end();
+ DifferenceListConstIterator diffIt = model->differences()->constBegin();
+ DifferenceListConstIterator endIt = model->differences()->constEnd();
for (; diffIt != endIt; ++diffIt )
{
(*diffIt)->setUnsaved( false );
}
}
-
+
return true;
}
@@ -1243,18 +1208,16 @@
void KompareModelList::refresh()
{
// FIXME: I can imagine blending also wants to be refreshed so make a switch case here
- if ( m_info->mode == Kompare::ComparingFiles )
- compareFiles();
- else if ( m_info->mode == Kompare::ComparingDirs )
- compareDirs();
+ compare(m_info->mode);
}
void KompareModelList::swap()
{
+ //FIXME Not sure if any mode could be swapped
if ( m_info->mode == Kompare::ComparingFiles )
- compareFiles();
+ compare(m_info->mode);
else if ( m_info->mode == Kompare::ComparingDirs )
- compareDirs();
+ compare(m_info->mode);
}
bool KompareModelList::hasUnsavedChanges() const
--- branches/KDE/4.3/kdesdk/kompare/libdiff2/komparemodellist.h #1016106:1016107
@@ -26,10 +26,8 @@
#include "kompare.h"
#include "diff2export.h"
-class QFile;
class KAction;
-class KDirWatch;
class KTemporaryFile;
class DiffSettings;
@@ -53,8 +51,7 @@
/* Comparing methods */
bool compare();
- bool compareFiles();
- bool compareDirs();
+ bool compare(Kompare::Mode);
bool openDiff( const QString& diff );
--- branches/KDE/4.3/kdesdk/kompare/libdiff2/kompareprocess.cpp #1016106:1016107
@@ -21,8 +21,6 @@
#include <QtCore/QDir>
#include <QtCore/QStringList>
#include <QtCore/QTextCodec>
-#include <Q3ValueList>
-#include <Q3CString>
#include <kcharsets.h>
#include <kdebug.h>
@@ -30,10 +28,11 @@
#include "diffsettings.h"
-KompareProcess::KompareProcess( DiffSettings* diffSettings, enum Kompare::DiffMode mode, QString source, QString destination, QString dir )
+KompareProcess::KompareProcess( DiffSettings* diffSettings, Kompare::DiffMode diffMode, const QString & source, const QString & destination, const QString &dir, Kompare::Mode mode )
: KProcess(),
m_diffSettings( diffSettings ),
- m_mode( mode ),
+ m_mode( diffMode ),
+ m_customString(0),
m_textDecoder( 0 )
{
// connect the signal that indicates that the proces has exited
@@ -58,8 +57,27 @@
// Write file names
*this << "--";
- *this << constructRelativePath( dir, source );
- *this << constructRelativePath( dir, destination );
+
+ //Add the option for diff to read from stdin(QIODevice::write), and save a pointer to the string
+ if(mode == Kompare::ComparingStringFile)
+ {
+ *this << "-";
+ m_customString = &source;
+ }
+ else
+ {
+ *this << constructRelativePath( dir, source );
+ }
+
+ if(mode == Kompare::ComparingFileString)
+ {
+ *this << "-";
+ m_customString = &destination;
+ }
+ else
+ {
+ *this << constructRelativePath( dir, destination );
+ }
}
void KompareProcess::writeDefaultCommandLine()
@@ -211,14 +229,14 @@
}
else
{
- QTextCodec* textCodec = KGlobal::charsets()->codecForName( encoding.latin1() );
- if ( textCodec )
- m_textDecoder = textCodec->makeDecoder();
+ m_codec = KGlobal::charsets()->codecForName( encoding.latin1() );
+ if ( m_codec )
+ m_textDecoder = m_codec->makeDecoder();
else
{
kDebug(8101) << "Using locale codec as backup..." << endl;
- textCodec = QTextCodec::codecForLocale();
- m_textDecoder = textCodec->makeDecoder();
+ m_codec = QTextCodec::codecForLocale();
+ m_textDecoder = m_codec->makeDecoder();
}
}
}
@@ -234,8 +252,13 @@
kDebug(8101) << cmdLine << endl;
#endif
setOutputChannelMode( SeparateChannels );
- setNextOpenMode( ReadOnly );
+ setNextOpenMode(QIODevice::ReadWrite);
KProcess::start();
+
+ //If we have a string to compare against input it now
+ if(m_customString)
+ write(m_codec->fromUnicode(*m_customString));
+ closeWriteChannel();
}
void KompareProcess::slotFinished( int exitCode, QProcess::ExitStatus exitStatus )
--- branches/KDE/4.3/kdesdk/kompare/libdiff2/kompareprocess.h #1016106:1016107
@@ -32,7 +32,8 @@
Q_OBJECT
public:
- KompareProcess( DiffSettings* diffSettings, enum Kompare::DiffMode mode, QString source, QString destination, QString directory = QString() );
+ KompareProcess( DiffSettings* diffSettings, enum Kompare::DiffMode mode, const QString & source,
+ const QString & destination, const QString& directory = QString(), enum Kompare::Mode = Kompare::UnknownMode );
~KompareProcess();
void start();
@@ -56,9 +57,11 @@
private:
DiffSettings* m_diffSettings;
enum Kompare::DiffMode m_mode;
+ const QString * m_customString; // Used when a comparison between a file and a string is requested
QString m_stdout;
QString m_stderr;
QTextDecoder* m_textDecoder;
+ QTextCodec * m_codec;
};
#endif
More information about the KDevelop-devel
mailing list