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