예제 #1
0
파일: Manage.c 프로젝트: aosm/X11libs
void XtManageChildren(
    WidgetList children,
    Cardinal num_children)
{
    Widget parent, hookobj;
#ifdef XTHREADS
    XtAppContext app;
#endif

    if (num_children == 0) return;
    if (children[0] == NULL) {
	XtWarningMsg(XtNinvalidChild, XtNxtManageChildren, XtCXtToolkitError,
		     "null child passed to XtManageChildren",
		     (String*)NULL, (Cardinal*)NULL);
	return;
    }
#ifdef XTHREADS
    app = XtWidgetToApplicationContext(children[0]);
#endif
    LOCK_APP(app);
    parent = children[0]->core.parent;
    if (parent->core.being_destroyed) {
	UNLOCK_APP(app);
	return;
    }
    ManageChildren(children, num_children, parent, (Boolean)False,
		   XtNxtManageChildren);
    hookobj = XtHooksOfDisplay(XtDisplayOfObject(children[0]));
    if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) {
	XtChangeHookDataRec call_data;

	call_data.type = XtHmanageChildren;
	call_data.widget = parent;
	call_data.event_data = (XtPointer) children;
	call_data.num_event_data = num_children;
	XtCallCallbackList(hookobj,
		((HookObject)hookobj)->hooks.changehook_callbacks,
		(XtPointer)&call_data);
    }
    UNLOCK_APP(app);
} /* XtManageChildren */
예제 #2
0
파일: alarm.c 프로젝트: juddy/edcde
/*
**  Functions to build and popup the postup reminder
*/
extern void
postup_show_proc(Calendar *c, CSA_reminder_reference *r) {
        int			start_hr, stop_hr;
	char			text[BUFSIZ];
	time_t			st, sp = 0;
	Lines			*lines, *l = NULL;
	Props			*p = (Props *)c->properties;
	Widget			pu_frame, pu_base_form, 
				pu_text_form, separator, 
				pu_form, button_form, pu_date,
				pu_range, pu_image, pu_close, line, last_line;
	Boolean			start_am, stop_am;
	XmString		xmstr;
	CSA_return_code		stat;
	DisplayType		dis_t = get_int_prop(p, CP_DEFAULTDISP);
	OrderingType		ord_t = get_int_prop(p, CP_DATEORDERING);
	SeparatorType		sep_t = get_int_prop(p, CP_DATESEPARATOR);
	Dtcm_appointment	*appt;
	char			*title;

	if (!c->postup)
		c->postup = XtAppCreateShell("calendar_postup", "Dtcm",
			xmDialogShellWidgetClass, c->xcontext->display,
			NULL, 0);

	/*
	**  Create the Motif objects
	*/
	title = XtNewString(catgets(c->DT_catd, 1, 839, "Calendar : Reminder"));
	pu_frame = XtVaCreatePopupShell("pu_frame",
		topLevelShellWidgetClass, c->postup,
		XmNtitle, title,
		XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE,
		XmNdeleteResponse,      XmDESTROY,
		NULL);
	XtFree(title);

	pu_base_form = XtVaCreateWidget("pu_base_form",
		xmFormWidgetClass, pu_frame,
		NULL);

	pu_text_form = XtVaCreateWidget("pu_test_form",
		xmFormWidgetClass, pu_base_form,
		XmNtopAttachment, XmATTACH_FORM,
		XmNleftAttachment, XmATTACH_FORM,
		XmNtopAttachment, XmATTACH_FORM,
		XmNleftOffset, 1,
		XmNrightOffset, 1,
		XmNtopOffset, 1,
		NULL);

	pu_image = XtVaCreateWidget("pu_image",
		xmLabelGadgetClass, pu_text_form,
		XmNleftAttachment, XmATTACH_FORM,
		XmNtopAttachment, XmATTACH_FORM,
		XmNtopOffset, 5,
		XmNlabelType, XmPIXMAP,
		XmNlabelPixmap, ((Props_pu *)c->properties_pu)->postup_pixmap,
		NULL);

	button_form = XtVaCreateWidget("pu_form",
		xmFormWidgetClass, pu_base_form,
		XmNbottomAttachment, XmATTACH_FORM,
		XmNbottomOffset, 2,
		XmNleftOffset, 1,
		XmNrightOffset, 1,
		XmNleftAttachment, XmATTACH_FORM,
		XmNrightAttachment, XmATTACH_FORM,
		XmNfractionBase, 3,
		NULL);

	xmstr = XmStringCreateLocalized(catgets(c->DT_catd, 1, 680, "Close"));
	pu_close = XtVaCreateManagedWidget("close", 
		xmPushButtonWidgetClass, button_form, 
                XmNtopAttachment, 	XmATTACH_FORM,
		XmNbottomAttachment, 	XmATTACH_FORM,
		XmNleftAttachment, 	XmATTACH_POSITION,
		XmNrightAttachment, 	XmATTACH_POSITION,
		XmNleftPosition,	1,
		XmNrightPosition,	2,
		XmNbottomOffset, 	1,
                XmNlabelString, 	xmstr,
                NULL);
	XmStringFree(xmstr);

	separator = XtVaCreateWidget("separator",
                xmSeparatorGadgetClass,
                pu_base_form,
                XmNleftAttachment,      XmATTACH_FORM,
                XmNrightAttachment,     XmATTACH_FORM,
                XmNbottomAttachment,   	XmATTACH_WIDGET,
                XmNbottomWidget,        button_form,
		XmNtopAttachment, XmATTACH_WIDGET,
		XmNtopWidget, pu_text_form,
		XmNtopOffset, 1,
                NULL);


	pu_form = XtVaCreateWidget("pu_form",
		xmFormWidgetClass, pu_text_form,
		XmNtopAttachment, XmATTACH_FORM,
		XmNtopOffset, 1,
		XmNleftAttachment, XmATTACH_WIDGET,
		XmNleftWidget, pu_image,
		XmNverticalSpacing, 10,
		NULL);

	pu_date = XtVaCreateWidget("pu_date",
		xmLabelGadgetClass, pu_form,
		XmNleftAttachment, XmATTACH_FORM,
		XmNtopAttachment, XmATTACH_FORM,
		NULL);

	pu_range = XtVaCreateWidget("pu_range",
		xmLabelGadgetClass, pu_form,
		XmNleftAttachment, XmATTACH_FORM,
		XmNtopAttachment, XmATTACH_WIDGET,
		XmNtopWidget, pu_date,
		XmNtopOffset, 8,
		NULL);

	XtAddCallback(pu_close, XmNactivateCallback, close_cb, pu_frame);

	appt = allocate_appt_struct(appt_read,
				    c->general->version,
				    CSA_ENTRY_ATTR_START_DATE_I,
				    CSA_ENTRY_ATTR_END_DATE_I,
				    CSA_ENTRY_ATTR_SUMMARY_I,
				    CSA_X_DT_ENTRY_ATTR_SHOWTIME_I,
				    NULL);
	stat = query_appt_struct(c->cal_handle, r->entry, appt);
	backend_err_msg(c->frame, c->calname, stat,
			((Props_pu *)c->properties_pu)->xm_error_pixmap);
	if (stat != CSA_SUCCESS) {
		free_appt_struct(&appt);
		return;
	}

	_csa_iso8601_to_tick(appt->time->value->item.date_time_value, &st);
	if (appt->end_time)
		_csa_iso8601_to_tick(appt->end_time->value->\
			item.date_time_value, &sp);
	l = lines = text_to_lines(appt->what->value->item.string_value, 5);
	last_line = 0;
	while (l) {
		xmstr = XmStringCreateLocalized(l->s);
		line = XtVaCreateWidget("text_line",
			xmLabelGadgetClass, pu_text_form,
			XmNlabelString, xmstr,
			XmNleftAttachment, XmATTACH_WIDGET,
			XmNleftWidget, pu_form,
			XmNleftOffset, 15,
			NULL);
		XmStringFree(xmstr);

		if (last_line)
			XtVaSetValues(line, 
				XmNtopAttachment, XmATTACH_WIDGET,
				XmNtopWidget, last_line,
				XmNtopOffset, 8,
				NULL);
		else
			XtVaSetValues(line, 
				XmNtopAttachment, XmATTACH_FORM,
				XmNtopOffset, 8,
				NULL);

		last_line = line;
		l = l->next;
	}
	if (lines)
		destroy_lines(lines);

	/*
	**  Now fill in the correct information
	*/
	set_date_in_widget(st, pu_date, ord_t, sep_t);

        if (!showtime_set(appt) || magic_time(st)) 
                text[0] = '\0';
	else {
		start_hr = hour(st);
		if (sp) stop_hr = hour(sp);
		if (dis_t == HOUR12) {
			start_am = adjust_hour(&start_hr);
			if (sp) {
				/* NL_COMMENT

				   Message 1087 : This message is used to form
				   the alarm string that appears in the
				   reminder popup.  In the C locale it would
				   look something like this:

				   ``From 11:00am to 1:00pm''

				   In the printf conversion string the $n are:

					$1 	-> start hour
					$2	-> start minute
					$3	-> am or pm
					$4	-> stop hour
					$5	-> stop minute
					$6	-> am or pm

				*/
			        char *am = XtNewString(catgets(c->DT_catd, 
							       1, 4, "am"));
			        char *pm = XtNewString(catgets(c->DT_catd, 
							       1, 3, "pm"));
				stop_am = adjust_hour(&stop_hr);
				sprintf(text, catgets(c->DT_catd, 1, 1087,
				   "From %1$2d:%2$02d%3$s to %4$2d:%5$02d%6$s"),
					start_hr, minute(st),
					(start_am) ? am : pm,
					stop_hr, minute(sp),
					(stop_am) ? am : pm
					);
				XtFree(am);
				XtFree(pm);
			} else {
				/* NL_COMMENT

				   Message 1088 : This message is used to form
				   the alarm string that appears in the
				   reminder popup.  It is used when an appt
				   does not have and ``end'' time.  In the 
				   C locale it would look something like this:

				   ``11:00am''

				   In the printf conversion string the $n are:

					$1 	-> start hour
					$2	-> start minute
					$3	-> am or pm

				*/
			        char *meridian = 
				  XtNewString ((start_am) ? 
					       catgets(c->DT_catd, 1, 4, "am"):
					       catgets(c->DT_catd, 1, 3, "pm"));
				
				sprintf(text, catgets(c->DT_catd, 1, 1088,
				   			"%1$2d:%2$02d%3$s"), 
					start_hr, minute(st), meridian
					);
				XtFree(meridian);
			}
		} else {
			if (sp) {
				/* NL_COMMENT

				   Message 1089 : This message is used to form
				   the alarm string that appears in the
				   reminder popup.  This string is used when
				   a user has asked that times be displayed
				   in 24 hour format.  In the C locale it 
				   would look something like this:

				   ``From 0100 to 1600''

				   In the printf conversion string the $n are:

					$1 	-> start hour
					$2	-> start minute
					$3	-> stop hour
					$4	-> stop minute

				*/
				sprintf(text, catgets(c->DT_catd, 1, 1089,
				   "From %1$02d%2$02d to %3$02d%4$02d"),
					start_hr, minute(st), stop_hr, 
					minute(sp));
			} else {
				/* NL_COMMENT

				   Message 1090 : This message is used to form
				   the alarm string that appears in the
				   reminder popup.  This string is used when
				   an appt does not have an end time and the
				   user has asked that times be displayed
				   in 24 hour format.  In the C locale it 
				   would look something like this:

				   ``1600''

				   In the printf conversion string the $n are:

					$1 	-> start hour
					$2	-> start minute

				*/
				sprintf(text, catgets(c->DT_catd, 1, 1090,
							"%1$02d%2$02d"), 
					start_hr, minute(st));
			}
		}
	}

	free_appt_struct(&appt);
	xmstr = XmStringCreateLocalized(text);
	XtVaSetValues(pu_range, XmNlabelString, xmstr,
		NULL);
	XmStringFree(xmstr);

	ManageChildren(pu_form);
	ManageChildren(pu_base_form);
	ManageChildren(pu_text_form);
	XtManageChild(pu_base_form);
	XtVaSetValues(button_form, XmNdefaultButton, pu_close, NULL);
        XtVaSetValues(button_form, XmNcancelButton, pu_close, NULL);
	XtPopup(pu_frame, XtGrabNone);
	DtWsmOccupyAllWorkspaces(c->xcontext->display, XtWindow(pu_frame));
}
예제 #3
0
extern void
make_browselist(Calendar *c)
{
	int		ac;
	Arg		args[15];
	XmString	label_str;
	Widget		separator,
			button_form;
	Browselist	*bl = (Browselist *)c->browselist;
	Dimension	label_width;
	char		*title;

	if (!bl)
		return;

	title = XtNewString(catgets(c->DT_catd, 1, 963, 
				    "Calendar : Menu Editor"));
	bl->frame = XtVaCreatePopupShell("menu_editor_frame",
                xmDialogShellWidgetClass, c->frame,
		XmNdeleteResponse, 	XmDO_NOTHING,
                XmNtitle, title,
                XmNallowShellResize, 	True,
		XmNmappedWhenManaged, 	False,
		NULL);
	setup_quit_handler(bl->frame, blist_quit_handler, (caddr_t)bl);
	XtFree(title);

        bl->form = XtVaCreateWidget("menu_editor_form",
                xmFormWidgetClass, bl->frame,
                XmNautoUnmanage, 	False,
                XmNfractionBase, 	5,
                NULL);

	label_str = XmStringCreateLocalized(
				catgets(c->DT_catd, 1, 410, "User Name:"));
       	bl->username_label = XtVaCreateWidget("name_label",
		xmLabelGadgetClass, bl->form,
		XmNlabelString, 	label_str,
               	NULL);
	XmStringFree(label_str);

	ac = 0;
	XtSetArg(args[ac], XmNorientation, 	XmVERTICAL); 	++ac;
	XtSetArg(args[ac], XmNpacking, 		XmPACK_COLUMN); ++ac;
	XtSetArg(args[ac], XmNtopAttachment, 	XmATTACH_FORM); ++ac;
	XtSetArg(args[ac], XmNtopOffset, 	6); 		++ac;
	XtSetArg(args[ac], XmNrightAttachment, 	XmATTACH_FORM); ++ac;
	XtSetArg(args[ac], XmNrightOffset, 	5); 		++ac;
	bl->edit_rc_mgr = XmCreateRowColumn(bl->form, "edit_rc_mgr", args, ac);

	label_str = XmStringCreateLocalized(
				catgets(c->DT_catd, 1, 686, "Add Name"));
       	bl->add_button = XtVaCreateWidget("add_button",
		xmPushButtonWidgetClass, bl->edit_rc_mgr,
		XmNlabelString, 	label_str,
		XmNnavigationType, 	XmTAB_GROUP,
               	NULL);
	XmStringFree(label_str);
	XtAddCallback(bl->add_button, XmNactivateCallback,
				blist_addname, (XtPointer)c);

	label_str = XmStringCreateLocalized(
				catgets(c->DT_catd, 1, 687, "Remove Name"));
   	bl->remove_button = XtVaCreateWidget("remove_button",
		xmPushButtonWidgetClass, bl->edit_rc_mgr,
		XmNlabelString, 	label_str,
		XmNnavigationType, 	XmTAB_GROUP,
                NULL);
	XmStringFree(label_str);
        XtAddCallback(bl->remove_button, XmNactivateCallback, 
				blist_removenames, (XtPointer)c);
	ManageChildren(bl->edit_rc_mgr);

	XtVaGetValues(bl->username_label, XmNwidth, &label_width, NULL);

       	bl->username = XtVaCreateWidget("username",
		xmTextFieldWidgetClass, bl->form,
		XmNleftAttachment, 	XmATTACH_FORM,
		XmNleftOffset, 		label_width + 15,
		XmNrightAttachment, 	XmATTACH_WIDGET,
		XmNrightWidget, 	bl->edit_rc_mgr,
		XmNrightOffset, 	5,
		XmNtopAttachment,	XmATTACH_FORM,
		XmNtopOffset, 		5,
		XmNcolumns, 		40,
               	NULL);
	XtAddCallback(bl->username, XmNactivateCallback, blist_addname,
				(XtPointer)c);
	XtAddCallback(bl->username, XmNvalueChangedCallback, 
				bl_pending_change, (XtPointer)c);

	XtVaSetValues(bl->username_label,
		XmNbottomAttachment,    XmATTACH_OPPOSITE_WIDGET,
                XmNbottomWidget,        bl->username,
                XmNbottomOffset,        5,
                XmNrightAttachment,     XmATTACH_WIDGET,
                XmNrightWidget,         bl->username,
                XmNrightOffset,         5,
                NULL);

	label_str = XmStringCreateLocalized(
			catgets(c->DT_catd, 1, 688, "Browse Menu Items"));
       	bl->list_label = XtVaCreateWidget("list_label", 
		xmLabelWidgetClass, bl->form,
		XmNlabelString, 	label_str,
		XmNtopAttachment, 	XmATTACH_WIDGET,
		XmNtopWidget, 		bl->username,
		XmNtopOffset, 		10,
		XmNleftAttachment, 	XmATTACH_FORM,
		XmNleftOffset, 		5,
               	NULL);
	XmStringFree(label_str);

	bl->message = XtVaCreateWidget("message_text",
                xmLabelGadgetClass, 
		bl->form,
		XmNalignment, 		XmALIGNMENT_BEGINNING,
                XmNleftAttachment, 	XmATTACH_FORM,
		XmNleftOffset, 		5,
                XmNrightAttachment, 	XmATTACH_FORM,
		XmNrightOffset, 	5,
                XmNbottomAttachment, 	XmATTACH_FORM,
		XmNbottomOffset, 	5,
                NULL);

	button_form = XtVaCreateWidget("menu_editor_button_form_mgr",
                xmFormWidgetClass,
                bl->form,
                XmNautoUnmanage,        False,
                XmNfractionBase,        5,
                XmNhorizontalSpacing,   5,
                XmNleftAttachment,      XmATTACH_FORM,
                XmNleftOffset,          5,
                XmNrightAttachment,     XmATTACH_FORM,
                XmNrightOffset,         5,
                XmNbottomAttachment,    XmATTACH_WIDGET,
                XmNbottomWidget,        bl->message,
                XmNbottomOffset,        5,
                NULL);
	
	label_str = XmStringCreateLocalized(catgets(c->DT_catd, 1, 655, "OK"));
	bl->ok_button = XtVaCreateWidget("ok_button",
		xmPushButtonWidgetClass,
		button_form,
		XmNlabelString, 	label_str,
		XmNleftAttachment, 	XmATTACH_POSITION,
		XmNleftPosition, 	0,
		XmNleftOffset, 		5,
		XmNrightAttachment, 	XmATTACH_POSITION,
		XmNrightPosition, 	1,
		XmNrightOffset, 	5,
		XmNbottomAttachment, 	XmATTACH_FORM,
                NULL);
	XmStringFree(label_str);
	XtAddCallback(bl->ok_button, XmNactivateCallback, blist_ok,
		      		(XtPointer)c);

	label_str = XmStringCreateLocalized(
				catgets(c->DT_catd, 1, 460, "Apply"));
	bl->apply_button = XtVaCreateWidget("apply_button",
		xmPushButtonWidgetClass,
		button_form,
		XmNlabelString, 	label_str,
		XmNleftAttachment, 	XmATTACH_POSITION,
		XmNleftPosition, 	1,
		XmNleftOffset, 		5,
		XmNrightAttachment, 	XmATTACH_POSITION,
		XmNrightPosition, 	2,
		XmNrightOffset, 	5,
		XmNbottomAttachment, 	XmATTACH_FORM,
                NULL);
	XmStringFree(label_str);
	XtAddCallback(bl->apply_button, XmNactivateCallback, blist_apply,
		      		(XtPointer)c);

	label_str = XmStringCreateLocalized(
				catgets(c->DT_catd, 1, 691, "Reset"));
        bl->reset_button = XtVaCreateWidget("reset_button",
		xmPushButtonWidgetClass,
		button_form,
		XmNlabelString, 	label_str,
		XmNleftAttachment, 	XmATTACH_POSITION,
		XmNleftPosition, 	2,
		XmNleftOffset, 		5,
		XmNrightAttachment, 	XmATTACH_POSITION,
		XmNrightPosition, 	3,
		XmNrightOffset, 	5,
		XmNbottomAttachment, 	XmATTACH_FORM,
                NULL);
	XmStringFree(label_str);
	XtAddCallback(bl->reset_button, XmNactivateCallback,
			blist_reset_cb, (XtPointer)c);

	label_str = XmStringCreateLocalized(
				catgets(c->DT_catd, 1, 923, "Cancel"));
        bl->cancel_button = XtVaCreateWidget("cancel_button",
	 	xmPushButtonWidgetClass,
		button_form,
		XmNlabelString, 	label_str,
		XmNleftAttachment, 	XmATTACH_POSITION,
		XmNleftPosition, 	3,
		XmNleftOffset, 		5,
		XmNrightAttachment, 	XmATTACH_POSITION,
		XmNrightPosition, 	4,
		XmNrightOffset, 	5,
		XmNbottomAttachment, 	XmATTACH_FORM,
                NULL);
	XmStringFree(label_str);
	XtAddCallback(bl->cancel_button, XmNactivateCallback, blist_cancel_cb,
				(XtPointer)c);

	label_str = XmStringCreateLocalized(catgets(c->DT_catd, 1, 77, "Help"));
        bl->help_button = XtVaCreateWidget("help_button",
		xmPushButtonWidgetClass,
		button_form,
		XmNlabelString, 	label_str,
		XmNleftAttachment, 	XmATTACH_POSITION,
		XmNleftPosition, 	4,
		XmNleftOffset, 		5,
		XmNrightAttachment, 	XmATTACH_POSITION,
		XmNrightPosition, 	5,
		XmNrightOffset, 	5,
		XmNbottomAttachment, 	XmATTACH_FORM,
                NULL);
	XmStringFree(label_str);
        XtAddCallback(bl->help_button, XmNactivateCallback, 
		(XtCallbackProc)help_cb, MENU_EDITOR_HELP_BUTTON);
        XtAddCallback(bl->form, XmNhelpCallback,
                (XtCallbackProc)help_cb, (XtPointer) MENU_EDITOR_HELP_BUTTON);

	ManageChildren(button_form);

	separator = XtVaCreateWidget("separator",
                xmSeparatorGadgetClass,
                bl->form,
                XmNleftAttachment,      XmATTACH_FORM,
                XmNrightAttachment,     XmATTACH_FORM,
                XmNbottomAttachment,   	XmATTACH_WIDGET,
                XmNbottomWidget,        button_form,
		XmNbottomOffset, 	5,
                NULL);
	ac = 0;
	XtSetArg(args[ac], XmNvisibleItemCount, 8); ++ac;
	XtSetArg(args[ac], XmNselectionPolicy, XmMULTIPLE_SELECT); ++ac;
	XtSetArg(args[ac], XmNdoubleClickInterval, 5); ++ac;
	bl->browse_list = (Widget)XmCreateScrolledList(bl->form, "browse_list",
						       args, ac);
        bl->browse_list_sw = XtParent(bl->browse_list);

	XtVaSetValues(bl->browse_list_sw,
                XmNvisualPolicy, 	XmVARIABLE,
                XmNtopAttachment, 	XmATTACH_WIDGET,
                XmNtopWidget, 		bl->list_label,
		XmNtopOffset, 		5,
                XmNleftAttachment, 	XmATTACH_OPPOSITE_WIDGET,
		XmNleftWidget, 		bl->list_label,
		XmNrightAttachment, 	XmATTACH_OPPOSITE_WIDGET,
		XmNrightWidget, 	bl->username,
		XmNrightOffset, 	5,
		XmNbottomAttachment, 	XmATTACH_WIDGET,
		XmNbottomWidget, 	separator,
		XmNbottomOffset,	5,
		XmNwidth, 50,
		NULL);
	XtManageChild(bl->browse_list);

        XtAddCallback(bl->browse_list, XmNmultipleSelectionCallback, 
				bl_list_selection_cb, (XtPointer)c);

	ManageChildren(bl->form);
	XtManageChild(bl->form);

        /*
	 * Set default button
	 */
        XtVaSetValues(bl->form, XmNcancelButton, bl->cancel_button, NULL);
        XmProcessTraversal(bl->username, XmTRAVERSE_CURRENT);
        XtVaSetValues(bl->form, XmNinitialFocus, bl->username, NULL);

	/*
	 * For storing the list of names
	 */
	if (!bl->blist_data)
		bl->blist_data = CmDataListCreate();
}
예제 #4
0
static void
create_month_panels(Calendar *c)
{
	Day *d = (Day *)c->view->day_info;
	Arg al[20];
	int ac;

	ac=0;
	XtSetArg(al[ac], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); ac++;
        XtSetArg(al[ac], XmNtopWidget, c->canvas); ac++;
	XtSetArg(al[ac], XmNrightAttachment, XmATTACH_POSITION); ac++;
        XtSetArg(al[ac], XmNrightPosition, 40); ac++;
	XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
        XtSetArg(al[ac], XmNleftOffset, 2); ac++;
        XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_POSITION); ac++;
        XtSetArg(al[ac], XmNbottomPosition, 95); ac++;
        XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
	d->panel_form = XmCreateForm(c->form, "quarter", al, ac);


	ac=0;
        XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++;
        XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
	XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_POSITION); ac++;
        XtSetArg(al[ac], XmNbottomPosition, 33); ac++;
        XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
	XtSetArg(al[ac], XmNmonth, month(previousmonth(c->view->date))); ac++;
	XtSetArg(al[ac], XmNyear, year(previousmonth(c->view->date))); ac++;
        d->month_panels[0] = XmCreateMonthPanel(d->panel_form, "lastMonth", al, ac);
        XtAddCallback(d->month_panels[0], XmNactivateCallback,
                        day_btn_cb, (XtPointer) c);
	XtAddCallback(d->month_panels[0], XmNhelpCallback, 
			(XtCallbackProc)help_view_cb, NULL);

	ac=0;
        XtSetArg(al[ac], XmNtopAttachment, XmATTACH_POSITION); ac++;
	XtSetArg(al[ac], XmNtopPosition, 33); ac++;
        XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
	XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_POSITION); ac++;
        XtSetArg(al[ac], XmNbottomPosition, 66); ac++;
        XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
	XtSetArg(al[ac], XmNmonth, month(c->view->date)); ac++;
	XtSetArg(al[ac], XmNyear, year(c->view->date)); ac++;
        d->month_panels[1] = XmCreateMonthPanel(d->panel_form, "thisMonth", al, ac);
        XtAddCallback(d->month_panels[1], XmNactivateCallback,
                        day_btn_cb, (XtPointer) c);
	XtAddCallback(d->month_panels[1], XmNhelpCallback, 
			(XtCallbackProc)help_view_cb, NULL);

	ac=0;
        XtSetArg(al[ac], XmNtopAttachment, XmATTACH_POSITION); ac++;
        XtSetArg(al[ac], XmNtopPosition, 66); ac++;
        XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++;
        XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++;
        XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++;
	XtSetArg(al[ac], XmNmonth, month(nextmonth(c->view->date))); ac++;
	XtSetArg(al[ac], XmNyear, year(nextmonth(c->view->date))); ac++;
        d->month_panels[2] = XmCreateMonthPanel(d->panel_form, "nextMonth", al, ac);
        XtAddCallback(d->month_panels[2], XmNactivateCallback,
                        day_btn_cb, (XtPointer) c);
	XtAddCallback(d->month_panels[2], XmNhelpCallback, 
			(XtCallbackProc)help_view_cb, NULL);

	ManageChildren(d->panel_form);

}
예제 #5
0
파일: Manage.c 프로젝트: aosm/X11libs
void XtChangeManagedSet(
    WidgetList unmanage_children,
    Cardinal num_unmanage,
    XtDoChangeProc do_change_proc,
    XtPointer client_data,
    WidgetList manage_children,
    Cardinal num_manage)
{
    WidgetList childp;
    Widget parent;
    int i;
    Cardinal some_unmanaged;
    Boolean call_out;
    CompositeClassExtension ext;
    XtAppContext app;
    Widget hookobj;
    XtChangeHookDataRec call_data;

    if (num_unmanage == 0 && num_manage == 0)
	return;

    /* specification doesn't state that library will check for NULL in list */

    childp = num_unmanage ? unmanage_children : manage_children;
    app = XtWidgetToApplicationContext(*childp);
    LOCK_APP(app);

    parent = XtParent(*childp);
    childp = unmanage_children;
    for (i = num_unmanage; --i >= 0 && XtParent(*childp) == parent; childp++);
    call_out = (i >= 0);
    childp = manage_children;
    for (i = num_manage;   --i >= 0 && XtParent(*childp) == parent; childp++);
    if (call_out || i >= 0) {
	XtAppWarningMsg(app, "ambiguousParent", XtNxtChangeManagedSet,
			XtCXtToolkitError, "Not all children have same parent",
			(String *)NULL, (Cardinal *)NULL);
    }
    if (! XtIsComposite(parent)) {
	UNLOCK_APP(app);
	XtAppErrorMsg(app, "invalidParent", XtNxtChangeManagedSet,
		      XtCXtToolkitError,
		      "Attempt to manage a child when parent is not Composite",
		      (String *) NULL, (Cardinal *) NULL);
    }
    if (parent->core.being_destroyed) {
	UNLOCK_APP(app);
	return;
    }

    call_out = False;
    if (do_change_proc) {
	ext = (CompositeClassExtension)
	    XtGetClassExtension(parent->core.widget_class,
				XtOffsetOf(CompositeClassRec,
					   composite_class.extension),
				NULLQUARK, XtCompositeExtensionVersion,
				sizeof(CompositeClassExtensionRec));
	if (!ext || !ext->allows_change_managed_set)
	    call_out = True;
    }

    UnmanageChildren(unmanage_children, num_unmanage, parent,
		     &some_unmanaged, call_out, XtNxtChangeManagedSet);

    hookobj = XtHooksOfDisplay(XtDisplay(parent));
    if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) {
	call_data.type = XtHunmanageSet;
	call_data.widget = parent;
	call_data.event_data = (XtPointer) unmanage_children;
	call_data.num_event_data = num_unmanage;
	XtCallCallbackList(hookobj,
		((HookObject)hookobj)->hooks.changehook_callbacks,
		(XtPointer) &call_data);
    }

    if (do_change_proc)
	(*do_change_proc)(parent, unmanage_children, &num_unmanage,
			  manage_children, &num_manage, client_data);

    call_out = (some_unmanaged && !call_out);
    ManageChildren(manage_children, num_manage, parent, call_out,
		   XtNxtChangeManagedSet);

    if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) {
	call_data.type = XtHmanageSet;
	call_data.event_data = (XtPointer) manage_children;
	call_data.num_event_data = num_manage;
	XtCallCallbackList(hookobj,
		((HookObject)hookobj)->hooks.changehook_callbacks,
		(XtPointer) &call_data);
    }
    UNLOCK_APP(app);
} /* XtChangeManagedSet */