3 * Rob Zimmermann. All rights reserved.
5 * Keith Bostic. All rights reserved.
7 * See the LICENSE file for redistribution information.
13 static const char sccsid
[] = "$Id: m_options.c,v 8.2 1996/12/10 17:07:22 bostic Exp $ (Berkeley) $Date: 1996/12/10 17:07:22 $";
17 #include <X11/Intrinsic.h>
18 #include <Xm/DialogS.h>
20 #include <Xm/LabelG.h>
21 #include <Xm/PushBG.h>
23 #include <Xm/ToggleBG.h>
24 #include <Xm/RowColumn.h>
39 void *value
; /* really should get this from core */
47 /* in production, get these from the resource list */
49 #define toggleColumns 6
51 #define otherColumns 3
55 /* in production, get these from the resource list */
57 #define intWidth 10 /* characters */
58 #define otherWidth 18 /* characters */
65 static optData toggles
[] = {
66 { optToggle
, "altwerase", (void *) False
},
67 { optToggle
, "extended", (void *) False
},
68 { optToggle
, "mesg", (void *) True
},
69 { optToggle
, "ruler", (void *) False
},
70 { optToggle
, "tildeop", (void *) False
},
71 { optToggle
, "autoindent", (void *) True
},
72 { optToggle
, "modeline", (void *) False
},
73 { optToggle
, "timeout", (void *) True
},
74 { optToggle
, "autoprint", (void *) True
},
75 { optToggle
, "flash", (void *) True
},
76 { optToggle
, "searchincr", (void *) True
},
77 { optToggle
, "ttywerase", (void *) False
},
78 { optToggle
, "autowrite", (void *) False
},
79 { optToggle
, "secure", (void *) False
},
80 { optToggle
, "verbose", (void *) False
},
81 { optToggle
, "iclower", (void *) False
},
82 { optToggle
, "number", (void *) False
},
83 { optToggle
, "warn", (void *) True
},
84 { optToggle
, "beautify", (void *) False
},
85 { optToggle
, "ignorecase", (void *) True
},
86 { optToggle
, "octal", (void *) False
},
87 { optToggle
, "showmatch", (void *) False
},
88 { optToggle
, "open", (void *) True
},
89 { optToggle
, "showmode", (void *) False
},
90 { optToggle
, "windowname", (void *) False
},
91 { optToggle
, "leftright", (void *) False
},
92 { optToggle
, "optimize", (void *) True
},
93 { optToggle
, "slowopen", (void *) False
},
94 { optToggle
, "comment", (void *) False
},
95 { optToggle
, "lisp", (void *) False
},
96 { optToggle
, "prompt", (void *) True
},
97 { optToggle
, "sourceany", (void *) False
},
98 { optToggle
, "wrapscan", (void *) True
},
99 { optToggle
, "edcompatible", (void *) False
},
100 { optToggle
, "list", (void *) False
},
101 { optToggle
, "readonly", (void *) False
},
102 { optToggle
, "writeany", (void *) False
},
103 { optToggle
, "lock", (void *) True
},
104 { optToggle
, "redraw", (void *) False
},
105 { optToggle
, "errorbells", (void *) False
},
106 { optToggle
, "magic", (void *) True
},
107 { optToggle
, "remap", (void *) True
},
108 { optToggle
, "exrc", (void *) False
},
109 { optToggle
, "terse", (void *) False
},
112 static optData ints
[] = {
113 { optInteger
, "scroll", (void *) "11" },
114 { optInteger
, "hardtabs", (void *) "0" },
115 { optInteger
, "shiftwidth", (void *) "4" },
116 { optInteger
, "window", (void *) "23" },
117 { optInteger
, "keytime", (void *) "6" },
118 { optInteger
, "sidescroll", (void *) "16" },
119 { optInteger
, "wraplen", (void *) "0" },
120 { optInteger
, "columns", (void *) "80" },
121 { optInteger
, "lines", (void *) "24" },
122 { optInteger
, "wrapmargin", (void *) "0" },
123 { optInteger
, "tabstop", (void *) "8" },
124 { optInteger
, "escapetime", (void *) "1" },
125 { optInteger
, "taglength", (void *) "0" },
126 { optInteger
, "matchtime", (void *) "7" },
127 { optInteger
, "report", (void *) "5" },
130 static optData others
[] = {
131 { optString
, "filec", (void *) "^[" },
132 { optString
, "msgcat", (void *) "./" },
133 { optString
, "noprint", (void *) "" },
134 { optString
, "backup", (void *) "" },
135 { optString
, "cdpath", (void *) ":" },
136 { optString
, "cedit", (void *) "" },
137 { optString
, "print", (void *) "" },
138 { optString
, "term", (void *) "motif" },
139 { optFile
, "directory", (void *) "/tmp" },
140 { optString
, "paragraphs", (void *) "IPLPPPQPP LIpplpipbp" },
141 { optString
, "path", (void *) "src:include:/debugger/src:/debugger/include/" },
142 { optFile
, "recdir", (void *) "/var/tmp/vi.recover" },
143 { optString
, "sections", (void *) "NHSHH HUnhsh" },
144 { optFile
, "shell", (void *) "/bin/csh" },
145 { optString
, "shellmeta", (void *) "~{[*?$`'\"\\" },
146 { optString
, "tags", (void *) "tags /debugger/tmp/tags10 /debugger/tags /debugger/lib/tags" },
152 #if defined(__STDC__)
153 static void change_toggle( Widget w
, optData
*option
)
155 static void change_toggle( w
, option
)
163 XtVaGetValues( w
, XmNset
, &set
, 0 );
165 sprintf( buffer
, ":set %s%s", (set
) ? "" : "no", option
->name
);
167 #if defined(SelfTest)
168 printf( "sending command <<%s>>\n", buffer
);
170 _vi_send_command_string( buffer
);
175 #if defined(__STDC__)
176 static void change_string( Widget w
, optData
*option
)
178 static void change_string( w
, option
)
186 str
= XmTextFieldGetString( w
);
187 sprintf( buffer
, ":set %s=%s", option
->name
, str
);
189 #if defined(SelfTest)
190 printf( "sending command <<%s>>\n", buffer
);
192 _vi_send_command_string( buffer
);
197 /* add a control to the property sheet */
199 #if defined(__STDC__)
200 static void add_toggle( Widget parent
, optData
*option
)
202 static void add_toggle( parent
, option
)
209 w
= XtVaCreateManagedWidget( option
->name
,
210 xmToggleButtonGadgetClass
,
212 XmNset
, (Boolean
) option
->value
,
215 XtAddCallback( w
, XmNvalueChangedCallback
, change_toggle
, option
);
219 /* draw a matrix of text fields and their labels
220 * Note that rowcolumns widgets are column major, so we
221 * need to go through this nonsense rather than just adding the
222 * darn things in order
225 #define numRows(cols,count) ((2*(count)+(cols)-1)/(cols))
227 #if defined(__STDC__)
228 static void add_string_options( Widget parent
,
234 static void add_string_options( parent
, options
, count
, width
)
244 for ( i
=0; i
<count
; i
++ ) {
245 f
= XtVaCreateWidget( "form",
250 w
= XtVaCreateManagedWidget( options
[i
].name
,
251 xmTextFieldWidgetClass
,
253 #if defined(SelfTest)
256 XmNtopAttachment
, XmATTACH_FORM
,
257 XmNbottomAttachment
,XmATTACH_FORM
,
258 XmNrightAttachment
,XmATTACH_FORM
,
261 XtVaCreateManagedWidget( options
[i
].name
,
264 XmNtopAttachment
, XmATTACH_FORM
,
265 XmNbottomAttachment
, XmATTACH_FORM
,
266 XmNleftAttachment
, XmATTACH_FORM
,
267 XmNrightAttachment
, XmATTACH_WIDGET
,
269 XmNalignment
, XmALIGNMENT_END
,
272 XmTextFieldSetString( w
, (char *) options
[i
].value
);
273 XtAddCallback( w
, XmNactivateCallback
, change_string
, &options
[i
] );
280 /* Draw and display a dialog the describes nvi options */
282 #if defined(__STDC__)
283 static Widget
create_options_dialog( Widget parent
, String title
)
285 static Widget
create_options_dialog( parent
, title
)
290 Widget box
, form
, form2
;
292 extern void _vi_cancel_cb();
294 box
= XtVaCreatePopupShell( title
,
295 xmDialogShellWidgetClass
,
298 XmNallowShellResize
, False
,
301 XtAddCallback( box
, XmNpopdownCallback
, _vi_cancel_cb
, 0 );
303 form
= XtVaCreateWidget( "form",
304 xmRowColumnWidgetClass
,
309 form2
= XtVaCreateWidget( "toggleOptions",
310 xmRowColumnWidgetClass
,
312 XmNpacking
, XmPACK_COLUMN
,
313 #if defined(SelfTest)
314 XmNnumColumns
, toggleColumns
,
319 for (i
=0; i
<XtNumber(toggles
); i
++) {
320 add_toggle( form2
, &toggles
[i
] );
322 XtManageChild( form2
);
324 form2
= XtVaCreateWidget( "intOptions",
325 xmRowColumnWidgetClass
,
327 XmNpacking
, XmPACK_COLUMN
,
328 #if defined(SelfTest)
329 XmNnumColumns
, intColumns
,
333 add_string_options( form2
, ints
, XtNumber(ints
), intWidth
);
334 XtManageChild( form2
);
336 form2
= XtVaCreateWidget( "otherOptions",
337 xmRowColumnWidgetClass
,
339 XmNpacking
, XmPACK_COLUMN
,
340 #if defined(SelfTest)
341 XmNnumColumns
, otherColumns
,
345 add_string_options( form2
, others
, XtNumber(others
), otherWidth
);
346 XtManageChild( form2
);
353 /* module entry point
354 * _vi_show_options_dialog( parent, title )
357 #if defined(__STDC__)
358 void _vi_show_options_dialog( Widget parent
, String title
)
360 void _vi_show_options_dialog( parent
, title
)
365 Widget db
= create_options_dialog( parent
, title
),
366 shell
= XtParent(db
);
367 Dimension height
, width
;
369 /* this one does not resize */
370 XtVaGetValues( shell
, XmNheight
, &height
, XmNwidth
, &width
, 0 );
371 XtVaSetValues( shell
, XmNminHeight
, height
, XmNminWidth
, width
,
372 XmNmaxHeight
, height
, XmNmaxWidth
, width
,
375 #if defined(SelfTest)
376 /* wait until it goes away */
377 XtPopup( shell
, XtGrabNone
);
379 /* wait until it goes away */
380 _vi_modal_dialog( db
);
386 #if defined(SelfTest)
388 #if XtSpecificationRelease == 4
389 #define ArgcType Cardinal *
391 #define ArgcType int *
394 #if defined(__STDC__)
395 static void show_options( Widget w
, XtPointer data
, XtPointer cbs
)
397 static void show_options( w
, data
, cbs
)
403 _vi_show_options_dialog( data
, "Preferences" );
406 main( int argc
, char *argv
[] )
409 Widget top_level
, rc
, button
;
412 /* create a top-level shell for the window manager */
413 top_level
= XtVaAppInitialize( &ctx
,
415 NULL
, 0, /* options */
417 argv
, /* might get modified */
422 rc
= XtVaCreateManagedWidget( "rc",
423 xmRowColumnWidgetClass
,
428 button
= XtVaCreateManagedWidget( "Pop up options dialog",
429 xmPushButtonGadgetClass
,
433 XtAddCallback( button
, XmNactivateCallback
, show_options
, rc
);
435 button
= XtVaCreateManagedWidget( "Quit",
436 xmPushButtonGadgetClass
,
440 XtAddCallback( button
, XmNactivateCallback
, exit
, 0 );
442 XtRealizeWidget(top_level
);