Files
BeWoPlaner/Controls/Controls/Calendar/AppointmentBar.cs
2016-06-27 01:45:38 +02:00

151 lines
4.9 KiB
C#

using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using BS.Shared.Extensions;
namespace BeWo.Controls.Controls.Calendar
{
public class AppointmentBar : ObservableCollection<Border>
{
private readonly Brush _ForeColor;
private bool _IsChecked;
public AppointmentBar(Appointment pAppointment, Orientation pOrientation, SolidColorBrush pFillBrush)
{
Orientation = pOrientation;
Appointment = pAppointment;
FillBrush = pFillBrush;
_ForeColor = pFillBrush.Color.GetPerceivedBrightness() < 130 ? Brushes.White : Brushes.Black;
}
public Appointment Appointment { get; set; }
public SolidColorBrush FillBrush { get; set; }
public bool IsChecked
{
get { return _IsChecked; }
set
{
if (value != _IsChecked)
{
foreach (Border iBorder in this)
{
((TextBlock) ((test) iBorder.Child).Children[0]).Foreground = value ? Brushes.Black : _ForeColor;
iBorder.Background = value ? PressedBrush.Clone() : FillBrush;
}
_IsChecked = value;
if (IsCheckedChanged != null)
{
IsCheckedChanged(this, new EventArgs());
}
}
}
}
public Brush MouseOverBrush { get; set; }
public Orientation Orientation { get; set; }
public Brush PressedBrush { get; set; }
public event EventHandler IsCheckedChanged;
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (Border iBorder in e.NewItems)
{
iBorder.Background = FillBrush;
iBorder.MouseEnter += iBorder_MouseEnter;
iBorder.MouseLeave += iBorder_MouseLeave;
iBorder.MouseDown += iBorder_MouseDown;
iBorder.MouseUp += iBorder_MouseUp;
iBorder.Margin = new Thickness(0);
iBorder.Padding = new Thickness(0);
iBorder.BorderBrush = Brushes.Black;
var lTb = new TextBlock();
lTb.TextWrapping = TextWrapping.Wrap;
lTb.LineStackingStrategy = LineStackingStrategy.BlockLineHeight;
lTb.LineHeight = 13;
lTb.Margin = new Thickness(1);
lTb.Padding = new Thickness(0);
lTb.FontSize = 12;
lTb.Text = Appointment.Notice;
lTb.VerticalAlignment = VerticalAlignment.Center;
lTb.HorizontalAlignment = HorizontalAlignment.Center;
lTb.IsHitTestVisible = false;
lTb.Foreground = _ForeColor;
var k = new test();
k.Children.Add(lTb);
if (Orientation == Orientation.Vertical)
{
lTb.LayoutTransform = new RotateTransform(0);
}
iBorder.Child = k;
}
}
base.OnCollectionChanged(e);
}
private void iBorder_MouseDown(object sender, MouseButtonEventArgs e)
{
foreach (Border iBorder in this)
{
iBorder.Background = PressedBrush;
}
}
private void iBorder_MouseEnter(object sender, MouseEventArgs e)
{
if (!_IsChecked)
{
foreach (Border iBorder in this)
{
((TextBlock) ((test) iBorder.Child).Children[0]).Foreground = Brushes.Black;
iBorder.Background = MouseOverBrush;
}
}
}
private void iBorder_MouseLeave(object sender, MouseEventArgs e)
{
if (!_IsChecked)
{
foreach (Border iBorder in this)
{
((TextBlock) ((test) iBorder.Child).Children[0]).Foreground = _ForeColor;
iBorder.Background = FillBrush;
}
}
}
private void iBorder_MouseUp(object sender, MouseButtonEventArgs e)
{
IsChecked = !IsChecked;
}
}
public class test : Grid
{
protected override Size MeasureOverride(Size constraint)
{
return new Size(1, 1);
}
}
}