1 |
|
---|
2 | /*
|
---|
3 | * bltTreeView.h --
|
---|
4 | *
|
---|
5 | * This module implements an hierarchy widget for the BLT toolkit.
|
---|
6 | *
|
---|
7 | * Copyright 1998-1999 Lucent Technologies, Inc.
|
---|
8 | *
|
---|
9 | * Permission to use, copy, modify, and distribute this software and
|
---|
10 | * its documentation for any purpose and without fee is hereby
|
---|
11 | * granted, provided that the above copyright notice appear in all
|
---|
12 | * copies and that both that the copyright notice and warranty
|
---|
13 | * disclaimer appear in supporting documentation, and that the names
|
---|
14 | * of Lucent Technologies or any of their entities not be used in
|
---|
15 | * advertising or publicity pertaining to distribution of the software
|
---|
16 | * without specific, written prior permission.
|
---|
17 | *
|
---|
18 | * Lucent Technologies disclaims all warranties with regard to this
|
---|
19 | * software, including all implied warranties of merchantability and
|
---|
20 | * fitness. In no event shall Lucent Technologies be liable for any
|
---|
21 | * special, indirect or consequential damages or any damages
|
---|
22 | * whatsoever resulting from loss of use, data or profits, whether in
|
---|
23 | * an action of contract, negligence or other tortuous action, arising
|
---|
24 | * out of or in connection with the use or performance of this
|
---|
25 | * software.
|
---|
26 | *
|
---|
27 | * The "treeview" widget was created by George A. Howlett.
|
---|
28 | */
|
---|
29 |
|
---|
30 | /*
|
---|
31 | * TODO:
|
---|
32 | *
|
---|
33 | * BUGS:
|
---|
34 | * 1. "open" operation should change scroll offset so that as many
|
---|
35 | * new entries (up to half a screen) can be seen.
|
---|
36 | * 2. "open" needs to adjust the scrolloffset so that the same entry
|
---|
37 | * is seen at the same place.
|
---|
38 | */
|
---|
39 |
|
---|
40 | #ifndef BLT_TREEVIEW_H
|
---|
41 | #define BLT_TREEVIEW_H
|
---|
42 |
|
---|
43 | #include "bltImage.h"
|
---|
44 | #include "bltHash.h"
|
---|
45 | #include "bltChain.h"
|
---|
46 | #include "bltTree.h"
|
---|
47 | #include "bltTile.h"
|
---|
48 | #include "bltBind.h"
|
---|
49 | #include "bltObjConfig.h"
|
---|
50 |
|
---|
51 | #define ITEM_ENTRY (ClientData)0
|
---|
52 | #define ITEM_ENTRY_BUTTON (ClientData)1
|
---|
53 | #define ITEM_COLUMN_TITLE (ClientData)2
|
---|
54 | #define ITEM_COLUMN_RULE (ClientData)3
|
---|
55 | #define ITEM_STYLE (ClientData)0x10004
|
---|
56 |
|
---|
57 | #if HAVE_UTF
|
---|
58 | #else
|
---|
59 | #define Tcl_NumUtfChars(s,n) (((n) == -1) ? strlen((s)) : (n))
|
---|
60 | #define Tcl_UtfAtIndex(s,i) ((s) + (i))
|
---|
61 | #endif
|
---|
62 |
|
---|
63 | #define ODD(x) ((x) | 0x01)
|
---|
64 |
|
---|
65 | #define END (-1)
|
---|
66 | #define SEPARATOR_LIST ((char *)NULL)
|
---|
67 | #define SEPARATOR_NONE ((char *)-1)
|
---|
68 |
|
---|
69 | #define SEARCH_Y 1
|
---|
70 |
|
---|
71 | typedef char *UID;
|
---|
72 |
|
---|
73 | /*
|
---|
74 | * The macro below is used to modify a "char" value (e.g. by casting
|
---|
75 | * it to an unsigned character) so that it can be used safely with
|
---|
76 | * macros such as isspace.
|
---|
77 | */
|
---|
78 | #define UCHAR(c) ((unsigned char) (c))
|
---|
79 |
|
---|
80 | #define TOGGLE(x, mask) (((x) & (mask)) ? ((x) & ~(mask)) : ((x) | (mask)))
|
---|
81 |
|
---|
82 |
|
---|
83 | #define SCREENX(h, wx) ((wx) - (h)->xOffset + (h)->inset)
|
---|
84 | #define SCREENY(h, wy) ((wy) - (h)->yOffset + (h)->inset + (h)->titleHeight)
|
---|
85 |
|
---|
86 | #define WORLDX(h, sx) ((sx) - (h)->inset + (h)->xOffset)
|
---|
87 | #define WORLDY(h, sy) ((sy) - ((h)->inset + (h)->titleHeight) + (h)->yOffset)
|
---|
88 |
|
---|
89 | #define VPORTWIDTH(h) (Tk_Width((h)->tkwin) - 2 * (h)->inset)
|
---|
90 | #define VPORTHEIGHT(h) \
|
---|
91 | (Tk_Height((h)->tkwin) - (h)->titleHeight - 2 * (h)->inset)
|
---|
92 |
|
---|
93 | #define ICONWIDTH(d) (tvPtr->levelInfo[(d)].iconWidth)
|
---|
94 | #define LEVELX(d) (tvPtr->levelInfo[(d)].x)
|
---|
95 |
|
---|
96 | #define DEPTH(h, n) \
|
---|
97 | (((h)->flatView) ? 0 : Blt_TreeNodeDepth((h)->tree, (n)))
|
---|
98 |
|
---|
99 | #define SELECT_FG(t) \
|
---|
100 | (((((t)->flags & TV_FOCUS)) || ((t)->selOutFocusFgColor == NULL)) \
|
---|
101 | ? (t)->selInFocusFgColor : (t)->selOutFocusFgColor)
|
---|
102 | #define SELECT_BORDER(t) \
|
---|
103 | (((((t)->flags & TV_FOCUS)) || ((t)->selOutFocusBorder == NULL)) \
|
---|
104 | ? (t)->selInFocusBorder : (t)->selOutFocusBorder)
|
---|
105 |
|
---|
106 | #define SELECT_MODE_SINGLE (1<<0)
|
---|
107 | #define SELECT_MODE_MULTIPLE (1<<1)
|
---|
108 |
|
---|
109 | /*
|
---|
110 | * ----------------------------------------------------------------------------
|
---|
111 | *
|
---|
112 | * Internal treeview widget flags:
|
---|
113 | *
|
---|
114 | * TV_LAYOUT The layout of the hierarchy needs to be recomputed.
|
---|
115 | *
|
---|
116 | * TV_REDRAW A redraw request is pending for the widget.
|
---|
117 | *
|
---|
118 | * TV_XSCROLL X-scroll request is pending.
|
---|
119 | *
|
---|
120 | * TV_YSCROLL Y-scroll request is pending.
|
---|
121 | *
|
---|
122 | * TV_SCROLL Both X-scroll and Y-scroll requests are pending.
|
---|
123 | *
|
---|
124 | * TV_FOCUS The widget is receiving keyboard events.
|
---|
125 | * Draw the focus highlight border around the widget.
|
---|
126 | *
|
---|
127 | * TV_DIRTY The hierarchy has changed. It may invalidate
|
---|
128 | * the locations and pointers to entries. The widget
|
---|
129 | * will need to recompute its layout.
|
---|
130 | *
|
---|
131 | * TV_RESORT The tree has changed such that the view needs to
|
---|
132 | * be resorted. This can happen when an entry is
|
---|
133 | * open or closed, it's label changes, a column value
|
---|
134 | * changes, etc.
|
---|
135 | *
|
---|
136 | * TV_BORDERS The borders of the widget (highlight ring and
|
---|
137 | * 3-D border) need to be redrawn.
|
---|
138 | *
|
---|
139 | * TV_VIEWPORT Indicates that the viewport has changed in some
|
---|
140 | * way: the size of the viewport, the location of
|
---|
141 | * the viewport, or the contents of the viewport.
|
---|
142 | *
|
---|
143 | */
|
---|
144 |
|
---|
145 | #define TV_LAYOUT (1<<0)
|
---|
146 | #define TV_REDRAW (1<<1)
|
---|
147 | #define TV_XSCROLL (1<<2)
|
---|
148 | #define TV_YSCROLL (1<<3)
|
---|
149 | #define TV_SCROLL (TV_XSCROLL | TV_YSCROLL)
|
---|
150 | #define TV_FOCUS (1<<4)
|
---|
151 | #define TV_DIRTY (1<<5)
|
---|
152 | #define TV_UPDATE (1<<6)
|
---|
153 | #define TV_RESORT (1<<7)
|
---|
154 | #define TV_SORTED (1<<8)
|
---|
155 | #define TV_SORT_PENDING (1<<9)
|
---|
156 | #define TV_BORDERS (1<<10)
|
---|
157 | #define TV_VIEWPORT (1<<11)
|
---|
158 |
|
---|
159 | /*
|
---|
160 | * Rule related flags: Rules are XOR-ed lines. We need to track whether
|
---|
161 | * they have been drawn or not.
|
---|
162 | *
|
---|
163 | * TV_RULE_ACTIVE Indicates that a rule is currently being drawn
|
---|
164 | * for a column.
|
---|
165 | *
|
---|
166 | *
|
---|
167 | * TV_RULE_NEEDED Indicates that a rule is needed (but not yet
|
---|
168 | * drawn) for a column.
|
---|
169 | */
|
---|
170 |
|
---|
171 | #define TV_RULE_ACTIVE (1<<15)
|
---|
172 | #define TV_RULE_NEEDED (1<<16)
|
---|
173 |
|
---|
174 | /*
|
---|
175 | * Selection related flags:
|
---|
176 | *
|
---|
177 | * TV_SELECT_EXPORT Export the selection to X11.
|
---|
178 | *
|
---|
179 | * TV_SELECT_PENDING A "selection" command idle task is pending.
|
---|
180 | *
|
---|
181 | * TV_SELECT_CLEAR Clear selection flag of entry.
|
---|
182 | *
|
---|
183 | * TV_SELECT_SET Set selection flag of entry.
|
---|
184 | *
|
---|
185 | * TV_SELECT_TOGGLE Toggle selection flag of entry.
|
---|
186 | *
|
---|
187 | * TV_SELECT_MASK Mask of selection set/clear/toggle flags.
|
---|
188 | *
|
---|
189 | * TV_SELECT_SORTED Indicates if the entries in the selection
|
---|
190 | * should be sorted or displayed in the order
|
---|
191 | * they were selected.
|
---|
192 | *
|
---|
193 | */
|
---|
194 | #define TV_SELECT_CLEAR (1<<16)
|
---|
195 | #define TV_SELECT_EXPORT (1<<17)
|
---|
196 | #define TV_SELECT_PENDING (1<<18)
|
---|
197 | #define TV_SELECT_SET (1<<19)
|
---|
198 | #define TV_SELECT_TOGGLE (TV_SELECT_SET | TV_SELECT_CLEAR)
|
---|
199 | #define TV_SELECT_MASK (TV_SELECT_SET | TV_SELECT_CLEAR)
|
---|
200 | #define TV_SELECT_SORTED (1<<20)
|
---|
201 |
|
---|
202 | /*
|
---|
203 | * Miscellaneous flags:
|
---|
204 | *
|
---|
205 | * TV_ALLOW_DUPLICATES When inserting new entries, create
|
---|
206 | * duplicate entries.
|
---|
207 | *
|
---|
208 | * TV_FILL_ANCESTORS Automatically create ancestor entries
|
---|
209 | * as needed when inserting a new entry.
|
---|
210 | *
|
---|
211 | * TV_HIDE_ROOT Don't display the root entry.
|
---|
212 | *
|
---|
213 | * TV_HIDE_LEAVES Don't display entries that are leaves.
|
---|
214 | *
|
---|
215 | * TV_SHOW_COLUMN_TITLES Indicates whether to draw titles over each
|
---|
216 | * column.
|
---|
217 | *
|
---|
218 | */
|
---|
219 | #define TV_ALLOW_DUPLICATES (1<<21)
|
---|
220 | #define TV_FILL_ANCESTORS (1<<22)
|
---|
221 | #define TV_HIDE_ROOT (1<<23)
|
---|
222 | #define TV_HIDE_LEAVES (1<<24)
|
---|
223 | #define TV_SHOW_COLUMN_TITLES (1<<25)
|
---|
224 | #define TV_SORT_AUTO (1<<26)
|
---|
225 | #define TV_NEW_TAGS (1<<27)
|
---|
226 | #define TV_HIGHLIGHT_CELLS (1<<28)
|
---|
227 |
|
---|
228 | #define TV_ITEM_COLUMN 1
|
---|
229 | #define TV_ITEM_RULE 2
|
---|
230 |
|
---|
231 | /*
|
---|
232 | * -------------------------------------------------------------------------
|
---|
233 | *
|
---|
234 | * Internal entry flags:
|
---|
235 | *
|
---|
236 | * ENTRY_HAS_BUTTON Indicates that a button needs to be
|
---|
237 | * drawn for this entry.
|
---|
238 | *
|
---|
239 | * ENTRY_CLOSED Indicates that the entry is closed and
|
---|
240 | * its subentries are not displayed.
|
---|
241 | *
|
---|
242 | * ENTRY_HIDDEN Indicates that the entry is hidden (i.e.
|
---|
243 | * can not be viewed by opening or scrolling).
|
---|
244 | *
|
---|
245 | * BUTTON_AUTO
|
---|
246 | * BUTTON_SHOW
|
---|
247 | * BUTTON_MASK
|
---|
248 | *
|
---|
249 | * -------------------------------------------------------------------------
|
---|
250 | */
|
---|
251 | #define ENTRY_CLOSED (1<<0)
|
---|
252 | #define ENTRY_HIDDEN (1<<1)
|
---|
253 | #define ENTRY_NOT_LEAF (1<<2)
|
---|
254 | #define ENTRY_MASK (ENTRY_CLOSED | ENTRY_HIDDEN)
|
---|
255 |
|
---|
256 | #define ENTRY_HAS_BUTTON (1<<3)
|
---|
257 | #define ENTRY_ICON (1<<4)
|
---|
258 | #define ENTRY_REDRAW (1<<5)
|
---|
259 | #define ENTRY_LAYOUT_PENDING (1<<6)
|
---|
260 | #define ENTRY_DATA_CHANGED (1<<7)
|
---|
261 | #define ENTRY_DIRTY (ENTRY_DATA_CHANGED | ENTRY_LAYOUT_PENDING)
|
---|
262 |
|
---|
263 | #define BUTTON_AUTO (1<<8)
|
---|
264 | #define BUTTON_SHOW (1<<9)
|
---|
265 | #define BUTTON_MASK (BUTTON_AUTO | BUTTON_SHOW)
|
---|
266 |
|
---|
267 | #define COLUMN_RULE_PICKED (1<<1)
|
---|
268 | #define COLUMN_DIRTY (1<<2)
|
---|
269 |
|
---|
270 | #define STYLE_TEXTBOX (0)
|
---|
271 | #define STYLE_COMBOBOX (1)
|
---|
272 | #define STYLE_CHECKBOX (2)
|
---|
273 | #define STYLE_TYPE 0x3
|
---|
274 |
|
---|
275 | #define STYLE_LAYOUT (1<<3)
|
---|
276 | #define STYLE_DIRTY (1<<4)
|
---|
277 | #define STYLE_HIGHLIGHT (1<<5)
|
---|
278 | #define STYLE_USER (1<<6)
|
---|
279 |
|
---|
280 | typedef struct TreeViewColumnStruct TreeViewColumn;
|
---|
281 | typedef struct TreeViewComboboxStruct TreeViewCombobox;
|
---|
282 | typedef struct TreeViewEntryStruct TreeViewEntry;
|
---|
283 | typedef struct TreeViewStruct TreeView;
|
---|
284 | typedef struct TreeViewStyleClassStruct TreeViewStyleClass;
|
---|
285 | typedef struct TreeViewStyleStruct TreeViewStyle;
|
---|
286 |
|
---|
287 | typedef int (TreeViewCompareProc) _ANSI_ARGS_((Tcl_Interp *interp, char *name,
|
---|
288 | char *pattern));
|
---|
289 |
|
---|
290 | typedef TreeViewEntry *(TreeViewIterProc) _ANSI_ARGS_((TreeViewEntry *entryPtr,
|
---|
291 | unsigned int mask));
|
---|
292 |
|
---|
293 | typedef struct {
|
---|
294 | int tagType;
|
---|
295 | TreeView *tvPtr;
|
---|
296 | Blt_HashSearch cursor;
|
---|
297 | TreeViewEntry *entryPtr;
|
---|
298 | } TreeViewTagInfo;
|
---|
299 |
|
---|
300 | /*
|
---|
301 | * TreeViewIcon --
|
---|
302 | *
|
---|
303 | * Since instances of the same Tk image can be displayed in
|
---|
304 | * different windows with possibly different color palettes, Tk
|
---|
305 | * internally stores each instance in a linked list. But if
|
---|
306 | * the instances are used in the same widget and therefore use
|
---|
307 | * the same color palette, this adds a lot of overhead,
|
---|
308 | * especially when deleting instances from the linked list.
|
---|
309 | *
|
---|
310 | * For the treeview widget, we never need more than a single
|
---|
311 | * instance of an image, regardless of how many times it's used.
|
---|
312 | * Cache the image, maintaining a reference count for each
|
---|
313 | * image used in the widget. It's likely that the treeview
|
---|
314 | * widget will use many instances of the same image (for example
|
---|
315 | * the open/close icons).
|
---|
316 | */
|
---|
317 |
|
---|
318 | typedef struct TreeViewIconStruct {
|
---|
319 | Tk_Image tkImage; /* The Tk image being cached. */
|
---|
320 |
|
---|
321 | int refCount; /* Reference count for this image. */
|
---|
322 |
|
---|
323 | short int width, height; /* Dimensions of the cached image. */
|
---|
324 |
|
---|
325 | Blt_HashEntry *hashPtr; /* Hash table pointer to the image. */
|
---|
326 |
|
---|
327 | } *TreeViewIcon;
|
---|
328 |
|
---|
329 | #define TreeViewIconHeight(icon) ((icon)->height)
|
---|
330 | #define TreeViewIconWidth(icon) ((icon)->width)
|
---|
331 | #define TreeViewIconBits(icon) ((icon)->tkImage)
|
---|
332 |
|
---|
333 | /*
|
---|
334 | * TreeViewColumn --
|
---|
335 | *
|
---|
336 | * A column describes how to display a field of data in the tree.
|
---|
337 | * It may display a title that you can bind to. It may display a
|
---|
338 | * rule for resizing the column. Columns may be hidden, and have
|
---|
339 | * attributes (foreground color, background color, font, etc)
|
---|
340 | * that override those designated globally for the treeview
|
---|
341 | * widget.
|
---|
342 | */
|
---|
343 | struct TreeViewColumnStruct {
|
---|
344 | int type; /* Always TV_COLUMN */
|
---|
345 | Blt_TreeKey key; /* Data cell identifier for current tree. */
|
---|
346 | int position; /* Position of column in list. Used
|
---|
347 | * to indicate the first and last
|
---|
348 | * columns. */
|
---|
349 | UID tagsUid; /* List of binding tags for this
|
---|
350 | * entry. UID, not a string, because
|
---|
351 | * in the typical case most columns
|
---|
352 | * will have the same bindtags. */
|
---|
353 |
|
---|
354 | TreeView *tvPtr;
|
---|
355 | unsigned int flags;
|
---|
356 |
|
---|
357 | /* Title-related information */
|
---|
358 | char *title; /* Text displayed in column heading as its
|
---|
359 | * title. By default, this is the same as
|
---|
360 | * the data cell name. */
|
---|
361 | Tk_Font titleFont; /* Font to draw title in. */
|
---|
362 | Shadow titleShadow;
|
---|
363 |
|
---|
364 | XColor *titleFgColor; /* Foreground color of text displayed in
|
---|
365 | * the heading */
|
---|
366 | Tk_3DBorder titleBorder; /* Background color of the column's heading. */
|
---|
367 |
|
---|
368 | GC titleGC;
|
---|
369 |
|
---|
370 | XColor *activeTitleFgColor; /* Foreground color of text heading when
|
---|
371 | * the column is activated.*/
|
---|
372 | Tk_3DBorder activeTitleBorder;
|
---|
373 |
|
---|
374 | int titleBorderWidth;
|
---|
375 | int titleRelief;
|
---|
376 |
|
---|
377 | GC activeTitleGC;
|
---|
378 |
|
---|
379 | TextLayout *titleTextPtr;
|
---|
380 | short int titleWidth, titleHeight;
|
---|
381 |
|
---|
382 | TreeViewIcon titleIcon; /* Icon displayed in column heading */
|
---|
383 | char *titleCmd; /* Tcl script to be executed by the
|
---|
384 | * column's "invoke" operation. */
|
---|
385 |
|
---|
386 | char *sortCmd; /* Tcl script used to compare two
|
---|
387 | * columns. */
|
---|
388 |
|
---|
389 | /* General information. */
|
---|
390 | int hidden; /* Indicates if the column is
|
---|
391 | * displayed */
|
---|
392 | int state; /* Indicates if column title can
|
---|
393 | * invoked. */
|
---|
394 | int editable; /* Indicates if column can be
|
---|
395 | * edited. */
|
---|
396 |
|
---|
397 | int max; /* Maximum space allowed for column. */
|
---|
398 | int reqMin, reqMax; /* Requested bounds on the width of
|
---|
399 | * column. Does not include any
|
---|
400 | * padding or the borderwidth of
|
---|
401 | * column. If non-zero, overrides the
|
---|
402 | * computed width of the column. */
|
---|
403 |
|
---|
404 | int reqWidth; /* User-requested width of
|
---|
405 | * column. Does not include any
|
---|
406 | * padding or the borderwidth of
|
---|
407 | * column. If non-zero, overrides the
|
---|
408 | * computed column width. */
|
---|
409 |
|
---|
410 | int maxWidth; /* Width of the widest entry in the
|
---|
411 | * column. */
|
---|
412 |
|
---|
413 | int worldX; /* Starting world x-coordinate of the
|
---|
414 | * column. */
|
---|
415 |
|
---|
416 | double weight; /* Growth factor for column. Zero
|
---|
417 | * indicates that the column can not
|
---|
418 | * be resized. */
|
---|
419 |
|
---|
420 | int width; /* Computed width of column. */
|
---|
421 |
|
---|
422 | TreeViewStyle *stylePtr; /* Default style for column. */
|
---|
423 |
|
---|
424 | Tk_3DBorder border; /* Background color of column. */
|
---|
425 | int borderWidth; /* Border width of the column. */
|
---|
426 | int relief; /* Relief of the column. */
|
---|
427 | Blt_Pad pad; /* Horizontal padding on either side
|
---|
428 | * of the column. */
|
---|
429 |
|
---|
430 | Tk_Justify justify; /* Indicates how the text or icon is
|
---|
431 | * justified within the column. */
|
---|
432 |
|
---|
433 | Blt_ChainLink *linkPtr;
|
---|
434 |
|
---|
435 | int ruleLineWidth;
|
---|
436 | Blt_Dashes ruleDashes;
|
---|
437 | GC ruleGC;
|
---|
438 | };
|
---|
439 |
|
---|
440 |
|
---|
441 | struct TreeViewStyleStruct {
|
---|
442 | int refCount; /* Usage reference count. A reference
|
---|
443 | * count of zero indicates that the
|
---|
444 | * style may be freed. */
|
---|
445 | unsigned int flags; /* Bit field containing both the style
|
---|
446 | * type and various flags. */
|
---|
447 | char *name; /* Instance name. */
|
---|
448 | TreeViewStyleClass *classPtr;
|
---|
449 | /* Contains class-specific information such
|
---|
450 | * as configuration specifications and
|
---|
451 | * configure, draw, etc. routines. */
|
---|
452 | Blt_HashEntry *hashPtr; /* If non-NULL, points to the hash
|
---|
453 | * table entry for the style. A style
|
---|
454 | * that's been deleted, but still in
|
---|
455 | * use (non-zero reference count) will
|
---|
456 | * have no hash table entry.
|
---|
457 | */
|
---|
458 | /* General style fields. */
|
---|
459 | Tk_Cursor cursor; /* X Cursor */
|
---|
460 |
|
---|
461 | TreeViewIcon icon; /* If non-NULL, is a Tk_Image to be drawn
|
---|
462 | * in the cell. */
|
---|
463 | int gap; /* # pixels gap between icon and text. */
|
---|
464 | Tk_Font font;
|
---|
465 | XColor *fgColor; /* Normal foreground color of cell. */
|
---|
466 | Tk_3DBorder border; /* Normal background color of cell. */
|
---|
467 | XColor *highlightFgColor; /* Foreground color of cell when
|
---|
468 | * highlighted. */
|
---|
469 | Tk_3DBorder highlightBorder;/* Background color of cell when
|
---|
470 | * highlighted. */
|
---|
471 | XColor *activeFgColor; /* Foreground color of cell when active. */
|
---|
472 | Tk_3DBorder activeBorder; /* Background color of cell when active. */
|
---|
473 |
|
---|
474 | };
|
---|
475 |
|
---|
476 | typedef struct TreeViewValueStruct {
|
---|
477 | TreeViewColumn *columnPtr; /* Column in which the value is located. */
|
---|
478 | short int width, height; /* Dimensions of value. */
|
---|
479 | TreeViewStyle *stylePtr; /* Style information for cell
|
---|
480 | * displaying value. */
|
---|
481 | char *string; /* Raw text string. */
|
---|
482 | TextLayout *textPtr; /* Processes string to be displayed .*/
|
---|
483 | struct TreeViewValueStruct *nextPtr;
|
---|
484 | } TreeViewValue;
|
---|
485 |
|
---|
486 | typedef void (StyleConfigProc) _ANSI_ARGS_((TreeView *tvPtr,
|
---|
487 | TreeViewStyle *stylePtr));
|
---|
488 | typedef void (StyleDrawProc) _ANSI_ARGS_((TreeView *tvPtr, Drawable drawable,
|
---|
489 | TreeViewEntry *entryPtr, TreeViewValue *valuePtr,
|
---|
490 | TreeViewStyle *stylePtr, int x, int y));
|
---|
491 | typedef int (StyleEditProc) _ANSI_ARGS_((TreeView *tvPtr,
|
---|
492 | TreeViewEntry *entryPtr, TreeViewValue *valuePtr,
|
---|
493 | TreeViewStyle *stylePtr));
|
---|
494 | typedef void (StyleFreeProc) _ANSI_ARGS_((TreeView *tvPtr,
|
---|
495 | TreeViewStyle *stylePtr));
|
---|
496 | typedef void (StyleMeasureProc) _ANSI_ARGS_((TreeView *tvPtr,
|
---|
497 | TreeViewStyle *stylePtr, TreeViewValue *valuePtr));
|
---|
498 | typedef int (StylePickProc) _ANSI_ARGS_((TreeViewEntry *entryPtr,
|
---|
499 | TreeViewValue *valuePtr, TreeViewStyle *stylePtr, int worldX,
|
---|
500 | int worldY));
|
---|
501 |
|
---|
502 | struct TreeViewStyleClassStruct {
|
---|
503 | char *className; /* Class name of the style */
|
---|
504 | Blt_ConfigSpec *specsPtr; /* Style configuration specifications */
|
---|
505 | StyleConfigProc *configProc;/* Sets the GCs for style. */
|
---|
506 | StyleMeasureProc *measProc; /* Measures the area needed for the value
|
---|
507 | * with this style. */
|
---|
508 | StyleDrawProc *drawProc; /* Draw the value in it's style. */
|
---|
509 | StylePickProc *pickProc; /* Routine to pick the style's button.
|
---|
510 | * Indicates if the mouse pointer is over
|
---|
511 | * the style's button (if it has one). */
|
---|
512 | StyleEditProc *editProc; /* Routine to edit the style's value. */
|
---|
513 | StyleFreeProc *freeProc; /* Routine to free the style's resources. */
|
---|
514 | };
|
---|
515 |
|
---|
516 | /*
|
---|
517 | * TreeViewEntry --
|
---|
518 | *
|
---|
519 | * Contains data-specific information how to represent the data
|
---|
520 | * of a node of the hierarchy.
|
---|
521 | *
|
---|
522 | */
|
---|
523 | struct TreeViewEntryStruct {
|
---|
524 | Blt_TreeNode node; /* Node containing entry */
|
---|
525 | int worldX, worldY; /* X-Y position in world coordinates
|
---|
526 | * where the entry is positioned. */
|
---|
527 |
|
---|
528 | short int width, height; /* Dimensions of the entry. This
|
---|
529 | * includes the size of its
|
---|
530 | * columns. */
|
---|
531 |
|
---|
532 | int reqHeight; /* Requested height of the entry.
|
---|
533 | * Overrides computed height. */
|
---|
534 |
|
---|
535 | int vertLineLength; /* Length of the vertical line
|
---|
536 | * segment. */
|
---|
537 |
|
---|
538 | int lineHeight; /* Height of first line of text. */
|
---|
539 | unsigned int flags; /* Flags for this entry. For the
|
---|
540 | * definitions of the various bit
|
---|
541 | * fields see below. */
|
---|
542 |
|
---|
543 | UID tagsUid; /* List of binding tags for this
|
---|
544 | * entry. UID, not a string, because
|
---|
545 | * in the typical case most entries
|
---|
546 | * will have the same bindtags. */
|
---|
547 | TreeView *tvPtr;
|
---|
548 |
|
---|
549 | UID openCmd, closeCmd; /* Tcl commands to invoke when entries
|
---|
550 | * are opened or closed. They override
|
---|
551 | * those specified globally. */
|
---|
552 | /*
|
---|
553 | * Button information:
|
---|
554 | */
|
---|
555 | short int buttonX, buttonY; /* X-Y coordinate offsets from to
|
---|
556 | * upper left corner of the entry to
|
---|
557 | * the upper-left corner of the
|
---|
558 | * button. Used to pick the
|
---|
559 | * button quickly */
|
---|
560 |
|
---|
561 | TreeViewIcon *icons; /* Tk images displayed for the entry.
|
---|
562 | * The first image is the icon
|
---|
563 | * displayed to the left of the
|
---|
564 | * entry's label. The second is icon
|
---|
565 | * displayed when entry is "open". */
|
---|
566 |
|
---|
567 | TreeViewIcon *activeIcons; /* Tk images displayed for the entry.
|
---|
568 | * The first image is the icon
|
---|
569 | * displayed to the left of the
|
---|
570 | * entry's label. The second is icon
|
---|
571 | * displayed when entry is "open". */
|
---|
572 |
|
---|
573 | short int iconWidth;
|
---|
574 | short int iconHeight; /* Maximum dimensions for icons and
|
---|
575 | * buttons for this entry. This is
|
---|
576 | * used to align the button, icon, and
|
---|
577 | * text. */
|
---|
578 | /*
|
---|
579 | * Label information:
|
---|
580 | */
|
---|
581 | TextLayout *textPtr;
|
---|
582 |
|
---|
583 | short int labelWidth;
|
---|
584 | short int labelHeight;
|
---|
585 |
|
---|
586 | UID labelUid; /* Text displayed right of the icon. */
|
---|
587 |
|
---|
588 | Tk_Font font; /* Font of label. Overrides global
|
---|
589 | * font specification. */
|
---|
590 | char *fullName;
|
---|
591 |
|
---|
592 | int flatIndex;
|
---|
593 |
|
---|
594 | Tcl_Obj *dataObjPtr; /* pre-fetched data for sorting */
|
---|
595 |
|
---|
596 | XColor *color; /* Color of label. Overrides default
|
---|
597 | * text color specification. */
|
---|
598 | GC gc;
|
---|
599 |
|
---|
600 | Shadow shadow;
|
---|
601 |
|
---|
602 | TreeViewValue *values; /* List of column-related information
|
---|
603 | * for each data value in the node.
|
---|
604 | * Non-NULL only if there are value
|
---|
605 | * entries. */
|
---|
606 | };
|
---|
607 |
|
---|
608 | /*
|
---|
609 | * TreeViewButton --
|
---|
610 | *
|
---|
611 | * A button is the open/close indicator at the far left of the
|
---|
612 | * entry. It is displayed as a plus or minus in a solid
|
---|
613 | * colored box with optionally an border. It has both "active"
|
---|
614 | * and "normal" colors.
|
---|
615 | */
|
---|
616 | typedef struct {
|
---|
617 | XColor *fgColor; /* Foreground color. */
|
---|
618 |
|
---|
619 | Tk_3DBorder border; /* Background color. */
|
---|
620 |
|
---|
621 | XColor *activeFgColor; /* Active foreground color. */
|
---|
622 |
|
---|
623 | Tk_3DBorder activeBorder; /* Active background color. */
|
---|
624 |
|
---|
625 | GC normalGC;
|
---|
626 | GC activeGC;
|
---|
627 |
|
---|
628 | int reqSize;
|
---|
629 |
|
---|
630 | int borderWidth;
|
---|
631 |
|
---|
632 | int openRelief, closeRelief;
|
---|
633 |
|
---|
634 | int width, height;
|
---|
635 |
|
---|
636 | TreeViewIcon *icons;
|
---|
637 |
|
---|
638 | } TreeViewButton;
|
---|
639 |
|
---|
640 | /*
|
---|
641 | * LevelInfo --
|
---|
642 | *
|
---|
643 | */
|
---|
644 | typedef struct {
|
---|
645 | int x;
|
---|
646 | int iconWidth;
|
---|
647 | int labelWidth;
|
---|
648 | } LevelInfo;
|
---|
649 |
|
---|
650 | /*
|
---|
651 | * TreeView --
|
---|
652 | *
|
---|
653 | * A TreeView is a widget that displays an hierarchical table
|
---|
654 | * of one or more entries.
|
---|
655 | *
|
---|
656 | * Entries are positioned in "world" coordinates, referring to
|
---|
657 | * the virtual treeview. Coordinate 0,0 is the upper-left corner
|
---|
658 | * of the root entry and the bottom is the end of the last entry.
|
---|
659 | * The widget's Tk window acts as view port into this virtual
|
---|
660 | * space. The treeview's xOffset and yOffset fields specify the
|
---|
661 | * location of the view port in the virtual world. Scrolling the
|
---|
662 | * viewport is therefore simply changing the xOffset and/or
|
---|
663 | * yOffset fields and redrawing.
|
---|
664 | *
|
---|
665 | * Note that world coordinates are integers, not signed short
|
---|
666 | * integers like X11 screen coordinates. It's very easy to
|
---|
667 | * create a hierarchy taller than 0x7FFF pixels.
|
---|
668 | */
|
---|
669 | struct TreeViewStruct {
|
---|
670 | Tcl_Interp *interp;
|
---|
671 |
|
---|
672 | Tcl_Command cmdToken; /* Token for widget's Tcl command. */
|
---|
673 |
|
---|
674 | Blt_Tree tree; /* Token holding internal tree. */
|
---|
675 |
|
---|
676 | Blt_HashEntry *hashPtr;
|
---|
677 |
|
---|
678 | /* TreeView specific fields. */
|
---|
679 |
|
---|
680 | Tk_Window tkwin; /* Window that embodies the widget.
|
---|
681 | * NULL means that the window has been
|
---|
682 | * destroyed but the data structures
|
---|
683 | * haven't yet been cleaned up.*/
|
---|
684 |
|
---|
685 | Display *display; /* Display containing widget; needed,
|
---|
686 | * among other things, to release
|
---|
687 | * resources after tkwin has already
|
---|
688 | * gone away. */
|
---|
689 |
|
---|
690 | Blt_HashTable entryTable; /* Table of entry information, keyed by
|
---|
691 | * the node pointer. */
|
---|
692 |
|
---|
693 | Blt_HashTable columnTable; /* Table of column information. */
|
---|
694 | Blt_Chain *colChainPtr; /* Chain of columns. Same as the hash
|
---|
695 | * table above but maintains the order
|
---|
696 | * in which columns are displayed. */
|
---|
697 |
|
---|
698 | unsigned int flags; /* For bitfield definitions, see below */
|
---|
699 |
|
---|
700 | int inset; /* Total width of all borders,
|
---|
701 | * including traversal highlight and
|
---|
702 | * 3-D border. Indicates how much
|
---|
703 | * interior stuff must be offset from
|
---|
704 | * outside edges to leave room for
|
---|
705 | * borders. */
|
---|
706 |
|
---|
707 | Tk_Font font;
|
---|
708 | XColor *fgColor;
|
---|
709 |
|
---|
710 | Tk_3DBorder border; /* 3D border surrounding the window
|
---|
711 | * (viewport). */
|
---|
712 |
|
---|
713 | int borderWidth; /* Width of 3D border. */
|
---|
714 |
|
---|
715 | int relief; /* 3D border relief. */
|
---|
716 |
|
---|
717 |
|
---|
718 | int highlightWidth; /* Width in pixels of highlight to
|
---|
719 | * draw around widget when it has the
|
---|
720 | * focus. <= 0 means don't draw a
|
---|
721 | * highlight. */
|
---|
722 |
|
---|
723 | XColor *highlightBgColor; /* Color for drawing traversal
|
---|
724 | * highlight area when highlight is
|
---|
725 | * off. */
|
---|
726 |
|
---|
727 | XColor *highlightColor; /* Color for drawing traversal highlight. */
|
---|
728 |
|
---|
729 | char *pathSep; /* Pathname separators */
|
---|
730 |
|
---|
731 | char *trimLeft; /* Leading characters to trim from
|
---|
732 | * pathnames */
|
---|
733 |
|
---|
734 | /*
|
---|
735 | * Entries are connected by horizontal and vertical lines. They
|
---|
736 | * may be drawn dashed or solid.
|
---|
737 | */
|
---|
738 | int lineWidth; /* Width of lines connecting entries */
|
---|
739 |
|
---|
740 | int dashes; /* Dash on-off value. */
|
---|
741 |
|
---|
742 | XColor *lineColor; /* Color of connecting lines. */
|
---|
743 |
|
---|
744 | /*
|
---|
745 | * Button Information:
|
---|
746 | *
|
---|
747 | * The button is the open/close indicator at the far left of the
|
---|
748 | * entry. It is usually displayed as a plus or minus in a solid
|
---|
749 | * colored box with optionally an border. It has both "active" and
|
---|
750 | * "normal" colors.
|
---|
751 | */
|
---|
752 | TreeViewButton button;
|
---|
753 |
|
---|
754 | /*
|
---|
755 | * Selection Information:
|
---|
756 | *
|
---|
757 | * The selection is the rectangle that contains a selected entry.
|
---|
758 | * There may be many selected entries. It is displayed as a solid
|
---|
759 | * colored box with optionally a 3D border.
|
---|
760 | */
|
---|
761 | int selRelief; /* Relief of selected items. Currently
|
---|
762 | * is always raised. */
|
---|
763 |
|
---|
764 | int selBorderWidth; /* Border width of a selected entry.*/
|
---|
765 |
|
---|
766 | XColor *selInFocusFgColor; /* Text color of a selected entry. */
|
---|
767 | XColor *selOutFocusFgColor;
|
---|
768 |
|
---|
769 | Tk_3DBorder selInFocusBorder;
|
---|
770 | Tk_3DBorder selOutFocusBorder;
|
---|
771 |
|
---|
772 |
|
---|
773 | TreeViewEntry *selAnchorPtr; /* Fixed end of selection (i.e. entry
|
---|
774 | * at which selection was started.) */
|
---|
775 | TreeViewEntry *selMarkPtr;
|
---|
776 |
|
---|
777 | int selectMode; /* Selection style: "single" or
|
---|
778 | * "multiple". */
|
---|
779 |
|
---|
780 | char *selectCmd; /* Tcl script that's invoked whenever
|
---|
781 | * the selection changes. */
|
---|
782 |
|
---|
783 | Blt_HashTable selectTable; /* Hash table of currently selected
|
---|
784 | * entries. */
|
---|
785 |
|
---|
786 | Blt_Chain *selChainPtr; /* Chain of currently selected
|
---|
787 | * entries. Contains the same
|
---|
788 | * information as the above hash
|
---|
789 | * table, but maintains the order in
|
---|
790 | * which entries are selected.
|
---|
791 | */
|
---|
792 |
|
---|
793 | int leader; /* Number of pixels padding between
|
---|
794 | * entries. */
|
---|
795 |
|
---|
796 | Tk_Cursor cursor; /* X Cursor */
|
---|
797 |
|
---|
798 | Tk_Cursor resizeCursor; /* Resize Cursor */
|
---|
799 |
|
---|
800 | int reqWidth, reqHeight; /* Requested dimensions of the
|
---|
801 | * treeview widget's window. */
|
---|
802 |
|
---|
803 | GC lineGC; /* GC for drawing dotted line between
|
---|
804 | * entries. */
|
---|
805 |
|
---|
806 | XColor *focusColor;
|
---|
807 |
|
---|
808 | Blt_Dashes focusDashes; /* Dash on-off value. */
|
---|
809 |
|
---|
810 | GC focusGC; /* Graphics context for the active
|
---|
811 | * label. */
|
---|
812 |
|
---|
813 | Tk_Window comboWin;
|
---|
814 |
|
---|
815 | TreeViewEntry *activePtr; /* Last active entry. */
|
---|
816 |
|
---|
817 | TreeViewEntry *focusPtr; /* Entry that currently has focus. */
|
---|
818 |
|
---|
819 | TreeViewEntry *activeButtonPtr; /* Pointer to last active button */
|
---|
820 |
|
---|
821 | TreeViewEntry *fromPtr;
|
---|
822 |
|
---|
823 | TreeViewValue *activeValuePtr;/* Last active value. */
|
---|
824 |
|
---|
825 | int xScrollUnits, yScrollUnits; /* # of pixels per scroll unit. */
|
---|
826 |
|
---|
827 | /* Command strings to control horizontal and vertical
|
---|
828 | * scrollbars. */
|
---|
829 | char *xScrollCmdPrefix, *yScrollCmdPrefix;
|
---|
830 |
|
---|
831 | int scrollMode; /* Selects mode of scrolling: either
|
---|
832 | * BLT_SCROLL_MODE_HIERBOX,
|
---|
833 | * BLT_SCROLL_MODE_LISTBOX,
|
---|
834 | * or BLT_SCROLL_MODE_CANVAS. */
|
---|
835 | /*
|
---|
836 | * Total size of all "open" entries. This represents the range of
|
---|
837 | * world coordinates.
|
---|
838 | */
|
---|
839 | int worldWidth, worldHeight;
|
---|
840 |
|
---|
841 | int xOffset, yOffset; /* Translation between view port and
|
---|
842 | * world origin. */
|
---|
843 |
|
---|
844 | short int minHeight; /* Minimum entry height. Used to to
|
---|
845 | * compute what the y-scroll unit
|
---|
846 | * should be. */
|
---|
847 | short int titleHeight; /* Height of column titles. */
|
---|
848 |
|
---|
849 | LevelInfo *levelInfo;
|
---|
850 |
|
---|
851 | /*
|
---|
852 | * Scanning information:
|
---|
853 | */
|
---|
854 | int scanAnchorX, scanAnchorY;
|
---|
855 | /* Scan anchor in screen coordinates. */
|
---|
856 | int scanX, scanY; /* X-Y world coordinate where the scan
|
---|
857 | * started. */
|
---|
858 |
|
---|
859 | Blt_HashTable iconTable; /* Table of Tk images */
|
---|
860 |
|
---|
861 | Blt_HashTable uidTable; /* Table of strings. */
|
---|
862 |
|
---|
863 | Blt_HashTable styleTable; /* Table of cell styles. */
|
---|
864 |
|
---|
865 | TreeViewEntry *rootPtr; /* Root entry of tree. */
|
---|
866 |
|
---|
867 | TreeViewEntry **visibleArr; /* Array of visible entries */
|
---|
868 |
|
---|
869 | int nVisible; /* Number of entries in the above array */
|
---|
870 |
|
---|
871 | int nEntries; /* Number of entries in tree. */
|
---|
872 | int treeWidth; /* Computed width of the tree. */
|
---|
873 |
|
---|
874 | int buttonFlags; /* Global button indicator for all
|
---|
875 | * entries. This may be overridden by
|
---|
876 | * the entry's -button option. */
|
---|
877 |
|
---|
878 | char *openCmd, *closeCmd; /* Tcl commands to invoke when entries
|
---|
879 | * are opened or closed. */
|
---|
880 |
|
---|
881 | TreeViewIcon *icons; /* Tk images displayed for the entry.
|
---|
882 | * The first image is the icon
|
---|
883 | * displayed to the left of the
|
---|
884 | * entry's label. The second is icon
|
---|
885 | * displayed when entry is "open". */
|
---|
886 | TreeViewIcon *activeIcons; /* Tk images displayed for the entry.
|
---|
887 | * The first image is the icon
|
---|
888 | * displayed to the left of the
|
---|
889 | * entry's label. The second is icon
|
---|
890 | * displayed when entry is "open". */
|
---|
891 | char *takeFocus;
|
---|
892 |
|
---|
893 | ClientData clientData;
|
---|
894 |
|
---|
895 | Blt_BindTable bindTable; /* Binding information for entries. */
|
---|
896 |
|
---|
897 | Blt_HashTable entryTagTable;
|
---|
898 | Blt_HashTable buttonTagTable;
|
---|
899 | Blt_HashTable columnTagTable;
|
---|
900 | Blt_HashTable styleTagTable;
|
---|
901 |
|
---|
902 | TreeViewStyle *stylePtr; /* Default style for text cells */
|
---|
903 |
|
---|
904 | TreeViewColumn treeColumn;
|
---|
905 |
|
---|
906 | TreeViewColumn *activeColumnPtr;
|
---|
907 | TreeViewColumn *activeTitleColumnPtr;
|
---|
908 | /* Column title currently active. */
|
---|
909 |
|
---|
910 | TreeViewColumn *resizeColumnPtr;
|
---|
911 | /* Column that is being resized. */
|
---|
912 |
|
---|
913 | int depth;
|
---|
914 |
|
---|
915 | int flatView; /* Indicates if the view of the tree
|
---|
916 | * has been flattened. */
|
---|
917 |
|
---|
918 | TreeViewEntry **flatArr; /* Flattened array of entries. */
|
---|
919 |
|
---|
920 | char *sortField; /* Field to be sorted. */
|
---|
921 |
|
---|
922 | int sortType; /* Type of sorting to be performed. See
|
---|
923 | * below for valid values. */
|
---|
924 |
|
---|
925 | char *sortCmd; /* Sort command. */
|
---|
926 |
|
---|
927 | int sortDecreasing; /* Indicates entries should be sorted
|
---|
928 | * in decreasing order. */
|
---|
929 |
|
---|
930 | int viewIsDecreasing; /* Current sorting direction */
|
---|
931 |
|
---|
932 | TreeViewColumn *sortColumnPtr;/* Column to use for sorting criteria. */
|
---|
933 |
|
---|
934 | #ifdef notdef
|
---|
935 | Pixmap drawable; /* Pixmap used to cache the entries
|
---|
936 | * displayed. The pixmap is saved so
|
---|
937 | * that only selected elements can be
|
---|
938 | * drawn quicky. */
|
---|
939 |
|
---|
940 | short int drawWidth, drawHeight;
|
---|
941 | #endif
|
---|
942 | short int ruleAnchor, ruleMark;
|
---|
943 |
|
---|
944 | Blt_Pool entryPool;
|
---|
945 | Blt_Pool valuePool;
|
---|
946 | };
|
---|
947 |
|
---|
948 |
|
---|
949 | extern UID Blt_TreeViewGetUid _ANSI_ARGS_((TreeView *tvPtr,
|
---|
950 | CONST char *string));
|
---|
951 | extern void Blt_TreeViewFreeUid _ANSI_ARGS_((TreeView *tvPtr, UID uid));
|
---|
952 |
|
---|
953 | extern void Blt_TreeViewEventuallyRedraw _ANSI_ARGS_((TreeView *tvPtr));
|
---|
954 | extern Tcl_ObjCmdProc Blt_TreeViewWidgetInstCmd;
|
---|
955 | extern TreeViewEntry *Blt_TreeViewNearestEntry _ANSI_ARGS_((TreeView *tvPtr,
|
---|
956 | int x, int y, int flags));
|
---|
957 | extern char *Blt_TreeViewGetFullName _ANSI_ARGS_((TreeView *tvPtr,
|
---|
958 | TreeViewEntry *entryPtr, int checkEntryLabel, Tcl_DString *dsPtr));
|
---|
959 | extern void Blt_TreeViewSelectCmdProc _ANSI_ARGS_((ClientData clientData));
|
---|
960 | extern void Blt_TreeViewInsertText _ANSI_ARGS_((TreeView *tvPtr,
|
---|
961 | TreeViewEntry *entryPtr, char *string, int extra, int insertPos));
|
---|
962 | extern void Blt_TreeViewComputeLayout _ANSI_ARGS_((TreeView *tvPtr));
|
---|
963 | extern void Blt_TreeViewPercentSubst _ANSI_ARGS_((TreeView *tvPtr,
|
---|
964 | TreeViewEntry *entryPtr, char *command, Tcl_DString *resultPtr));
|
---|
965 | extern void Blt_TreeViewDrawButton _ANSI_ARGS_((TreeView *tvPtr,
|
---|
966 | TreeViewEntry *entryPtr, Drawable drawable, int x, int y));
|
---|
967 | extern void Blt_TreeViewDrawValue _ANSI_ARGS_((TreeView *tvPtr,
|
---|
968 | TreeViewEntry *entryPtr, TreeViewValue *valuePtr, Drawable drawable,
|
---|
969 | int x, int y));
|
---|
970 | extern void Blt_TreeViewDrawOuterBorders _ANSI_ARGS_((TreeView *tvPtr,
|
---|
971 | Drawable drawable));
|
---|
972 | extern int Blt_TreeViewDrawIcon _ANSI_ARGS_((TreeView *tvPtr,
|
---|
973 | TreeViewEntry *entryPtr, Drawable drawable, int x, int y));
|
---|
974 | extern void Blt_TreeViewDrawHeadings _ANSI_ARGS_((TreeView *tvPtr,
|
---|
975 | Drawable drawable));
|
---|
976 | extern void Blt_TreeViewDrawRule _ANSI_ARGS_((TreeView *tvPtr,
|
---|
977 | TreeViewColumn *columnPtr, Drawable drawable));
|
---|
978 |
|
---|
979 | extern void Blt_TreeViewConfigureButtons _ANSI_ARGS_((TreeView *tvPtr));
|
---|
980 | extern int Blt_TreeViewUpdateWidget _ANSI_ARGS_((Tcl_Interp *interp,
|
---|
981 | TreeView *tvPtr));
|
---|
982 | extern int Blt_TreeViewScreenToIndex _ANSI_ARGS_((TreeView *tvPtr,
|
---|
983 | int x, int y));
|
---|
984 |
|
---|
985 | extern void Blt_TreeViewFreeIcon _ANSI_ARGS_((TreeView *tvPtr,
|
---|
986 | TreeViewIcon icon));
|
---|
987 | extern TreeViewIcon Blt_TreeViewGetIcon _ANSI_ARGS_((TreeView *tvPtr,
|
---|
988 | CONST char *iconName));
|
---|
989 | extern void Blt_TreeViewAddValue _ANSI_ARGS_((TreeViewEntry *entryPtr,
|
---|
990 | TreeViewColumn *columnPtr));
|
---|
991 | extern int Blt_TreeViewCreateColumn _ANSI_ARGS_((TreeView *tvPtr,
|
---|
992 | TreeViewColumn *columnPtr, char *name, char *defaultLabel));
|
---|
993 | extern void Blt_TreeViewDestroyValue _ANSI_ARGS_((TreeView *tvPtr,
|
---|
994 | TreeViewValue *valuePtr));
|
---|
995 | extern TreeViewValue *Blt_TreeViewFindValue _ANSI_ARGS_((
|
---|
996 | TreeViewEntry *entryPtr, TreeViewColumn *columnPtr));
|
---|
997 | extern void Blt_TreeViewDestroyColumns _ANSI_ARGS_((TreeView *tvPtr));
|
---|
998 | extern void Blt_TreeViewAllocateColumnUids _ANSI_ARGS_((TreeView *tvPtr));
|
---|
999 | extern void Blt_TreeViewFreeColumnUids _ANSI_ARGS_((TreeView *tvPtr));
|
---|
1000 | extern void Blt_TreeViewUpdateColumnGCs _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1001 | TreeViewColumn *columnPtr));
|
---|
1002 | extern TreeViewColumn *Blt_TreeViewNearestColumn _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1003 | int x, int y, ClientData *contextPtr));
|
---|
1004 |
|
---|
1005 | extern void Blt_TreeViewDrawRule _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1006 | TreeViewColumn *columnPtr, Drawable drawable));
|
---|
1007 | extern int Blt_TreeViewTextOp _ANSI_ARGS_((TreeView *tvPtr, Tcl_Interp *interp,
|
---|
1008 | int objc, Tcl_Obj *CONST *objv));
|
---|
1009 | extern int Blt_TreeViewCombobox _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1010 | TreeViewEntry *entryPtr, TreeViewColumn *columnPtr));
|
---|
1011 | extern int Blt_TreeViewCreateEntry _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1012 | Blt_TreeNode node, int objc, Tcl_Obj *CONST *objv, int flags));
|
---|
1013 | extern int Blt_TreeViewConfigureEntry _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1014 | TreeViewEntry *entryPtr, int objc, Tcl_Obj *CONST *objv, int flags));
|
---|
1015 | extern int Blt_TreeViewOpenEntry _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1016 | TreeViewEntry *entryPtr));
|
---|
1017 | extern int Blt_TreeViewCloseEntry _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1018 | TreeViewEntry *entryPtr));
|
---|
1019 | extern TreeViewEntry *Blt_TreeViewNextEntry _ANSI_ARGS_((
|
---|
1020 | TreeViewEntry *entryPtr, unsigned int mask));
|
---|
1021 | extern TreeViewEntry *Blt_TreeViewPrevEntry _ANSI_ARGS_((
|
---|
1022 | TreeViewEntry *entryPtr, unsigned int mask));
|
---|
1023 | extern int Blt_TreeViewGetEntry _ANSI_ARGS_((TreeView *tvPtr, Tcl_Obj *objPtr,
|
---|
1024 | TreeViewEntry **entryPtrPtr));
|
---|
1025 | extern int Blt_TreeViewEntryIsHidden _ANSI_ARGS_((TreeViewEntry *entryPtr));
|
---|
1026 | extern TreeViewEntry *Blt_TreeViewNextSibling _ANSI_ARGS_((
|
---|
1027 | TreeViewEntry *entryPtr, unsigned int mask));
|
---|
1028 | extern TreeViewEntry *Blt_TreeViewPrevSibling _ANSI_ARGS_((
|
---|
1029 | TreeViewEntry *entryPtr, unsigned int mask));
|
---|
1030 | extern TreeViewEntry *Blt_TreeViewFirstChild _ANSI_ARGS_((
|
---|
1031 | TreeViewEntry *parentPtr, unsigned int mask));
|
---|
1032 | extern TreeViewEntry *Blt_TreeViewLastChild _ANSI_ARGS_((
|
---|
1033 | TreeViewEntry *entryPtr, unsigned int mask));
|
---|
1034 | extern TreeViewEntry *Blt_TreeViewParentEntry _ANSI_ARGS_((
|
---|
1035 | TreeViewEntry *entryPtr));
|
---|
1036 |
|
---|
1037 | typedef int (TreeViewApplyProc) _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1038 | TreeViewEntry *entryPtr));
|
---|
1039 |
|
---|
1040 | extern int Blt_TreeViewApply _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1041 | TreeViewEntry *entryPtr, TreeViewApplyProc *proc, unsigned int mask));
|
---|
1042 |
|
---|
1043 | extern int Blt_TreeViewColumnOp _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1044 | Tcl_Interp *interp, int objc, Tcl_Obj *CONST *objv));
|
---|
1045 | extern int Blt_TreeViewSortOp _ANSI_ARGS_((TreeView *tvPtr, Tcl_Interp *interp,
|
---|
1046 | int objc, Tcl_Obj *CONST *objv));
|
---|
1047 | extern int Blt_TreeViewGetColumn _ANSI_ARGS_((Tcl_Interp *interp,
|
---|
1048 | TreeView *tvPtr, Tcl_Obj *objPtr, TreeViewColumn **columnPtrPtr));
|
---|
1049 |
|
---|
1050 | extern void Blt_TreeViewSortFlatView _ANSI_ARGS_((TreeView *tvPtr));
|
---|
1051 | extern void Blt_TreeViewSortTreeView _ANSI_ARGS_((TreeView *tvPtr));
|
---|
1052 |
|
---|
1053 | extern int Blt_TreeViewEntryIsSelected _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1054 | TreeViewEntry *entryPtr));
|
---|
1055 | extern void Blt_TreeViewSelectEntry _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1056 | TreeViewEntry *entryPtr));
|
---|
1057 | extern void Blt_TreeViewDeselectEntry _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1058 | TreeViewEntry *entryPtr));
|
---|
1059 | extern void Blt_TreeViewPruneSelection _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1060 | TreeViewEntry *entryPtr));
|
---|
1061 | extern void Blt_TreeViewClearSelection _ANSI_ARGS_((TreeView *tvPtr));
|
---|
1062 | extern void Blt_TreeViewClearTags _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1063 | TreeViewEntry *entryPtr));
|
---|
1064 | extern int Blt_TreeViewFindTaggedEntries _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1065 | Tcl_Obj *objPtr, TreeViewTagInfo *infoPtr));
|
---|
1066 | extern TreeViewEntry *Blt_TreeViewFirstTaggedEntry _ANSI_ARGS_((
|
---|
1067 | TreeViewTagInfo *infoPtr));
|
---|
1068 | extern TreeViewEntry *Blt_TreeViewNextTaggedEntry _ANSI_ARGS_((
|
---|
1069 | TreeViewTagInfo *infoPtr));
|
---|
1070 | extern ClientData Blt_TreeViewButtonTag _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1071 | CONST char *string));
|
---|
1072 | extern ClientData Blt_TreeViewEntryTag _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1073 | CONST char *string));
|
---|
1074 | extern ClientData Blt_TreeViewColumnTag _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1075 | CONST char *string));
|
---|
1076 | extern void Blt_TreeViewGetTags _ANSI_ARGS_((Tcl_Interp *interp,
|
---|
1077 | TreeView *tvPtr, TreeViewEntry *entryPtr, Blt_List list));
|
---|
1078 | extern void Blt_TreeViewTraceColumn _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1079 | TreeViewColumn *columnPtr));
|
---|
1080 | extern TreeViewIcon Blt_TreeViewGetEntryIcon _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1081 | TreeViewEntry *entryPtr));
|
---|
1082 | extern void Blt_TreeViewSetStyleIcon _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1083 | TreeViewStyle *stylePtr, TreeViewIcon icon));
|
---|
1084 | extern int Blt_TreeViewGetStyle _ANSI_ARGS_((Tcl_Interp *interp,
|
---|
1085 | TreeView *tvPtr, char *styleName, TreeViewStyle **stylePtrPtr));
|
---|
1086 | extern void Blt_TreeViewFreeStyle _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1087 | TreeViewStyle *stylePtr));
|
---|
1088 | extern TreeViewStyle *Blt_TreeViewCreateStyle _ANSI_ARGS_((Tcl_Interp *interp,
|
---|
1089 | TreeView *tvPtr, int type, char *styleName));
|
---|
1090 | extern void Blt_TreeViewUpdateStyleGCs _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1091 | TreeViewStyle *stylePtr));
|
---|
1092 | extern Tk_3DBorder Blt_TreeViewGetStyleBorder _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1093 | TreeViewStyle *stylePtr));
|
---|
1094 | extern GC Blt_TreeViewGetStyleGC _ANSI_ARGS_((TreeViewStyle *stylePtr));
|
---|
1095 | extern Tk_Font Blt_TreeViewGetStyleFont _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1096 | TreeViewStyle *stylePtr));
|
---|
1097 | extern XColor *Blt_TreeViewGetStyleFg _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1098 | TreeViewStyle *stylePtr));
|
---|
1099 | extern TreeViewEntry *Blt_NodeToEntry _ANSI_ARGS_((TreeView *tvPtr,
|
---|
1100 | Blt_TreeNode node));
|
---|
1101 | extern int Blt_TreeViewStyleOp _ANSI_ARGS_((TreeView *tvPtr, Tcl_Interp *interp,
|
---|
1102 | int objc, Tcl_Obj *CONST *objv));
|
---|
1103 |
|
---|
1104 | #define CHOOSE(default, override) \
|
---|
1105 | (((override) == NULL) ? (default) : (override))
|
---|
1106 |
|
---|
1107 | #define GETLABEL(e) \
|
---|
1108 | (((e)->labelUid != NULL) ? (e)->labelUid : Blt_TreeNodeLabel((e)->node))
|
---|
1109 |
|
---|
1110 | #define Blt_TreeViewGetData(entryPtr, key, objPtrPtr) \
|
---|
1111 | Blt_TreeGetValueByKey((Tcl_Interp *)NULL, (entryPtr)->tvPtr->tree, \
|
---|
1112 | (entryPtr)->node, key, objPtrPtr)
|
---|
1113 |
|
---|
1114 | #endif /* BLT_TREEVIEW_H */
|
---|