/* simple.c just display a *.xbm file */ /* using bitmaps in memory rather than from file */ /* deck_xbm.h and deck_xbm.c as general X card deck */ #include #include #include #include #include #include #include #include #include #include #include #include "deck_xbm.h" /* make cards available */ #define XMS(string) XmStringCreateSimple(string) static Pixel fg, bg; static Pixmap back_pixmap; static Widget turned_on; static char *turned_card; static Display *display; static Window windowId; static XtAppContext app_context; /* widgets indented according to heirarchy */ /* underscore b, "_b" are visible buttons that can be pushed */ /* underscore dia, "_dia" are dialog box widgets */ Widget toplevel; Widget main_w; Widget menu_bar; Widget pair_area; Widget Tbutton; Widget Bbutton; main(int argc, char *argv[]) { /* callback functions */ void file_cb(); void DoCB(); int i, j, k; Pixmap pixmap; char *xbm_bits; printf("simple starting, be patient if over network \n"); /* Initialize toolkit, open display and create application shell. */ toplevel = XtVaAppInitialize(&app_context, "simple", NULL, 0, &argc, argv, NULL, NULL); /* Create main_w. */ main_w = XtVaCreateManagedWidget("Main", xmMainWindowWidgetClass, toplevel, XmNwidth, 510, XmNheight, 590, NULL); /* Create MenuBar in main_w. */ /* Create a simple MenuBar that contains two menus */ menu_bar = XmVaCreateSimpleMenuBar(main_w, "menubar", XmVaCASCADEBUTTON, XMS("File"), 'F', NULL); /* Create menu, the "File" menu -- callback is file_cb() */ XmVaCreateSimplePulldownMenu(menu_bar, "file_menu", 0, (XtCallbackProc)(file_cb), XmVaPUSHBUTTON, XMS("New"), 'N', NULL, NULL, XmVaPUSHBUTTON, XMS("Clear"),'C', NULL, NULL, XmVaPUSHBUTTON, XMS("Exit"), 'E', "F3", XMS("F3"), NULL); XtManageChild(menu_bar); pair_area = XtVaCreateManagedWidget ("form", xmFormWidgetClass, main_w, NULL); XtRealizeWidget(toplevel); display = XtDisplay(toplevel); windowId = XtWindow(toplevel); printf("About to build bitmaps \n"); back_pixmap = XCreatePixmapFromBitmapData(display, windowId, card_xbm("back1"), card_width, card_height, BlackPixel(display, DefaultScreen(display)), WhitePixel(display, DefaultScreen(display)), DisplayPlanes(display, DefaultScreen(display))); xbm_bits = card_xbm("s01"); pixmap = XCreatePixmapFromBitmapData(display, windowId, xbm_bits, card_width, card_height, BlackPixel(display, DefaultScreen(display)), WhitePixel(display, DefaultScreen(display)), DisplayPlanes(display,DefaultScreen(display))); printf("creating Tbutton\n"); Tbutton = XtVaCreateManagedWidget("Tbutton", xmToggleButtonWidgetClass, pair_area, XmNlabelType, XmPIXMAP, XmNlabelPixmap, back_pixmap, XmNselectPixmap, pixmap, XmNindicatorOn, True, XmNx, 10, XmNy, 10, NULL); printf("adding callback to Tbutton\n"); XtAddCallback(Tbutton, XmNvalueChangedCallback, (XtCallbackProc)(DoCB), (XtPointer)1); Bbutton = XtVaCreateManagedWidget("Bbutton", xmToggleButtonWidgetClass, pair_area, XmNlabelType, XmPIXMAP, XmNlabelPixmap, back_pixmap, XmNselectPixmap, pixmap, XmNindicatorOn, False, XmNx, 100, XmNy, 100, NULL); XtAddCallback(Bbutton, XmNvalueChangedCallback, (XtCallbackProc)(DoCB), (XtPointer)2); printf("about to SetValues on Tbutton\n"); XtVaSetValues(Tbutton, XmNlabelPixmap, back_pixmap, XmNselectPixmap, pixmap, NULL); XtVaSetValues(Bbutton, XmNlabelPixmap, back_pixmap, XmNselectPixmap, pixmap, NULL); XtRealizeWidget(toplevel); printf("simple waiting for quit \n"); XtAppMainLoop(app_context); } /* end main in simple.c */ /* callbacks */ /* the callback routine for the items in the "File" menu */ void file_cb(Widget widget, /* the menu item (pushbutton) that was selected */ int num, /* the menu item number */ XmAnyCallbackStruct *cbs) /* unused here */ { enum {MENU_NEW, MENU_CLEAR, MENU_EXIT}; switch (num) { case MENU_NEW: /* clear display, new random layout*/ /* next_game(); */ break; case MENU_CLEAR: /* middle of game clear */ /* next_game(); */ break; case MENU_EXIT: /* exit this program */ /* save_stat(); */ exit(EXIT_SUCCESS); } } void DoCB(Widget w, int index, XmAnyCallbackStruct *call_data) { printf("in DoCB index=%d \n", index); }