/*****************************************************************************/
/*                           Jean-Eloi Dussartre                             */
/*                          M.I.T. Project Athena.                           */
/*                              January 1990.                                */
/*                   The Spreadsheet Widget implementation.                  */
/*                     The AtTable Object implementation.                    */
/*****************************************************************************/


#ifndef _AtSpreadsheet_h
#define _AtSpreadsheet_h

#include <stdio.h>
#include <At/FontFamily.h>
#include "Table.h"


/* Constant definition */

#define AtSpreadsheetBESTFIT       -1

#define AtSpreadsheetFaceDEFAULT    0
#define AtSpreadsheetFacePLAIN      1
#define AtSpreadsheetFaceBOLD       2
#define AtSpreadsheetFaceITALIC     3
#define AtSpreadsheetFaceBOLDITALIC 4

#define AtSpreadsheetJustificationDEFAULT 0
#define AtSpreadsheetJustificationLEFT    1
#define AtSpreadsheetJustificationRIGHT   2
#define AtSpreadsheetJustificationCENTER  3

#define AtSpreadsheetWidthDEFAULT	-1
#define AtSpreadsheetHeightDEFAULT      -1

typedef struct {
		short int row;
		short int column;
		short int rowPrev;
		short int columnPrev;
	      } AtSpreadsheetLocation;

typedef struct {
		short int topRow;
		short int leftColumn;
		short int bottomRow;
		short int rightColumn;
	      } AtSpreadsheetRange;

typedef struct {
		Boolean    vertical;
		short int  lowIndex;
		short int  highIndex;
	      } AtSpreadsheetScroll;

                        /****************************/
                        /*   Resources definition   */
                        /****************************/
/*
 
  Name                    Type		  Default
------------------------------------------------------------------------------
XtNtable			AtTable		 NULL             
XtNtopRow			short		 0
XtNleftColumn			short		 0
XtNcursorRow			short		 0
XtNcursorColumn			short		 0
XtNvisibleRows			short		 -1
XtNvisibleColumns		short		 -1
XtNeditable			Boolean		 True
XtNverticalLines		Boolean		 True
XtNhorizontalLines		Boolean		 True
XtNfontFamily			String		 "courier"
XtNfontSize			int		 AtFontNORMAL
XtNfontFace			int		 AtFontPLAIN
XtNjustification		short		 AtSpreadsheetLEFT
XtNrowLabelJustification	short		 AtSpreadsheetRIGHT
XtNcolumnLabelJustification	short		 AtSpreadsheetCENTER
XtNcolumnWidth			short		 16
XtNrowHeight			short		 AtSpreadsheetBESTFIT
XtNlineWidth			short		 2
XtNborderSpace			short		 0
XtNmarginHeight			short		 40
XtNmarginWidth			short		
XtNcolumnNameHeight		short		 AtSpreadsheetBESTFIT
XtNcolumnNameMarginHeight	short		 2
XtrowNameWidth			short		 AtSpreadsheetBESTFIT
XtNrowNameMarginWidth		short		 2
XtNrowLabelColor	       	Pixel		 XtDefaultForeground
XtNcolumnLabelColor	       	Pixel		 XtDefaultForeground
XtNcellColor		       	Pixel		 XtDefaultForeground
XtNlineColor		       	Pixel		 XtDefaultForeground
XtNcursorDashWidth1             Char             12
XtNcursorDashWidth2		Char		 6
XtNcursorFrequency              unsigned long    150
XtNgetCellValue			getCellValueProc AtTableGetCell
XtNgetColumnLabel		getLabelProc	 AtTableGetColumnName
XtNgetRowLabel			getLabelProc	 AtTableGetRowName
XtNgetColumnNumber		getNumberProc	 AtTableGetColumnNum
XtNgetRowNumber			getNumberProc	 AtTableGetRowNum
XtNsetNotify			setNotifyProc    AtTableSubscribe
XtNdelNotify			delNotifyProc    AtTableCancel
XtNrangeChangedCallback         callbacklist     NULL
XtNcursorMovedCallback          callbackList     NULL
XtNrangeSelectedCallback	callbacklist     NULL
XtNscrollCallback		callbacklist	 NULL

*/

#define XtNtable			"table" 
#define XtNtopRow			"topRow"
#define XtNleftColumn			"leftColumn"
#define XtNcursorRow			"cursorRow"
#define XtNcursorColumn			"cursorColumn"
#define XtNvisibleRows			"visibleRows"
#define XtNvisibleColumns		"visibleColumns"
#define XtNeditable			"editable"
#define XtNverticalLines		"verticalLines"
#define XtNhorizontalLines		"horizontalLines"
#define XtNscrollVertical               "scrollVertical"
#define XtNscrollHorizontal             "scrollHorizontal"
#define XtNfontFamily			"fontFamily"
#define XtNfontSize			"fontSize"
#define XtNfontFace			"fontFace"
#define XtNjustification		"justification"
#define XtNrowLabelJustification	"rowLabelJustification"
#define XtNcolumnLabelJustification	"columnLabelJustification"
#define XtNcolumnWidth			"columnWidth"
#define XtNrowHeight			"rowHeight"
#define XtNlineWidth			"lineWidth"
#define XtNlineStyle			"lineStyle"
#define XtNdashList			"dashList"
#define XtNborderSpace			"borderSpace"
#define XtNmarginHeight			"marginHeight"
#define XtNmarginWidth			"marginWidth"
#define XtNcolumnNameHeight		"columnNameHeight"
#define XtNcolumnNameMarginHeight	"columnNameMarginHeight"
#define XtNrowNameWidth                 "rowNameWidth"
#define XtNrowNameMarginWidth		"rowNameMarginWidth"
#define XtNrowLabelColor		"rowLabelColor"
#define XtNcolumnLabelColor		"columnLabelColor"
#define XtNcellColor			"cellColor"
#define XtNlineColor			"lineColor"
#define XtNcursorDashWidth1		"cursorDashWidth1"
#define XtNcursorDashWidth2		"cursorDashWidth2"
#define XtNcursorFrequency		"cursorFrequency"
#define XtNgetCellValue			"getCellValue"
#define XtNgetColumnLabel		"getColumnLabel"
#define XtNgetRowLabel			"getRowLabel"
#define XtNgetColumnNumber		"getColumnNumber"
#define XtNgetRowNumber			"getRowNumber"
#define XtNsetNotify			"setNotify"
#define XtNdelNotify			"delNotify"
#define XtNrangeChangedCallback		"rangeChangedCallback"
#define XtNcursorMovedCallback		"cursorMovedCallback"
#define XtNrangeSelectedCallback        "rangeSelectedCallback"
#define XtNscrollCallback		"scrollCallback"



#define XtCTable			"Table"
#define XtCTopRow			"TopRow"
#define XtCLeftColumn			"LeftColumn"
#define XtCCursorRow			"CursorRow"
#define XtCCursorColumn			"CursorColumn"
#define XtCVisibleRows			"VisibleRows"
#define XtCVisibleColumns		"VisibleColumns"
#define XtCEditable			"Editable"
#define XtCGridLines			"GridLines"
#define XtCScroll                       "Scroll"
#ifdef notdef
#define XtCFontFamily			"FontFamily"
#define XtCFontSize			"FontSize"
#endif
#define XtCFontFace			"FontFace"
#define XtCJustification		"Justification"
#define XtCLabelJustification		"LabelJustification"
#define XtCColumnWidth			"ColumnWidth"
#define XtCRowHeight			"RowHeight"
#define XtCMarginHeight			"MarginHeight"
#define XtCMarginWidth			"MarginWidth"
#define XtCColumnNameHeight		"ColumnNameHeight"
#define XtCRowNameWidth         	"RowNameWidth"
#define XtCLineWidth			"LineWidth"
#define XtCLineStyle			"LineStyle"
#define XtCDashList			"DashList"
#define XtCCursorDashWidth		"CursorDashWidth"
#define XtCCursorFrequency		"CursorFrequency"
#define XtCBorderSpace			"BorderSpace"
#define XtCGetCellValue			"GetCellValue"
#define XtCGetColumnLabel		"GetColumnLabel"
#define XtCGetRowLabel			"GetRowLabel"
#define XtCGetColumnNumber		"GetColumnNumber"
#define XtCGetRowNumber			"GetRowNumber"
#define XtCSetNotify			"SetNotify"
#define XtCDelNotify                    "DelNotify"
#define XtCRangeChangedCallback		"RangeChangedCallback"
#define XtCCursorMovedCallback          "CursorMovedCallback"
#define XtCRangeSelectedCallback	"RangeSlectedCallback"
#define XtCScrollCallback		"ScrollCallback"

#define XtRAtTable			"AtTable"

/*  Widget class and record definitions  */

extern WidgetClass atSpreadsheetWidgetClass;


typedef struct _AtSpreadsheetClassRec     * AtSpreadsheetWidgetClass;
typedef struct _AtSpreadsheetRec          * AtSpreadsheetWidget;


/* public routines available */
extern AtTableObject AtSpreadsheetGetTable(AtSpreadsheetWidget);
extern short int AtSpreadsheetGetCursorRow(AtSpreadsheetWidget);
extern short int AtSpreadsheetGetCursorColumn(AtSpreadsheetWidget);
extern short int AtSpreadsheetGetTopRow(AtSpreadsheetWidget);
extern short int AtSpreadsheetGetLeftColumn(AtSpreadsheetWidget);
extern short int AtSpreadsheetGetBottomRow(AtSpreadsheetWidget);
extern short int AtSpreadsheetGetRightColumn(AtSpreadsheetWidget);



/* public routines to be done */

extern Widget   AtCreateSpreadsheet(Widget, char *, ArgList, int);

extern void     AtSpreadsheetSetTable(Widget,AtTableObject *);


extern void    AtSpreadsheetSetColWidth(Widget,int,int);
extern void    AtSpreadsheetSetColWidths(Widget,...);
extern int     AtSpreadsheetGetColWidth(Widget,int);

extern void    AtSpreadsheetSetColAttributes  (Widget, int, int);
extern int     AtSpreadsheetGetColAttributes  (Widget, int);
extern void    AtSpreadsheetSetCellAttributes (Widget, int, int, int);
extern int     AtSpreadsheetGetCellAttributes (Widget, int, int);
extern void    AtSpreadsheetSetCursorPos      (Widget, int, int);
extern void    AtSpreadsheetGetCursorPos      (Widget, int *, int *);
extern Boolean AtSpreadsheetIsPosVisible      (Widget, int, int);
extern int     AtSpreadsheetMakeVisible       (Widget, int, int);

extern int     AtSpreadsheetSetFirstVisibleRow(Widget, int);
extern int     AtSpreadsheetSetLastVisibleRow (Widget, int);
extern int     AtSpreadsheetSetFirstVisibleCol(Widget, int);
extern int     AtSpreadsheetSetLastVisibleCol (Widget, int);

extern void    AtSpreadsheetScrollUp          (Widget, int);
extern void    AtSpreadsheetScrollDown        (Widget, int);
extern void    AtSpreadsheetScrollLeft        (Widget, int);
extern void    AtSpreadsheetScrollRight       (Widget, int);

extern void    AtSpreadsheetSelectCell        (Widget, int, int);
extern void    AtSpreadsheetSelectCol         (Widget, int);
extern void    AtSpreadsheetSelectRow         (Widget, int);
extern void    AtSpreadsheetSelectRegion      (Widget, int, int, int, int);
extern void    AtSpreadsheetExtendSelect      (Widget, int, int);
extern void    AtSpreadsheetDeselectAll       (Widget);
extern void    AtSpreadsheetDeselectRow       (Widget, int);
extern void    AtSpreadsheetDeselectCol       (Widget, int);
extern void    AtSpreadsheetClearSelected     (Widget);
extern void    AtSpreadsheetDeleteSelected    (Widget);
extern void    AtSpreadsheetGetSelectedRegion (Widget,
					       int *, int *, int *, int *);

extern void AtSpreadsheetOutputPostscriptHeader(Widget,FILE *);
extern void AtSpreadsheetOutputPostscriptPreamble(FILE*);
extern void AtSpreadsheetOutputPostscriptRepresentation(Widget,FILE*);

#endif _ASpreadsheet_h
/* DON'T ADD ANYTHING AFTER THIS #endif */




