/**************************************************************** Parameters after named parameters should be in triplets: - callback, callback_data, fixed_width *****************************************************************/ Widget popup_message_dialog(Widget parent, const char *dialogname, const char *text, ...) { va_list args; Widget dshell, dform, button; Position x, y; Dimension width, height; void (*fcb)(Widget, XtPointer, XtPointer); XtPointer client_data; char button_name[512]; int i, fixed_width; XtSetSensitive(parent, FALSE); I_T(dshell=XtCreatePopupShell(dialogname, transientShellWidgetClass, parent, NULL, 0)); dform=XtVaCreateManagedWidget("dform", formWidgetClass, dshell, NULL); /* caller should i18n text as desired */ XtVaCreateManagedWidget("dlabel", labelWidgetClass, dform, XtNlabel, (XtArgVal)text, NULL); i=0; va_start(args, text); while((fcb=((void(*)(Widget, XtPointer, XtPointer))(va_arg(args, void *))))) { client_data=va_arg(args, XtPointer); fixed_width=va_arg(args, int); fc_snprintf(button_name, sizeof(button_name), "button%d", i++); button=XtVaCreateManagedWidget(button_name, commandWidgetClass, dform, NULL); if (fixed_width) { I_LW(button); } else { I_L(button); } XtAddCallback(button, XtNcallback, fcb, client_data); } va_end(args); XtVaGetValues(parent, XtNwidth, &width, XtNheight, &height, NULL); XtTranslateCoords(parent, (Position) width/10, (Position) height/10, &x, &y); XtVaSetValues(dshell, XtNx, x, XtNy, y, NULL); XtPopup(dshell, XtGrabNone); return dshell; }
/************************************************************************** ... **************************************************************************/ void setup_widgets(void) { long i; int econ_label_count=10, econ_label_space=1; main_form = XtVaCreateManagedWidget("mainform", formWidgetClass, toplevel, NULL); menu_form = XtVaCreateManagedWidget("menuform", formWidgetClass, main_form, NULL); setup_menus(menu_form); /* main_vpane= XtVaCreateManagedWidget("mainvpane", panedWidgetClass, main_form, NULL); below_menu_form = XtVaCreateManagedWidget("belowmenuform", formWidgetClass, main_vpane, NULL); */ below_menu_form = XtVaCreateManagedWidget("belowmenuform", formWidgetClass, main_form, NULL); left_column_form = XtVaCreateManagedWidget("leftcolumnform", formWidgetClass, below_menu_form, NULL); map_form = XtVaCreateManagedWidget("mapform", formWidgetClass, below_menu_form, NULL); bottom_form = XtVaCreateManagedWidget("bottomform", formWidgetClass, /*main_vpane,*/ main_form, NULL); overview_canvas = XtVaCreateManagedWidget("overviewcanvas", xfwfcanvasWidgetClass, left_column_form, "exposeProc", (XtArgVal)overview_canvas_expose, "exposeProcData", (XtArgVal)NULL, NULL); info_command = XtVaCreateManagedWidget("infocommand", commandWidgetClass, left_column_form, XtNfromVert, (XtArgVal)overview_canvas, NULL); /* Don't put the citizens in here yet because not loaded yet */ for(i=0;i<econ_label_count;i++) { econ_label[i] = XtVaCreateManagedWidget("econlabels", commandWidgetClass, left_column_form, XtNwidth, tileset_small_sprite_width(tileset), XtNheight, tileset_small_sprite_height(tileset), i?XtNfromHoriz:NULL, i?econ_label[i-1]:NULL, XtNhorizDistance, econ_label_space, NULL); } bulb_label = XtVaCreateManagedWidget("bulblabel", labelWidgetClass, left_column_form, NULL); sun_label = XtVaCreateManagedWidget("sunlabel", labelWidgetClass, left_column_form, NULL); flake_label = XtVaCreateManagedWidget("flakelabel", labelWidgetClass, left_column_form, NULL); government_label = XtVaCreateManagedWidget("governmentlabel", labelWidgetClass, left_column_form, NULL); timeout_label = XtVaCreateManagedWidget("timeoutlabel", labelWidgetClass, left_column_form, NULL); turn_done_button = I_LW(XtVaCreateManagedWidget("turndonebutton", commandWidgetClass, left_column_form, XtNwidth, econ_label_count* (tileset_small_sprite_width(tileset)+econ_label_space), NULL)); unit_info_label = XtVaCreateManagedWidget("unitinfolabel", labelWidgetClass, left_column_form, NULL); unit_pix_canvas = XtVaCreateManagedWidget("unitpixcanvas", pixcommWidgetClass, left_column_form, XtNwidth, tileset_full_tile_width(tileset), XtNheight, tileset_full_tile_height(tileset), NULL); for(i=0; i<num_units_below; i++) { char unit_below_name[32]; my_snprintf(unit_below_name, sizeof(unit_below_name), "unitbelowcanvas%ld", i); unit_below_canvas[i] = XtVaCreateManagedWidget(unit_below_name, pixcommWidgetClass, left_column_form, XtNwidth, tileset_full_tile_width(tileset), XtNheight, tileset_full_tile_height(tileset), NULL); XtAddCallback(unit_below_canvas[i], XtNcallback, unit_icon_callback, (XtPointer)i); } more_arrow_label = XtVaCreateManagedWidget("morearrowlabel", labelWidgetClass, left_column_form, XtNfromHoriz, (XtArgVal)unit_below_canvas[num_units_below-1], NULL); map_vertical_scrollbar = XtVaCreateManagedWidget("mapvertiscrbar", scrollbarWidgetClass, map_form, NULL); map_canvas = XtVaCreateManagedWidget("mapcanvas", xfwfcanvasWidgetClass, map_form, "exposeProc", (XtArgVal)map_canvas_expose, "exposeProcData", (XtArgVal)NULL, NULL); map_horizontal_scrollbar = XtVaCreateManagedWidget("maphorizscrbar", scrollbarWidgetClass, map_form, NULL); outputwindow_text= I_SW(XtVaCreateManagedWidget("outputwindowtext", asciiTextWidgetClass, bottom_form, NULL)); inputline_text= XtVaCreateManagedWidget("inputlinetext", asciiTextWidgetClass, bottom_form, NULL); }