1 | /* SCCS Id: @(#)winval.c 3.3 92/3/7 */
2 | /* Copyright (c) Dean Luick, 1992 */
3 | /* NetHack may be freely redistributed. See license for details. */
4 |
5 | /*
6 | * Routines that define a name-value label widget pair that fit inside a
7 | * form widget.
8 | */
9 | #include <stdio.h>
10 |
11 | #ifndef SYSV
12 | #define PRESERVE_NO_SYSV /* X11 include files may define SYSV */
13 | #endif
14 |
15 | #include <X11/Intrinsic.h>
16 | #include <X11/StringDefs.h>
17 | #include <X11/Xaw/Label.h>
18 | #include <X11/Xaw/Form.h>
19 | #include <X11/Xaw/Cardinals.h>
20 |
21 | #ifdef PRESERVE_NO_SYSV
22 | # ifdef SYSV
23 | # undef SYSV
24 | # endif
25 | # undef PRESERVE_NO_SYSV
26 | #endif
27 |
28 | #include "hack.h" /* #define for const for non __STDC__ compilers */
29 | #include "winX.h"
30 |
31 | #define WNAME "name"
32 | #define WVALUE "value"
33 |
34 |
35 | Widget
36 | create_value(parent, name_value)
37 | Widget parent;
38 | const char *name_value;
39 | {
40 | Widget form, name;
41 | Arg args[8];
42 | Cardinal num_args;
43 |
44 | num_args = 0;
45 | XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
46 | XtSetArg(args[num_args], XtNdefaultDistance, 0); num_args++;
47 | form = XtCreateManagedWidget(name_value,
48 | formWidgetClass,
49 | parent, args, num_args);
50 |
51 | num_args = 0;
52 | XtSetArg(args[num_args], XtNjustify, XtJustifyRight); num_args++;
53 | XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
54 | XtSetArg(args[num_args], XtNlabel, name_value); num_args++;
55 | XtSetArg(args[num_args], XtNinternalHeight, 0); num_args++;
56 | name = XtCreateManagedWidget(WNAME,
57 | labelWidgetClass,
58 | form, args, num_args);
59 |
60 | num_args = 0;
61 | XtSetArg(args[num_args], XtNjustify, XtJustifyRight); num_args++;
62 | XtSetArg(args[num_args], XtNborderWidth, 0); num_args++;
63 | XtSetArg(args[num_args], XtNfromHoriz, name); num_args++;
64 | XtSetArg(args[num_args], XtNinternalHeight, 0); num_args++;
65 | (void) XtCreateManagedWidget(WVALUE,
66 | labelWidgetClass,
67 | form, args, num_args);
68 | return form;
69 | }
70 |
71 | void
72 | set_name(w, new_label)
73 | Widget w;
74 | char *new_label;
75 | {
76 | Arg args[1];
77 | Widget name;
78 |
79 | name = XtNameToWidget(w, WNAME);
80 | XtSetArg(args[0], XtNlabel, new_label);
81 | XtSetValues(name, args, ONE);
82 | }
83 |
84 | void
85 | set_name_width(w, new_width)
86 | Widget w;
87 | int new_width;
88 | {
89 | Arg args[1];
90 | Widget name;
91 |
92 | name = XtNameToWidget(w, WNAME);
93 | XtSetArg(args[0], XtNwidth, new_width);
94 | XtSetValues(name, args, ONE);
95 | }
96 |
97 | int
98 | get_name_width(w)
99 | Widget w;
100 | {
101 | Arg args[1];
102 | Dimension width;
103 | Widget name;
104 |
105 | name = XtNameToWidget(w, WNAME);
106 | XtSetArg(args[0], XtNwidth, &width);
107 | XtGetValues(name, args, ONE);
108 | return (int) width;
109 | }
110 |
111 |
112 | void
113 | set_value(w, new_value)
114 | Widget w;
115 | const char *new_value;
116 | {
117 | Arg args[1];
118 | Widget val;
119 |
120 | val = XtNameToWidget(w, WVALUE);
121 | XtSetArg(args[0], XtNlabel, new_value);
122 | XtSetValues(val, args, ONE);
123 | }
124 |
125 | void
126 | set_value_width(w, new_width)
127 | Widget w;
128 | int new_width;
129 | {
130 | Arg args[1];
131 | Widget val;
132 |
133 | val = XtNameToWidget(w, WVALUE);
134 | XtSetArg(args[0], XtNwidth, new_width);
135 | XtSetValues(val, args, ONE);
136 | }
137 |
138 | int
139 | get_value_width(w)
140 | Widget w;
141 | {
142 | Arg args[1];
143 | Widget val;
144 | Dimension width;
145 |
146 | val = XtNameToWidget(w, WVALUE);
147 | XtSetArg(args[0], XtNwidth, &width);
148 | XtGetValues(val, args, ONE);
149 | return (int) width;
150 | }
151 |
152 | /* Swap foreground and background colors (this is the best I can do with */
153 | /* a label widget, unless I can get some init hook in there). */
154 | void
155 | hilight_value(w)
156 | Widget w;
157 | {
158 | swap_fg_bg(XtNameToWidget(w, WVALUE));
159 | }
160 |
161 | /* Swap the foreground and background colors of the given widget */
162 | void
163 | swap_fg_bg(w)
164 | Widget w;
165 | {
166 | Arg args[2];
167 | Pixel fg, bg;
168 |
169 | XtSetArg(args[0], XtNforeground, &fg);
170 | XtSetArg(args[1], XtNbackground, &bg);
171 | XtGetValues(w, args, TWO);
172 |
173 | XtSetArg(args[0], XtNforeground, bg);
174 | XtSetArg(args[1], XtNbackground, fg);
175 | XtSetValues(w, args, TWO);
176 | }
177 |