|
|
1.1 root 1: /*
2: * $Header: TextPrivate.h,v 1.2 87/09/11 21:24:59 haynes Rel $
3: */
4:
5: /*
6: * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
7: *
8: * All Rights Reserved
9: *
10: * Permission to use, copy, modify, and distribute this software and its
11: * documentation for any purpose and without fee is hereby granted,
12: * provided that the above copyright notice appear in all copies and that
13: * both that copyright notice and this permission notice appear in
14: * supporting documentation, and that the name of Digital Equipment
15: * Corporation not be used in advertising or publicity pertaining to
16: * distribution of the software without specific, written prior permission.
17: *
18: *
19: * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
20: * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
21: * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
22: * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
23: * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
24: * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
25: * SOFTWARE.
26: */
27: #ifndef _XtTextPrivate_h
28: #define _XtTextPrivate_h
29:
30:
31: /****************************************************************
32: *
33: * Text widget private
34: *
35: ****************************************************************/
36: #define MAXCUT 30000 /* Maximum number of characters that can be cut. */
37:
38: #define LF 0x0a
39: #define CR 0x0d
40: #define TAB 0x09
41: #define BS 0x08
42: #define SP 0x20
43: #define DEL 0x7f
44: #define BSLASH '\\'
45:
46: #define EDITDONE 0
47: #define EDITERROR 1
48: #define POSITIONERROR 2
49:
50: typedef enum {XtsdLeft, XtsdRight} ScanDirection;
51: typedef enum {XtstPositions, XtstWhiteSpace, XtstEOL, XtstParagraph, XtstFile} ScanType;
52:
53: typedef struct {
54: int firstPos;
55: int length;
56: char *ptr;
57: } XtTextBlock, *TextBlockPtr;
58:
59: /* the data field is really a pointer to source info, see disk and
60: stream sources in TextKinds.c */
61:
62: typedef struct {
63: int (*read)();
64: int (*replace)();
65: XtTextPosition (*getLastPos)();
66: int (*setLastPos)();
67: XtTextPosition (*scan)();
68: XtEditType (*editType)();
69: int *data;
70: } XtTextSource, *TextSourcePtr;
71:
72: typedef struct {
73: XFontStruct *font;
74: int foreground;
75: int (*display)();
76: int (*insertCursor)();
77: int (*clearToBackground)();
78: int (*findPosition)();
79: int (*findDistance)();
80: int (*resolve)();
81: int (*maxLines)();
82: int (*maxHeight)();
83: int *data;
84: } XtTextSink, *TextSinkPtr;
85:
86: /* displayable text management data structures */
87:
88: typedef struct {
89: XtTextPosition position;
90: Position x, y, endX;
91: } LineTableEntry, *LineTableEntryPtr;
92:
93: /* Line Tables are n+1 long - last position displayed is in last lt entry */
94: typedef struct {
95: XtTextPosition top; /* Top of the displayed text. */
96: int lines; /* How many lines in this table. */
97: LineTableEntry *info; /* A dynamic array, one entry per line */
98: } LineTable, *LineTablePtr;
99:
100: typedef enum {XtisOn, XtisOff} InsertState;
101:
102: typedef enum {XtselectNull, XtselectPosition, XtselectChar, XtselectWord,
103: XtselectLine, XtselectParagraph, XtselectAll} XtSelectType;
104:
105: typedef enum {XtsmTextSelect, XtsmTextExtend} SelectionMode;
106:
107: typedef enum {XtactionStart, XtactionAdjust, XtactionEnd} SelectionAction;
108:
109: typedef struct {
110: XtTextPosition left, right;
111: XtSelectType type;
112: } TextSelection;
113:
114: #define IsPositionVisible(ctx, pos) (pos >= ctx->text.lt.info[0].position && \
115: pos <= ctx->text.lt.info[ctx->text.lt.lines].position)
116:
117: /* Private Text Definitions */
118:
119: typedef int (*ActionProc)();
120:
121: typedef XtSelectType SelectionArray[20];
122:
123: /* New fields for the Text widget class record */
124:
125: typedef struct {int foo;} TextClassPart;
126:
127: /* Full class record declaration */
128: typedef struct _TextClassRec {
129: CoreClassPart core_class;
130: TextClassPart text_class;
131: } TextClassRec;
132:
133: extern TextClassRec textClassRec;
134:
135: /* New fields for the Text widget record */
136: typedef struct {
137: XtTextSource *source;
138: XtTextSink *sink;
139: LineTable lt;
140: XtTextPosition insertPos;
141: TextSelection s;
142: ScanDirection extendDir;
143: TextSelection origSel; /* the selection being modified */
144: SelectionArray sarray; /* Array to cycle for selections. */
145: Dimension leftmargin; /* Width of left margin. */
146: int options; /* wordbreak, scroll, etc. */
147: unsigned short lasttime; /* timestamp of last processed action */
148: unsigned short time; /* timestamp of last key or button action */
149: Position ev_x, ev_y; /* x, y coords for key or button action */
150: Widget sbar; /* The vertical scroll bar (none = 0). */
151: Widget outer; /* Parent of scrollbar & text (if any) */
152: XtTextPosition *updateFrom; /* Array of start positions for update. */
153: XtTextPosition *updateTo; /* Array of end positions for update. */
154: int numranges; /* How many update ranges there are. */
155: int maxranges; /* How many update ranges we've space for */
156: Boolean showposition; /* True if we need to show the position. */
157: XtTextPosition lastPos; /* Last position of source. */
158: Widget dialog; /* Window containing dialog, if any. */
159: GC gc;
160: Boolean hasfocus; /* TRUE if we currently have input focus. */
161: } TextPart;
162:
163: /****************************************************************
164: *
165: * Full instance record declaration
166: *
167: ****************************************************************/
168:
169: typedef struct _TextRec {
170: CorePart core;
171: TextPart text;
172: } TextRec;
173:
174:
175: #endif _XtTextPrivate_h
176: /* DON'T ADD STUFF AFTER THIS #endif */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.