Widget SoXtMaterialList::buildPulldownMenu(// protected Widget parent) { Widget palettes = XtVaCreateManagedWidget("palettes", xmCascadeButtonGadgetClass, parent, XtVaTypedArg, XmNlabelString, XmRString, "Palettes", sizeof("Palettes") + 1, NULL); Widget shell = SoXt::getShellWidget(parent); assert(shell != (Widget) NULL); Visual * visual; Colormap colormap; int depth; XtVaGetValues(shell, XmNvisual, &visual, XmNcolormap, &colormap, XmNdepth, &depth, NULL); Widget menu = XmVaCreateSimplePulldownMenu(parent, "materialsmenu", 0, NULL, NULL); SoXtMaterialDirectory * data = common->getMaterialDirectory(); for (int i = 0; i < data->numGroups; i++) { Widget item; item = XtVaCreateManagedWidget(data->groups[i]->name, xmPushButtonGadgetClass, menu, XtVaTypedArg, XmNlabelString, XmRString, data->groups[i]->name, strlen(data->groups[i]->name) + 1, NULL); data->groups[i]->menuitem = item; XtAddCallback(item, XmNactivateCallback, SoXtMaterialList::palette_menu_cb, (void *) this); } return palettes; } // buildPulldownMenu()
Widget CreateMenuBar(Widget main) { Widget menubar; XmString file,mode,step,options,open,stop,quit; /* Create the menubar */ file = XmStringCreateLocalized("File"); mode = XmStringCreateLocalized("Mode"); step = XmStringCreateLocalized("Step"); options = XmStringCreateLocalized("Options"); menubar = XmVaCreateSimpleMenuBar(main,"menubar", XmVaCASCADEBUTTON, file, 'F', XmVaCASCADEBUTTON, mode, 'M', XmVaCASCADEBUTTON, step, 'S', XmVaCASCADEBUTTON, options, 'O', NULL); XmStringFree(file); XmStringFree(mode); XmStringFree(step); XmStringFree(options); /* File Menu */ open = XmStringCreateLocalized("New Game..."); stop = XmStringCreateLocalized("Stop Game"); quit = XmStringCreateLocalized("Quit"); XmVaCreateSimplePulldownMenu(menubar,"file_menu",0,file_cb, XmVaPUSHBUTTON,open,'O',NULL,NULL, XmVaPUSHBUTTON,stop,'S',NULL,NULL, XmVaSEPARATOR, XmVaPUSHBUTTON,quit,'Q',NULL,NULL, NULL); XmStringFree(open); XmStringFree(stop); XmStringFree(quit); /* Manage the menubar and return the widget */ XtManageChild(menubar); return menubar; }
static void build_gui(Widget toplevel) { Widget main_w, menubar, widget, sat_frame, sky_frame, gps_frame; Widget gps_form, gps_data, sw; Arg args[100]; XGCValues gcv; Atom delw; int i; XmString string; XmString file, help, about, quit; /*@ -immediatetrans -usedef @*/ /* the root application window */ XtSetArg(args[0], XmNwidth, LEFTSIDE_WIDTH + SATDIAG_SIZE + 26); XtSetArg(args[1], XmNheight, SATDATA_HEIGHT + 14 * MAX_FONTSIZE + 12); /*@ +immediatetrans +usedef @*/ XtSetValues(toplevel, args, 2); /*@ -onlytrans @*/ main_w = XtVaCreateManagedWidget("main_window", xmMainWindowWidgetClass, toplevel, NULL); /* Construct the menubar */ file = XmStringCreateLocalized("File"); help = XmStringCreateLocalized("Help"); menubar = XmVaCreateSimpleMenuBar(main_w, "menubar", XmVaCASCADEBUTTON, file, 'F', XmVaCASCADEBUTTON, help, 'H', NULL); XmStringFree(file); if ((widget = XtNameToWidget(menubar, "button_1"))) XtVaSetValues(menubar, XmNmenuHelpWidget, widget, NULL); quit = XmStringCreateLocalized("Quit"); (void)XmVaCreateSimplePulldownMenu(menubar, "file_menu", 0, file_cb, XmVaPUSHBUTTON, quit, 'Q', NULL, NULL, NULL); XmStringFree(quit); about = XmStringCreateLocalized("About"); (void)XmVaCreateSimplePulldownMenu(menubar, "help_menu", 1, help_cb, XmVaPUSHBUTTON, help, 'H', NULL, NULL, XmVaSEPARATOR, XmVaPUSHBUTTON, about, 'A', NULL, NULL, NULL); XmStringFree(help); XmStringFree(about); XtManageChild(menubar); /* a form to assist with geometry negotiation */ form = XtVaCreateManagedWidget("form", xmFormWidgetClass, main_w, XmNfractionBase, 3, NULL); /* satellite frame */ sat_frame = XtVaCreateWidget("satellite_frame", xmFrameWidgetClass, form, XmNshadowType, XmSHADOW_ETCHED_IN, XmNtopAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 1, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 2, XmNleftAttachment, XmATTACH_FORM, NULL); (void)XtVaCreateManagedWidget("Satellite List", xmLabelGadgetClass, sat_frame, XmNchildType, XmFRAME_TITLE_CHILD, XmNchildVerticalAlignment, XmALIGNMENT_CENTER, NULL); /* the left half of the screen */ left = XtVaCreateManagedWidget("left", xmFormWidgetClass, sat_frame, NULL); /* skyview frame */ sky_frame = XtVaCreateWidget("skyview_frame", xmFrameWidgetClass, form, XmNshadowType, XmSHADOW_ETCHED_IN, XmNtopAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 2, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 1, NULL); (void)XtVaCreateManagedWidget("Skyview", xmLabelGadgetClass, sky_frame, XmNchildType, XmFRAME_TITLE_CHILD, XmNchildVerticalAlignment, XmALIGNMENT_CENTER, NULL); /* the right half of the screen */ right = XtVaCreateManagedWidget("right", xmFormWidgetClass, sky_frame, NULL); /* the application status bar */ status_form = XtVaCreateManagedWidget("status_form", xmFormWidgetClass, form, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 2, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, left, XmNfractionBase, 3, NULL); status_frame = XtVaCreateWidget("status_frame", xmFrameWidgetClass, status_form, XmNshadowType, XmSHADOW_ETCHED_IN, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); (void)XtVaCreateManagedWidget("Message Data", xmLabelGadgetClass, status_frame, XmNchildType, XmFRAME_TITLE_CHILD, XmNchildVerticalAlignment, XmALIGNMENT_CENTER, NULL); status = XtVaCreateManagedWidget("status", xmTextFieldWidgetClass, status_form, XmNcursorPositionVisible, False, XmNeditable, False, XmNmarginHeight, 1, XmNhighlightThickness, 0, XmNshadowThickness, 2, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); /* gps information frame */ gps_form = XtVaCreateManagedWidget("gps_form", xmFormWidgetClass, form, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 2, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, status_form, XmNfractionBase, 3, NULL); gps_frame = XtVaCreateWidget("gps_frame", xmFrameWidgetClass, gps_form, XmNshadowType, XmSHADOW_ETCHED_IN, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); (void)XtVaCreateManagedWidget("GPS Data", xmLabelGadgetClass, gps_frame, XmNchildType, XmFRAME_TITLE_CHILD, XmNchildVerticalAlignment, XmALIGNMENT_CENTER, NULL); sw = XtVaCreateManagedWidget("scrolled_w", xmScrolledWindowWidgetClass, gps_frame, XmNscrollingPolicy, XmAUTOMATIC, NULL); gps_data = XtVaCreateWidget("gps_data", xmFormWidgetClass, sw, XmNfractionBase, 30, NULL); /* satellite location and SNR data panel */ satellite_list = XtVaCreateManagedWidget("satellite_list", xmListWidgetClass, left, XmNbackground, get_pixel(toplevel, "snow"), XmNlistSizePolicy, XmCONSTANT, XmNhighlightThickness, 0, XmNlistSpacing, 4, XmNtopAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, NULL); /* the satellite diagram */ satellite_diagram = XtVaCreateManagedWidget("satellite_diagram", xmDrawingAreaWidgetClass, right, XmNbackground, get_pixel(toplevel, "snow"), XmNheight, SATDIAG_SIZE + 24, XmNwidth, SATDIAG_SIZE, XmNtopAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, NULL); gcv.foreground = BlackPixelOfScreen(XtScreen(satellite_diagram)); gc = XCreateGC(XtDisplay(satellite_diagram), RootWindowOfScreen(XtScreen(satellite_diagram)), GCForeground, &gcv); register_canvas(satellite_diagram, gc); XtVaSetValues(satellite_diagram, XmNuserData, gc, NULL); /*@i@*/XtAddCallback(satellite_diagram, XmNexposeCallback, redraw, NULL); /*@i@*/XtAddCallback(satellite_diagram, XmNresizeCallback, resize, NULL); /* the data display */ (void)XtVaCreateManagedWidget("Time", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 0, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 6, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0, NULL); (void)XtVaCreateManagedWidget("Latitude", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 12, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0, NULL); (void)XtVaCreateManagedWidget("Longitude", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 18, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0, NULL); (void)XtVaCreateManagedWidget("Altitude", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 18, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 24, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0, NULL); (void)XtVaCreateManagedWidget("Speed", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 24, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 30, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0, NULL); text_1 = XtVaCreateManagedWidget("time", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 0, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 6, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); text_2 = XtVaCreateManagedWidget("latitude", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 12, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); text_3 = XtVaCreateManagedWidget("longitude", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 18, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); text_4 = XtVaCreateManagedWidget("altitude", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 18, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 24, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); text_5 = XtVaCreateManagedWidget("speed", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 24, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 15, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 30, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 5, NULL); (void)XtVaCreateManagedWidget("EPH", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 0, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 6, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); (void)XtVaCreateManagedWidget("EPV", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 12, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); (void)XtVaCreateManagedWidget("Climb", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 18, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); (void)XtVaCreateManagedWidget("Track", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 18, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 24, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); (void)XtVaCreateManagedWidget("Status", xmLabelGadgetClass, gps_data, XmNalignment, XmALIGNMENT_END, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 24, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 20, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 30, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 15, NULL); text_7 = XtVaCreateManagedWidget("eph", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 0, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 6, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); text_8 = XtVaCreateManagedWidget("epv", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 12, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); text_9 = XtVaCreateManagedWidget("climb", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 18, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); text_6 = XtVaCreateManagedWidget("track", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 18, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 24, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); text_10 = XtVaCreateManagedWidget("status", xmTextFieldWidgetClass, gps_data, XmNeditable, False, XmNcursorPositionVisible, False, XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 24, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 30, XmNbottomAttachment, XmATTACH_POSITION, XmNbottomPosition, 30, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 20, NULL); XtManageChild(gps_data); XtManageChild(sat_frame); XtManageChild(sky_frame); XtManageChild(gps_frame); XtVaSetValues(main_w, XmNmenuBar, menubar, XmNworkWindow, form, NULL); XtRealizeWidget(toplevel); delw = XmInternAtom(XtDisplay(toplevel), "WM_DELETE_WINDOW", (Boolean)False); /*@ -nullpass @*/ (void)XmAddWMProtocolCallback(toplevel, delw, (XtCallbackProc)quit_cb, NULL); /*@ +onlytrans @*/ /* create empty list items to be replaced on update */ string = XmStringCreateSimple(" "); for (i = 0; i <= MAXCHANNELS; i++) XmListAddItem(satellite_list, string, 0); XmStringFree(string); }
int main (int argc, char *argv[]) { Widget topWidget; Widget mainForm; Widget userForm; /* Menu Stuff */ Widget menuBar, helpMenu; static String fallback_resources[] = { "*sgiMode: True", "*useSchemes: all", NULL }; topWidget = XtVaAppInitialize(&nebulaIrcAppContext, "Nebula IRC", NULL, 0, /* no command line options */ &argc, argv, fallback_resources, /* fallback resource list */ NULL); mainWindow = XtVaCreateManagedWidget("main_window", xmMainWindowWidgetClass, topWidget, XmNcommandWindowLocation, XmCOMMAND_BELOW_WORKSPACE, XmNwidth, 600, XmNheight, 500, NULL); /* create menu bar */ { XmString fileMenuStr, userMenuStr, helpMenuStr; fileMenuStr = XM_STRING_CREATE("File"); userMenuStr = XM_STRING_CREATE("User"); helpMenuStr = XM_STRING_CREATE("Help"); menuBar = XmVaCreateSimpleMenuBar(mainWindow, "menubar", XmVaCASCADEBUTTON, fileMenuStr, 'F', XmVaCASCADEBUTTON, userMenuStr, 'U', NULL); XmStringFree(fileMenuStr); XmStringFree(userMenuStr); XmStringFree(helpMenuStr); } /* File Menu */ { XmString prefStr; XmString saveConvStr; XmString quitStr; prefStr = XM_STRING_CREATE("Preferences..."); saveConvStr = XM_STRING_CREATE("Save Conversation..."); quitStr = XM_STRING_CREATE("Quit"); XmVaCreateSimplePulldownMenu(menuBar, "file_menu", 0, fileMenuCall, XmVaPUSHBUTTON, prefStr, 'P', NULL, NULL, XmVaPUSHBUTTON, saveConvStr, 'S', NULL, NULL, XmVaPUSHBUTTON, quitStr, 'Q', NULL, NULL, NULL); XmStringFree(prefStr); XmStringFree(saveConvStr); XmStringFree(quitStr); } /* User Menu */ { XmString whoisStr; XmString versionStr; XmString opStr; XmString deopStr; whoisStr = XM_STRING_CREATE("Whois"); versionStr = XM_STRING_CREATE("Client version"); opStr = XM_STRING_CREATE("Op"); deopStr = XM_STRING_CREATE("Deop"); XmVaCreateSimplePulldownMenu(menuBar, "user_menu", 1, userMenuCall, XmVaPUSHBUTTON, whoisStr, 'W', NULL, NULL, XmVaPUSHBUTTON, versionStr, '\0', NULL, NULL, XmVaPUSHBUTTON, opStr, 'O', NULL, NULL, XmVaPUSHBUTTON, deopStr, 'D', NULL, NULL, NULL); XmStringFree(whoisStr); XmStringFree(versionStr); XmStringFree(opStr); XmStringFree(deopStr); } /* Help Menu */ { XmString helpCommandStr; XmString aboutStr; helpCommandStr = XM_STRING_CREATE("Commands..."); aboutStr = XM_STRING_CREATE("About..."); helpMenu = XtVaCreateManagedWidget("Help", xmCascadeButtonWidgetClass, menuBar, XmNmnemonic, 'H', NULL); XmVaCreateSimplePulldownMenu(menuBar, "Help", 2, helpMenuCall, XmVaPUSHBUTTON, aboutStr, 'A', NULL, NULL, XmVaPUSHBUTTON, helpCommandStr, 'C', NULL, NULL, NULL); XmStringFree(helpCommandStr); XmStringFree(aboutStr); /* now set the help button */ XtVaSetValues(menuBar, XmNmenuHelpWidget, helpMenu, NULL); } /* now manage the menu bar */ XtManageChild(menuBar); /* create a form */ mainForm = XtVaCreateWidget("form", xmFormWidgetClass, mainWindow, XmNfractionBase, 3, NULL); /* vertical split user form */ userForm = XtVaCreateWidget("userform", xmFormWidgetClass, mainForm, XmNfractionBase, 5, XmNtopAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); /* output area */ { Arg args[12]; XtSetArg(args[0], XmNeditable, False); XtSetArg(args[1], XmNeditMode, XmMULTI_LINE_EDIT); XtSetArg(args[2], XmNscrollHorizontal, False); XtSetArg(args[3], XmNwordWrap, True); XtSetArg(args[4], XmNtopAttachment, XmATTACH_POSITION); XtSetArg(args[5], XmNtopPosition, 0); XtSetArg(args[6], XmNbottomAttachment, XmATTACH_POSITION); XtSetArg(args[7], XmNbottomPosition, 5); XtSetArg(args[8], XmNleftAttachment, XmATTACH_POSITION); XtSetArg(args[9], XmNleftPosition, 0); XtSetArg(args[10], XmNrightAttachment, XmATTACH_POSITION); XtSetArg(args[11], XmNrightPosition, 4); outputArea = XmCreateScrolledText(userForm, "output", args, 12); if (outputArea == NULL) perror("outputArea: "); XtManageChild(outputArea); } /* user list at left */ { Arg args[9]; XtSetArg(args[0], XmNtopAttachment, XmATTACH_POSITION); XtSetArg(args[1], XmNtopPosition, 0); XtSetArg(args[2], XmNbottomAttachment, XmATTACH_POSITION); XtSetArg(args[3], XmNbottomPosition, 5); XtSetArg(args[4], XmNleftAttachment, XmATTACH_POSITION); XtSetArg(args[5], XmNleftPosition, 4); XtSetArg(args[6], XmNrightAttachment, XmATTACH_POSITION); XtSetArg(args[7], XmNrightPosition, 5); XtSetArg(args[8], XmNselectionPolicy, XmSINGLE_SELECT); userList = XmCreateScrolledList(userForm, "list", args, 9); XtAddCallback(userList, XmNsingleSelectionCallback, userListSelectCbk, NULL); XtManageChild(userList); } XtManageChild(userForm); XtManageChild(mainForm); /* Command line area */ commandInput = XtVaCreateWidget("command", xmTextFieldWidgetClass, mainWindow, XmNmaxLength, MAX_INPUT_LEN, NULL); XtAddCallback(commandInput, XmNactivateCallback, commandInputCall, NULL); XtManageChild(commandInput); XtVaSetValues(mainWindow, XmNmenuBar, menuBar, XmNworkWindow, mainForm, XmNcommandWindow, commandInput, NULL); XtManageChild(mainWindow); XtRealizeWidget(topWidget); /* initialize System Status */ sysState.isConnected = NO; /* get some preferences */ getStartupPrefs(mainWindow); /* set focus to input area */ /* For Motif 1.0 we should use _XmGrabTheFocus(target) according to FAQ */ XmProcessTraversal(commandInput, XmTRAVERSE_CURRENT); /* initialize hostname and system info */ /* should switch back to ARCHOS if uname not available */ { struct utsname sysInfo; char tempName[2*SYSINFO_LEN]; gethostname(sysState.myHostName, MAXHOSTNAMELEN); uname(&sysInfo); sprintf(tempName, "%s %s running on %s", sysInfo.sysname, sysInfo.release, sysInfo.machine); tempName[SYSINFO_LEN] = '\0'; strcpy(sysState.systemInfo, tempName); } /* get the user login name from unix */ { char *tempName; tempName = getenv("USER"); if (tempName == NULL) tempName = getenv("LOGNAME"); if (strlen(tempName) > MAX_NAME_LEN || tempName == NULL) { strcpy(sysState.myUnixname, "joesmith"); printf("Failed to get a proper Unix login name. Using: %s\n", sysState.myUnixname); } strcpy(sysState.myUnixname, tempName); } /* create unmanaged dialogs */ createAboutBox(mainWindow); createCommandsHelpBox(mainWindow); while(1) { XEvent theEvent; XtAppNextEvent(nebulaIrcAppContext, &theEvent); XtDispatchEvent(&theEvent); } }