
Example F-1. The item_move.c program (continued)
create_item(item, event)
Panel_item item;
Event *event;
{
Xv_pkg *pkg;
Panel panel = (Panel)xv_get(item, XV_KEY_DATA, PANEL_KEY);
Frame frame = (Frame)xv_get(item, XV_KEY_DATA, FRAME_KEY);
Panel_item pi, pkg_item;
char buf[64];
int selected();
pkg_item = (Panel_item)xv_get(item, XV_KEY_DATA, PACKAGE_KEY);
(void) strncpy(buf, (char *)xv_get(item, PANEL_VALUE), sizeof buf);
if (!buf[0 ])
return PANEL_NONE;
switch((int)xv_get(pkg_item, PANEL_VALUE)) {
case 1: pkg = PANEL_MESSAGE; break;
case 2: pkg = PANEL_TEXT; break;
default: pkg = PANEL_BUTTON;
}
/* loop thru all panel items and check for item with same name */
PANEL_EACH_ITEM(panel, pi)
if (!strcmp(buf, (char *)xv_get(pi, PANEL_LABEL_STRING))) {
xv_set(frame, FRAME_LEFT_FOOTER, "Label Taken", NULL);
return PANEL_NONE;
}
PANEL_END_EACH
(void) xv_create(panel, pkg,
PANEL_LABEL_STRING, buf,
PANEL_NOTIFY_PROC, selected,
XV_KEY_DATA, FRAME_KEY, frame,
/* only for text items, but doesn’t affect other items */
PANEL_VALUE_DISPLAY_LENGTH, 10,
PANEL_LAYOUT, PANEL_HORIZONTAL,
NULL);
xv_set(item, PANEL_VALUE, "", NULL);
return PANEL_NEXT;
}
/*
* For panel buttons. return XV_OK or XV_ERROR if the item was
* selected using the left mouse button or not.
*/
int
selected(item, event)
Panel_item item;
Event *event;
{
Frame frame = (Frame)xv_get(item, XV_KEY_DATA, FRAME_KEY);
char buf[64];
if (event_action(event) == ACTION_SELECT) {
sprintf(b