diff options
Diffstat (limited to 'tix/generic/tixGrData.h')
-rw-r--r-- | tix/generic/tixGrData.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/tix/generic/tixGrData.h b/tix/generic/tixGrData.h new file mode 100644 index 00000000000..89ed4f2722d --- /dev/null +++ b/tix/generic/tixGrData.h @@ -0,0 +1,85 @@ +/* + * tixGData.h -- + * + * Defines portable data structure 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_DATA_H_ +#define _TIX_GRID_DATA_H_ + +/* + * Data structure that stored the cells in a Grid widget. It is optimized + * for column/row insertion and deletion. + * + * - A grid is divideded into a set of rows and columns. Each row and column + * is divided into a set of cells. + * + * - The following discusses the structure of a row. The structure of a + * column is the reverse of a row. + * + * Row y is stored in the hash table TixGridDataSet.index[1] with + * the index y. Hence, to search for row y, we use the FindHashEntry + * operation: + * + * row_y = TixGridDataSet.index[1].FindHashEntry(y); + * + * To locate a cell (x,y), we can first find the row y, and then + * locate the cell at column x of this row. Note that the cell is + * *not* indexed by its column position (y), but rather by the hash + * table of the column y. The following example illustrates how cell + * (x,y) can be searched: + * + * row_y = TixGridDataSet.index[1].FindHashEntry(y); + * col_x = TixGridDataSet.index[0].FindHashEntry(x); + * + * cell_xy = row_x.list.FindHashEntry(&col_x); + * + * The advantage of this arrangement is it is very efficient to + * insert a row into into the grid -- we just have to fix the + * indices of the rows table. For example, if, after the insertion, + * row_y is now moved to the row y1, we change its index from y to + * y1. In general, an insertion operation takes log(n) time in a + * grid that contains n items. + * + */ +typedef struct TixGridDataSet { + Tcl_HashTable index[2]; /* the row and column indices */ + /* index[0] holds the columns + * (horizontal index) + */ + int maxIdx[2]; /* the max row/col, or {-1,-1} + * if there are no rows/col + */ +} TixGridDataSet; + +#define TIX_GR_AUTO 0 +#define TIX_GR_DEFAULT 1 +#define TIX_GR_DEFINED_PIXEL 2 +#define TIX_GR_DEFINED_CHAR 3 + +typedef struct TixGridSize { + int sizeType; + int sizeValue; /* width or height */ + int pixels; + int pad0, pad1; + double charValue; +} TixGridSize; + +typedef struct TixGridRowCol { + /* private: */ + Tcl_HashTable table; + + /* public: */ + int dispIndex; /* the row or column in which + * this TixGridRowCol is displayed */ + TixGridSize size; +} TixGridRowCol; + + +#endif |