1 |
/* $Header$ */ |
2 |
|
3 |
/* |
4 |
* tkMenu.h -- |
5 |
* |
6 |
* Declarations shared among all of the files that implement menu widgets. |
7 |
* |
8 |
* Copyright (c) 1996-1998 by Sun Microsystems, Inc. |
9 |
* |
10 |
* See the file "license.terms" for information on usage and redistribution |
11 |
* of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
12 |
* |
13 |
* RCS: @(#) $Id: tkmenu.h,v 1.1.1.1 2001/06/13 05:05:47 dtashley Exp $ |
14 |
*/ |
15 |
|
16 |
#ifndef _TKMENU |
17 |
#define _TKMENU |
18 |
|
19 |
#ifndef _TK |
20 |
#include "tk.h" |
21 |
#endif |
22 |
|
23 |
#ifndef _TKINT |
24 |
#include "tkInt.h" |
25 |
#endif |
26 |
|
27 |
#ifndef _DEFAULT |
28 |
#include "default.h" |
29 |
#endif |
30 |
|
31 |
#ifdef BUILD_tk |
32 |
# undef TCL_STORAGE_CLASS |
33 |
# define TCL_STORAGE_CLASS DLLEXPORT |
34 |
#endif |
35 |
|
36 |
/* |
37 |
* Dummy types used by the platform menu code. |
38 |
*/ |
39 |
|
40 |
typedef struct TkMenuPlatformData_ *TkMenuPlatformData; |
41 |
typedef struct TkMenuPlatformEntryData_ *TkMenuPlatformEntryData; |
42 |
|
43 |
/* |
44 |
* One of the following data structures is kept for each entry of each |
45 |
* menu managed by this file: |
46 |
*/ |
47 |
|
48 |
typedef struct TkMenuEntry { |
49 |
int type; /* Type of menu entry; see below for |
50 |
* valid types. */ |
51 |
struct TkMenu *menuPtr; /* Menu with which this entry is associated. */ |
52 |
Tk_OptionTable optionTable; /* Option table for this menu entry. */ |
53 |
Tcl_Obj *labelPtr; /* Main text label displayed in entry (NULL |
54 |
* if no label). */ |
55 |
int labelLength; /* Number of non-NULL characters in label. */ |
56 |
int state; /* State of button for display purposes: |
57 |
* normal, active, or disabled. */ |
58 |
int underline; /* Value of -underline option: specifies index |
59 |
* of character to underline (<0 means don't |
60 |
* underline anything). */ |
61 |
Tcl_Obj *underlinePtr; /* Index of character to underline. */ |
62 |
Tcl_Obj *bitmapPtr; /* Bitmap to display in menu entry, or None. |
63 |
* If not None then label is ignored. */ |
64 |
Tcl_Obj *imagePtr; /* Name of image to display, or |
65 |
* NULL. If non-NULL, bitmap, text, and |
66 |
* textVarName are ignored. */ |
67 |
Tk_Image image; /* Image to display in menu entry, or NULL if |
68 |
* none. */ |
69 |
Tcl_Obj *selectImagePtr; /* Name of image to display when selected, or |
70 |
* NULL. */ |
71 |
Tk_Image selectImage; /* Image to display in entry when selected, |
72 |
* or NULL if none. Ignored if image is |
73 |
* NULL. */ |
74 |
Tcl_Obj *accelPtr; /* Accelerator string displayed at right |
75 |
* of menu entry. NULL means no such |
76 |
* accelerator. Malloc'ed. */ |
77 |
int accelLength; /* Number of non-NULL characters in |
78 |
* accelerator. */ |
79 |
int indicatorOn; /* True means draw indicator, false means |
80 |
* don't draw it. This field is ignored unless |
81 |
* the entry is a radio or check button. */ |
82 |
/* |
83 |
* Display attributes |
84 |
*/ |
85 |
|
86 |
Tcl_Obj *borderPtr; /* Structure used to draw background for |
87 |
* entry. NULL means use overall border |
88 |
* for menu. */ |
89 |
Tcl_Obj *fgPtr; /* Foreground color to use for entry. NULL |
90 |
* means use foreground color from menu. */ |
91 |
Tcl_Obj *activeBorderPtr; /* Used to draw background and border when |
92 |
* element is active. NULL means use |
93 |
* activeBorder from menu. */ |
94 |
Tcl_Obj *activeFgPtr; /* Foreground color to use when entry is |
95 |
* active. NULL means use active foreground |
96 |
* from menu. */ |
97 |
Tcl_Obj *indicatorFgPtr; /* Color for indicators in radio and check |
98 |
* button entries. NULL means use indicatorFg |
99 |
* GC from menu. */ |
100 |
Tcl_Obj *fontPtr; /* Text font for menu entries. NULL means |
101 |
* use overall font for menu. */ |
102 |
int columnBreak; /* If this is 0, this item appears below |
103 |
* the item in front of it. If this is |
104 |
* 1, this item starts a new column. This |
105 |
* field is always 0 for tearoff and separator |
106 |
* entries. */ |
107 |
int hideMargin; /* If this is 0, then the item has enough |
108 |
* margin to accomodate a standard check mark |
109 |
* and a default right margin. If this is 1, |
110 |
* then the item has no such margins. and |
111 |
* checkbuttons and radiobuttons with this set |
112 |
* will have a rectangle drawn in the indicator |
113 |
* around the item if the item is checked. This |
114 |
* is useful for palette menus. This field is |
115 |
* ignored for separators and tearoffs. */ |
116 |
int indicatorSpace; /* The width of the indicator space for this |
117 |
* entry. */ |
118 |
int labelWidth; /* Number of pixels to allow for displaying |
119 |
* labels in menu entries. */ |
120 |
|
121 |
/* |
122 |
* Information used to implement this entry's action: |
123 |
*/ |
124 |
|
125 |
Tcl_Obj *commandPtr; /* Command to invoke when entry is invoked. |
126 |
* Malloc'ed. */ |
127 |
Tcl_Obj *namePtr; /* Name of variable (for check buttons and |
128 |
* radio buttons) or menu (for cascade |
129 |
* entries). Malloc'ed.*/ |
130 |
Tcl_Obj *onValuePtr; /* Value to store in variable when selected |
131 |
* (only for radio and check buttons). |
132 |
* Malloc'ed. */ |
133 |
Tcl_Obj *offValuePtr; /* Value to store in variable when not |
134 |
* selected (only for check buttons). |
135 |
* Malloc'ed. */ |
136 |
|
137 |
/* |
138 |
* Information used for drawing this menu entry. |
139 |
*/ |
140 |
|
141 |
int width; /* Number of pixels occupied by entry in |
142 |
* horizontal dimension. Not used except |
143 |
* in menubars. The width of norma menus |
144 |
* is dependent on the rest of the menu. */ |
145 |
int x; /* X-coordinate of leftmost pixel in entry */ |
146 |
int height; /* Number of pixels occupied by entry in |
147 |
* vertical dimension, including raised |
148 |
* border drawn around entry when active. */ |
149 |
int y; /* Y-coordinate of topmost pixel in entry. */ |
150 |
GC textGC; /* GC for drawing text in entry. NULL means |
151 |
* use overall textGC for menu. */ |
152 |
GC activeGC; /* GC for drawing text in entry when active. |
153 |
* NULL means use overall activeGC for |
154 |
* menu. */ |
155 |
GC disabledGC; /* Used to produce disabled effect for entry. |
156 |
* NULL means use overall disabledGC from |
157 |
* menu structure. See comments for |
158 |
* disabledFg in menu structure for more |
159 |
* information. */ |
160 |
GC indicatorGC; /* For drawing indicators. None means use |
161 |
* GC from menu. */ |
162 |
|
163 |
/* |
164 |
* Miscellaneous fields. |
165 |
*/ |
166 |
|
167 |
int entryFlags; /* Various flags. See below for |
168 |
definitions. */ |
169 |
int index; /* Need to know which index we are. This |
170 |
* is zero-based. This is the top-left entry |
171 |
* of the menu. */ |
172 |
|
173 |
/* |
174 |
* Bookeeping for master menus and cascade menus. |
175 |
*/ |
176 |
|
177 |
struct TkMenuReferences *childMenuRefPtr; |
178 |
/* A pointer to the hash table entry for |
179 |
* the child menu. Stored here when the menu |
180 |
* entry is configured so that a hash lookup |
181 |
* is not necessary later.*/ |
182 |
struct TkMenuEntry *nextCascadePtr; |
183 |
/* The next cascade entry that is a parent of |
184 |
* this entry's child cascade menu. NULL |
185 |
* end of list, this is not a cascade entry, |
186 |
* or the menu that this entry point to |
187 |
* does not yet exist. */ |
188 |
TkMenuPlatformEntryData platformEntryData; |
189 |
/* The data for the specific type of menu. |
190 |
* Depends on platform and menu type what |
191 |
* kind of options are in this structure. |
192 |
*/ |
193 |
} TkMenuEntry; |
194 |
|
195 |
/* |
196 |
* Flag values defined for menu entries: |
197 |
* |
198 |
* ENTRY_SELECTED: Non-zero means this is a radio or check |
199 |
* button and that it should be drawn in |
200 |
* the "selected" state. |
201 |
* ENTRY_NEEDS_REDISPLAY: Non-zero means the entry should be redisplayed. |
202 |
* ENTRY_LAST_COLUMN: Used by the drawing code. If the entry is in |
203 |
* the last column, the space to its right needs |
204 |
* to be filled. |
205 |
* ENTRY_PLATFORM_FLAG1 - 4 These flags are reserved for use by the |
206 |
* platform-dependent implementation of menus |
207 |
* and should not be used by anything else. |
208 |
*/ |
209 |
|
210 |
#define ENTRY_SELECTED 1 |
211 |
#define ENTRY_NEEDS_REDISPLAY 2 |
212 |
#define ENTRY_LAST_COLUMN 4 |
213 |
#define ENTRY_PLATFORM_FLAG1 (1 << 30) |
214 |
#define ENTRY_PLATFORM_FLAG2 (1 << 29) |
215 |
#define ENTRY_PLATFORM_FLAG3 (1 << 28) |
216 |
#define ENTRY_PLATFORM_FLAG4 (1 << 27) |
217 |
|
218 |
/* |
219 |
* Types defined for MenuEntries: |
220 |
*/ |
221 |
|
222 |
#define CASCADE_ENTRY 0 |
223 |
#define CHECK_BUTTON_ENTRY 1 |
224 |
#define COMMAND_ENTRY 2 |
225 |
#define RADIO_BUTTON_ENTRY 3 |
226 |
#define SEPARATOR_ENTRY 4 |
227 |
#define TEAROFF_ENTRY 5 |
228 |
|
229 |
/* |
230 |
* Menu states |
231 |
*/ |
232 |
|
233 |
extern char *tkMenuStateStrings[]; |
234 |
|
235 |
#define ENTRY_ACTIVE 0 |
236 |
#define ENTRY_NORMAL 1 |
237 |
#define ENTRY_DISABLED 2 |
238 |
|
239 |
/* |
240 |
* A data structure of the following type is kept for each |
241 |
* menu widget: |
242 |
*/ |
243 |
|
244 |
typedef struct TkMenu { |
245 |
Tk_Window tkwin; /* Window that embodies the pane. NULL |
246 |
* means that the window has been destroyed |
247 |
* but the data structures haven't yet been |
248 |
* cleaned up.*/ |
249 |
Display *display; /* Display containing widget. Needed, among |
250 |
* other things, so that resources can be |
251 |
* freed up even after tkwin has gone away. */ |
252 |
Tcl_Interp *interp; /* Interpreter associated with menu. */ |
253 |
Tcl_Command widgetCmd; /* Token for menu's widget command. */ |
254 |
TkMenuEntry **entries; /* Array of pointers to all the entries |
255 |
* in the menu. NULL means no entries. */ |
256 |
int numEntries; /* Number of elements in entries. */ |
257 |
int active; /* Index of active entry. -1 means |
258 |
* nothing active. */ |
259 |
int menuType; /* MASTER_MENU, TEAROFF_MENU, or MENUBAR. |
260 |
* See below for definitions. */ |
261 |
Tcl_Obj *menuTypePtr; /* Used to control whether created tkwin |
262 |
* is a toplevel or not. "normal", "menubar", |
263 |
* or "toplevel" */ |
264 |
|
265 |
/* |
266 |
* Information used when displaying widget: |
267 |
*/ |
268 |
|
269 |
Tcl_Obj *borderPtr; /* Structure used to draw 3-D |
270 |
* border and background for menu. */ |
271 |
Tcl_Obj *borderWidthPtr; /* Width of border around whole menu. */ |
272 |
Tcl_Obj *activeBorderPtr; /* Used to draw background and border for |
273 |
* active element (if any). */ |
274 |
Tcl_Obj *activeBorderWidthPtr; |
275 |
/* Width of border around active element. */ |
276 |
Tcl_Obj *reliefPtr; /* 3-d effect: TK_RELIEF_RAISED, etc. */ |
277 |
Tcl_Obj *fontPtr; /* Text font for menu entries. */ |
278 |
Tcl_Obj *fgPtr; /* Foreground color for entries. */ |
279 |
Tcl_Obj *disabledFgPtr; /* Foreground color when disabled. NULL |
280 |
* means use normalFg with a 50% stipple |
281 |
* instead. */ |
282 |
Tcl_Obj *activeFgPtr; /* Foreground color for active entry. */ |
283 |
Tcl_Obj *indicatorFgPtr; /* Color for indicators in radio and check |
284 |
* button entries. */ |
285 |
Pixmap gray; /* Bitmap for drawing disabled entries in |
286 |
* a stippled fashion. None means not |
287 |
* allocated yet. */ |
288 |
GC textGC; /* GC for drawing text and other features |
289 |
* of menu entries. */ |
290 |
GC disabledGC; /* Used to produce disabled effect. If |
291 |
* disabledFg isn't NULL, this GC is used to |
292 |
* draw text and icons for disabled entries. |
293 |
* Otherwise text and icons are drawn with |
294 |
* normalGC and this GC is used to stipple |
295 |
* background across them. */ |
296 |
GC activeGC; /* GC for drawing active entry. */ |
297 |
GC indicatorGC; /* For drawing indicators. */ |
298 |
GC disabledImageGC; /* Used for drawing disabled images. They |
299 |
* have to be stippled. This is created |
300 |
* when the image is about to be drawn the |
301 |
* first time. */ |
302 |
|
303 |
/* |
304 |
* Information about geometry of menu. |
305 |
*/ |
306 |
|
307 |
int totalWidth; /* Width of entire menu */ |
308 |
int totalHeight; /* Height of entire menu */ |
309 |
|
310 |
/* |
311 |
* Miscellaneous information: |
312 |
*/ |
313 |
|
314 |
int tearoff; /* 1 means this menu can be torn off. On some |
315 |
* platforms, the user can drag an outline |
316 |
* of the menu by just dragging outside of |
317 |
* the menu, and the tearoff is created where |
318 |
* the mouse is released. On others, an |
319 |
* indicator (such as a dashed stripe) is |
320 |
* drawn, and when the menu is selected, the |
321 |
* tearoff is created. */ |
322 |
Tcl_Obj *titlePtr; /* The title to use when this menu is torn |
323 |
* off. If this is NULL, a default scheme |
324 |
* will be used to generate a title for |
325 |
* tearoff. */ |
326 |
Tcl_Obj *tearoffCommandPtr; /* If non-NULL, points to a command to |
327 |
* run whenever the menu is torn-off. */ |
328 |
Tcl_Obj *takeFocusPtr; /* Value of -takefocus option; not used in |
329 |
* the C code, but used by keyboard traversal |
330 |
* scripts. Malloc'ed, but may be NULL. */ |
331 |
Tcl_Obj *cursorPtr; /* Current cursor for window, or None. */ |
332 |
Tcl_Obj *postCommandPtr; /* Used to detect cycles in cascade hierarchy |
333 |
* trees when preprocessing postcommands |
334 |
* on some platforms. See PostMenu for |
335 |
* more details. */ |
336 |
int postCommandGeneration; /* Need to do pre-invocation post command |
337 |
* traversal */ |
338 |
int menuFlags; /* Flags for use by X; see below for |
339 |
definition */ |
340 |
TkMenuEntry *postedCascade; /* Points to menu entry for cascaded submenu |
341 |
* that is currently posted or NULL if no |
342 |
* submenu posted. */ |
343 |
struct TkMenu *nextInstancePtr; |
344 |
/* The next instance of this menu in the |
345 |
* chain. */ |
346 |
struct TkMenu *masterMenuPtr; |
347 |
/* A pointer to the original menu for this |
348 |
* clone chain. Points back to this structure |
349 |
* if this menu is a master menu. */ |
350 |
struct TkMenuOptionTables *optionTablesPtr; |
351 |
/* A pointer to the collection of option tables |
352 |
* that work with menus and menu entries. */ |
353 |
Tk_Window parentTopLevelPtr;/* If this menu is a menubar, this is the |
354 |
* toplevel that owns the menu. Only applicable |
355 |
* for menubar clones. |
356 |
*/ |
357 |
struct TkMenuReferences *menuRefPtr; |
358 |
/* Each menu is hashed into a table with the |
359 |
* name of the menu's window as the key. |
360 |
* The information in this hash table includes |
361 |
* a pointer to the menu (so that cascades |
362 |
* can find this menu), a pointer to the |
363 |
* list of toplevel widgets that have this |
364 |
* menu as its menubar, and a list of menu |
365 |
* entries that have this menu specified |
366 |
* as a cascade. */ |
367 |
TkMenuPlatformData platformData; |
368 |
/* The data for the specific type of menu. |
369 |
* Depends on platform and menu type what |
370 |
* kind of options are in this structure. |
371 |
*/ |
372 |
Tk_OptionSpec *extensionPtr; |
373 |
/* Needed by the configuration package for |
374 |
* this widget to be extended. */ |
375 |
Tk_SavedOptions *errorStructPtr; |
376 |
/* We actually have to allocate these because |
377 |
* multiple menus get changed during one |
378 |
* ConfigureMenu call. */ |
379 |
} TkMenu; |
380 |
|
381 |
/* |
382 |
* When the toplevel configure -menu command is executed, the menu may not |
383 |
* exist yet. We need to keep a linked list of windows that reference |
384 |
* a particular menu. |
385 |
*/ |
386 |
|
387 |
typedef struct TkMenuTopLevelList { |
388 |
struct TkMenuTopLevelList *nextPtr; |
389 |
/* The next window in the list */ |
390 |
Tk_Window tkwin; /* The window that has this menu as its |
391 |
* menubar. */ |
392 |
} TkMenuTopLevelList; |
393 |
|
394 |
/* |
395 |
* The following structure is used to keep track of things which |
396 |
* reference a menu. It is created when: |
397 |
* - a menu is created. |
398 |
* - a cascade entry is added to a menu with a non-null name |
399 |
* - the "-menu" configuration option is used on a toplevel widget |
400 |
* with a non-null parameter. |
401 |
* |
402 |
* One of these three fields must be non-NULL, but any of the fields may |
403 |
* be NULL. This structure makes it easy to determine whether or not |
404 |
* anything like recalculating platform data or geometry is necessary |
405 |
* when one of the three actions above is performed. |
406 |
*/ |
407 |
|
408 |
typedef struct TkMenuReferences { |
409 |
struct TkMenu *menuPtr; /* The menu data structure. This is NULL |
410 |
* if the menu does not exist. */ |
411 |
TkMenuTopLevelList *topLevelListPtr; |
412 |
/* First in the list of all toplevels that |
413 |
* have this menu as its menubar. NULL if no |
414 |
* toplevel widgets have this menu as its |
415 |
* menubar. */ |
416 |
TkMenuEntry *parentEntryPtr;/* First in the list of all cascade menu |
417 |
* entries that have this menu as their child. |
418 |
* NULL means no cascade entries. */ |
419 |
Tcl_HashEntry *hashEntryPtr;/* This is needed because the pathname of the |
420 |
* window (which is what we hash on) may not |
421 |
* be around when we are deleting. |
422 |
*/ |
423 |
} TkMenuReferences; |
424 |
|
425 |
/* |
426 |
* This structure contains all of the option tables that are needed |
427 |
* by menus. |
428 |
*/ |
429 |
|
430 |
typedef struct TkMenuOptionTables { |
431 |
Tk_OptionTable menuOptionTable; /* The option table for menus. */ |
432 |
Tk_OptionTable entryOptionTables[6];/* The tables for menu entries. */ |
433 |
} TkMenuOptionTables; |
434 |
|
435 |
/* |
436 |
* Flag bits for menus: |
437 |
* |
438 |
* REDRAW_PENDING: Non-zero means a DoWhenIdle handler |
439 |
* has already been queued to redraw |
440 |
* this window. |
441 |
* RESIZE_PENDING: Non-zero means a call to ComputeMenuGeometry |
442 |
* has already been scheduled. |
443 |
* MENU_DELETION_PENDING Non-zero means that we are currently destroying |
444 |
* this menu. This is useful when we are in the |
445 |
* middle of cleaning this master menu's chain of |
446 |
* menus up when TkDestroyMenu was called again on |
447 |
* this menu (via a destroy binding or somesuch). |
448 |
* MENU_PLATFORM_FLAG1... Reserved for use by the platform-specific menu |
449 |
* code. |
450 |
*/ |
451 |
|
452 |
#define REDRAW_PENDING 1 |
453 |
#define RESIZE_PENDING 2 |
454 |
#define MENU_DELETION_PENDING 4 |
455 |
#define MENU_PLATFORM_FLAG1 (1 << 30) |
456 |
#define MENU_PLATFORM_FLAG2 (1 << 29) |
457 |
#define MENU_PLATFORM_FLAG3 (1 << 28) |
458 |
|
459 |
/* |
460 |
* Each menu created by the user is a MASTER_MENU. When a menu is torn off, |
461 |
* a TEAROFF_MENU instance is created. When a menu is assigned to a toplevel |
462 |
* as a menu bar, a MENUBAR instance is created. All instances have the same |
463 |
* configuration information. If the master instance is deleted, all instances |
464 |
* are deleted. If one of the other instances is deleted, only that instance |
465 |
* is deleted. |
466 |
*/ |
467 |
|
468 |
#define UNKNOWN_TYPE -1 |
469 |
#define MASTER_MENU 0 |
470 |
#define TEAROFF_MENU 1 |
471 |
#define MENUBAR 2 |
472 |
|
473 |
/* |
474 |
* Various geometry definitions: |
475 |
*/ |
476 |
|
477 |
#define CASCADE_ARROW_HEIGHT 10 |
478 |
#define CASCADE_ARROW_WIDTH 8 |
479 |
#define DECORATION_BORDER_WIDTH 2 |
480 |
|
481 |
/* |
482 |
* Menu-related procedures that are shared among Tk modules but not exported |
483 |
* to the outside world: |
484 |
*/ |
485 |
|
486 |
extern int TkActivateMenuEntry _ANSI_ARGS_((TkMenu *menuPtr, |
487 |
int index)); |
488 |
extern void TkBindMenu _ANSI_ARGS_(( |
489 |
Tk_Window tkwin, TkMenu *menuPtr)); |
490 |
extern TkMenuReferences * |
491 |
TkCreateMenuReferences _ANSI_ARGS_((Tcl_Interp *interp, |
492 |
char *name)); |
493 |
extern void TkDestroyMenu _ANSI_ARGS_((TkMenu *menuPtr)); |
494 |
extern void TkEventuallyRecomputeMenu _ANSI_ARGS_(( |
495 |
TkMenu *menuPtr)); |
496 |
extern void TkEventuallyRedrawMenu _ANSI_ARGS_(( |
497 |
TkMenu *menuPtr, TkMenuEntry *mePtr)); |
498 |
extern TkMenuReferences * |
499 |
TkFindMenuReferences _ANSI_ARGS_((Tcl_Interp *interp, |
500 |
char *name)); |
501 |
extern TkMenuReferences * |
502 |
TkFindMenuReferencesObj _ANSI_ARGS_(( |
503 |
Tcl_Interp *interp, Tcl_Obj *namePtr)); |
504 |
extern void TkFreeMenuReferences _ANSI_ARGS_(( |
505 |
TkMenuReferences *menuRefPtr)); |
506 |
extern Tcl_HashTable * TkGetMenuHashTable _ANSI_ARGS_((Tcl_Interp *interp)); |
507 |
extern int TkGetMenuIndex _ANSI_ARGS_((Tcl_Interp *interp, |
508 |
TkMenu *menuPtr, Tcl_Obj *objPtr, int lastOK, |
509 |
int *indexPtr)); |
510 |
extern void TkMenuInitializeDrawingFields _ANSI_ARGS_(( |
511 |
TkMenu *menuPtr)); |
512 |
extern void TkMenuInitializeEntryDrawingFields _ANSI_ARGS_(( |
513 |
TkMenuEntry *mePtr)); |
514 |
extern int TkInvokeMenu _ANSI_ARGS_((Tcl_Interp *interp, |
515 |
TkMenu *menuPtr, int index)); |
516 |
extern void TkMenuConfigureDrawOptions _ANSI_ARGS_(( |
517 |
TkMenu *menuPtr)); |
518 |
extern int TkMenuConfigureEntryDrawOptions _ANSI_ARGS_(( |
519 |
TkMenuEntry *mePtr, int index)); |
520 |
extern void TkMenuFreeDrawOptions _ANSI_ARGS_((TkMenu *menuPtr)); |
521 |
extern void TkMenuEntryFreeDrawOptions _ANSI_ARGS_(( |
522 |
TkMenuEntry *mePtr)); |
523 |
extern void TkMenuEventProc _ANSI_ARGS_((ClientData clientData, |
524 |
XEvent *eventPtr)); |
525 |
extern void TkMenuImageProc _ANSI_ARGS_(( |
526 |
ClientData clientData, int x, int y, int width, |
527 |
int height, int imgWidth, int imgHeight)); |
528 |
extern void TkMenuInit _ANSI_ARGS_((void)); |
529 |
extern void TkMenuSelectImageProc _ANSI_ARGS_ |
530 |
((ClientData clientData, int x, int y, |
531 |
int width, int height, int imgWidth, |
532 |
int imgHeight)); |
533 |
extern Tcl_Obj * TkNewMenuName _ANSI_ARGS_((Tcl_Interp *interp, |
534 |
Tcl_Obj *parentNamePtr, TkMenu *menuPtr)); |
535 |
extern int TkPostCommand _ANSI_ARGS_((TkMenu *menuPtr)); |
536 |
extern int TkPostSubmenu _ANSI_ARGS_((Tcl_Interp *interp, |
537 |
TkMenu *menuPtr, TkMenuEntry *mePtr)); |
538 |
extern int TkPostTearoffMenu _ANSI_ARGS_((Tcl_Interp *interp, |
539 |
TkMenu *menuPtr, int x, int y)); |
540 |
extern int TkPreprocessMenu _ANSI_ARGS_((TkMenu *menuPtr)); |
541 |
extern void TkRecomputeMenu _ANSI_ARGS_((TkMenu *menuPtr)); |
542 |
|
543 |
/* |
544 |
* These routines are the platform-dependent routines called by the |
545 |
* common code. |
546 |
*/ |
547 |
|
548 |
extern void TkpComputeMenubarGeometry _ANSI_ARGS_(( |
549 |
TkMenu *menuPtr)); |
550 |
extern void TkpComputeStandardMenuGeometry _ANSI_ARGS_ |
551 |
((TkMenu *menuPtr)); |
552 |
extern int TkpConfigureMenuEntry |
553 |
_ANSI_ARGS_((TkMenuEntry *mePtr)); |
554 |
extern void TkpDestroyMenu _ANSI_ARGS_((TkMenu *menuPtr)); |
555 |
extern void TkpDestroyMenuEntry |
556 |
_ANSI_ARGS_((TkMenuEntry *mEntryPtr)); |
557 |
extern void TkpDrawMenuEntry _ANSI_ARGS_((TkMenuEntry *mePtr, |
558 |
Drawable d, Tk_Font tkfont, |
559 |
CONST Tk_FontMetrics *menuMetricsPtr, int x, |
560 |
int y, int width, int height, int strictMotif, |
561 |
int drawArrow)); |
562 |
extern void TkpMenuInit _ANSI_ARGS_((void)); |
563 |
extern int TkpMenuNewEntry _ANSI_ARGS_((TkMenuEntry *mePtr)); |
564 |
extern int TkpNewMenu _ANSI_ARGS_((TkMenu *menuPtr)); |
565 |
extern int TkpPostMenu _ANSI_ARGS_((Tcl_Interp *interp, |
566 |
TkMenu *menuPtr, int x, int y)); |
567 |
extern void TkpSetWindowMenuBar _ANSI_ARGS_((Tk_Window tkwin, |
568 |
TkMenu *menuPtr)); |
569 |
|
570 |
# undef TCL_STORAGE_CLASS |
571 |
# define TCL_STORAGE_CLASS DLLIMPORT |
572 |
|
573 |
#endif /* _TKMENU */ |
574 |
|
575 |
/* End of tkmenu.h */ |