/*
 *
 *  R : A Computer Language for Statistical Data Analysis
 *  file ga.h
 *  Copyright (C) 1998--1999  Guido Masarotto
 *  Copyright (C) 2004--2008   The R Foundation
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, a copy is available at
 *  https://www.R-project.org/Licenses/
 */

/*
   New declarations.
*/

#ifndef __GA__VERSION
#define __GA__VERSION 2.45(1)
#include "graphapp.h"

/* renamed functions */
void	gamainloop(void);
void	gabeep(void);

#define DblClick	0x0010/* added for buttons.c*/


/* windows.c */
#define Border	0x10100000L
void	app_cleanup(void);
int	ismdi(void);
int	isUnicodeWindow(control c);
int	isiconic(window w);
rect	screen_coords(control c);

/* gmenus.c */
typedef struct {
    char *nm;
    menufn fn;
    int key;
    menuitem m;
} MenuItem;

#define STARTMENU {"#STARTMENU", 0, 0}
#define ENDMENU {"#ENDMENU", 0, 0}
#define STARTSUBMENU {"#STARTSUBMENU", 0, 0}
#define ENDSUBMENU {"#ENDSUBMENU", 0, 0}
#define MDIMENU {"#MDIMENU", 0, 0}
#define LASTMENUITEM {0, 0, 0}
menu	newmdimenu(void);
typedef menu popup;
popup	newpopup(actionfn fn);
menubar gmenubar(actionfn fn, MenuItem []);
popup	gpopup(actionfn fn, MenuItem []);
void	gchangepopup(window w, popup p);
/* next is limited to current window... */
void	gchangemenubar(menubar mb);


/* tooltips.c */
int	addtooltip(control c, const char *tp);

/* status.c */
int	addstatusbar(void);
int	delstatusbar(void);
void	setstatus(const char *text);

/* dialogs.c */
void	setuserfilter(const char *);
void    askchangedir(void);
char *	askcdstring(const char *question, const char *default_string);
char *	askfilesavewithdir(const char *title, const char *default_name,
			   const char *dir);
char *  askfilenames(const char *title, const char *default_name, int multi,
		     const char *filters, int filterindex, char *strbuf,
		     int bufsize, const char *dir);
int     countFilenames(const char *strbuf); /* Note that first name is path when there are multiple names */

void	setuserfilterW(const wchar_t *);
wchar_t *askfilenameW(const char *title, const char *default_name);
wchar_t *askfilenamesW(const wchar_t *title, const wchar_t *default_name,
		       int multi,
		       const wchar_t *filters, int filterindex,
		       const wchar_t *dir);
wchar_t *askfilesaveW(const char *title, const char *default_name);



/*  rgb.c */
rgb     nametorgb(const char *colourname);
const char *  rgbtoname(rgb in);
int     rgbtonum(rgb in);
rgb     myGetSysColor(int);
rgb	dialog_bg(void);


/* clipboard.c */
void    copytoclipboard(drawing src);
int     copystringtoclipboard(const char *str);
int     getstringfromclipboard(char * str, int n);
int     clipboardhastext(void);

/* gimage.c */
image  bitmaptoimage(bitmap bm);

/* printer.c  */
typedef objptr printer;
printer newprinter(double w,  double h, const char *name);
void    nextpage(printer p);

/* metafile.c */
typedef objptr metafile;
metafile newmetafile(const char *name, double width, double height,
                     double xpinch, double ypinch);


/* thread safe and extended  drawing functions (gdraw.c) */
#define lSolid 0
#define lDash  (5 | (4<<4))
#define lShortDash  (3 | (4<<4))
#define lLongDash  (8 | (4<<4))
#define lDot   (1 | (4<<4))
#define lDashDot (5 | (4<<4) | (1<<8) | (4<<12))
#define lShortDashDot (3 | (4<<4) | (1<<8) | (4<<12))
#define lLongDashDot (8 | (4<<4) | (1<<8) | (4<<12))
#define lDashDotDot    (5 | (4<<4) | (1<<8) | (3<<12) | (1<<16) | (4<< 20))
#define lShortDashDotDot    (3 | (4<<4) | (1<<8) | (3<<12) | (1<<16) | (4<< 20))
#define lLongDashDotDot    (8 | (4<<4) | (1<<8) | (3<<12) | (1<<16) | (4<< 20))

rect  ggetcliprect(drawing d);
void  gsetcliprect(drawing d, rect r);
void  gbitblt(bitmap db, bitmap sb, point p, rect r);
void  gscroll(drawing d, point dp, rect r);
void  ginvert(drawing d, rect r);
rgb   ggetpixel(drawing d, point p);
void  gsetpixel(drawing d, point p, rgb c);
void  gdrawline(drawing d, int width, int style, rgb c, point p1, point p2,
		int fast, int lend, int ljoin, float lmitre);
void  gdrawrect(drawing d, int width, int style, rgb c, rect r, int fast,
		int lend, int ljoin, float lmitre);
void  gfillrect(drawing d, rgb fill, rect r);
void  gcopy(drawing d, drawing d2, rect r);
void  gcopyalpha(drawing d, drawing d2, rect r, int alpha);
void  gcopyalpha2(drawing d, image src, rect r);
void  gdrawellipse(drawing d, int width, rgb border, rect r, int fast,
		   int lend, int ljoin, float lmitre);
void  gfillellipse(drawing d, rgb fill, rect r);
void  gdrawpolyline(drawing d, int width, int style, rgb c,
		    point *p, int n, int closepath, int fast,
		    int lend, int ljoin, float lmitre);
#define gdrawpolygon(d,w,s,c,p,n,f,e,j,m) gdrawpolyline(d,w,s,c,p,n,1,f,e,j,m)
void  gsetpolyfillmode(drawing d, int oddeven);
void  gfillpolygon(drawing d, rgb fill, point *p, int n);
void  gfillpolypolygon(drawing d, rgb fill, point *p, int npoly, int *nper);
void  gdrawimage(drawing d, image img, rect dr, rect sr);
void  gmaskimage(drawing d, image img, rect dr, rect sr, image mask);
int   gdrawstr(drawing d, font f, rgb c, point p, const char *s);
void  gdrawstr1(drawing d, font f, rgb c, point p, const char *s, double hadj);
rect  gstrrect(drawing d, font f, const char *s);
point gstrsize(drawing d, font f, const char *s);
int   gstrwidth(drawing d ,font f, const char *s);
void  gcharmetric(drawing d, font f, int c, int *ascent, int *descent,
		  int *width);
font  gnewfont(drawing d, const char *face, int style, int size,
	       double rot, int usePoints);
font  gnewfont2(drawing d, const char *face, int style, int size,
		double rot, int usePoints, int quality);
int   ghasfixedwidth(font f);
field newfield_no_border(const char *text, rect r);

int gdrawwcs(drawing d, font f, rgb c, point p, const wchar_t *s);
int gwcswidth(drawing d, font f, const wchar_t *s);

void gwcharmetric(drawing d, font f, int c, int *ascent, int *descent,
		  int *width);
void gwdrawstr1(drawing d, font f, rgb c, point p, const wchar_t *s, int cnt,
		double hadj);
int   gstrwidth1(drawing d ,font f, const char *s, int enc);

/* pixels */
int   devicewidth(drawing dev);
int   deviceheight(drawing dev);
/* mm */
int   devicewidthmm(drawing dev);
int   deviceheightmm(drawing dev);
/* pixels per inch */
int   devicepixelsx(drawing dev);
int   devicepixelsy(drawing dev);

int	isTopmost(window w);
void	BringToTop(window w, int stay); /* stay=0 for regular, 1 for topmost, 2 for toggle */
void *	getHandle(window w);
void 	GA_msgWindow(window c, int type);


/* gbuttons.c */
/* horizontal, vertical and control scrollbar */
#define HWINSB 0
#define VWINSB 1
#define CONTROLSB 2
void	gchangescrollbar(scrollbar sb, int which, int where, int max,
			 int pagesize, int disablenoscroll);
void	gsetcursor(drawing d, cursor c);
control newtoolbar(int height);
button  newtoolbutton(image img, rect r, actionfn fn);
void	scrolltext(textbox c, int lines);
int	ggetkeystate(void);

void	scrollcaret(textbox c, int lines);
void    gsetmodified(textbox c, int modified);
int     ggetmodified(textbox c);
int getlinelength(textbox c);
void getcurrentline(textbox c, char *line, int length);
void getseltext(textbox c, char *text);
void setlimittext(textbox t, long limit);
long getlimittext(textbox t);
void checklimittext(textbox t, long n);
long getpastelength(void);
void textselectionex(control obj, long *start, long *end);
void selecttextex(control obj, long start, long end);

void finddialog(textbox t);
void replacedialog(textbox t);
int modeless_active(void);


/* menus.c */
void	remove_menu_item(menuitem obj);

/* events.c */
void toolbar_show(void);
void toolbar_hide(void);

#endif /* __GA__VERSION */
