|
|
@@ -571,7 +571,7 @@ namespace PRSDesktop
|
|
|
|
|
|
public CalendarConfigurationEvent? ConfigurationChanged;
|
|
|
|
|
|
- public event CalendarDataEvent? CustomiseContextMenu;
|
|
|
+ public event CalendarDataMenuEvent? CustomiseContextMenu;
|
|
|
|
|
|
public event CalendarDataEvent? SelectionChanged;
|
|
|
|
|
|
@@ -1089,6 +1089,32 @@ namespace PRSDesktop
|
|
|
Calendar_BlockRightClicked(sender, e);
|
|
|
}
|
|
|
|
|
|
+ public enum ContextMenuItems
|
|
|
+ {
|
|
|
+ Create,
|
|
|
+ Fill
|
|
|
+ }
|
|
|
+
|
|
|
+ public CalendarTimeSlot FillSlot(CalendarBlockEventArgs e, CalendarTimeSlot slot)
|
|
|
+ {
|
|
|
+ if(CalendarControl.GetEmptySpace(e.Point, out var start, out var end))
|
|
|
+ {
|
|
|
+ if(start is null || end is null)
|
|
|
+ {
|
|
|
+ var block = GetFillBlock(e.Date, e.Column, CalendarControl.GetTime(e.Point));
|
|
|
+ return new(slot.EmployeeID, e.Date, start ?? block?.Start ?? e.Start, end ?? block?.End ?? e.End);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return new(slot.EmployeeID, e.Date, start.Value, end.Value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return slot;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void Calendar_BlockRightClicked(object sender, CalendarBlockEventArgs e)
|
|
|
{
|
|
|
if(e.Value is AssignmentAppointment appointment)
|
|
|
@@ -1119,6 +1145,11 @@ namespace PRSDesktop
|
|
|
time.Start = start ?? block?.Start ?? time.Start;
|
|
|
time.Finish = end ?? block?.End ?? time.Finish;
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ time.Start = start.Value;
|
|
|
+ time.Finish = end.Value;
|
|
|
+ }
|
|
|
Client.Save(appointment.Model, "Adjusted to fill time");
|
|
|
}
|
|
|
});
|
|
|
@@ -1143,7 +1174,7 @@ namespace PRSDesktop
|
|
|
e.Menu.AddItem("Zoom Out", null, ZoomOut);
|
|
|
e.Menu.AddItem("Reset Zoom", null, ResetZoom);
|
|
|
|
|
|
- CustomiseContextMenu?.Invoke(e.Menu, new CalendarDataEventArgs(appointment.Model));
|
|
|
+ CustomiseContextMenu?.Invoke(e.Menu, new CalendarDataMenuEventArgs(appointment.Model, e));
|
|
|
}
|
|
|
else if(e.Value is null)
|
|
|
{
|
|
|
@@ -1151,33 +1182,15 @@ namespace PRSDesktop
|
|
|
|
|
|
var slot = new CalendarTimeSlot(employee.ID, e.Date, e.Start, e.End);
|
|
|
|
|
|
- var createmenu = e.Menu.AddItem("Create...", null, null);
|
|
|
+ var createmenu = e.Menu.AddItem("Create...", null, null)
|
|
|
+ .WithName($"Menu_{nameof(ContextMenuItems.Create)}");
|
|
|
createmenu.AddItem("New Assignment", null, slot, slot => CreateAssignment(slot));
|
|
|
createmenu.AddItem("New Meeting", null, slot, CreateMeeting);
|
|
|
|
|
|
- CalendarTimeSlot FillSlot()
|
|
|
- {
|
|
|
- if(CalendarControl.GetEmptySpace(e.Point, out var start, out var end))
|
|
|
- {
|
|
|
- if(start is null || end is null)
|
|
|
- {
|
|
|
- var block = GetFillBlock(e.Date, e.Column, CalendarControl.GetTime(e.Point));
|
|
|
- return new(employee.ID, e.Date, start ?? block?.Start ?? e.Start, end ?? block?.End ?? e.End);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return new(employee.ID, e.Date, start.Value, end.Value);
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return slot;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- var fillMenu = e.Menu.AddItem("Fill...", null, null);
|
|
|
- fillMenu.AddItem("New Assignment", null, () => CreateAssignment(FillSlot()));
|
|
|
- fillMenu.AddItem("New Meeting", null, () => CreateMeeting(FillSlot()));
|
|
|
+ var fillMenu = e.Menu.AddItem("Fill...", null, null)
|
|
|
+ .WithName($"Menu_{nameof(ContextMenuItems.Fill)}");
|
|
|
+ fillMenu.AddItem("New Assignment", null, () => CreateAssignment(FillSlot(e, slot)));
|
|
|
+ fillMenu.AddItem("New Meeting", null, () => CreateMeeting(FillSlot(e, slot)));
|
|
|
|
|
|
if (_copiedmodel != null)
|
|
|
{
|
|
|
@@ -1190,7 +1203,7 @@ namespace PRSDesktop
|
|
|
e.Menu.AddItem("Zoom Out", null, ZoomOut);
|
|
|
e.Menu.AddItem("Reset Zoom", null, ResetZoom);
|
|
|
|
|
|
- CustomiseContextMenu?.Invoke(e.Menu, new CalendarDataEventArgs(slot));
|
|
|
+ CustomiseContextMenu?.Invoke(e.Menu, new CalendarDataMenuEventArgs(slot, e));
|
|
|
}
|
|
|
}
|
|
|
|