git_bsmd/ENI2/Util/HighlightService.cs

232 lines
7.6 KiB
C#

// Copyright (c) 2017 schick Informatik
// Description: Diese Klasse steuert zentral hervorgehobene Controls. Diese können auf unterschiedliche(!) Art
// hervorgehoben sein: NSW Error / NSW Violation / Rule Fehler / Reminder
//
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using bsmd.database;
using System.Windows.Media;
namespace ENI2.Util
{
public class HighlightService
{
private static ControlTemplate groupBoxDefaultTemplate;
private static Brush dtPickerDefaultColor;
private static Brush textBoxDefaultColor;
private static Brush intUpDownDefaultColor;
private static Brush doubleUpDownDefaultColor;
private static Brush checkBoxDefaultColor;
#region Construction
public HighlightService()
{
}
#endregion
#region enums
public enum HighlightStyle
{
NONE,
VALIDATION,
UPDATE,
REMINDER,
ERROR,
VIOLATION
}
#endregion
#region events
public delegate void HighlightChangeNotificationHandler(Message relevantMessage, DatabaseEntity subElement, string identifier);
//public event HighlightChangeNotificationHandler PropertyHighlightingChanged;
#endregion
#region public methods
public ControlTemplate GetStyle(string propertyName, object control)
{
ControlTemplate resultTemplate = null;
return resultTemplate;
}
public bool MessageHasViolations(Message theMessage)
{
return !theMessage.ViolationList.IsNullOrEmpty();
}
public bool MessageHasErrors(Message theMessage)
{
return !theMessage.ErrorList.IsNullOrEmpty();
}
public void HighlightError(MessageError messageError, DependencyObject rootDependency)
{
IList<DependencyObject> dList = ValidationContext.GetDependencyObjectsWithBindingToProperty(rootDependency, messageError.PropertyName);
if (dList.Count > 0)
{
HighlightControl(dList[0], HighlightStyle.ERROR, messageError.MessageHeader);
}
}
public void HighlightViolation(MessageViolation messageViolation, DependencyObject rootDependency)
{
IList<DependencyObject> dList = ValidationContext.GetDependencyObjectsWithBindingToProperty(rootDependency, messageViolation.PropertyName);
if (dList.Count > 0)
{
HighlightControl(dList[0], HighlightStyle.ERROR, messageViolation.MessageHeader);
}
}
#endregion
#region public static methods
public static void HighlightControl(object control, HighlightStyle highlightStyle, Message theMessage)
{
if(control is GroupBox)
{
GroupBox gp = (GroupBox)control;
if (groupBoxDefaultTemplate == null) // save for restore
groupBoxDefaultTemplate = gp.Template;
switch (highlightStyle)
{
case HighlightStyle.ERROR:
{
StringBuilder sb = new StringBuilder();
foreach (MessageError me in theMessage.ErrorList)
sb.AppendFormat("{0}: {1}\n", me.ErrorCode, me.ErrorText);
gp.ToolTip = sb.ToString();
gp.Template = Application.Current.MainWindow.TryFindResource("groupBoxTemplateError") as ControlTemplate;
}
break;
case HighlightStyle.VIOLATION:
{
StringBuilder sb = new StringBuilder();
foreach (MessageViolation mv in theMessage.ViolationList)
sb.AppendFormat("{0}: {1}\n", mv.ViolationCode, mv.ViolationText);
gp.ToolTip = sb.ToString();
gp.Template = Application.Current.MainWindow.FindResource("groupBoxTemplateViolation") as ControlTemplate;
}
break;
default:
gp.Template = groupBoxDefaultTemplate;
gp.ToolTip = null;
break;
}
}
if(control is Xceed.Wpf.Toolkit.DateTimePicker)
{
Xceed.Wpf.Toolkit.DateTimePicker dtPicker = (Xceed.Wpf.Toolkit.DateTimePicker)control;
if (dtPickerDefaultColor == null)
dtPickerDefaultColor = dtPicker.Background;
switch (highlightStyle)
{
case HighlightStyle.ERROR:
dtPicker.Background = new SolidColorBrush(Color.FromArgb(100, 255, 0, 0));
break;
}
}
if(control is TextBox)
{
TextBox textBox = (TextBox)control;
if (textBoxDefaultColor == null)
textBoxDefaultColor = textBox.Background;
switch(highlightStyle)
{
case HighlightStyle.ERROR:
textBox.Background = new SolidColorBrush(Color.FromArgb(150, 255, 0, 0));
break;
}
}
if(control is Xceed.Wpf.Toolkit.IntegerUpDown)
{
Xceed.Wpf.Toolkit.IntegerUpDown integerUpDown = (Xceed.Wpf.Toolkit.IntegerUpDown)control;
if (intUpDownDefaultColor == null)
intUpDownDefaultColor = integerUpDown.Background;
switch (highlightStyle)
{
case HighlightStyle.ERROR:
integerUpDown.Background = new SolidColorBrush(Color.FromArgb(150, 255, 0, 0));
break;
}
}
if(control is Xceed.Wpf.Toolkit.DoubleUpDown)
{
Xceed.Wpf.Toolkit.DoubleUpDown doubleUpDown = (Xceed.Wpf.Toolkit.DoubleUpDown)control;
if (doubleUpDownDefaultColor == null)
doubleUpDownDefaultColor = doubleUpDown.Background;
switch (highlightStyle)
{
case HighlightStyle.ERROR:
doubleUpDown.Background = new SolidColorBrush(Color.FromArgb(150, 255, 0, 0));
break;
}
}
if(control is CheckBox)
{
CheckBox cb = (CheckBox)control;
if (checkBoxDefaultColor == null)
checkBoxDefaultColor = cb.Background;
switch(highlightStyle)
{
case HighlightStyle.ERROR:
cb.Background = new SolidColorBrush(Color.FromArgb(150, 255, 0, 0));
break;
}
}
}
#endregion
#region internal / private methods
protected void OnPropertyHighlightingChanged()
{
}
#endregion
}
}