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.
tdesdk/kompare/libdiff2/komparemodellist.h

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 <qobject.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, QObject* parent = 0, const char* name = 0 );
~KompareModelList();
public:
// Swap source with destination and show differences
void swap();
/* Comparing methods */
bool compare( const QString& source, const QString& destination );
bool compareFiles( const QString& source, const QString& destination );
bool compareDirs( const QString& source, const QString& destination );
bool openDiff( const QString& diff );
bool openFileAndDiff( const QString& file, const QString& diff );
bool openDirAndDiff( const QString& dir, const QString& diff );
bool saveDiff( const QString& url, QString directory, DiffSettings* diffSettings );
bool saveAll();
bool saveDestination( DiffModel* model );
void setEncoding( const QString& encoding );
QString recreateDiff() const;
// This parses the difflines and creates new models
int parseDiffOutput( const QString& 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 QString& 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 QString& lines );
signals:
void status( Kompare::Status status );
void setStatusBarModelInfo( int modelIndex, int differenceIndex, int modelCount, int differenceCount, int appliedCount );
void error( QString 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 QString& );
void slotFileChanged( const QString& );
private: // Helper methods
bool isDirectory( const QString& url ) const;
bool isDiff( const QString& mimetype ) const;
QString readFile( const QString& fileName );
bool hasPrevModel() const;
bool hasNextModel() const;
bool hasPrevDiff() const;
bool hasNextDiff() const;
QStringList split( const QString& diff );
private:
KTempFile* m_diffTemp;
QString m_diffURL;
KompareProcess* m_diffProcess;
DiffSettings* m_diffSettings;
DiffModelList* m_models;
QString m_source;
QString 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;
QString m_encoding;
QTextCodec* m_textCodec;
};
} // End of namespace Diff2
#endif