/* Written by Dan Heller and Paula Ferguson. * Copyright 1994, O'Reilly & Associates, Inc. * Permission to use, copy, and modify this program without * restriction is hereby granted, as long as this copyright * notice appears in each copy of the program source code. * This program is freely distributable without licensing fees and * is provided without guarantee or warrantee expressed or implied. * This program is -not- in the public domain. */ /* multiple.c -- specify a multiple selection callback for a simple List. */ #include <Xm/List.h> char *months[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; main(argc, argv) int argc; char *argv[]; { Widget toplevel, list_w; XtAppContext app; int i, n = XtNumber (months); XmStringTable str_list; void sel_callback(); XtSetLanguageProc (NULL, NULL, NULL); toplevel = XtVaAppInitialize (&app, "Demos", NULL, 0, &argc, argv, NULL, NULL); str_list = (XmStringTable) XtMalloc (n * sizeof (XmString *)); for (i = 0; i < n; i++) str_list[i] = XmStringCreateLocalized (months[i]); list_w = XmCreateScrolledList (toplevel, "months", NULL, 0); XtVaSetValues (list_w, XmNvisibleItemCount, n, XmNitemCount, n, XmNitems, str_list, XmNselectionPolicy, XmMULTIPLE_SELECT, NULL); XtManageChild (list_w); XtAddCallback (list_w, XmNdefaultActionCallback, sel_callback, NULL); XtAddCallback (list_w, XmNmultipleSelectionCallback, sel_callback, NULL); for (i = 0; i < n; i++) XmStringFree (str_list[i]); XtFree (str_list); XtRealizeWidget (toplevel); XtAppMainLoop (app); } void sel_callback(list_w, client_data, call_data) Widget list_w; XtPointer client_data; XtPointer call_data; { XmListCallbackStruct *cbs = (XmListCallbackStruct *) call_data; char *choice; int i; if (cbs->reason == XmCR_MULTIPLE_SELECT) { printf ("Multiple selection -- %d items selected:\n", cbs->selected_item_count); for (i = 0; i < cbs->selected_item_count; i++) { XmStringGetLtoR (cbs->selected_items[i], XmFONTLIST_DEFAULT_TAG, &choice); printf ("%s (%d)\n", choice, cbs->selected_item_positions[i]); XtFree (choice); } } else { XmStringGetLtoR (cbs->item, XmFONTLIST_DEFAULT_TAG, &choice); printf ("Default action -- selected item %s (%d)\n", choice, cbs->item_position); XtFree (choice); } }