Skip to content

Commit 1f66be0

Browse files
committed
Implement DigitalClockFace with single digit. Implement SevenSegmentDigit. Fix AnalogClockFace layout of date field
1 parent 6bb79cf commit 1f66be0

File tree

30 files changed

+1284
-413
lines changed

30 files changed

+1284
-413
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
33
<ResourceDictionary.MergedDictionaries>
4-
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Styles/ScrolBarStyle.xaml" />
4+
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Styles/ScrollBarStyle.xaml" />
55
</ResourceDictionary.MergedDictionaries>
66
</ResourceDictionary>

BionicCode.Net/BionicCode.Controls.Net.Core.Wpf/Themes/AnalogTimePickerStyle.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:wpf="clr-namespace:BionicCode.Controls.Net.Core.Wpf">
44
<ResourceDictionary.MergedDictionaries>
5-
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Styles/ScrolBarStyle.xaml" />
5+
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Styles/ScrollBarStyle.xaml" />
66
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Colors.xaml" />
77
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Styles/SeparatorBorderStyles.xaml" />
88
<ResourceDictionary

BionicCode.Net/BionicCode.Controls.Net.Core.Wpf/Themes/TimePickerStyle.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
xmlns:attachedBehaviors="clr-namespace:BionicCode.Utilities.Net.Core.Wpf.AttachedBehaviors;assembly=BionicCode.Utilities.Net.Core.Wpf"
44
xmlns:local="clr-namespace:BionicCode.Controls.Net.Core.Wpf">
55
<ResourceDictionary.MergedDictionaries>
6-
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Styles/ScrolBarStyle.xaml" />
6+
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Styles/ScrollBarStyle.xaml" />
77
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Colors.xaml" />
88
<ResourceDictionary Source="/BionicCode.Controls.Net.Core.Wpf;component/Resources/Styles/SeparatorBorderStyles.xaml" />
99
<ResourceDictionary

BionicCode.Net/BionicCode.Controls.Net.Framework.Wpf/BionicCalendar/Calendar.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ private void OnCalendarEventItemSelected(object sender, RoutedEventArgs routedEv
703703
}
704704
}
705705

706-
this.ItemsHost.get
706+
//this.ItemsHost.get
707707
switch (routedEventArgs.OriginalSource)
708708
{
709709
case HeaderedItemsControl headeredItemsControl:

BionicCode.Net/BionicCode.Controls.Net.Framework.Wpf/BionicCalendar/CalendarDateItem.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,17 @@ private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyCh
162162
}
163163
#region Overrides of UIElement
164164

165+
private bool IsAcceptingDrag { get; set; }
165166
/// <inheritdoc />
166-
protected override void OnDragOver(DragEventArgs e)
167+
protected override void OnDragEnter(DragEventArgs e)
167168
{
168-
base.OnDragOver(e);
169-
if (e.AllowedEffects.HasFlag(DragDropEffects.Move))
169+
base.OnDragEnter(e);
170+
if (e.AllowedEffects.HasFlag(DragDropEffects.Move) || !this.IsAcceptingDrag)
170171
{
171172
return;
172173
}
173174

175+
this.IsAcceptingDrag = false;
174176
var eventItemDragDropArgs = e.Data.GetData(DataFormats.Serializable) as EventItemDragDropArgs;
175177

176178
if (eventItemDragDropArgs == null)
@@ -180,10 +182,18 @@ protected override void OnDragOver(DragEventArgs e)
180182
RaiseEvent(new EventItemDragDropArgs(eventItemDragDropArgs, Calendar.SpanningRequestedRoutedEvent, this));
181183
}
182184

185+
/// <inheritdoc />
186+
protected override void OnDragLeave(DragEventArgs e)
187+
{
188+
base.OnDragLeave(e);
189+
190+
this.IsAcceptingDrag = true;
191+
}
192+
183193
/// <inheritdoc />
184194
protected override void OnDrop(DragEventArgs e)
185195
{
186-
base.OnDragEnter(e);
196+
base.OnDrop(e);
187197
var eventItemDragDropArgs = e.Data.GetData(DataFormats.Serializable) as EventItemDragDropArgs;
188198

189199
if (eventItemDragDropArgs == null || this.Items.Contains(eventItemDragDropArgs))

BionicCode.Net/BionicCode.Controls.Net.Framework.Wpf/BionicCalendar/CalendarPanel.cs

Lines changed: 53 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ private void OnEventItemDropped(object sender, EventItemDragDropArgs e)
118118
UnhookEventItemContainer(e);
119119

120120
var newDateItemContainer = e.Source as UIElement;
121+
DateTime dropDate = Calendar.GetDay(newDateItemContainer).Date;
121122
if (!this.InternalDateItemToEventItemLookupTable.TryGetValue(newDateItemContainer, out List<FrameworkElement> eventItemContainersOfNewDateItemContainer))
122123
{
123124
eventItemContainersOfNewDateItemContainer = new List<FrameworkElement>() {e.ItemContainer};
@@ -156,7 +157,8 @@ private void OnEventItemDropped(object sender, EventItemDragDropArgs e)
156157
.Select(itemContainer => this.InternalHostPanels[itemContainer])
157158
.Distinct()
158159
.OrderByDescending(Grid.GetColumnSpan);
159-
ArrangeMovedCalendarEventItem(e.ItemContainer, droppedEventItemContainerHostSiblings, newDateItemContainer);
160+
double verticalContainerOffset = (this.DateColumnItemOffsetTable.TryGetValue(dropDate, out int precedingItemCount) ? precedingItemCount : 0) * e.ItemContainer.DesiredSize.Height;
161+
ArrangeMovedCalendarEventItem(e.ItemContainer, droppedEventItemContainerHostSiblings, newDateItemContainer, verticalContainerOffset);
160162
}
161163

162164
private void UnhookEventItemContainer(EventItemDragDropArgs e)
@@ -178,7 +180,7 @@ private void UnhookEventItemContainer(EventItemDragDropArgs e)
178180
}
179181
}
180182

181-
private void ArrangeMovedCalendarEventItem(FrameworkElement movedEventItem, IEnumerable<Panel> movedEventItemHostSiblings, UIElement newDateItemContainer, double verticalContainerOffset = 0)
183+
private void ArrangeMovedCalendarEventItem(FrameworkElement movedEventItem, IEnumerable<Panel> movedEventItemHostSiblings, UIElement newDateItemContainer, double verticalContainerOffset = 1)
182184
{
183185
if (!this.InternalDateHeaderToCalendarIndexTable.TryGetValue(newDateItemContainer, out int calendarIndex))
184186
{
@@ -189,8 +191,9 @@ private void ArrangeMovedCalendarEventItem(FrameworkElement movedEventItem, IEnu
189191
{
190192
return;
191193
}
192-
194+
newDateItemContainer.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
193195
double heightOffset = newDateItemContainer.DesiredSize.Height + verticalContainerOffset;
196+
194197
List<Panel> siblingHosts = movedEventItemHostSiblings.ToList();
195198
for (var index = 0; index < siblingHosts.Count; index++)
196199
{
@@ -317,14 +320,18 @@ private int GetRowIndexOf(UIElement itemContainer)
317320
return rowIndex;
318321
}
319322

323+
private Dictionary<DateTime, int> DateColumnItemOffsetTable { get; } = new Dictionary<DateTime, int>();
324+
private Dictionary<Panel, DateTime> PreviouslySpannedPanelsTable { get; } = new Dictionary<Panel, DateTime>();
320325
private void SpanEventItemOnSpanningRequested(object sender, EventItemDragDropArgs eventItemDragDropArgs)
321326
{
322327
var currentDateContainer = eventItemDragDropArgs.Source as UIElement;
323-
DateTime targetCalendarDate = Calendar.GetDay(currentDateContainer);
324-
int dateSpan = targetCalendarDate.Date.Subtract(eventItemDragDropArgs.OriginalDay.Date).Days + 1;
328+
DateTime newTargetCalendarDate = Calendar.GetDay(currentDateContainer);
329+
int newDateSpan = newTargetCalendarDate.Date.Subtract(eventItemDragDropArgs.OriginalDay.Date).Days + 1;
325330
bool isNextDateRequireCleanup =
326331
this.InternalHostPanels.TryGetValue(eventItemDragDropArgs.ItemContainer, out Panel currentEventItemHost)
327-
&& Grid.GetColumnSpan(currentEventItemHost) > dateSpan;
332+
&& Grid.GetColumnSpan(currentEventItemHost) > newDateSpan;
333+
bool isIncreasingSpan = !isNextDateRequireCleanup && !(this.InternalHostPanels.TryGetValue(eventItemDragDropArgs.ItemContainer, out Panel eventItemHost) && this.PreviouslySpannedPanelsTable.TryGetValue(eventItemHost, out DateTime oldTargetDate) && oldTargetDate.Equals(newTargetCalendarDate));
334+
328335
if (this.InternalDateHeaderItemLookupTable.TryGetValue(
329336
eventItemDragDropArgs.OriginalDay.Date,
330337
out UIElement originalDateItemContainer))
@@ -337,7 +344,7 @@ private void SpanEventItemOnSpanningRequested(object sender, EventItemDragDropAr
337344
eventItemContainer => this.InternalHostPanels.TryGetValue(eventItemContainer, out Panel eventHost)
338345
? eventHost
339346
: new StackPanel())
340-
.FirstOrDefault(eventHost => Grid.GetColumnSpan(eventHost).Equals(dateSpan));
347+
.FirstOrDefault(eventHost => Grid.GetColumnSpan(eventHost).Equals(newDateSpan));
341348

342349
Panel eventItemContainerHost = null;
343350
if (matchingSpanningHost != null)
@@ -346,22 +353,22 @@ private void SpanEventItemOnSpanningRequested(object sender, EventItemDragDropAr
346353
if (this.InternalHostPanels.TryGetValue(eventItemDragDropArgs.ItemContainer, out Panel originalHost))
347354
{
348355
originalHost.Children.Remove(eventItemDragDropArgs.ItemContainer);
349-
this.InternalHostPanels[eventItemDragDropArgs.ItemContainer] = matchingSpanningHost;
356+
this.InternalHostPanels[eventItemDragDropArgs.ItemContainer] = eventItemContainerHost;
350357
}
351358

352-
List<UIElement> panelChildren = matchingSpanningHost.Children.Cast<UIElement>().ToList();
359+
List<UIElement> panelChildren = eventItemContainerHost.Children.Cast<UIElement>().ToList();
353360
panelChildren.Add(eventItemDragDropArgs.ItemContainer);
354-
matchingSpanningHost.Children.Clear();
361+
eventItemContainerHost.Children.Clear();
355362
panelChildren.Sort((element1, element2) => Calendar.GetDay(element1).CompareTo(Calendar.GetDay(element2)));
356-
panelChildren.ForEach(item => matchingSpanningHost.Children.Add(item));
363+
panelChildren.ForEach(item => eventItemContainerHost.Children.Add(item));
357364
}
358365
else
359366
{
360367
if (this.InternalHostPanels.TryGetValue(eventItemDragDropArgs.ItemContainer, out Panel originalHost))
361368
{
362369
if (originalHost.Children.Count == 1)
363370
{
364-
Grid.SetColumnSpan(originalHost, dateSpan);
371+
Grid.SetColumnSpan(originalHost, newDateSpan);
365372
eventItemContainerHost = originalHost;
366373
}
367374
else
@@ -372,57 +379,80 @@ private void SpanEventItemOnSpanningRequested(object sender, EventItemDragDropAr
372379
this.Children.Remove(originalHost);
373380
}
374381

375-
eventItemContainerHost = new StackPanel() { VerticalAlignment = VerticalAlignment.Top };
382+
eventItemContainerHost = new StackPanel() { VerticalAlignment = VerticalAlignment.Top};
376383
eventItemContainerHost.Children.Add(eventItemDragDropArgs.ItemContainer);
377384
eventItemContainerHost.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
378-
Grid.SetColumnSpan(eventItemContainerHost, dateSpan);
379-
InternalHostPanels[eventItemDragDropArgs.ItemContainer] = eventItemContainerHost;
385+
Grid.SetColumnSpan(eventItemContainerHost, newDateSpan);
386+
this.InternalHostPanels[eventItemDragDropArgs.ItemContainer] = eventItemContainerHost;
387+
388+
//for (int dayOffset = 1; dayOffset < dateSpan; dayOffset++)
389+
//{0
390+
// DateTime key = eventItemDragDropArgs.OriginalDay.Date.AddDays(dayOffset);
391+
// this.DateColumnItemOffsetTable[eventItemDragDropArgs.OriginalDay.Date] += 1;
392+
//}
380393
}
381394
}
382395
}
383396

397+
this.PreviouslySpannedPanelsTable[eventItemContainerHost] = newTargetCalendarDate.Date;
398+
399+
if (isIncreasingSpan)
400+
{
401+
if (!this.DateColumnItemOffsetTable.ContainsKey(newTargetCalendarDate))
402+
{
403+
this.DateColumnItemOffsetTable.Add(newTargetCalendarDate, 0);
404+
}
405+
406+
this.DateColumnItemOffsetTable[newTargetCalendarDate] += 1;
407+
}
384408

385409
List<Panel> originalDateEventItemHosts = originalDateEventItems
386410
.Select(itemContainer => this.InternalHostPanels[itemContainer])
387411
.Distinct()
388412
.OrderByDescending(Grid.GetColumnSpan)
389413
.ToList();
390-
int eventItemPositionInOriginalDateItem = originalDateEventItemHosts.IndexOf(eventItemContainerHost) + 1;
414+
int precedingItemsOffset = this.DateColumnItemOffsetTable.TryGetValue(
415+
eventItemDragDropArgs.OriginalDay.Date,
416+
out int itemOffset)
417+
? itemOffset
418+
: 0;
391419

392-
ArrangeMovedCalendarEventItem(eventItemDragDropArgs.ItemContainer, originalDateEventItemHosts, originalDateItemContainer);
420+
ArrangeMovedCalendarEventItem(eventItemDragDropArgs.ItemContainer, originalDateEventItemHosts, originalDateItemContainer, precedingItemsOffset * eventItemDragDropArgs.ItemContainer.DesiredSize.Height);
393421

394422
if (!object.ReferenceEquals(currentDateContainer, originalDateItemContainer)
395423
&& this.InternalDateItemToEventItemLookupTable.TryGetValue(
396424
currentDateContainer,
397-
out List<FrameworkElement> currentDateEventItems))
425+
out List<FrameworkElement> currentDateEventItems) && currentDateEventItems.Any())
398426
{
399427
IEnumerable<Panel> currentDateEventItemHosts = currentDateEventItems
400428
.Select(itemContainer => this.InternalHostPanels[itemContainer])
401429
.Distinct()
402430
.OrderByDescending(Grid.GetColumnSpan);
403431
ArrangeCalendarEventItemHostsOfDateItem(currentDateEventItemHosts,
404-
currentDateContainer, eventItemDragDropArgs.ItemContainer.DesiredSize.Height * eventItemPositionInOriginalDateItem);
432+
currentDateContainer, this.DateColumnItemOffsetTable[newTargetCalendarDate] * eventItemDragDropArgs.ItemContainer.DesiredSize.Height);
405433
}
406434

407435
if (isNextDateRequireCleanup)
408436
{
437+
DateTime nextDate = newTargetCalendarDate.AddDays(1).Date;
409438
if (this.InternalDateHeaderItemLookupTable.TryGetValue(
410-
targetCalendarDate.AddDays(1).Date,
439+
nextDate,
411440
out UIElement nextDateItemContainer))
412441
{
442+
this.DateColumnItemOffsetTable[nextDate] -= 1;
413443
if (this.InternalDateItemToEventItemLookupTable.TryGetValue(
414444
nextDateItemContainer,
415-
out List<FrameworkElement> nextDateEventItems))
445+
out List<FrameworkElement> nextDateEventItems) && nextDateEventItems.Any())
416446
{
417-
int offset = originalDateEventItemHosts.Count(panel => Grid.GetColumnSpan(panel) > dateSpan);
447+
double offset = this.DateColumnItemOffsetTable[nextDate] * eventItemDragDropArgs.ItemContainer.DesiredSize.Height;
418448
IEnumerable<Panel> nextDateEventItemHosts = nextDateEventItems
419449
.Select(itemContainer => this.InternalHostPanels[itemContainer])
420450
.Distinct()
421451
.OrderByDescending(panel => Grid.GetColumnSpan(panel));
422452
ArrangeCalendarEventItemHostsOfDateItem(
423453
nextDateEventItemHosts,
424454
nextDateItemContainer,
425-
eventItemDragDropArgs.ItemContainer.DesiredSize.Height * offset);
455+
offset);
426456
}
427457
}
428458
}

BionicCode.Net/BionicCode.Controls.Net.Framework.Wpf/Themes/Generic.xaml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@
179179
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
180180
<Setter Property="VerticalContentAlignment" Value="Top" />
181181
<Setter Property="VerticalAlignment" Value="Stretch" />
182-
<!--<Setter Property="Height" Value="24" />-->
182+
<!--<Setter Property="Height" Value="64" />-->
183183
<Setter Property="Template">
184184
<Setter.Value>
185185
<ControlTemplate TargetType="bionicCalendar:CalendarDateItem">
@@ -189,21 +189,27 @@
189189
Background="{TemplateBinding Background}">
190190

191191
<Grid>
192+
<Border x:Name="ClickableBackground"
193+
Grid.Row="0" Grid.Column="0" IsHitTestVisible="True"
194+
Background="Transparent" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
192195
<Border x:Name="TodayMarker"
193196
Grid.Row="0" Grid.Column="0"
194197
Visibility="Collapsed"
195198
Background="Red" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
196199
<Border x:Name="SelectionBorder"
197200
Grid.Row="0" Grid.Column="0"
198201
Visibility="Collapsed"
199-
Background="Yellow" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
202+
Background="Yellow" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,0,0,0" />
200203
<ContentPresenter Grid.Row="0" Grid.Column="0"
201-
ContentSource="Header" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
204+
Margin="0,0,0,0"
205+
ContentSource="Header" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
206+
202207
</Grid>
203208
</Border>
204209
<ControlTemplate.Triggers>
205210
<Trigger Property="bionicCalendar:Calendar.IsToday" Value="True">
206211
<Setter TargetName="TodayMarker" Property="Visibility" Value="Visible" />
212+
<!--<Setter TargetName="SelectionBorder" Property="Margin" Value="0,8,0,0" />-->
207213
</Trigger>
208214
<Trigger Property="IsSelected" Value="True">
209215
<Setter TargetName="SelectionBorder" Property="Visibility" Value="Visible" />

BionicCode.Net/BionicCode.Controls.Net.Framework.Wpf/TimeTextBox.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ protected override void OnPreviewKeyUp(KeyEventArgs e)
3333
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
3434
{
3535
base.OnPreviewTextInput(e);
36-
if (!IsValidInput(e))
36+
if (!IsValidInput(e.Text))
3737
{
3838
e.Handled = true;
3939
}

0 commit comments

Comments
 (0)