/usr/share/doc/xviewg/examples/notice/notice.c is in xview-examples 3.2p1.4-28.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | /*
* notice.c --
* This application creates a frame, a panel, and 3 panel buttons.
* A message button, a Quit button (to exit the program) and a
* dummy "commit" button. Extra data is attached to the panel
* items by the use of XV_KEY_DATA. The callback routine for the
* quit and Commit buttons is generalized enough that it can apply
* to either button (or any arbitrary button) because it extracts
* the expected "data" (via XV_KEY_DATA) from whatever panel
* button might have called it.
*/
#include <xview/xview.h>
#include <xview/panel.h>
#include <xview/notice.h>
/*
* assign "data" to panel items using XV_KEY_DATA ... attach the
* message panel item, a prompt string specific for the panel
* item's notice_prompt, and a callback function if the user
* chooses "yes".
*/
#define MSG_ITEM 10 /* any arbitrary integer */
#define NOTICE_PROMPT 11
#define CALLBACK_FUNC 12
main(argc,argv)
int argc;
char *argv[];
{
Frame frame;
Panel panel;
Panel_item msg_item;
Xv_opaque my_notify_proc();
extern void exit();
/*
* Initialize XView, and create frame, panel and buttons.
*/
xv_init(XV_INIT_ARGS, argc, argv, NULL);
frame = (Frame)xv_create(XV_NULL, FRAME,
FRAME_LABEL, argv[0],
NULL);
panel = (Panel)xv_create(frame, PANEL,
PANEL_LAYOUT, PANEL_VERTICAL,
NULL);
msg_item = (Panel_item)xv_create(panel, PANEL_MESSAGE, NULL);
(void) xv_create(panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Quit",
PANEL_NOTIFY_PROC, my_notify_proc,
XV_KEY_DATA, MSG_ITEM, msg_item,
/*
* attach a prompt specific for this button used by
* notice_prompt()
*/
XV_KEY_DATA, NOTICE_PROMPT, "Really Quit?",
/*
* a callback function to call if the user answers "yes"
* to prompt
*/
XV_KEY_DATA, CALLBACK_FUNC, exit,
NULL);
/*
* now that the Quit button is under the message item,
* layout horizontally
*/
xv_set(panel, PANEL_LAYOUT, PANEL_HORIZONTAL, NULL);
(void) xv_create(panel, PANEL_BUTTON,
PANEL_LABEL_STRING, "Commit...",
PANEL_NOTIFY_PROC, my_notify_proc,
XV_KEY_DATA, MSG_ITEM, msg_item,
/*
* attach a prompt specific for this button used by
* notice_prompt()
*/
XV_KEY_DATA, NOTICE_PROMPT, "Update all changes?",
/*
* Note there is no callback func here, but one could be
* written
*/
NULL);
window_fit(panel);
window_fit(frame);
xv_main_loop(frame);
}
/*
* my_notify_proc()
* The notice appears as a result of notice_prompt().
* The "key data" associated with the panel item is extracted via
* xv_get(). The resulting choice is displayed in the panel
* message item.
*/
Xv_opaque
my_notify_proc(item, event)
Panel_item item;
Event *event;
{
int result;
int (*func)();
char *prompt;
Panel_item msg_item;
Panel panel;
func = (int(*)())xv_get(item, XV_KEY_DATA, CALLBACK_FUNC);
prompt = (char *)xv_get(item, XV_KEY_DATA, NOTICE_PROMPT);
msg_item = (Panel_item)xv_get(item, XV_KEY_DATA, MSG_ITEM);
panel = (Panel)xv_get(item, PANEL_PARENT_PANEL);
/*
* Create the notice and get a response.
*/
result = notice_prompt(panel, NULL,
NOTICE_MESSAGE_STRINGS,
prompt,
"Press YES to confirm",
"Press NO to cancel",
NULL,
NOTICE_BUTTON_YES, "YES",
NOTICE_BUTTON_NO, "NO",
NULL);
switch(result) {
case NOTICE_YES:
xv_set(msg_item, PANEL_LABEL_STRING, "Confirmed", NULL);
if (func)
(*func)();
break;
case NOTICE_NO:
xv_set(msg_item, PANEL_LABEL_STRING, "Cancelled", NULL);
break;
case NOTICE_FAILED:
xv_set(msg_item, PANEL_LABEL_STRING, "unable to pop-up",
NULL);
break;
default:
xv_set(msg_item, PANEL_LABEL_STRING, "unknown choice",
NULL);
}
}
|