#ifndef __XVTILITY_H
#define __XVTILITY_H

#ifndef XVT_INCL
#include <xvt.h>
#endif

#ifndef __STDTYPES_H
#include <stdtypes.h>
#endif

#ifndef __KEYS_H
#include <keys.h>
#endif

// User defined events
const long E_DROP_FILES = 883L;

// Viswin EVENTS
// vista la mania degli 883, eccoti un po' di concerti di Mozart
const long E_ADDLINE_ONSCREEN = 467L;
const long E_ADDLINE          = 488L;

RCT& resize_rect(short x, short y, short dx, short dy, WIN_TYPE wt, WINDOW parent);

void xvt_draw_rect(WINDOW w, const RCT& r, COLOR c1, COLOR c2, short depth = 1);

WINDOW xvt_create_window
(
 WIN_TYPE wt,
 short x, short y, short dx, short dy,
 const char* caption, 
 int menu, WINDOW parent,
 long flags,
 EVENT_HANDLER eh,
 long app_data
 );

  WINDOW xvt_create_statbar();
  void xvt_statbar_set(const char* text, bool def = FALSE);
  void xvt_statbar_refresh();

  void beep(int severity = 0);
  void do_events();

  void set_xvt_hooks();
  void ignore_xvt_errors(bool ie);
  
  void customize_colors();
  void customize_controls(bool on);

  KEY  e_char_to_key(const EVENT* ep);
  void dispatch_event(WINDOW win, const EVENT& e, bool post);
  void dispatch_e_menu(WINDOW win, MENU_TAG item);
  void dispatch_e_char(WINDOW win, KEY key);
  void dispatch_e_scroll(WINDOW win, KEY key);
  
  void begin_wait();
  void end_wait();

  // One-liner for waiting!
  class TWait_cursor
  { 
  public:           
    TWait_cursor() { ::begin_wait(); }
    ~TWait_cursor() { ::end_wait(); }
  };

  void xvt_set_font(WINDOW win, const char* family, int style, int dim = 0);
  bool xvt_test_menu_tag(MENU_TAG tag);  

  COLOR trans_color(char c);
  PAT_STYLE trans_brush(char p);
  PEN_STYLE trans_pen  (char p);

  extern short CHARX, CHARY, BASEY, ROWY;

#endif