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

215 lines
6.7 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 TQFile;
class TDEAction;
class KDirWatch;
class KTempFile;
class DiffSettings;
class KompareProcess;
namespace Diff2
{
class KompareModelList : public TQObject
{
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;
TDEAction* m_applyDifference;
TDEAction* m_unApplyDifference;
TDEAction* m_applyAll;
TDEAction* m_unapplyAll;
TDEAction* m_previousFile;
TDEAction* m_nextFile;
TDEAction* m_previousDifference;
TDEAction* m_nextDifference;
TDEAction* m_save;
TQString m_encoding;
TQTextCodec* m_textCodec;
};
} // End of namespace Diff2
#endif