/* ====================================================================
 * Copyright (c) 2003-2006, Martin Hauner
 *                          http://subcommander.tigris.org
 *
 * Subcommander is licensed as described in the file doc/COPYING, which
 * you should have received as part of this distribution.
 * ====================================================================
 */

#ifndef _DIFF3WIDGET_H
#define _DIFF3WIDGET_H

// sc
#include "util/String.h"
class TextModel;
class DiffInfoModel;
class SingleTextWidget;
class DoubleTextWidget;
class SplitLayout;
class FontSettings;

// qt
#include <qwidget.h>
#include <qsplitter.h>


class Diff3Widget : public QWidget
{
  typedef QWidget super;
  Q_OBJECT 

public:
  Diff3Widget( FontSettings*, QWidget *parent=0, const char *name=0 );
  virtual ~Diff3Widget();

  void setModel( TextModel* original, TextModel* modified, TextModel* latest );
  void setModel( DiffInfoModel* info );
  void setMergeModel( TextModel* merged );

  void setLeftLabel( const sc::String& l );
  void setCenterLabel( const sc::String& l );
  void setRightLabel( const sc::String& l );

  void jumpToLine( int line );
  void jumpToBlock( int block );
  void setActiveDiff( int num );

  void enableOriginal( bool enable = true, bool open = false );
  void enableMerged( bool enable = true, bool open = false );

  void connectOriginalDrop( const QObject* receiver, const char* member );
  void connectModifiedDrop( const QObject* receiver, const char* member );
  void connectLatestDrop( const QObject* receiver, const char* member );

public slots:
  void vsbChange(int);
  void hsbChange();

  void blockChangeO(int b);
  void blockChangeL(int b);
  void blockChangeR(int b);
  void blockChangeM(int b);

signals:
  void diffChanged(int diff);

protected:
  void wheelEvent( QWheelEvent* e );

private:
  void setActiveDiffBlock( int block );

  SingleTextWidget*  _single;
  DoubleTextWidget*  _double;
  SingleTextWidget*  _merged;

  SplitLayout*       _splitOrg;
  SplitLayout*       _splitMerge;

  DiffInfoModel*     _diffInfo;
};


#endif // _DIFF3WIDGET_H



syntax highlighted by Code2HTML, v. 0.9.1