#ifndef __SCSELECT_H
#define __SCSELECT_H

#ifndef __MASK_H
#include <mask.h>
#endif

#ifndef __RELATION_H
#include <relation.h>
#endif

#ifndef __SHEET_H
#include <sheet.h>
#endif

#ifndef __SCSELMSK_H
#include "scselmsk.h"                    
#endif

class TSelection_mask : public TMask
{            
  TRelation*     _clifo_rel;
  TCursor*       _cli_cur_k1;
  TCursor*       _cli_cur_k2;
  TCursor*       _for_cur_k1;
  TCursor*       _for_cur_k2;

  TCursor_sheet* _cli_sh_k1;
  TCursor_sheet* _cli_sh_k2;
  TCursor_sheet* _for_sh_k1;
  TCursor_sheet* _for_sh_k2;        
  
  char           _who;      
  int            _key;
  
protected:  // TMask
  virtual void set_handler(short fld_id, CONTROL_HANDLER handler);
  
protected:
  void select_clifo_range(long from, long to);
  void set_clifo_limits();

  void set_who(char w) { _who = w; }
  void set_key (int  k) { _key  = k; }

  void reset_sheets();

  // handlers
  static bool bfrom_handler(TMask_field& f, KEY k);
  static bool bto_handler(TMask_field& f, KEY k);
  static bool ffrom_handler(TMask_field& f, KEY k);
  static bool fto_handler(TMask_field& f, KEY k);
  static bool breset_handler(TMask_field& f, KEY k);
  static bool bselect_handler(TMask_field& f, KEY k);
  static bool rclifo_handler(TMask_field& f, KEY k);
  static bool rsortcf_handler(TMask_field& f, KEY k);

public:
  TCursor_sheet& cur_sheet() const;     
  
  char get_who() const { return _who; }
  int get_key() const { return _key; }
  
  TSelection_mask(const char* name); 
  virtual ~TSelection_mask();
};

#endif
