home *** CD-ROM | disk | FTP | other *** search
-
- /* $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_*/
-