Files
BeWoPlaner/BeWo/Scheduler/View/AbstractAppointmentEditForm.cs
2016-06-27 01:45:38 +02:00

167 lines
5.7 KiB
C#

using System;
using System.Windows.Controls;
using DevExpress.Xpf.Scheduler;
using DevExpress.Xpf.Scheduler.Drawing;
using DevExpress.XtraScheduler;
using DevExpress.Xpf.Scheduler.UI;
using SchedulerControl = DevExpress.Xpf.Scheduler.SchedulerControl;
using System.Globalization;
using System.Windows;
using System.Windows.Media;
namespace BeWo.Scheduler.View
{
public class AbstractAppointmentEditForm : UserControl
{
private readonly SchedulerControl mSchedulerControl;
private readonly Appointment mAppointment;
private readonly AppointmentFormController mController;
private RecurrenceVisualController mRecurrenceVisualController;
protected AbstractAppointmentEditForm() { }
public AbstractAppointmentEditForm(SchedulerControl schedulerControl, Appointment appointment)
{
mSchedulerControl = schedulerControl;
mAppointment = appointment;
mController = CreateFormController(schedulerControl, appointment);
mRecurrenceVisualController = new RecurrenceVisualController(mController);
}
public virtual AppointmentFormController CreateFormController(SchedulerControl schedulerControl, Appointment appointment)
{
return new AppointmentFormController(schedulerControl, appointment);
}
public SchedulerControl Control { get { return mSchedulerControl; } }
public Appointment Appointment { get { return mAppointment; } }
public AppointmentFormController Controller { get { return mController; } }
public string TimeEditMask { get { return CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern; } }
public RecurrenceVisualController RecurrenceVisualController { get { return mRecurrenceVisualController; } }
protected internal bool IsNewAppointment { get { return mController == null || mController.IsNewAppointment; } }
protected bool ShouldShowRecurrence
{
get
{
return !mAppointment.IsOccurrence && mController.ShouldShowRecurrenceButton;
}
}
protected virtual bool ApplyChanges()
{
if (!mController.IsConflictResolved())
{
return false;
}
if (ShouldShowRecurrence)
{
mRecurrenceVisualController.ApplyRecurrence();
}
try
{
mController.ApplyChanges();
}
catch (Exception e)
{
MessageBox.Show(string.Format("Es ist leider ein Fehler aufgetreten. Die von Ihnen getätigten Änderungen am Termin konnten leider nicht übernommen werden.\n{0}\n{1}", e.Message, e.StackTrace),
"Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
SchedulerFormBehavior.Close(this, true);
return true;
}
protected virtual void Cancel()
{
SchedulerFormBehavior.Close(this, false);
}
protected virtual void DeleteAppointment()
{
if (IsNewAppointment)
return;
mController.DeleteAppointment();
SchedulerFormBehavior.Close(this, false);
}
protected static void LocalizeVisualChild(DependencyObject obj)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child is WeekOfMonthEdit)
{
var edt = child as WeekOfMonthEdit;
edt.CustomDisplayText -= edt_CustomDisplayText;
edt.CustomDisplayText += edt_CustomDisplayText;
foreach (var womEditItem in edt.Items)
{
var ne = womEditItem as NamedElement;
if (ne != null)
ne.Caption = Translate(ne.Caption);
}
}
if (child is WeekDaysEdit)
{
var edt = child as WeekDaysEdit;
edt.CustomDisplayText -= edt_CustomDisplayText;
edt.CustomDisplayText += edt_CustomDisplayText;
foreach (var womEditItem in edt.Items)
{
var ne = womEditItem as NamedElement;
if (ne != null)
ne.Caption = Translate(ne.Caption);
}
}
LocalizeVisualChild(child);
}
}
static void edt_CustomDisplayText(object sender, DevExpress.Xpf.Editors.CustomDisplayTextEventArgs e)
{
e.DisplayText = Translate(e.DisplayText);
e.Handled = true;
}
private static string Translate(String text)
{
switch (text)
{
case "First":
return "Ersten";
case "Second":
return "Zweiten";
case "Third":
return "Dritten";
case "Fourth":
return "Vierten";
case "Last":
return "Letzten";
case "Day":
return "Tag";
case "Weekday":
return "Arbeitstag";
case "Weekend day":
return "Wochenendtag";
}
return text;
}
}
}