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.
214 lines
6.6 KiB
214 lines
6.6 KiB
/***************************************************************************
|
|
komparemodellist.h - description
|
|
-------------------
|
|
begin : Tue Jun 26 2001
|
|
copyright : (C) 2001-2003 by John Firebaugh
|
|
and Otto Bruggeman
|
|
email : jfirebaugh@kde.org
|
|
otto.bruggeman@home.nl
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* 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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifndef KOMPAREMODELLIST_H
|
|
#define KOMPAREMODELLIST_H
|
|
|
|
#include <tqobject.h>
|
|
|
|
#include "diffmodel.h"
|
|
#include "diffmodellist.h"
|
|
#include "kompare.h"
|
|
|
|
class QFile;
|
|
|
|
class KAction;
|
|
class KDirWatch;
|
|
class KTempFile;
|
|
|
|
class DiffSettings;
|
|
class KompareProcess;
|
|
|
|
namespace Diff2
|
|
{
|
|
|
|
class KompareModelList : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
KompareModelList( DiffSettings* diffSettings, struct Kompare::Info& info, TQObject* parent = 0, const char* name = 0 );
|
|
~KompareModelList();
|
|
|
|
public:
|
|
// Swap source with destination and show differences
|
|
void swap();
|
|
|
|
/* Comparing methods */
|
|
bool compare( const TQString& source, const TQString& destination );
|
|
|
|
bool compareFiles( const TQString& source, const TQString& destination );
|
|
bool compareDirs( const TQString& source, const TQString& destination );
|
|
|
|
bool openDiff( const TQString& diff );
|
|
|
|
bool openFileAndDiff( const TQString& file, const TQString& diff );
|
|
bool openDirAndDiff( const TQString& dir, const TQString& diff );
|
|
|
|
bool saveDiff( const TQString& url, TQString directory, DiffSettings* diffSettings );
|
|
bool saveAll();
|
|
|
|
bool saveDestination( DiffModel* model );
|
|
|
|
void setEncoding( const TQString& encoding );
|
|
|
|
TQString recreateDiff() const;
|
|
|
|
// This parses the difflines and creates new models
|
|
int parseDiffOutput( const TQString& diff );
|
|
|
|
// Call this to emit the signals to the rest of the "world" to show the diff
|
|
void show();
|
|
|
|
// This will blend the original URL (dir or file) into the diffmodel,
|
|
// this is like patching but with a twist
|
|
bool blendOriginalIntoModelList( const TQString& localURL );
|
|
|
|
enum Kompare::Mode mode() const { return m_info.mode; };
|
|
const DiffModelList* models() const { return m_models; };
|
|
|
|
int modelCount() const;
|
|
int differenceCount() const;
|
|
int appliedCount() const;
|
|
|
|
const DiffModel* modelAt( int i ) const { return *( m_models->at( i ) ); };
|
|
int findModel( DiffModel* model ) const { return m_models->findIndex( model ); };
|
|
|
|
bool isModified() const;
|
|
|
|
int currentModel() const { return m_models->findIndex( m_selectedModel ); };
|
|
int currentDifference() const { return m_selectedModel ? m_selectedModel->findDifference( m_selectedDifference ) : -1; };
|
|
|
|
const DiffModel* selectedModel() const { return m_selectedModel; };
|
|
const Difference* selectedDifference() const { return m_selectedDifference; };
|
|
|
|
void clear();
|
|
|
|
private:
|
|
Diff2::DiffModel* firstModel();
|
|
Diff2::DiffModel* lastModel();
|
|
Diff2::DiffModel* prevModel();
|
|
Diff2::DiffModel* nextModel();
|
|
|
|
bool setSelectedModel( Diff2::DiffModel* model );
|
|
|
|
void updateModelListActions();
|
|
|
|
protected:
|
|
bool blendFile( DiffModel* model, const TQString& lines );
|
|
|
|
signals:
|
|
void status( Kompare::Status status );
|
|
void setStatusBarModelInfo( int modelIndex, int differenceIndex, int modelCount, int differenceCount, int appliedCount );
|
|
void error( TQString error );
|
|
void modelsChanged( const Diff2::DiffModelList* models );
|
|
void setSelection( const Diff2::DiffModel* model, const Diff2::Difference* diff );
|
|
void setSelection( const Diff2::Difference* diff );
|
|
void applyDifference( bool apply );
|
|
void applyAllDifferences( bool apply );
|
|
void applyDifference( const Diff2::Difference* diff, bool apply );
|
|
|
|
// Emits true when m_noOfModified > 0, false when m_noOfModified == 0
|
|
void setModified( bool modified );
|
|
|
|
public slots:
|
|
void slotSelectionChanged( const Diff2::DiffModel* model, const Diff2::Difference* diff );
|
|
void slotSelectionChanged( const Diff2::Difference* diff );
|
|
|
|
void slotApplyDifference( bool apply );
|
|
void slotApplyAllDifferences( bool apply );
|
|
void slotPreviousModel();
|
|
void slotNextModel();
|
|
void slotPreviousDifference();
|
|
void slotNextDifference();
|
|
|
|
// This slot is called by the diffmodels whenever their status changes to modified or unmodified
|
|
void slotSetModified( bool modified );
|
|
|
|
protected slots:
|
|
void slotDiffProcessFinished( bool success );
|
|
void slotWriteDiffOutput( bool success );
|
|
|
|
void slotActionApplyDifference();
|
|
void slotActionUnApplyDifference();
|
|
void slotActionApplyAllDifferences();
|
|
void slotActionUnapplyAllDifferences();
|
|
|
|
/** Save the currently selected destination in a multi-file diff,
|
|
or the single destination if a single file diff. */
|
|
void slotSaveDestination();
|
|
|
|
private slots:
|
|
void slotDirectoryChanged( const TQString& );
|
|
void slotFileChanged( const TQString& );
|
|
|
|
private: // Helper methods
|
|
bool isDirectory( const TQString& url ) const;
|
|
bool isDiff( const TQString& mimetype ) const;
|
|
TQString readFile( const TQString& fileName );
|
|
|
|
bool hasPrevModel() const;
|
|
bool hasNextModel() const;
|
|
bool hasPrevDiff() const;
|
|
bool hasNextDiff() const;
|
|
|
|
TQStringList split( const TQString& diff );
|
|
|
|
private:
|
|
KTempFile* m_diffTemp;
|
|
TQString m_diffURL;
|
|
|
|
KompareProcess* m_diffProcess;
|
|
|
|
DiffSettings* m_diffSettings;
|
|
|
|
DiffModelList* m_models;
|
|
|
|
TQString m_source;
|
|
TQString m_destination;
|
|
|
|
DiffModel* m_selectedModel;
|
|
Difference* m_selectedDifference;
|
|
|
|
KDirWatch* m_dirWatch;
|
|
KDirWatch* m_fileWatch;
|
|
|
|
int m_noOfModified;
|
|
unsigned int m_modelIndex;
|
|
|
|
struct Kompare::Info& m_info;
|
|
|
|
KAction* m_applyDifference;
|
|
KAction* m_unApplyDifference;
|
|
KAction* m_applyAll;
|
|
KAction* m_unapplyAll;
|
|
KAction* m_previousFile;
|
|
KAction* m_nextFile;
|
|
KAction* m_previousDifference;
|
|
KAction* m_nextDifference;
|
|
|
|
KAction* m_save;
|
|
|
|
TQString m_encoding;
|
|
TQTextCodec* m_textCodec;
|
|
};
|
|
|
|
} // End of namespace Diff2
|
|
|
|
#endif
|