1 /**
2  *
3  * $Id: CascadeBP.h,v 1.1 2004/08/28 19:23:24 dannybackx Exp $
4  *
5  * Copyright (C) 1995 Free Software Foundation, Inc.
6  * Copyright (C) 1995-2000 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 
27 #ifndef _XM_CASCADEBP_H
28 #define _XM_CASCADEBP_H
29 
30 #include <Xm/CascadeB.h>
31 #include <Xm/LabelP.h>
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 typedef struct {
38     XtCallbackList activate_callback;
39     XtCallbackList cascade_callback;
40 
41     Widget submenu;
42     Pixmap cascade_pixmap;
43     int map_delay;
44 
45     Boolean armed;
46     XRectangle cascade_rect;
47     XtIntervalId timer;
48     Pixmap armed_pixmap;
49 } XmCascadeButtonPart;
50 
51 /* Define the full instance record */
52 typedef struct _XmCascadeButtonRec {
53     CorePart core;
54     XmPrimitivePart primitive;
55     XmLabelPart label;
56     XmCascadeButtonPart cascade_button;
57 } XmCascadeButtonRec;
58 
59 /* Define class part structure */
60 typedef struct {
61     XtPointer extension;
62 } XmCascadeButtonClassPart;
63 
64 /* Define the full class record */
65 typedef struct _XmCascadeButtonClassRec {
66     CoreClassPart core_class;
67     XmPrimitiveClassPart primitive_class;
68     XmLabelClassPart label_class;
69     XmCascadeButtonClassPart cascade_button_class;
70 } XmCascadeButtonClassRec;
71 
72 /* External definition for the class record */
73 
74 XMLIBEXPORT extern XmCascadeButtonClassRec xmCascadeButtonClassRec;
75 
76 /*
77  * easy access macros
78  */
79 #define XmCB_ARMED_BIT        (1 << 0)
80 #define XmCB_TRAVERSE_BIT     (1 << 1)
81 
82 
83 #define CB_Submenu(cb) \
84     (((XmCascadeButtonWidget)(cb))->cascade_button.submenu)
85 
86 #define CB_ActivateCall(cb) \
87     (((XmCascadeButtonWidget)(cb))->cascade_button.activate_callback)
88 
89 #define CB_CascadeCall(cb) \
90     (((XmCascadeButtonWidget)(cb))->cascade_button.cascade_callback)
91 
92 #define CB_CascadePixmap(cb) \
93     (((XmCascadeButtonWidget)(cb))->cascade_button.cascade_pixmap)
94 
95 #define CB_ArmedPixmap(cb) \
96     (((XmCascadeButtonWidget)(cb))->cascade_button.armed_pixmap)
97 
98 #define CB_Cascade_x(cb) \
99     (((XmCascadeButtonWidget)(cb))->cascade_button.cascade_rect.x)
100 
101 #define CB_Cascade_y(cb) \
102     (((XmCascadeButtonWidget)(cb))->cascade_button.cascade_rect.y)
103 
104 #define CB_Cascade_width(cb) \
105     (((XmCascadeButtonWidget)(cb))->cascade_button.cascade_rect.width)
106 
107 #define CB_Cascade_height(cb) \
108     (((XmCascadeButtonWidget)(cb))->cascade_button.cascade_rect.height)
109 
110 #define CB_HasCascade(cb) \
111     (((Lab_MenuType(cb) == XmMENU_PULLDOWN)  ||  \
112       (Lab_MenuType(cb) == XmMENU_POPUP)) && (CB_Submenu(cb)))
113 
114 #define CB_IsArmed(cb) \
115     (((XmCascadeButtonWidget)(cb))->cascade_button.armed & XmCB_ARMED_BIT)
116 
117 #define CB_Traversing(cb) \
118     (((XmCascadeButtonWidget)(cb))->cascade_button.armed & XmCB_TRAVERSE_BIT)
119 
120 #define CB_SetBit(byte,bit,v) \
121     byte = (byte & (~bit)) | (v ? bit : 0)
122 
123 #define CB_SetArmed(cb,v) \
124     CB_SetBit(((XmCascadeButtonWidget)(cb))->cascade_button.armed, \
125                                       XmCB_ARMED_BIT, v)
126 
127 #define CB_SetTraverse(cb,v) \
128     CB_SetBit(((XmCascadeButtonWidget)(cb))->cascade_button.armed, \
129                                       XmCB_TRAVERSE_BIT, v)
130 
131 /*
132  * functions
133  */
134 void _XmCBHelp(Widget w, XEvent *event, String *params, Cardinal *num_params);
135 void _XmCascadingPopup(Widget cb, XEvent *event, Boolean doCascade);
136 
137 #ifdef __cplusplus
138 }
139 #endif
140 
141 #endif /* _XM_CASCADEBP_H */
142