StyleManager.ApplicationTheme = new Expression_DarkTheme();
I have two sources for dragging and dropping appointments onto the ScheduleView. Both consist of dragging custom appt objects so they both utilize a custom dragdrop handler class and use the override of the ConvertDraggedData method. I am wondering if it would be possible to arrange the appts in such a way that if I grabbed appts from all over the view and then dragged them to a specific resource at a specific time, If I could then just have them updated in such a way that the appts were dropped one after another in the view (stacked horizontally in timeline view for example). I think the issue I am having is that destination slots need to be updated somehow to reflect where I want the appts to eventually be. Hopefully this isn't too confusing and someone can lead me in the right direction. Here is a bit of code that I wrote but obviously it isn't working like I expect at this point. I am basically trying to re-arrange the appts so that one comes right after another when they are dropped. The collection looks like I expect when it comes out of my ArrageTasks, but the result is the appts still end up in slots all over the view.
public
override
IEnumerable<IOccurrence> ConvertDraggedData(
object
data)
{
if
(data.GetType() ==
typeof
(DataObject))
{
return
ArrangeTasks(data);
//return (data as DataObject).GetData("MetrixTaskAppointments") as IList<IOccurrence>;
}
return
base
.ConvertDraggedData(data);
}
private
IEnumerable<IOccurrence> ArrangeTasks(
object
data)
{
IList<IOccurrence> appts = (data
as
DataObject).GetData(
"MetrixTaskAppointments"
)
as
IList<IOccurrence>;
IEnumerable<IOccurrence> sortedAppts = appts.OrderBy(f => f.Start);
IEnumerator apptEnumerator = sortedAppts.GetEnumerator();
DateTime savedPlanTravelEndDttm = DateTime.Now;
bool
firstTask =
true
;
while
(apptEnumerator.MoveNext())
{
MetrixTaskAppointment mAppt = (MetrixTaskAppointment)apptEnumerator.Current;
IAppointment appt = (Appointment)apptEnumerator.Current;
if
(firstTask ==
true
)
{
firstTask =
false
;
}
else
{
mAppt.PlanTravelStartDttm = savedPlanTravelEndDttm;
mAppt.PlanStartDttm = mAppt.PlanTravelStartDttm.AddMinutes(mAppt.PlanTravelToMin);
mAppt.PlanEndDttm = mAppt.PlanStartDttm.AddMinutes(mAppt.PlanTaskDurMin);
mAppt.PlanTravelEndDttm = mAppt.PlanEndDttm.AddMinutes(mAppt.PlanTravelReturnMin);
appt.Start = mAppt.PlanStartDttm;
appt.End = mAppt.PlanEndDttm;
}
savedPlanTravelEndDttm = mAppt.PlanTravelEndDttm;
}
return
sortedAppts;
}