/* $XConsortium: Container1.c /main/5 1995/07/15 21:03:23 drk $ */ /* * @OPENGROUP_COPYRIGHT@ * COPYRIGHT NOTICE * Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc. * Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group * ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for * the full copyright text. * * This software is subject to an open license. It may only be * used on, with or for operating systems which are themselves open * source systems. You must contact The Open Group for a license * allowing distribution and sublicensing of this software on, with, * or for operating systems which are not Open Source programs. * * See http://www.opengroup.org/openmotif/license for full * details of the license agreement. Any use, reproduction, or * distribution of the program constitutes recipient's acceptance of * this agreement. * * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS * PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY * WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY * OR FITNESS FOR A PARTICULAR PURPOSE * * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT * NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE * EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. */ /* * HISTORY */ #include #include "collapsedState.bmp" #include "expandedState.bmp" #define NAME_LEN 20 #define NUM_OBJ 10 #define NUM_COL 4 void DefaultActionCB(Widget wid, XtPointer client_data, XtPointer call_data); void SelectCB(Widget wid, XtPointer client_data, XtPointer call_data); void OutlineCB(Widget wid, XtPointer client_data, XtPointer call_data); Widget IconGad1,IconGad2,IconGad3,IconGad4; Widget IconGad31,IconGad32,IconGad321,IconGad3211,IconGad33; Widget IconGad5; Widget Container1; char *ColumnHeadingText[NUM_COL] = { "Icon", "Full Title", "Favorite Flavor", "Age" }; char *FullTitleText[NUM_OBJ] = { "The First Object", "2nd Object, but still important", "Show", "Honorable Mention", "Fifth of Beethoven", "Snowflake", "The Little Dwarfs", "100 (in Octal)", "Cat Lives", "Last object" }; char *FlavorText[NUM_OBJ] = { "Chocolate", "Raspberry", "Blueberry", "Maple", "Vanilla", "Zucchini", "Licorice", "Potatoe", "Lemon", "Boysenberry" }; char *AgeText[NUM_OBJ] = { "42", "10", "4", "76", "2", "None of your business","102","23","16", "Ask Willard Scott" }; XmStringTable *EntryDetails; void main(int argc, char **argv) { XmStringTable ColumnHeadings; int i,j; Cardinal n; Arg args[MAX_ARGS]; int test_num; char test_char; char ContainerName[NAME_LEN + 1]; Pixmap CollapsedStatePixmap, ExpandedStatePixmap; WidgetList SelectedObjects; unsigned int SelectedObjectCount; ContainerName[0] = '\0'; test_num = 0; test_char = '\0'; CommonTestInit(argc, argv); if (UserData != NULL) { if (strcmp(UserData, "a") == 0) test_num = 1; else if (strcmp(UserData, "b") == 0) test_num = 2; else if (strcmp(UserData, "c") == 0) test_num = 3; else if (strcmp(UserData, "d") == 0) test_num = 4; else if (strcmp(UserData, "e") == 0) test_num = 5; else if (strcmp(UserData, "f") == 0) test_num = 6; else if (strcmp(UserData, "g") == 0) test_num = 7; else if (strcmp(UserData, "h") == 0) test_num = 8; else if (strcmp(UserData, "j") == 0) test_num = 9; else if (strcmp(UserData, "k") == 0) test_num = 10; else if (strcmp(UserData, "l") == 0) test_num = 11; else if (strcmp(UserData, "m") == 0) test_num = 12; else if (strcmp(UserData, "n") == 0) test_num = 13; else if (strcmp(UserData, "z") == 0) test_num = 26; test_char = *UserData; free(UserData); } sprintf(ContainerName, "Container1%c", test_char); CollapsedStatePixmap = XCreatePixmapFromBitmapData(display, rootWindow, collapsedState_bits, collapsedState_width, collapsedState_height, CommonGetColor("black"), CommonGetColor("white"), XDefaultDepth(display, XDefaultScreen(display))); ExpandedStatePixmap = XCreatePixmapFromBitmapData(display, rootWindow, expandedState_bits, expandedState_width, expandedState_height, CommonGetColor("white"), CommonGetColor("black"), XDefaultDepth(display, XDefaultScreen(display))); ColumnHeadings = (XmStringTable) XtMalloc(NUM_COL * sizeof(XmString)); for (i = 0; i < NUM_COL; i++) ColumnHeadings[i] = XmStringGenerate(ColumnHeadingText[i], NULL, XmCHARSET_TEXT, NULL); n = 0; /* Don't want to set the following resources for Container1l test */ if (test_num != 11) { XtSetArg(args[n], XmNdetailColumnHeading, ColumnHeadings); n++; XtSetArg(args[n], XmNdetailColumnHeadingCount, NUM_COL); n++; } XtSetArg(args[n], XmNcollapsedStatePixmap, CollapsedStatePixmap); n++; XtSetArg(args[n], XmNexpandedStatePixmap, ExpandedStatePixmap); n++; Container1 = XmCreateContainer(Shell1, ContainerName, args, n); XtManageChild(Container1); XtAddCallback(Container1, XmNdefaultActionCallback, DefaultActionCB, NULL); XtAddCallback(Container1, XmNselectionCallback, SelectCB, NULL); XtAddCallback(Container1, XmNoutlineChangedCallback, OutlineCB, NULL); for (i = 0; i < NUM_COL; i++) XmStringFree(ColumnHeadings[i]); XtFree((XtPointer)ColumnHeadings); EntryDetails = (XmStringTable *) XtMalloc(NUM_OBJ * sizeof(XmStringTable)); for (i = 0; i < NUM_OBJ; i++) { ColumnHeadings = (XmStringTable)XtMalloc((NUM_COL-1) * sizeof(XmString)); ColumnHeadings[0] = XmStringGenerate(FullTitleText[i], NULL, XmCHARSET_TEXT, NULL); ColumnHeadings[1] = XmStringGenerate(FlavorText[i], NULL, XmCHARSET_TEXT, NULL); ColumnHeadings[2] = XmStringGenerate(AgeText[i], NULL, XmCHARSET_TEXT, NULL); EntryDetails[i] = ColumnHeadings; } n = 0; /* Don't want to set the following resource for Container1m test*/ if (test_num != 12) XtSetArg(args[n], XmNvisualEmphasis, XmSELECTED); n++; XtSetArg(args[n], XmNx, 100); n++; XtSetArg(args[n], XmNy, 100); n++; XtSetArg(args[n], XmNviewType, XmSMALL_ICON); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[0]); n++; IconGad1 = XmCreateIconGadget(Container1, "IconGad1", args, n); XtManageChild(IconGad1); n = 0; XtSetArg(args[n], XmNx, 200); n++; XtSetArg(args[n], XmNy, 200); n++; XtSetArg(args[n], XmNwidth, 50); n++; XtSetArg(args[n], XmNviewType, XmSMALL_ICON); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[1]); n++; IconGad2 = XmCreateIconGadget(Container1, "IconGad2", args, n); XtManageChild(IconGad2); n = 0; XtSetArg(args[n], XmNx, 300); n++; XtSetArg(args[n], XmNy, 100); n++; XtSetArg(args[n], XmNviewType, XmLARGE_ICON); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[2]); n++; IconGad3 = XmCreateIconGadget(Container1, "IconGad3", args, n); XtManageChild(IconGad3); n = 0; XtSetArg(args[n], XmNx, 50); n++; XtSetArg(args[n], XmNy, 400); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[3]); n++; XtSetArg(args[n], XmNviewType, XmSMALL_ICON); n++; IconGad4 = XmCreateIconGadget(Container1, "IconGad4", args, n); XtManageChild(IconGad4); n = 0; XtSetArg(args[n], XmNentryParent, IconGad3); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[4]); n++; XtSetArg(args[n], XmNviewType, XmSMALL_ICON); n++; IconGad31 = XmCreateIconGadget(Container1, "IconGad31", args, n); XtManageChild(IconGad31); n = 0; XtSetArg(args[n], XmNentryParent, IconGad3); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[5]); n++; XtSetArg(args[n], XmNviewType, XmSMALL_ICON); n++; IconGad32 = XmCreateIconGadget(Container1, "IconGad32", args, n); XtManageChild(IconGad32); n = 0; XtSetArg(args[n], XmNentryParent, IconGad32); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[6]); n++; XtSetArg(args[n], XmNviewType, XmLARGE_ICON); n++; IconGad321 = XmCreateIconGadget(Container1, "IconGad321", args, n); XtManageChild(IconGad321); n = 0; XtSetArg(args[n], XmNentryParent, IconGad321); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[7]); n++; XtSetArg(args[n], XmNviewType, XmSMALL_ICON); n++; IconGad3211 = XmCreateIconGadget(Container1, "IconGad3211", args, n); XtManageChild(IconGad3211); n = 0; XtSetArg(args[n], XmNentryParent, IconGad3); n++; XtSetArg(args[n], XmNviewType, XmSMALL_ICON); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[8]); n++; IconGad33 = XmCreateIconGadget(Container1, "IconGad33", args, n); XtManageChild(IconGad33); /**** Create only widgets when needed, because automation is realizing and managing all created widgets. When we use R6, try that again. n = 0; XtSetArg(args[n], XmNx, 70); n++; XtSetArg(args[n], XmNy, 420); n++; XtSetArg(args[n], XmNviewType, XmLARGE_ICON); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[9]); n++; IconGad5 = XmCreateIconGadget(Container1, "IconGad5", args, n); for (i = 0; i < NUM_OBJ; i++) { ****/ IconGad5 = (Widget) 0; for (i = 0; i < NUM_OBJ-1; i++) { ColumnHeadings = EntryDetails[i]; for (j = 0; j < NUM_COL-1; j++) XmStringFree(ColumnHeadings[j]); XtFree((XtPointer)ColumnHeadings); } /**** XtFree((XtPointer)EntryDetails); ****/ XtRealizeWidget(Shell1); CommonPause(); CommonPause(); if (test_num == 1) { CommonPause(); } if (test_num == 2) { CommonPause(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); CommonPause(); n = 0; XtSetArg(args[n], XmNselectedObjectCount, &SelectedObjectCount); n++; XtSetArg(args[n], XmNselectedObjects, &SelectedObjects); n++; XtGetValues(Container1, args, n); printf("SelectedObjectCount from GetValues: %d\n", SelectedObjectCount); printf("SelectedObjects from GetValues: "); for (i = 0; i < SelectedObjectCount; i++) printf("%s ", XtName(SelectedObjects[i])); printf("\n"); CommonPause(); } if (test_num == 3) { CommonPause(); CommonPause(); CommonPause(); CommonPause(); } if (test_num == 4) { CommonPause(); } if (test_num == 5) { CommonPause(); CommonPause(); CommonPause(); CommonPause(); } if (test_num == 6) { CommonPause(); CommonPause(); CommonPause(); CommonPause(); } if (test_num == 7) { CommonPause(); CommonPause(); CommonPause(); } if (test_num == 8) { CommonPause(); CommonPause(); } if (test_num == 9) { CommonPause(); CommonPause(); } if (test_num == 10) { CommonPause(); CommonPause(); } if (test_num == 11) { CommonPause(); CommonPause(); CommonPause(); } if (test_num == 12) { CommonPause(); CommonPause(); CommonPause(); } if (test_num == 26) { n = 0; XtSetArg(args[n], XmNentryViewType, XmLARGE_ICON); n++; XtSetArg(args[n], XmNlayoutType, XmOUTLINE); n++; XtSetValues(Container1, args, n); CommonPause(); CommonPause(); CommonPause(); } CommonPause(); XtAppMainLoop(app_context); } void DefaultActionCB(Widget wid,XtPointer client_data, XtPointer call_data) { /****/ XmStringTable ColumnHeadings; Cardinal n; int j; Arg args[MAX_ARGS]; /****/ XmContainerSelectCallbackStruct *cbs; cbs = (XmContainerSelectCallbackStruct *)call_data; printf("\nXmNdefaultActionCallback called\n\n"); /**** Create only widgets when needed, because automation is realizing and managing all created widgets. When we use R6, remove that again. ****/ if (IconGad5 == (Widget) 0) { n = 0; XtSetArg(args[n], XmNx, 70); n++; XtSetArg(args[n], XmNy, 420); n++; XtSetArg(args[n], XmNviewType, XmLARGE_ICON); n++; XtSetArg(args[n], XmNdetailCount, NUM_COL-1); n++; XtSetArg(args[n], XmNdetail, EntryDetails[9]); n++; IconGad5 = XmCreateIconGadget(Container1, "IconGad5", args, n); ColumnHeadings = EntryDetails[9]; for (j = 0; j < NUM_COL-1; j++) XmStringFree(ColumnHeadings[j]); XtFree((XtPointer)ColumnHeadings); XtFree((XtPointer)EntryDetails); } /****/ XtManageChild(IconGad5); } void SelectCB(Widget wid,XtPointer client_data, XtPointer call_data) { XmContainerSelectCallbackStruct *cbs; int i; cbs = (XmContainerSelectCallbackStruct *)call_data; switch(cbs->reason) { case XmCR_SINGLE_SELECT: printf("Reason for SelectionCallback: CR_SINGLE_SELECT\n"); break; case XmCR_BROWSE_SELECT: printf("Reason for SelectionCallback: CR_BROWSE_SELECT\n"); break; case XmCR_MULTIPLE_SELECT: printf("Reason for SelectionCallback: CR_MULTIPLE_SELECT\n"); break; case XmCR_EXTENDED_SELECT: printf("Reason for SelectionCallback: CR_EXTENDED_SELECT\n"); break; case XmCR_DEFAULT_ACTION: printf("Reason for SelectionCallback: CR_DEFAULT_ACTION\n"); break; default: printf("INVALID Selection reason\n"); break; } printf("Number of items selected: %d\n",cbs->selected_item_count); printf("Names of items selected: "); for (i=0; i < cbs->selected_item_count; i++) printf("%s ", XtName(cbs->selected_items[i])); printf("\n"); } void OutlineCB(Widget wid,XtPointer client_data, XtPointer call_data) { XmContainerOutlineCallbackStruct *cbs; cbs = (XmContainerOutlineCallbackStruct *)call_data; printf("XmNoutlineChangedCallback "); if (cbs->reason == XmCR_COLLAPSED) printf("XmCR_COLLAPSED\n"); if (cbs->reason == XmCR_EXPANDED) printf("XmCR_EXPANDED\n"); }