diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Tk/pTk/tixGrid.h')
-rw-r--r-- | Master/tlpkg/tlperl/lib/Tk/pTk/tixGrid.h | 458 |
1 files changed, 458 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Tk/pTk/tixGrid.h b/Master/tlpkg/tlperl/lib/Tk/pTk/tixGrid.h new file mode 100644 index 00000000000..b1733b64e18 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/Tk/pTk/tixGrid.h @@ -0,0 +1,458 @@ + +/* $Id: tixGrid.h,v 1.1.1.1 2000/05/17 11:08:42 idiscovery Exp $ */ + +/* + * tixGrid.h -- + * + * Defines main data structures for tixGrid + * + * Copyright (c) 1996, Expert Interface Technologies + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + */ + +#ifndef _TIX_GRID_H_ +#define _TIX_GRID_H_ +#include "tkVMacro.h" + +#ifndef _TIX_GRID_DATA_H_ +#include "tixGrData.h" +#endif + +#define TIX_X 0 +#define TIX_Y 1 + + +#define TIX_S_MARGIN 0 +#define TIX_X_MARGIN 1 +#define TIX_Y_MARGIN 2 +#define TIX_MAIN 3 + +#define TIX_SITE_NONE -1 + +typedef struct TixGrEntry { + Tix_DItem * iPtr; + Tcl_HashEntry * entryPtr[2]; /* The index of this entry in the + * row/col tables */ +} TixGrEntry; + +/*---------------------------------------------------------------------- + * Render Block + * + * Before the Grid is rendered, information is filled into a pseudo 2D + * array of RenderBlockElem's: + * + * (1) entries are placed in the appropriate (x,y) locations + * (2) background and borders are formatted according + * (3) highlights are formatted. + * + * The widget is redrawn using the render-block. This saves reformatting + * the next time the widget is exposed. + *---------------------------------------------------------------------- + */ +typedef struct RenderBlockElem { + TixGrEntry * chPtr; /* not allocated, don't need to free */ + int borderW[2][2]; + int index[2]; + + unsigned int selected : 1; + unsigned int filled : 1; +} RenderBlockElem; + + +/* ElmDispSize -- + * + * This structure stores the size information of the visible + * rows (RenderBlock.dispSize[0][...]) and columns + * (RenderBlock.dispSize[1][...]) + */ +typedef struct ElmDispSize { + int preBorder; + int size; + int postBorder; + + int total; /* simple the sum of the above */ +} ElmDispSize; + +typedef struct RenderBlock { + int size[2]; /* num of rows and cols in the render block */ + + RenderBlockElem **elms; /* An Malloc'ed pseudo 2D array (you can do + * things like elms[0][0]), Used for the + * main body of the Grid. + */ + ElmDispSize *dispSize[2]; /* (dispSizes[0][x], dispSizes[1][y]) + * will be the dimension of the element (x,y) + * displayed on the screen (may be bigger + * or smaller than its desired size). */ + int visArea[2]; /* visible area (width times height) of + * the visible cells on the screen */ +} RenderBlock; + +/*---------------------------------------------------------------------- + * RenderInfo + * + * This stores information for rendering from the RB into an X drawable. + * + *---------------------------------------------------------------------- + */ +typedef struct RenderInfo { + Drawable drawable; + int origin[2]; + int offset[2]; + int size[2]; /* width and height of the area to draw + * (number of pixels starting from the offset) + * if offset = (2,2) and size = (5,5) we have + * to draw the rectangle ((2,2), (6,6)); + */ + struct { /* the current valid grid area for the */ + int x1, x2, y1, y2; /* "format" command */ + int whichArea; + } fmt; +} RenderInfo; + +typedef struct ExposedArea { + int x1, y1, x2, y2; +} ExposedArea, Rect; + +/*---------------------------------------------------------------------- + * ColorInfo + * + * These colors are used by the format commands. They must be saved + * or otherwise the colormap may be changed .. + *---------------------------------------------------------------------- + */ +typedef struct ColorInfo { + struct ColorInfo * next; + int counter; + int type; /* TK_CONFIG_BORDER or TK_CONFIG_COLOR */ + long pixel; + Tk_3DBorder border; + XColor * color; +} ColorInfo; + +/*---------------------------------------------------------------------- + * SelectBlock + * + * These structures are arranged in a list and are used to determine + * where a cell is selected. + *---------------------------------------------------------------------- + */ +#define TIX_GR_CLEAR 1 +#define TIX_GR_SET 2 +#define TIX_GR_TOGGLE 3 + +#define TIX_GR_MAX 0x7fffffff + +#define TIX_GR_RESIZE 1 +#define TIX_GR_REDRAW 2 + + +typedef struct SelectBlock { + struct SelectBlock * next; + int range[2][2]; /* the top left and bottom right corners */ + int type; /* TIX_GR_CLEAR, TIX_GR_SET, + * TIX_GR_TOGGLE + * + * If several SelectBlock covers the same + * cell, the last block in the wPtr->selList + * determines whether this cell is selected + * or not */ +} SelectBlock; + +/*---------------------------------------------------------------------- + * GrSortItem + * + * Used to sort the items in the grid + *---------------------------------------------------------------------- + */ +typedef struct Tix_GrSortItem { + Tcl_Obj * data; /* is usually a string, but + * can be a pointer to an + * arbitrary data in C API */ + int index; /* row or column */ +} Tix_GrSortItem; + +/*---------------------------------------------------------------------- + * Data structure for iterating the cells inside the grid. + * + *---------------------------------------------------------------------- + */ + +typedef struct Tix_GrDataRowSearch { + struct TixGridRowCol * row; + Tcl_HashSearch hashSearch; + Tcl_HashEntry *hashPtr; +} Tix_GrDataRowSearch; + +typedef struct Tix_GrDataCellSearch { + char * data; + Tcl_HashSearch hashSearch; + Tcl_HashEntry *hashPtr; +} Tix_GrDataCellSearch; + +/*---------------------------------------------------------------------- + * + * Main data structure of the grid widget. + * + *---------------------------------------------------------------------- + */ +typedef struct Tix_GridScrollInfo { + LangCallback *command; + + int max; /* total size (width or height) of the widget*/ + int offset; /* The top/left side of the scrolled widget */ + int unit; /* How much should we scroll when the user */ + + double window; /* visible size, percentage of the total */ +}Tix_GridScrollInfo; + + +typedef struct GridStruct { + Tix_DispData dispData; + + Tcl_Command widgetCmd; /* Token for button's widget command. */ + + /* + * Information used when displaying widget: + */ + int reqSize[2]; /* For app programmer to request size */ + + /* + * Information used when displaying widget: + */ + + /* Border and general drawing */ + int borderWidth; /* Width of 3-D borders. */ + int selBorderWidth; /* Width of 3-D borders for selected items */ + int relief; /* Indicates whether window as a whole is + * raised, sunken, or flat. */ + Tk_3DBorder border; /* Used for drawing the 3d border. */ + Tk_3DBorder selectBorder; /* Used for selected background. */ + XColor *normalFg; /* Normal foreground for text. */ + XColor *normalBg; /* Normal background for text. */ + XColor *selectFg; /* Color for drawing selected text. */ + + Tk_Uid state; /* State can only be normal or disabled. */ + + /* GC and stuff */ + GC backgroundGC; /* GC for drawing background. */ + GC selectGC; /* GC for drawing selected background. */ + GC anchorGC; /* GC for drawing dotted anchor highlight. */ + TixFont font; /* Default font used by the DItems. */ + + /* Text drawing */ + Cursor cursor; /* Current cursor for window, or None. */ + + /* For highlights */ + int highlightWidth; /* Width in pixels of highlight to draw + * around widget when it has the focus. + * <= 0 means don't draw a highlight. */ + int bdPad; /* = highlightWidth + borderWidth */ + XColor *highlightColorPtr; /* Color for drawing traversal highlight. */ + GC highlightGC; /* For drawing traversal highlight. */ + + /* + * default pad and gap values + */ + int padX, padY; + + Tk_Uid selectMode; /* Selection style: single, browse, multiple, + * or extended. This value isn't used in C + * code, but the Tcl bindings use it. */ + Tk_Uid selectUnit; /* Selection unit: cell, row or column. + * This value isn't used in C + * code, but the Tcl bindings use it. */ + + /* + * The following three sites are used according to the -selectunit. + * if selectunit is: "cell", [0] and [1] are used; "row", only [0] + * is used; "column", only [1] is used + */ + int anchor[2]; /* The current anchor unit */ + int dropSite[2]; /* The current drop site */ + int dragSite[2]; /* The current drop site */ + + /* + * Callback commands. + */ + LangCallback *command; /* The command when user double-clicks */ + LangCallback *browseCmd; /* The command to call when the selection + * changes. */ + LangCallback *editNotifyCmd; /* The command to call to determine whether + * a cell is editable. */ + LangCallback *editDoneCmd; /* The command to call when an entry has + * been edited by the user.*/ + LangCallback *formatCmd; /* The command to call when the Grid widget + * needs to be reformatted (e.g, Exposure + * events or when contents have been + * changed). */ + LangCallback *sizeCmd; /* The command to call when the size of + * the listbox changes. E.g., when the user + * add/deletes elements. Useful for auto- + * scrollbar geometry managers */ + + /* + * Info for lay-out + */ + char *takeFocus; /* Value of -takefocus option; not used in + * the C code, but used by keyboard traversal + * scripts. Malloc'ed, but may be NULL. */ + + int serial; /* this number is incremented before each time + * the widget is redisplayed */ + + TixGridDataSet * dataSet; + RenderBlock * mainRB; /* Malloc'ed */ + + int hdrSize[2]; /* number of rows (height of x header, index + * [0]) and columns (width of y header, index + * [1]) */ + int floatRange[2]; /* Are the num of columns and rows floated? + * (if floated, you can scroll past the max + * element).*/ + int gridSize[2]; /* the size of the grid where there is data */ + Tix_DItemInfo * diTypePtr; /* Default item type */ + ExposedArea expArea; + + RenderInfo * renderInfo; /* only points to stuff in stack */ + Tix_GridScrollInfo scrollInfo[2]; + int fontSize[2]; /* size of the "0" char of the -font option + */ + TixGridSize defSize[2]; + Tix_LinkList colorInfo; + Tix_LinkList selList; + Tix_LinkList mappedWindows; + int colorInfoCounter; + + unsigned int hasFocus : 1; + + unsigned int idleEvent : 1; + unsigned int toResize : 1; /* idle event */ + unsigned int toRedraw : 1; /* idle event */ + + unsigned int toResetRB : 1; /* Do we need to reset the render block */ + unsigned int toComputeSel : 1; + unsigned int toRedrawHighlight : 1; +} Grid; + +typedef Grid WidgetRecord; +typedef Grid * WidgetPtr; + +#define DEF_GRID_BG_COLOR NORMAL_BG +#define DEF_GRID_BG_MONO WHITE +#define DEF_GRID_BORDER_WIDTH "2" +#define DEF_GRID_BROWSE_COMMAND "" +#define DEF_GRID_COMMAND "" +#define DEF_GRID_CURSOR "" +#define DEF_GRID_DEFAULT_WIDTH "40" +#define DEF_GRID_DEFAULT_HEIGHT "20" +#define DEF_GRID_EDITDONE_COMMAND "" +#define DEF_GRID_EDITNOTIFY_COMMAND "" +#define DEF_GRID_FLOATING_ROWS "0" +#define DEF_GRID_FLOATING_COLS "0" +#define DEF_GRID_FONT "Helvetica -12 bold" +#define DEF_GRID_FG_COLOR BLACK +#define DEF_GRID_FG_MONO BLACK +#define DEF_GRID_FORMAT_COMMAND "" +#define DEF_GRID_HEIGHT "10" +#define DEF_GRID_HIGHLIGHT_COLOR BLACK +#define DEF_GRID_HIGHLIGHT_MONO BLACK +#define DEF_GRID_HIGHLIGHT_WIDTH "2" +#define DEF_GRID_LEFT_MARGIN "1" +#define DEF_GRID_ITEM_TYPE "text" +#define DEF_GRID_RELIEF "sunken" +#define DEF_GRID_PADX "2" +#define DEF_GRID_PADY "2" +#define DEF_GRID_SELECT_BG_COLOR ACTIVE_BG +#define DEF_GRID_SELECT_FG_COLOR BLACK +#define DEF_GRID_SELECT_BG_MONO BLACK +#define DEF_GRID_SELECT_FG_MONO WHITE +#define DEF_GRID_SELECT_MODE "single" +#define DEF_GRID_SELECT_UNIT "row" +#define DEF_GRID_SELECT_BORDERWIDTH "1" +#define DEF_GRID_STATE "normal" +#define DEF_GRID_SIZE_COMMAND "" +#define DEF_GRID_TAKE_FOCUS "1" +#define DEF_GRID_TOP_MARGIN "1" +#define DEF_GRID_WIDTH "4" +#define DEF_GRID_Y_SCROLL_COMMAND "" +#define DEF_GRID_X_SCROLL_COMMAND "" + +/* + * common functions + */ + +EXTERN void Tix_GrAddChangedRect _ANSI_ARGS_(( + WidgetPtr wPtr, int changedRect[2][2], + int isSite)); +EXTERN int Tix_GrConfigSize _ANSI_ARGS_((Tcl_Interp *interp, + WidgetPtr wPtr, int argc, Tcl_Obj *CONST *objv, + TixGridSize *sizePtr, char * argcErrorMsg, + int *changed_ret)); +EXTERN void Tix_GrDoWhenIdle _ANSI_ARGS_((WidgetPtr wPtr, + int type)); +EXTERN void Tix_GrCancelDoWhenIdle _ANSI_ARGS_((WidgetPtr wPtr)); +EXTERN void Tix_GrFreeElem _ANSI_ARGS_((TixGrEntry * chPtr)); +EXTERN void Tix_GrFreeUnusedColors _ANSI_ARGS_((WidgetPtr wPtr, + int freeAll)); +EXTERN void Tix_GrScrollPage _ANSI_ARGS_((WidgetPtr wPtr, + int count, int axis)); + +/* + * The dataset functions + */ + +EXTERN int TixGridDataConfigRowColSize _ANSI_ARGS_(( + Tcl_Interp * interp, WidgetPtr wPtr, + TixGridDataSet * dataSet, int which, int index, + int argc, Tcl_Obj *CONST *objv, char * argcErrorMsg, + int *changed_ret)); +EXTERN char * TixGridDataCreateEntry _ANSI_ARGS_(( + TixGridDataSet * dataSet, int x, int y, + char * defaultEntry)); +EXTERN int TixGridDataDeleteEntry _ANSI_ARGS_(( + TixGridDataSet * dataSet, int x, int y)); +EXTERN void TixGridDataDeleteRange _ANSI_ARGS_((WidgetPtr wPtr, + TixGridDataSet * dataSet, int which, + int from, int to)); +EXTERN void TixGridDataDeleteSearchedEntry _ANSI_ARGS_(( + Tix_GrDataCellSearch * cellSearchPtr)); +EXTERN char * TixGridDataFindEntry _ANSI_ARGS_(( + TixGridDataSet * dataSet, int x, int y)); +EXTERN int TixGrDataFirstCell _ANSI_ARGS_(( + Tix_GrDataRowSearch * rowSearchPtr, + Tix_GrDataCellSearch * cellSearchPtr)); +EXTERN int TixGrDataFirstRow _ANSI_ARGS_(( + TixGridDataSet* dataSet, + Tix_GrDataRowSearch * rowSearchPtr)); +EXTERN int TixGridDataGetRowColSize _ANSI_ARGS_(( + WidgetPtr wPtr, TixGridDataSet * dataSet, + int which, int index, TixGridSize * defSize, + int *pad0, int * pad1)); +EXTERN void TixGridDataGetGridSize _ANSI_ARGS_(( + TixGridDataSet * dataSet, int *width_ret, + int *height_ret)); +EXTERN int TixGridDataGetIndex _ANSI_ARGS_(( + Tcl_Interp * interp, WidgetPtr wPtr, + Tcl_Obj * xStr, Tcl_Obj * yStr, int * xPtr, int * yPtr)); +EXTERN void TixGridDataInsert _ANSI_ARGS_(( + TixGridDataSet * dataSet, + int x, int y, ClientData data)); +EXTERN void TixGridDataMoveRange _ANSI_ARGS_((WidgetPtr wPtr, + TixGridDataSet * dataSet, int which, + int from, int to, int by)); +EXTERN int TixGrDataNextCell _ANSI_ARGS_(( + Tix_GrDataCellSearch * cellSearchPtr)); +EXTERN int TixGrDataNextRow _ANSI_ARGS_(( + Tix_GrDataRowSearch * rowSearchPtr)); +EXTERN TixGridDataSet* TixGridDataSetInit _ANSI_ARGS_((void)); +EXTERN void TixGridDataSetFree _ANSI_ARGS_(( + TixGridDataSet* dataSet)); +EXTERN int TixGridDataUpdateSort _ANSI_ARGS_(( + TixGridDataSet * dataSet, int axis, + int start, int end, Tix_GrSortItem *items)); + +#endif /*_TIX_GRID_H_*/ |