/*
* tkTable.h --
*
* This is the header file for the module that implements
* table widgets for the Tk toolkit.
*
* Copyright (c) 1997-2002 Jeffrey Hobbs
*
* See the file "license.txt" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* RCS: @(#) $Id: tkTable.h,v 1.18 2004/02/08 03:09:45 cerney Exp $
*/
#ifndef _TKTABLE_H_
#define _TKTABLE_H_
#include <string.h>
#include <stdlib.h>
#include "tk.h"
#include "tkVMacro.h"
#include "tkTableversion.h"
#ifdef MAC_TCL
# include <Xatom.h>
#else
# include <X11/Xatom.h>
#endif /* MAC_TCL */
#if (TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION == 0) /* Tcl8.0 stuff */
#define Tcl_GetString(objPtr) Tcl_GetStringFromObj(objPtr, (int *)NULL)
#endif
#define Arg Tcl_Obj*
/*
* Tcl/Tk 8.4 introduced better CONST-ness in the APIs, but we use CONST84 in
* some cases for compatibility with earlier Tcl headers to prevent warnings.
*/
#ifndef CONST84
# define CONST84
#endif
/* This EXTERN declaration is needed for Tcl < 8.0.3 */
#ifndef EXTERN
# ifdef __cplusplus
# define EXTERN extern "C"
# else
# define EXTERN extern
# endif
#endif
#ifdef TCL_STORAGE_CLASS
# undef TCL_STORAGE_CLASS
#endif
#ifdef BUILD_Tktable
# define TCL_STORAGE_CLASS DLLEXPORT
#else
# define TCL_STORAGE_CLASS DLLIMPORT
#endif
#ifdef WIN32
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# undef WIN32_LEAN_AND_MEAN
/* VC++ has an entry point called DllMain instead of DllEntryPoint */
# if defined(_MSC_VER)
# define DllEntryPoint DllMain
# endif
#endif
#if defined(WIN32) || defined(MAC_TCL) || defined(MAC_OSX_TK)
/* XSync call defined in the internals for some reason */
# ifndef XSync
# define XSync(display, bool) {display->request++;}
# endif
#endif /* defn of XSync */
#ifndef NORMAL_BG
# ifdef WIN32
# define NORMAL_BG "SystemButtonFace"
# define ACTIVE_BG NORMAL_BG
# define SELECT_BG "SystemHighlight"
# define SELECT_FG "SystemHighlightText"
# define DISABLED "SystemDisabledText"
# define HIGHLIGHT "SystemWindowFrame"
# define DEF_TABLE_FONT "{MS Sans Serif} 8"
# elif defined(MAC_TCL) || defined(MAC_OSX_TK)
# define NORMAL_BG "systemWindowBody"
# define ACTIVE_BG "#ececec"
# define SELECT_BG "systemHighlight"
# define SELECT_FG "systemHighlightText"
# define DISABLED "#a3a3a3"
# define HIGHLIGHT "Black"
# define DEF_TABLE_FONT "Helvetica 12"
# else
# define NORMAL_BG "#d9d9d9"
# define ACTIVE_BG "#fcfcfc"
# define SELECT_BG "#c3c3c3"
# define SELECT_FG "Black"
# define DISABLED "#a3a3a3"
# define HIGHLIGHT "Black"
# define DEF_TABLE_FONT "Helvetica -12"
# endif
#endif /* NORMAL_BG */
#define MAX(A,B) (((A)>(B))?(A):(B))
#define MIN(A,B) (((A)>(B))?(B):(A))
#define BETWEEN(val,min,max) ( ((val)<(min)) ? (min) : \
( ((val)>(max)) ? (max) : (val) ) )
#define CONSTRAIN(val,min,max) if ((val) < (min)) { (val) = (min); } \
else if ((val) > (max)) { (val) = (max); }
#define STREQ(s1, s2) (strcmp((s1), (s2)) == 0)
#define ARSIZE(A) (sizeof(A)/sizeof(*A))
#define INDEX_BUFSIZE 32 /* max size of buffer for indices */
#define TEST_KEY "#TEST KEY#" /* index for testing array existence */
/*
* Assigned bits of "flags" fields of Table structures, and what those
* bits mean:
*
* REDRAW_PENDING: Non-zero means a DoWhenIdle handler has
* already been queued to redisplay the table.
* REDRAW_BORDER: Non-zero means 3-D border must be redrawn
* around window during redisplay. Normally
* only text portion needs to be redrawn.
* CURSOR_ON: Non-zero means insert cursor is displayed at
* present. 0 means it isn't displayed.
* TEXT_CHANGED: Non-zero means the active cell text is being edited.
* HAS_FOCUS: Non-zero means this window has the input focus.
* HAS_ACTIVE: Non-zero means the active cell is set.
* HAS_ANCHOR: Non-zero means the anchor cell is set.
* BROWSE_CMD: Non-zero means we're evaluating the -browsecommand.
* VALIDATING: Non-zero means we are in a valCmd
* SET_ACTIVE: About to set the active array element internally
* ACTIVE_DISABLED: Non-zero means the active cell is -state disabled
* OVER_BORDER: Non-zero means we are over a table cell border
* REDRAW_ON_MAP: Forces a redraw on the unmap
* AVOID_SPANS: prevent cell spans from being used
*
* FIX - consider adding UPDATE_SCROLLBAR a la entry
*/
#define REDRAW_PENDING (1L<<0)
#define CURSOR_ON (1L<<1)
#define HAS_FOCUS (1L<<2)
#define TEXT_CHANGED (1L<<3)
#define HAS_ACTIVE (1L<<4)
#define HAS_ANCHOR (1L<<5)
#define BROWSE_CMD (1L<<6)
#define REDRAW_BORDER (1L<<7)
#define VALIDATING (1L<<8)
#define SET_ACTIVE (1L<<9)
#define ACTIVE_DISABLED (1L<<10)
#define OVER_BORDER (1L<<11)
#define REDRAW_ON_MAP (1L<<12)
#define AVOID_SPANS (1L<<13)
/* Flags for TableInvalidate && TableRedraw */
#define ROW (1L<<0)
#define COL (1L<<1)
#define CELL (1L<<2)
#define CELL_BAD (1<<0)
#define CELL_OK (1<<1)
#define CELL_SPAN (1<<2)
#define CELL_HIDDEN (1<<3)
#define CELL_VIEWABLE (CELL_OK|CELL_SPAN)
#define INV_FILL (1L<<3) /* use for Redraw when the affected
* row/col will affect neighbors */
#define INV_FORCE (1L<<4)
#define INV_HIGHLIGHT (1L<<5)
#define INV_NO_ERR_MSG (1L<<5) /* Don't leave an error message */
/* These alter how the selection set/clear commands behave */
#define SEL_ROW (1<<0)
#define SEL_COL (1<<1)
#define SEL_BOTH (1<<2)
#define SEL_CELL (1<<3)
#define SEL_NONE (1<<4)
/*
* Definitions for tablePtr->dataSource, by bit
*/
#define DATA_NONE 0
#define DATA_CACHE (1<<1)
#define DATA_ARRAY (1<<2)
#define DATA_COMMAND (1<<3)
/*
* Definitions for configuring -borderwidth
*/
#define BD_TABLE 0
#define BD_TABLE_TAG (1<<1)
#define BD_TABLE_WIN (1<<2)
/*
* Possible state values for tags
*/
typedef enum {
STATE_UNUSED, STATE_UNKNOWN, STATE_HIDDEN,
STATE_NORMAL, STATE_DISABLED, STATE_ACTIVE, STATE_LAST
} TableState;
/*
* Structure for use in parsing table commands/values.
* Accessor functions defined in tkTableUtil.c
*/
typedef struct {
char *name; /* name of the command/value */
int value; /* >0 because 0 represents an error or proc */
} Cmd_Struct;
/*
* The tag structure
*/
typedef struct {
Tk_3DBorder bg; /* background color */
Tk_3DBorder fg; /* foreground color */
char * borderStr; /* border style */
int borders; /* number of borders specified (1, 2 or 4) */
int bd[4]; /* cell border width */
int relief; /* relief type */
Tk_Font tkfont; /* Information about text font, or NULL. */
Tk_Anchor anchor; /* default anchor point */
char * imageStr; /* name of image */
Tk_Image image; /* actual pointer to image, if any */
TableState state; /* state of the cell */
Tk_Justify justify; /* justification of text in the cell */
int multiline; /* wrapping style of multiline text */
int wrap; /* wrapping style of multiline text */
int showtext; /* whether to display text over image */
} TableTag;
/* The widget structure for the table Widget */
typedef struct {
/* basic information about the window and the interpreter */
Tk_Window tkwin;
Display *display;
Tcl_Interp *interp;
Tcl_Command widgetCmd; /* Token for entry's widget command. */
/*
* Configurable Options
*/
int autoClear;
char *selectMode; /* single, browse, multiple, or extended */
int selectType; /* row, col, both, or cell */
int selectTitles; /* whether to do automatic title selection */
int rows, cols; /* number of rows and columns */
int defRowHeight; /* default row height in chars (positive)
* or pixels (negative) */
int defColWidth; /* default column width in chars (positive)
* or pixels (negative) */
int maxReqCols; /* the requested # cols to display */
int maxReqRows; /* the requested # rows to display */
int maxReqWidth; /* the maximum requested width in pixels */
int maxReqHeight; /* the maximum requested height in pixels */
Var arrayVar; /* name of traced array variable */
char *rowSep; /* separator string to place between
* rows when getting selection */
char *colSep; /* separator string to place between
* cols when getting selection */
TableTag defaultTag; /* the default tag colors/fonts etc */
LangCallback *yScrollCmd; /* the y-scroll command */
LangCallback *xScrollCmd; /* the x-scroll command */
LangCallback *browseCmd; /* the command that is called when the
* active cell changes */
int caching; /* whether to cache values of table */
LangCallback *command; /* A command to eval when get/set occurs
* for table values */
int useCmd; /* Signals whether to use command or the
* array variable, will be 0 if command errs */
LangCallback *selCmd; /* the command that is called to when a
* [selection get] call occurs for a table */
LangCallback *valCmd; /* Command prefix to use when invoking
* validate command. NULL means don't
* invoke commands. Malloc'ed. */
int validate; /* Non-zero means try to validate */
Tk_3DBorder insertBg; /* the cursor color */
Tk_Cursor cursor; /* the regular mouse pointer */
Tk_Cursor bdcursor; /* the mouse pointer when over borders */
#ifdef TITLE_CURSOR
Tk_Cursor titleCursor; /* the mouse pointer when over titles */
#endif
int exportSelection; /* Non-zero means tie internal table
* to X selection. */
TableState state; /* Normal or disabled. Table is read-only
* when disabled. */
int insertWidth; /* Total width of insert cursor. */
int insertBorderWidth; /* Width of 3-D border around insert cursor. */
int insertOnTime; /* Number of milliseconds cursor should spend
* in "on" state for each blink. */
int insertOffTime; /* Number of milliseconds cursor should spend
* in "off" state for each blink. */
int invertSelected; /* Whether to draw selected cells swapping
* foreground and background */
int colStretch; /* The way to stretch columns if the window
* is too large */
int rowStretch; /* The way to stretch rows if the window is
* too large */
int colOffset; /* X index of leftmost col in the display */
int rowOffset; /* Y index of topmost row in the display */
int drawMode; /* The mode to use when redrawing */
int flashMode; /* Specifies whether flashing is enabled */
int flashTime; /* The number of ms to flash a cell for */
int resize; /* -resizeborders option for interactive
* resizing of borders */
int sparse; /* Whether to use "sparse" arrays by
* deleting empty array elements (default) */
LangCallback *rowTagCmd,
*colTagCmd; /* script to eval for getting row/tag cmd */
int highlightWidth; /* Width in pixels of highlight to draw
* around widget when it has the focus.
* <= 0 means don't draw a highlight. */
XColor *highlightBgColorPtr;/* Color for drawing traversal highlight
* area when highlight is off. */
XColor *highlightColorPtr; /* Color for drawing traversal highlight. */
char *takeFocus; /* Used only in Tcl to check if this
* widget will accept focus */
int padX, padY; /* Extra space around text (pixels to leave
* on each side). Ignored for bitmaps and
* images. */
int ipadX, ipadY; /* Space to leave empty around cell borders.
* This differs from pad* in that it is always
* present for the cell (except windows). */
/*
* Cached Information
*/
#ifdef TITLE_CURSOR
Tk_Cursor *lastCursorPtr; /* pointer to last cursor defined. */
#endif
int titleRows, titleCols; /* the number of rows|cols to use as a title */
/* these are kept in real coords */
int topRow, leftCol; /* The topleft cell to display excluding the
* fixed title rows. This is just the
* config request. The actual cell used may
* be different to keep the screen full */
int anchorRow, anchorCol; /* the row,col of the anchor cell */
int activeRow, activeCol; /* the row,col of the active cell */
int oldTopRow, oldLeftCol; /* cached by TableAdjustParams */
int oldActRow, oldActCol; /* cached by TableAdjustParams */
int icursor; /* The index of the insertion cursor in the
* active cell */
int flags; /* An or'ed combination of flags concerning
* redraw/cursor etc. */
int dataSource; /* where our data comes from:
* DATA_{NONE,CACHE,ARRAY,COMMAND} */
int maxWidth, maxHeight; /* max width|height required in pixels */
int charWidth, charHeight; /* size of a character in the default font */
int *colPixels, *rowPixels; /* Array of the pixel widths/heights */
int *colStarts, *rowStarts; /* Array of start pixels for rows|columns */
int scanMarkX, scanMarkY; /* Used by "scan" and "border" to mark */
int scanMarkRow, scanMarkCol;/* necessary information for dragto */
/* values in these are kept in user coords */
Tcl_HashTable *cache; /* value cache */
/*
* colWidths and rowHeights are indexed from 0, so always adjust numbers
* by the appropriate *Offset factor
*/
Tcl_HashTable *colWidths; /* hash table of non default column widths */
Tcl_HashTable *rowHeights; /* hash table of non default row heights */
Tcl_HashTable *spanTbl; /* table for spans */
Tcl_HashTable *spanAffTbl; /* table for cells affected by spans */
Tcl_HashTable *tagTable; /* table for style tags */
Tcl_HashTable *winTable; /* table for embedded windows */
Tcl_HashTable *rowStyles; /* table for row styles */
Tcl_HashTable *colStyles; /* table for col styles */
Tcl_HashTable *cellStyles; /* table for cell styles */
Tcl_HashTable *flashCells; /* table of flashing cells */
Tcl_HashTable *selCells; /* table of selected cells */
Tcl_TimerToken cursorTimer; /* timer token for the cursor blinking */
Tcl_TimerToken flashTimer; /* timer token for the cell flashing */
char *activeBuf; /* buffer where the selection is kept
* for editing the active cell */
char **tagPrioNames; /* list of tag names in priority order */
TableTag **tagPrios; /* list of tag pointers in priority order */
TableTag *activeTagPtr; /* cache of active composite tag */
int activeX, activeY; /* cache offset of active layout in cell */
int tagPrioSize; /* size of tagPrios list */
int tagPrioMax; /* max allocated size of tagPrios list */
/* The invalid rectangle if there is an update pending */
int invalidX, invalidY, invalidWidth, invalidHeight;
int seen[4]; /* see TableUndisplay */
#ifdef POSTSCRIPT
/* Pointer to information used for generating Postscript for the canvas.
* NULL means no Postscript is currently being generated. */
struct TkPostscriptInfo *psInfoPtr;
#endif
#ifdef PROCS
Tcl_HashTable *inProc; /* cells where proc is being evaled */
int showProcs; /* whether to show embedded proc (1) or
* its calculated value (0) */
int hasProcs; /* whether table has embedded procs or not */
#endif
} Table;
/*
* HEADERS FOR EMBEDDED WINDOWS
*/
/*
* A structure of the following type holds information for each window
* embedded in a table widget.
*/
typedef struct TableEmbWindow {
Table *tablePtr; /* Information about the overall table
* widget. */
Tk_Window tkwin; /* Window for this segment. NULL means that
* the window hasn't been created yet. */
Tcl_HashEntry *hPtr; /* entry into winTable */
LangCallback *create; /* Script to create window on-demand.
* NULL means no such script.
* Malloc-ed. */
Tk_3DBorder bg; /* background color */
char *borderStr; /* border style */
int borders; /* number of borders specified (1, 2 or 4) */
int bd[4]; /* border width for cell around window */
int relief; /* relief type */
int sticky; /* How to align window in space */
int padX, padY; /* Padding to leave around each side
* of window, in pixels. */
int displayed; /* Non-zero means that the window has been
* displayed on the screen recently. */
} TableEmbWindow;
extern Tk_ConfigSpec tableSpecs[];
extern void EmbWinDisplay _ANSI_ARGS_((Table *tablePtr, Drawable window,
TableEmbWindow *ewPtr, TableTag *tagPtr,
int x, int y, int width, int height));
extern void EmbWinUnmap _ANSI_ARGS_((register Table *tablePtr,
int rlo, int rhi, int clo, int chi));
extern void EmbWinDelete _ANSI_ARGS_((register Table *tablePtr,
TableEmbWindow *ewPtr));
extern int Table_WinMove _ANSI_ARGS_((register Table *tablePtr,
char *CONST srcPtr, char *CONST destPtr, int flags));
extern int Table_WinDelete _ANSI_ARGS_((register Table *tablePtr,
char *CONST idxPtr));
extern int Table_WindowCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int TableValidateChange _ANSI_ARGS_((Table *tablePtr, int r,
int c, char *oldVal, char *newVal, int idx));
extern void TableLostSelection _ANSI_ARGS_((ClientData clientData));
extern void TableSetActiveIndex _ANSI_ARGS_((register Table *tablePtr));
/*
* HEADERS IN tkTableCmds.c
*/
extern int Table_ActivateCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_AdjustCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], int widthType));
extern int Table_BboxCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_BorderCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_ClearCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_CurselectionCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_CurvalueCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_GetCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_ScanCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_SeeCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_SelAnchorCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_SelClearCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_SelIncludesCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_SelSetCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_ViewCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
/*
* HEADERS IN tkTableEdit.c
*/
extern int Table_EditCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern void TableDeleteChars _ANSI_ARGS_((register Table *tablePtr,
int idx, int count));
extern void TableInsertChars _ANSI_ARGS_((register Table *tablePtr,
int idx, char *string));
/*
* HEADERS IN tkTableTag.c
*/
extern TableTag *TableNewTag _ANSI_ARGS_((Table *tablePtr));
extern void TableResetTag _ANSI_ARGS_((Table *tablePtr, TableTag *tagPtr));
extern void TableMergeTag _ANSI_ARGS_((Table *tablePtr, TableTag *baseTag,
TableTag *addTag));
extern void TableInvertTag _ANSI_ARGS_((TableTag *baseTag));
extern int TableGetTagBorders _ANSI_ARGS_((TableTag *tagPtr,
int *left, int *right, int *top, int *bottom));
extern void TableInitTags _ANSI_ARGS_((Table *tablePtr));
extern TableTag *FindRowColTag _ANSI_ARGS_((Table *tablePtr,
int cell, int type));
extern void TableCleanupTag _ANSI_ARGS_((Table *tablePtr,
TableTag *tagPtr));
extern int Table_TagCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
/*
* HEADERS IN tkTableUtil.c
*/
extern void Table_ClearHashTable _ANSI_ARGS_((Tcl_HashTable *hashTblPtr));
extern int TableOptionBdSet _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, Tk_Window tkwin,
Arg value, char *widgRec, int offset));
extern Arg TableOptionBdGet _ANSI_ARGS_((ClientData clientData,
Tk_Window tkwin, char *widgRec, int offset,
Tcl_FreeProc **freeProcPtr));
extern int TableTagConfigureBd _ANSI_ARGS_((Table *tablePtr,
TableTag *tagPtr, Arg oldValue, int nullOK));
extern int Cmd_OptionSet _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp,
Tk_Window unused, Arg value,
char *widgRec, int offset));
extern Arg Cmd_OptionGet _ANSI_ARGS_((ClientData clientData,
Tk_Window unused, char *widgRec,
int offset, Tcl_FreeProc **freeProcPtr));
/*
* HEADERS IN tkTableCell.c
*/
extern int TableTrueCell _ANSI_ARGS_((Table *tablePtr, int row, int col,
int *trow, int *tcol));
extern int TableCellCoords _ANSI_ARGS_((Table *tablePtr, int row,
int col, int *rx, int *ry, int *rw, int *rh));
extern int TableCellVCoords _ANSI_ARGS_((Table *tablePtr, int row,
int col, int *rx, int *ry,
int *rw, int *rh, int full));
extern void TableWhatCell _ANSI_ARGS_((register Table *tablePtr,
int x, int y, int *row, int *col));
extern int TableAtBorder _ANSI_ARGS_((Table *tablePtr, int x, int y,
int *row, int *col));
extern char * TableGetCellValue _ANSI_ARGS_((Table *tablePtr, int r, int c));
extern int TableSetCellValue _ANSI_ARGS_((Table *tablePtr, int r, int c,
char *value));
extern int TableMoveCellValue _ANSI_ARGS_((Table *tablePtr,
int fromr, int fromc, char *frombuf,
int tor, int toc, char *tobuf, int outOfBounds));
extern int TableGetIcursor _ANSI_ARGS_((Table *tablePtr, char *arg,
int *posn));
#define TableGetIcursorObj(tablePtr, objPtr, posnPtr) \
TableGetIcursor(tablePtr, Tcl_GetString(objPtr), posnPtr)
extern int TableGetIndex _ANSI_ARGS_((register Table *tablePtr,
char *str, int *row_p, int *col_p));
#define TableGetIndexObj(tablePtr, objPtr, rowPtr, colPtr) \
TableGetIndex(tablePtr, Tcl_GetString(objPtr), rowPtr, colPtr)
extern int Table_SetCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_HiddenCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern int Table_SpanCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern void TableSpanSanCheck _ANSI_ARGS_((register Table *tablePtr));
/*
* HEADERS IN TKTABLECELLSORT
*/
/*
* We keep the old CellSort true because it is used for grabbing
* the selection, so we really want them ordered
*/
extern Arg TableCellSort _ANSI_ARGS_((Table *tablePtr, char *str));
#ifdef NO_SORT_CELLS
# define TableCellSortObj(interp, objPtr) (objPtr)
#else
extern Tcl_Obj* TableCellSortObj _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_Obj *listObjPtr));
#endif
/*
* HEADERS IN TKTABLEPS
*/
#ifdef POSTSCRIPT
extern int Table_PostscriptCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
extern void Tcl_DStringAppendAll _ANSI_ARGS_(TCL_VARARGS(Tcl_DString *, arg1));
#endif
/*
* HEADERS IN TKTABLE
*/
EXTERN int Tktable_Init _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN int Tktable_SafeInit _ANSI_ARGS_((Tcl_Interp *interp));
extern void TableGetActiveBuf _ANSI_ARGS_((register Table *tablePtr));
extern void ExpandPercents _ANSI_ARGS_((Table *tablePtr, char *before,
int r, int c, char *oldVal, char *newVal, int idx,
Tcl_DString *dsPtr, int cmdType));
extern void TableInvalidate _ANSI_ARGS_((Table *tablePtr, int x, int y,
int width, int height, int force));
extern void TableRefresh _ANSI_ARGS_((register Table *tablePtr,
int arg1, int arg2, int mode));
extern void TableGeometryRequest _ANSI_ARGS_((Table *tablePtr));
extern void TableAdjustActive _ANSI_ARGS_((register Table *tablePtr));
extern void TableAdjustParams _ANSI_ARGS_((register Table *tablePtr));
extern void TableConfigCursor _ANSI_ARGS_((register Table *tablePtr));
extern void TableAddFlash _ANSI_ARGS_((Table *tablePtr, int row, int col));
#define TableInvalidateAll(tablePtr, flags) \
TableInvalidate((tablePtr), 0, 0, Tk_Width((tablePtr)->tkwin),\
Tk_Height((tablePtr)->tkwin), (flags))
/*
* Turn row/col into an index into the table
*/
#define TableMakeArrayIndex(r, c, i) sprintf((i), "%d,%d", (r), (c))
/*
* Turn array index back into row/col
* return the number of args parsed (should be two)
*/
#define TableParseArrayIndex(r, c, i) sscanf((i), "%d,%d", (r), (c))
/*
* Macro for finding the last cell of the table
*/
#define TableGetLastCell(tablePtr, rowPtr, colPtr) \
TableWhatCell((tablePtr),\
Tk_Width((tablePtr)->tkwin)-(tablePtr)->highlightWidth-1,\
Tk_Height((tablePtr)->tkwin)-(tablePtr)->highlightWidth-1,\
(rowPtr), (colPtr))
EXTERN int Tk_TableObjCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
/*
* end of header
* reset TCL_STORAGE_CLASS to DLLIMPORT.
*/
#undef TCL_STORAGE_CLASS
#define TCL_STORAGE_CLASS DLLIMPORT
/* perltk tkTables replacement for TCL_unsetVar. deletes an element in a hash */
EXTERN void tkTableUnsetElement _ANSI_ARGS_((Var hashEntry, char * key));
#endif /* _TKTABLE_H_ */