Пример #1
0
/*
**  This function will consume form values and stuff them into an appointment.
*/
extern Boolean
dssw_form_to_appt(DSSW *dssw, Dtcm_appointment *a, char *name, Tick t)
{
  return dssw_form_flags_to_appt(dssw, a, name, t, (int *)NULL);
}
Пример #2
0
void
ApptDragStart(
        Widget          widget,
        XEvent          *event,
        Calendar        *calendar,
        EditorType      editor_type)
{
        static XtCallbackRec convertCBRec[] = { {ApptConvertCB, NULL},
                                                {NULL, NULL} };
        static XtCallbackRec dragFinishCBRec[] =  { {DragFinishCB, NULL},
                                                    {NULL, NULL} };
 
        Display        *display 	= XtDisplay(widget);
        DragContext     *context = calloc(sizeof(DragContext), 1);
	Editor		*e = (Editor *) calendar->editor;
	GEditor		*ge = (GEditor *) calendar->geditor;
	ToDo		*t = (ToDo *) calendar->todo;
	Dtcm_appointment        *appt;
	char		*apptstr;
	int		preDsswFlags, preRfpFlags;
 
        context->calendar = calendar;
        context->editor_type = editor_type;
 
        if (editor_type == SingleEditorIcon)
	{
                context->editor = (caddr_t) e;
		appt = allocate_appt_struct(appt_write, DATAVER_ARCHIVE, NULL);
		load_appt_defaults(appt, (Props *) calendar->properties);
		preDsswFlags = e->dsswFlags;
		preRfpFlags = e->rfpFlags;
		if (!dssw_form_flags_to_appt(&e->dssw, appt,
					     calendar->calname,
					     now(), &e->dsswFlags) ||
		    !rfp_form_flags_to_appt(&e->rfp, appt,
					    calendar->calname,
					    &e->rfpFlags) ||
		    (preDsswFlags != e->dsswFlags) ||
		    (preRfpFlags != e->rfpFlags))
		{
		  e->doing_drag = False;
		  free_appt_struct(&appt);
		  free(context);
		  return;
		}
	}
        else if (editor_type == GroupEditorIcon)
	{
                context->editor = (caddr_t) ge;
		appt = allocate_appt_struct(appt_write, DATAVER_ARCHIVE, NULL);
		load_appt_defaults(appt, (Props *) calendar->properties);
		preDsswFlags = ge->dsswFlags;
		preRfpFlags = ge->rfpFlags;
		if (!dssw_form_flags_to_appt(&ge->dssw, appt,
					     calendar->calname,
					     now(), &ge->dsswFlags) ||
		    !rfp_form_flags_to_appt(&ge->rfp, appt,
					    calendar->calname,
					    &ge->rfpFlags) ||
		    (preDsswFlags != ge->dsswFlags) ||
		    (preRfpFlags != ge->rfpFlags))
		{
		  ge->doing_drag = False;
		  free_appt_struct(&appt);
		  free(context);
		  return;
		}
	}
        else if (editor_type == TodoEditorIcon)
	{
                context->editor = (caddr_t) t;
		if (t->cal->general->version < DATAVER4)
		  appt = allocate_appt_struct(appt_write, DATAVER_ARCHIVE, 
			      CSA_ENTRY_ATTR_REFERENCE_IDENTIFIER_I,
			      CSA_ENTRY_ATTR_LAST_UPDATE_I,
			      CSA_ENTRY_ATTR_ORGANIZER_I,
			      CSA_ENTRY_ATTR_START_DATE_I,
			      CSA_ENTRY_ATTR_TYPE_I,
			      CSA_ENTRY_ATTR_CLASSIFICATION_I,
			      CSA_ENTRY_ATTR_END_DATE_I,
			      CSA_X_DT_ENTRY_ATTR_SHOWTIME_I,
			      CSA_ENTRY_ATTR_SUMMARY_I,
			      CSA_ENTRY_ATTR_STATUS_I,
			      CSA_X_DT_ENTRY_ATTR_REPEAT_TYPE_I,
			      CSA_X_DT_ENTRY_ATTR_REPEAT_TIMES_I,
			      CSA_X_DT_ENTRY_ATTR_REPEAT_INTERVAL_I,
			      CSA_X_DT_ENTRY_ATTR_REPEAT_OCCURRENCE_NUM_I,
			      CSA_ENTRY_ATTR_AUDIO_REMINDER_I,
			      CSA_ENTRY_ATTR_FLASHING_REMINDER_I,
			      CSA_ENTRY_ATTR_MAIL_REMINDER_I,
			      CSA_ENTRY_ATTR_POPUP_REMINDER_I,
			      NULL);
		else
		  appt = allocate_appt_struct(appt_write,
					      DATAVER_ARCHIVE, NULL); 

		dssw_form_to_todo(&t->dssw, appt, calendar->calname, now());
		preRfpFlags = t->rfpFlags;
		if (!rfp_form_flags_to_appt(&t->rfp, appt,
					    calendar->calname,
					    &t->rfpFlags) ||
		    (preRfpFlags != t->rfpFlags))
		{
		  t->doing_drag = False;
		  free_appt_struct(&appt);
		  free(context);
		  return;
		}
		appt->type->value->item.sint32_value = CSA_TYPE_TODO;
		appt->show_time->value->item.sint32_value = True;
		t->completed_val = 
		  XmToggleButtonGadgetGetState(t->completed_toggle);
		appt->state->value->item.sint32_value = 
		  (t->completed_val) ? 
		    CSA_STATUS_COMPLETED : CSA_X_DT_STATUS_ACTIVE;
	}
	else
	{
	  free(context);
	  return;
	}
	apptstr = parse_attrs_to_string(appt, (Props *)calendar->properties, 
					attrs_to_string(appt->attrs,
							appt->count));
	free_appt_struct(&appt);

	context->data = apptstr;

        GetIcon(calendar);
 
        convertCBRec[0].closure = (XtPointer)context;
        dragFinishCBRec[0].closure = (XtPointer)context;
 
        if (e->drag_icon == NULL) {
                e->drag_icon = CreateDragSourceIcon(widget, e->drag_bitmap,
						    e->drag_mask);
        }
 
        if (DtDndVaDragStart(widget, event, DtDND_BUFFER_TRANSFER, 1,
            	XmDROP_COPY, 
		convertCBRec, dragFinishCBRec,
		DtNsourceIcon,		e->drag_icon,
		NULL)
            == NULL) {
 
                printf(catgets(calendar->DT_catd, 1, 239,
			       "DragStart returned NULL.\n"));
        }
}