/* Selection Interface function definitions. */

#ifndef drwSelnfnh_H
 #define drwSelnfnh_H

#ifndef drwDSVh_H
 #include "DRW/drwDSVh.h"
 #include "DRW/drwDataSv.h"
#endif

#if defined NAMESPACE_DRWIMPC
  namespace DrWimpC {
#endif

#if defined NAMESPACE_OSLIB
  using namespace OSLib;
#endif

typedef struct drw_selnfn_str           drw_selnfn_str;


typedef int (*drw_seln_mouse_click_fn)(wimp_w whan,
                                       wimp_i icon,
                                       wimp_mouse_state buttons,
                                       int mousex,
                                       int mousey,
                                       int x,
                                       int y);
typedef int (*drw_seln_key_press_fn)(wimp_w whan,
                                     wimp_i icon,
                                     wimp_key_no wkey,
                                     int dkinuse,
                                     drw_dk_flags dkflagwd);
typedef void (*drw_claim_recv_caret_seln_fn)(void);
typedef drw_wcaretseln *(*drw_locate_wseln_fn)(wimp_w whan);
typedef void (*drw_lose_caret_fn)(void);
typedef int (*drw_start_drag_selection_fn)(wimp_w whan,
                                           wimp_i icon,
                                           wimp_mouse_state button,
                                           wimp_mouse_state dragbutton,
                                           int mousex,
                                           int mousey);
typedef void (*drw_endofdrag_fn)(wimp_dragged *dragged);
typedef int (*drw_startsave_nt_selnobject_fn)(drw_datatfr *dtfr,
                                              wimp_t desttask,
                                              wimp_w destwhan,
                                              wimp_i destic,
                                              int destx,
                                              int desty,
                                              int est_size,
                                              bits filetype);
typedef void (*drw_set_insert_point_fn)(wimp_caret *ghostcaret,
                                        wimp_w destwhan,
                                        wimp_i destic,
                                        int destx,
                                        int desty,
                                        drw_wcaretseln *cseln);
typedef void (*drw_abort_seln_drag_fn)(void);
typedef void (*drw_seln_post_dtfr_fn)(bits msgtype,
                                      char *path,
                                      char *leafname,
                                      wimp_w whandle,
                                      wimp_i iconno,
                                      char *ftype,
                                      bits filetype,
                                      int workx,
                                      int worky);


struct drw_selnfn_str {

drw_seln_mouse_click_fn                 mouseclick;
drw_seln_key_press_fn                   keypress;
drw_claim_recv_caret_seln_fn            recvclaimcaretseln;
drw_locate_wseln_fn                     locatewseln;
drw_lose_caret_fn                       losecaret;
drw_start_drag_selection_fn             startselndrag;
drw_endofdrag_fn                        endofdrag;
drw_startsave_nt_selnobject_fn          startsaventobj;
drw_set_insert_point_fn                 setinsertpoint;
drw_abort_seln_drag_fn                  abortdrag;
drw_seln_post_dtfr_fn                   postselndtfr;

};


#if defined NAMESPACE_DRWIMPC
  }
#endif  

#endif

/* End of Selection Interface function definitions. */

