1 /**
2  *
3  * $Id: ManagerP.h,v 1.1 2004/08/28 19:23:25 dannybackx Exp $
4  *
5  * Copyright (C) 1995 Free Software Foundation, Inc.
6  * Copyright � 1995, 1997, 1999, 2000, 2001 LessTif Development Team
7  *
8  * This file is part of the GNU LessTif Library.
9  *
10  * This library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Library General Public
12  * License as published by the Free Software Foundation; either
13  * version 2 of the License, or (at your option) any later version.
14  *
15  * This library is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * Library General Public License for more details.
19  *
20  * You should have received a copy of the GNU Library General Public
21  * License along with this library; if not, write to the Free
22  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23  *
24  **/
25 
26 #ifndef _XM_MANAGERP_H
27 #define _XM_MANAGERP_H
28 
29 #include <Xm/XmP.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 #define MCEPTR(cl) \
36     ((XmManagerClassExt *)(&(((XmManagerWidgetClass)(cl))->manager_class.extension)))
37 #define _XmGetManagerClassExtPtr(cl, o) \
38     ((*MCEPTR(cl) && (((*MCEPTR(cl))->record_type) == (o))) \
39         ? MCEPTR(cl) \
40         : ((XmManagerClassExt *)_XmGetClassExtensionPtr(((XmGenericClassExt *)MCEPTR(cl)), (o))))
41 
42 /* structure used for storing accelerator and mnemonic information */
43 typedef struct {
44     unsigned int eventType;
45     KeySym	keysym;
46     KeyCode	key;
47     unsigned int modifiers;
48     Widget	component;
49     Boolean	needGrab;
50     Boolean	isMnemonic;
51 } XmKeyboardData;
52 
53 /* Define the manager instance part */
54 typedef struct {
55     Pixel foreground;
56 
57     Dimension shadow_thickness;
58     Pixel top_shadow_color;
59     Pixmap top_shadow_pixmap;
60     Pixel bottom_shadow_color;
61     Pixmap bottom_shadow_pixmap;
62 
63     Pixel highlight_color;
64     Pixmap highlight_pixmap;
65 
66     XtCallbackList help_callback;
67     XtPointer user_data;
68 
69     Boolean traversal_on;
70     unsigned char unit_type;
71     XmNavigationType navigation_type;
72 
73     /* private instance variables */
74     Boolean event_handler_added;
75     Widget active_child;
76     Widget highlighted_widget;
77     Widget accelerator_widget;
78 
79     Boolean has_focus;
80 
81     XmStringDirection string_direction;		/* 2.x */
82 
83     XmKeyboardData *keyboard_list;
84     short num_keyboard_entries;
85     short size_keyboard_list;
86 
87     XmGadget selected_gadget;
88     XmGadget eligible_for_multi_button_event;
89 
90     GC background_GC;
91     GC highlight_GC;
92     GC top_shadow_GC;
93     GC bottom_shadow_GC;
94 
95     Widget initial_focus;
96 
97     XtCallbackList popup_handler_callback;  /* new for 2.0 */
98 } XmManagerPart;
99 
100 typedef struct {
101     XtPointer next_extension;
102     XrmQuark record_type;
103     long version;
104     Cardinal record_size;
105     XmTraversalChildrenProc traversal_children;
106 } XmManagerClassExtRec, *XmManagerClassExt;
107 
108 #define XmManagerClassExtVersion 1L
109 
110 /* Define the full instance record */
111 typedef struct _XmManagerRec {
112     CorePart core;
113     CompositePart composite;
114     ConstraintPart constraint;
115     XmManagerPart manager;
116 } XmManagerRec;
117 
118 /* Define class part structure */
119 typedef struct {
120     String translations;
121     XmSyntheticResource *syn_resources;
122     int num_syn_resources;
123     XmSyntheticResource *syn_constraint_resources;
124     int num_syn_constraint_resources;
125     XmParentProcessProc parent_process;
126     XtPointer extension;
127 } XmManagerClassPart;
128 
129 #define XmInheritParentProcess ((XmParentProcessProc) _XtInherit)
130 
131 /* Define the full class record */
132 typedef struct _XmManagerClassRec {
133     CoreClassPart core_class;
134     CompositeClassPart composite_class;
135     ConstraintClassPart constraint_class;
136     XmManagerClassPart manager_class;
137 } XmManagerClassRec;
138 
139 /* manager constraints */
140 
141 typedef struct _XmManagerConstraintPart {
142     int unused;
143 } XmManagerConstraintPart;
144 
145 typedef struct _XmManagerConstraintRec {
146     XmManagerConstraintPart manager;
147 } XmManagerConstraintRec, *XmManagerConstraintPtr;
148 
149 XMLIBEXPORT extern XmManagerClassRec xmManagerClassRec;
150 
151 /*
152  * easy access macros -- FOR USE BY GADGET CODE ONLY
153  */
154 #define XmParentTopShadowGC(w) (((XmManagerWidget) \
155         (((XmGadget)(w))->object.parent))->manager.top_shadow_GC)
156 
157 #define XmParentBottomShadowGC(w) (((XmManagerWidget) \
158         (((XmGadget)(w))->object.parent))->manager.bottom_shadow_GC)
159 
160 #define XmParentHighlightGC(w) (((XmManagerWidget) \
161         (((XmGadget)(w))->object.parent))->manager.highlight_GC)
162 
163 #define XmParentBackgroundGC(w) (((XmManagerWidget) \
164         (((XmGadget)(w))->object.parent))->manager.background_GC)
165 
166 /*
167  * easy access macros -- FOR USE BY MANAGERS.
168  */
169 #define MGR_SizeKeyboardList(m) (((XmManagerWidget)(m))->manager.size_keyboard_list)
170 #define MGR_ShadowThickness(m)	(((XmManagerWidget)(m))->manager.shadow_thickness)
171 #define MGR_KeyboardList(m)	(((XmManagerWidget)(m))->manager.keyboard_list)
172 #define MGR_NumKeyboardEntries(m) (((XmManagerWidget)(m))->manager.num_keyboard_entries)
173 
174 /* Motif 2.* */
175 #define MGR_LayoutDirection(m)	(((XmManagerWidget)(m))->manager.string_direction)
176 
177 /* internal manager routines */
178 
179 Boolean _XmParentProcess(Widget widget, XmParentProcessData data);
180 void _XmDestroyParentCallback ( Widget w, XtPointer client, XtPointer call );
181 /* What the F is this? */
182 void _XmSocorro(Widget w, XEvent *event, String *params, Cardinal *num_params);
183 void _XmClearShadowType(Widget w,
184 			Dimension old_width, Dimension old_height,
185 			Dimension old_shadow_thickness,
186 			Dimension old_highlight_thickness);
187 
188 /* action routine prototypes */
189 void _XmGadgetButtonMotion(Widget w, XEvent *event, String *params, Cardinal *num_params);
190 void _XmGadgetArm(Widget w, XEvent *event, String *params, Cardinal *num_params);
191 void _XmGadgetActivate(Widget w, XEvent *event, String *params, Cardinal *num_params);
192 void _XmGadgetMultiArm(Widget w, XEvent *event, String *params, Cardinal *num_params);
193 void _XmGadgetMultiActivate(Widget w, XEvent *event, String *params, Cardinal *num_params);
194 void _XmGadgetDrag(Widget w, XEvent *event, String *params, Cardinal *num_params);
195 void _XmGadgetSelect(Widget w, XEvent *event, String *params, Cardinal *num_params);
196 void _XmParentActivate(Widget w, XEvent *event, String *params, Cardinal *num_params);
197 void _XmParentCancel(Widget w, XEvent *event, String *params, Cardinal *num_params);
198 void _XmGadgetTraversePrevTabGroup(Widget w, XEvent *event, String *params, Cardinal *num_params);
199 void _XmGadgetTraverseNextTabGroup(Widget w, XEvent *event, String *params, Cardinal *num_params);
200 void _XmGadgetTraversePrev(Widget w, XEvent *event, String *params, Cardinal *num_params);
201 void _XmGadgetTraverseNext(Widget w, XEvent *event, String *params, Cardinal *num_params);
202 void _XmGadgetTraverseUp(Widget w, XEvent *event, String *params, Cardinal *num_params);
203 void _XmGadgetTraverseDown(Widget w, XEvent *event, String *params, Cardinal *num_params);
204 void _XmGadgetTraverseLeft(Widget w, XEvent *event, String *params, Cardinal *num_params);
205 void _XmGadgetTraverseRight(Widget w, XEvent *event, String *params, Cardinal *num_params);
206 void _XmGadgetTraverseHome(Widget w, XEvent *event, String *params, Cardinal *num_params);
207 void _XmGadgetHelp(Widget w, XEvent *event, String *params, Cardinal *num_params);
208 void _XmGadgetKeyInput(Widget w, XEvent *event, String *params, Cardinal *num_params);
209 
210 void _XmManagerHelp(Widget w, XEvent *event, String *params, Cardinal *num_params);
211 
212 #ifdef __cplusplus
213 }
214 #endif
215 
216 #endif /* _XM_MANAGERP_H */
217