/* ====================================================================
 * 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 _SC_MAIN_WINDOW_H
#define _SC_MAIN_WINDOW_H

// sc
#include "DiffParam.h"
#include "DiffInfoModel.h"
#include "util/String.h"
class Diff;
class Diff3Widget;
class FileSelectDialog;
class ConfigManager;
namespace sc {
  class Error;
}

// qt
#include <qmainwindow.h>
class QLabel;
class QToolButton;
class QPopupMenu;
class QAction;


class MainWindow : public QMainWindow
{
  typedef QMainWindow super;
  Q_OBJECT 

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

  // MainWindow overwrite
  bool showDockMenu( const QPoint& globalPos );

  Diff3Widget* getDiffWidget() const;

  const sc::Error* diff( const DiffParamPtr param );
  const sc::Error* diff3( const DiffParamPtr param );

  const sc::Error* save( const char* file );

  void setDiffCnt( int );
  void showOptions( bool whitespace );
  void showEncoding( const sc::String& );

  void showError( const sc::Error* error );

public slots:
  void open();
  void save();
  void saveAs();
  void settings();
  void about();

  void nextDiff();
  void prevDiff();
  void nextConflict();
  void prevConflict();
  void merge();
  void refresh();
  void whitespace(bool);

  void diffChanged(int diff);

  void oDropped( const QString& f );
  void mDropped( const QString& f );
  void lDropped( const QString& f );

private:
  FileDataPtr getEmptyFile();

  Diff3Widget*      _dw;
  QLabel*           _sbarDiffCnt;
  QLabel*           _sbarWhitespace;
  QLabel*           _sbarEncoding;
  QLabel*           _sbar4;

  QAction*          _next;
  QAction*          _prev;
  QAction*          _merge;
  QAction*          _wspace;
  QAction*          _reload;
  
  QPopupMenu*       _fileMenu;

  FileSelectDialog* _file;
  ConfigManager*    _config;

  // diff
  DiffInfoModelPtr  _diffInfo;

  // last parameter set
  DiffParamPtr      _lastParam;
};


#endif // _SC_MAIN_WINDOW_H


syntax highlighted by Code2HTML, v. 0.9.1