home *** CD-ROM | disk | FTP | other *** search
- // -------------------------------------------------------------------------------------
- // DataTable
- // This software is without warranty of any kind. Use at your own risk.
- // -------------------------------------------------------------------------------------
-
- #import <objc/Object.h>
-
- // -------------------------------------------------------------------------------------
- // column data types
- #define CDT_TYPES "?SBI"
- #define CDT_UNKNOWN 0
- #define CDT_STRING 1
- #define CDT_BOOLEAN 2
- #define CDT_INTEGER 3
-
- // -------------------------------------------------------------------------------------
- // column definition
- #define DATATYPE_UNDEFINED 0
- typedef struct {
- int index; // physical ordering (0 == key)
- char *keyTag; // lookup key name buffer
- char *title; // column title
- char type; // data type
- NXCoord size; // width of column
- NXCoord minSize; // minimum size of column
- int displayOrder; // displayed ordering
- int alignment; // column content alignment
- BOOL isEditable; // content editability
- BOOL isHidden; // don't show column
- char *nilValue; // value equivalent to "empty"
- } dataColumn_t;
-
- // -------------------------------------------------------------------------------------
- // table definition
- typedef struct {
- char *name;
- char *access;
- NXSize viewSize;
- time_t date;
- id columnId;
- id reorderId;
- id dataId;
- } dataTable_t;
-
- // -------------------------------------------------------------------------------------
- // row:colmn entry
- typedef struct {
- char *value;
- int isValid; /* -1, 0, 1 */
- } dataEntry_t;
-
- #define entryNEW ((dataEntry_t*)malloc(sizeof(dataEntry_t)))
- #define entryPTR(R,C) ((R)?(dataEntry_t*)[(R) objectAt:(C)]:(dataEntry_t*)nil)
- #define entryVALUE(R,C) (entryPTR(R,C)->value)
- #define entryVALID(R,C) (entryPTR(R,C)->isValid)
-
- // -------------------------------------------------------------------------------------
- @interface DataTable : Object
- {
-
- id delegate;
-
- id nullIndex;
- BOOL isModified;
-
- dataTable_t *tableHandle;
-
- }
-
- // -------------------------------------------------------------------------------------
-
- - initFromFile:(const char*)fileName;
- - free;
-
- - setDelegate:aDelegate;
- - delegate;
- - setNullIndex:index;
- - setViewSize:(NXSize*)size;
- - (const NXSize*)viewSize;
-
- - (BOOL)tableHasChanged;
- - setDocEdited:(BOOL)flag;
- - commitTable;
-
- - newRowName:(const char*)rowN copyFromRow:(int)rowX;
- - deleteRowAt:(int)rowX;
-
- - (int)sortCompare:(dataColumn_t*)dc values:(const char*)val1:(const char*)val2;
- - sortTableByColumn:(int)pri :(int)sec;
- - sortTableByColumnName:(const char*)priName :(const char*)secName;
-
- + (dataColumn_t*)_column:infoId infoAt:(int)n;
- - (dataColumn_t*)columnInfoAt:(u_int)col;
- - (const char*)copyStringValue:(const char*)value forColumn:(int)index;
- - (dataColumn_t*)orderedColumnInfoAt:(u_int)ord;
- - addColumnInfo:(dataColumn_t*)dc;
- - setDisplayOrder:(int)order andWidth:(float)width forColumnIndex:(int)column;
-
- - (const char*)tableName;
- - (const char*)tableTitle;
- - (const char*)tableAccess;
- - (u_int)actualColumnCount;
- - (u_int)visibleColumnCount;
- - (u_int)columnCount;
- - (u_int)rowCount;
-
- - (BOOL)hasVerificationErrors;
- - (BOOL)verifyValueAt:(u_int)row :(u_int)column;
- - (BOOL)verifyValue:(const char*)value dataType:(int)dataType;
-
- - (int)indexForColumnName:(const char*)name;
- - (int)indexForRowName:(const char*)rowN exactMatch:(BOOL)exact;
- - (dataEntry_t*)entryAtIndex:(u_int)rowX :(u_int)colX;
- - (const char*)valueForRowName:(const char*)rowN columnName:(const char*)colN;
- - (const char*)valueAtIndex:(u_int)rowX :(u_int)colX;
- - (const char*)valueFor:(u_int)rowIndex :(u_int)columnIndex;
- - setValue:(const char*)value atIndex:(u_int)rowX :(u_int)colX;
- - setValue:(const char*)value forRowName:(const char*)rowN columnName:(const char*)colN;
- - setValueFor:rowIndex :colIndex from:aValue;
- - setValueFor:colIndex at:(u_int)rowPosition from:aValue;
- - getValueFor:rowIndex :columnIndex into:aValue;
- - getValueFor:index at:(u_int)aPosition into:aValue;
- - (int)scanForValue:(const char*)value inColumnName:(const char*)colN
- startingAtRow:(int)rowX backwards:(BOOL)back;
-
- - (time_t)timestamp;
- - readTableColumns;
- - readTableData;
- - writeTable;
-
- @end