/* drwE01h Header File for Elixir01 Structure and Constant Definitions. */

#ifndef drwE01h_H
 #define drwe01h_H

#ifndef os_H
 #include "OSLIB/os.h"
#endif

#ifndef wimp_H
 #include "OSLIB/wimp.h"
#endif

#ifndef drwelx01h_H
 #define drwelx01h_H

#ifndef font_H
 #include "OSLib/font.h"
#endif

#ifndef drwAscrfnh_H
 #include "DRW/drwAscrfnh.h"
#endif

#if defined NAMESPACE_DRWIMPC
  namespace DrWimpC {
#endif

#if defined NAMESPACE_OSLIB
  using namespace OSLib;
#endif

typedef struct drw_lw_data               drw_lw_data;
typedef struct drw_lw_hlight_data        drw_lw_hlight_data;
typedef bits drw_lw_data_flags;
typedef bits drw_lw_data_flags2;

typedef int (*drw_process_lwd_click_fn)(drw_lw_data *lwd,
                                        wimp_mouse_state buttontype,
                                        int mousex,
                                        int mousey,
                                        int workx,
                                        int worky,
                                        int line);

typedef int (*drw_process_lwd_keypr_fn)(drw_lw_data *lwd,
                                        wimp_key_no wkey,
                                        int dkinuse,
                                        drw_dk_flags dkflagwd);

typedef char *(*drw_make_list_lineno_fn)(drw_lw_data *lwd,
                                         int line,
                                         int *rtnwidth,
                                         int *isselected);

typedef int (*drw_lwd_end_of_drag_fn)(drw_lw_data *lwd,
                                      wimp_dragged *dragged,
                                      int startline,
                                      int endline,
                                      int select_drag);

typedef void (*drw_lw_ascr_fn)(drw_lw_data *lwd,
                               drw_ascr_data *wascr,
                               int ascrreason);

typedef int (*drw_process_lwd_msl_fn)(wimp_menu *menu,
                                      wimp_i item,
                                      char *font,
                                      int lineno,
                                      int is_in_list,
                                      int is_adjust_click);


#define drw_elx01_def_listsize           100

#define drw_lw_safety_margin_y0          8

#define drw_lw_def_list_fontsize         16


#define drw_lw_drag_select               ((drw_lw_data_flags) 0x1u)
#define drw_lw_auto_scroll               ((drw_lw_data_flags) 0x2u)
#define drw_lw_set_min_start_width       ((drw_lw_data_flags) 0x4u)
#define drw_lw_add_rt_margin             ((drw_lw_data_flags) 0x8u)
#define drw_lw_hlight_whole_line         ((drw_lw_data_flags) 0x10u)
#define drw_lw_is_auto_scrolling         ((drw_lw_data_flags) 0x20u)
#define drw_lw_user_redraws_lines        ((drw_lw_data_flags) 0x40u)
#define drw_lw_font_blending             ((drw_lw_data_flags) 0x80u)
#define drw_lw_drag_adjust               ((drw_lw_data_flags) 0x100u)
#define drw_lw_is_dragging               ((drw_lw_data_flags) 0x200u)
#define drw_lw_scroll_on_drag_select     ((drw_lw_data_flags) 0x400u)
#define drw_lw_scroll_on_drag_adjust     ((drw_lw_data_flags) 0x800u)
#define drw_lw_dragging_select           ((drw_lw_data_flags) 0x1000u)
/* 20090328 Replaced drw_lw_dragging_adjust with drw_lw_noclose_list_w */
/*#define drw_lw_dragging_adjust           ((drw_lw_data_flags) 0x2000u)*/
#define drw_lw_noclose_list_w            ((drw_lw_data_flags) 0x2000u)
#define drw_lw_keep_sel_on_close         ((drw_lw_data_flags) 0x4000u)
#define drw_lw_key_press_hlight          ((drw_lw_data_flags) 0x8000u)
#define drw_lw_ptr_is_in_listw           ((drw_lw_data_flags) 0x10000u)
#define drw_lw_ignore_h_arrow_keys       ((drw_lw_data_flags) 0x20000u)
#define drw_lw_ignore_v_arrow_keys       ((drw_lw_data_flags) 0x40000u)
#define drw_lw_ignore_return_key         ((drw_lw_data_flags) 0x80000u)
#define drw_lw_manual_gain_caret         ((drw_lw_data_flags) 0x100000u)
#define drw_lw_nostart_auto_hlight       ((drw_lw_data_flags) 0x200000u)
#define drw_lw_nohlight_line             ((drw_lw_data_flags) 0x400000u)
#define drw_lw_nohlight_on_drag          ((drw_lw_data_flags) 0x800000u)
#define drw_lw_retain_selected           ((drw_lw_data_flags) 0x1000000u)
#define drw_lw_ignore_keys               ((drw_lw_data_flags) 0x2000000u)
#define drw_lw_no_wrap_round             ((drw_lw_data_flags) 0x4000000u)
#define drw_lw_inch                      ((drw_lw_data_flags) 0x8000000u)
#define drw_lw_link_vis_to_work          ((drw_lw_data_flags) 0x10000000u)
#define drw_lw_auto_lose_caret           ((drw_lw_data_flags) 0x20000000u)
#define drw_lw_select_on_key_up_down     ((drw_lw_data_flags) 0x40000000u)
#define drw_lw_is_modified               ((drw_lw_data_flags) 0x80000000u)


#define drw_lw_use_openat_on_read        ((drw_lw_data_flags2) 0x1u)


struct drw_lw_data {

int listtype;
int listsize;
void *listdata;
drw_lw_data_flags flags;
drw_lw_data_flags2 flags2;
wimp_w Listhdrpane;
wimp_w Listwindow;
wimp_menu *listmenu;
os_coord lastmouse;
int Bottomspace;
int BottomspaceOS;
int Fontsize;
font_f Listfont;
int TopmarginOS;
int Linespacing;
int LinespacingOS;
int Biasy;
int Heightlistwindow;
int Widthlistwindow;
int Leftmargin;
int LeftmarginOS;
int Selected;
int NewSelected;
int Selectstartx;
int Selectwidth;
int Dragline;
int SelDragStart;
int SelDragEnd;
int topredrawline;
int bottomredrawline;
os_box userbox;
drw_lwd_end_of_drag_fn endofdragfn;
drw_make_list_lineno_fn mklinefn;
drw_process_lwd_click_fn clickfn;
drw_process_lwd_keypr_fn keyfn;
drw_lw_ascr_fn ascrfn;
drw_process_lwd_msl_fn mslfn;
int SelectedForUpdate;
int StartWidthlistwindow;
int StartHeightlistwindow;
void *userdata;
os_colour Sellinefgcol;
os_colour Sellinebgcol;
os_colour linefgcol;
os_colour linebgcol;
os_colour isselnfgcol;
os_colour isselnbgcol;
os_coord lastopenpos;
drw_visible_window_posn openat;

};


struct drw_lw_hlight_data {

drw_lw_data *lwd;
int oldnullsval;
int hlightstarted;
int currlineno;

};

#if defined NAMESPACE_DRWIMPC
  }
#endif

#include "DRW/drwE01.h"
#include "DRW/drwE04.h"

#endif

#endif

/* End of File. */
