Browse Source

DataGrid: implement missed pseudoclasses

pull/4534/head
Maksym Katsydan 6 years ago
parent
commit
60546c68de
  1. 4
      src/Avalonia.Controls.DataGrid/DataGrid.cs
  2. 11
      src/Avalonia.Controls.DataGrid/DataGridCell.cs
  3. 13
      src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs
  4. 2
      src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs
  5. 8
      src/Avalonia.Controls.DataGrid/DataGridRow.cs
  6. 20
      src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs
  7. 21
      src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs
  8. 2
      src/Avalonia.Controls.DataGrid/DataGridRows.cs

4
src/Avalonia.Controls.DataGrid/DataGrid.cs

@ -2753,7 +2753,7 @@ namespace Avalonia.Controls
//We don't need to refresh the state of AutoGenerated column headers because they're up-to-date
if (!column.IsAutoGenerated && column.HasHeaderCell)
{
column.HeaderCell.ApplyState();
column.HeaderCell.UpdatePseudoClasses();
}
}
@ -5417,7 +5417,7 @@ namespace Avalonia.Controls
}
else if (displayedElement is DataGridRowGroupHeader groupHeader)
{
groupHeader.ApplyState(useTransitions: true);
groupHeader.UpdatePseudoClasses();
if (AreRowHeadersVisible)
{
groupHeader.ApplyHeaderStatus();

11
src/Avalonia.Controls.DataGrid/DataGridCell.cs

@ -180,7 +180,18 @@ namespace Avalonia.Controls
internal void UpdatePseudoClasses()
{
if (OwningGrid == null || OwningColumn == null || OwningRow == null || !OwningRow.IsVisible || OwningRow.Slot == -1)
{
return;
}
PseudoClasses.Set(":selected", OwningRow.IsSelected);
PseudoClasses.Set(":current", IsCurrent);
PseudoClasses.Set(":edited", IsEdited);
// PseudoClasses.Set(":invalid", !IsValid);
}
// Makes sure the right gridline has the proper stroke and visibility. If lastVisibleColumn is specified, the

13
src/Avalonia.Controls.DataGrid/DataGridColumnHeader.cs

@ -13,6 +13,7 @@ using System.Diagnostics;
using Avalonia.Utilities;
using System;
using Avalonia.Controls.Utils;
using Avalonia.Controls.Mixins;
namespace Avalonia.Controls
{
@ -68,6 +69,7 @@ namespace Avalonia.Controls
static DataGridColumnHeader()
{
AreSeparatorsVisibleProperty.Changed.AddClassHandler<DataGridColumnHeader>((x, e) => x.OnAreSeparatorsVisibleChanged(e));
PressedMixin.Attach<DataGridColumnHeader>();
}
/// <summary>
@ -149,8 +151,7 @@ namespace Avalonia.Controls
}
}
//TODO Implement
internal void ApplyState()
internal void UpdatePseudoClasses()
{
CurrentSortingState = null;
if (OwningGrid != null
@ -441,7 +442,7 @@ namespace Avalonia.Controls
Point mousePosition = e.GetPosition(this);
OnMouseEnter(mousePosition);
ApplyState();
UpdatePseudoClasses();
}
private void DataGridColumnHeader_PointerLeave(object sender, PointerEventArgs e)
@ -452,7 +453,7 @@ namespace Avalonia.Controls
}
OnMouseLeave();
ApplyState();
UpdatePseudoClasses();
}
private void DataGridColumnHeader_PointerPressed(object sender, PointerPressedEventArgs e)
@ -467,7 +468,7 @@ namespace Avalonia.Controls
OnMouseLeftButtonDown(ref handled, e, mousePosition);
e.Handled = handled;
ApplyState();
UpdatePseudoClasses();
}
private void DataGridColumnHeader_PointerReleased(object sender, PointerReleasedEventArgs e)
@ -483,7 +484,7 @@ namespace Avalonia.Controls
OnMouseLeftButtonUp(ref handled, e, mousePosition, mousePositionHeaders);
e.Handled = handled;
ApplyState();
UpdatePseudoClasses();
}
private void DataGridColumnHeader_PointerMove(object sender, PointerEventArgs e)

2
src/Avalonia.Controls.DataGrid/DataGridDataConnection.cs

@ -610,7 +610,7 @@ namespace Avalonia.Controls
// refresh sort description
foreach (DataGridColumn column in _owner.ColumnsItemsInternal)
{
column.HeaderCell.ApplyState();
column.HeaderCell.UpdatePseudoClasses();
}
}

8
src/Avalonia.Controls.DataGrid/DataGridRow.cs

@ -624,17 +624,17 @@ namespace Avalonia.Controls
{
if (_headerElement != null && OwningGrid.AreRowHeadersVisible)
{
_headerElement.ApplyOwnerStatus();
_headerElement.UpdatePseudoClasses();
}
}
//TODO Implement
internal void UpdatePseudoClasses()
{
PseudoClasses.Set(":selected", IsSelected);
PseudoClasses.Set(":editing", IsEditing);
if (RootElement != null && OwningGrid != null && IsVisible)
{
PseudoClasses.Set(":selected", IsSelected);
PseudoClasses.Set(":editing", IsEditing);
PseudoClasses.Set(":invalid", !IsValid);
ApplyHeaderStatus();
}
}

20
src/Avalonia.Controls.DataGrid/DataGridRowGroupHeader.cs

@ -3,6 +3,7 @@
// Please see http://go.microsoft.com/fwlink/?LinkID=131993 for details.
// All other rights reserved.
using Avalonia.Controls.Mixins;
using Avalonia.Controls.Primitives;
using Avalonia.Input;
using Avalonia.Media;
@ -96,6 +97,7 @@ namespace Avalonia.Controls
static DataGridRowGroupHeader()
{
SublevelIndentProperty.Changed.AddClassHandler<DataGridRowGroupHeader>((x,e) => x.OnSublevelIndentChanged(e));
PressedMixin.Attach<DataGridRowGroupHeader>();
}
/// <summary>
@ -205,14 +207,18 @@ namespace Avalonia.Controls
{
if (_headerElement != null && OwningGrid.AreRowHeadersVisible)
{
_headerElement.ApplyOwnerStatus();
_headerElement.UpdatePseudoClasses();
}
}
//TODO Implement
internal void ApplyState(bool useTransitions)
internal void UpdatePseudoClasses()
{
PseudoClasses.Set(":current", IsCurrent);
if (RowGroupInfo?.CollectionViewGroup != null)
{
PseudoClasses.Set(":expanded", RowGroupInfo.IsVisible && RowGroupInfo.CollectionViewGroup.ItemCount > 0);
}
}
protected override Size ArrangeOverride(Size finalSize)
@ -344,7 +350,7 @@ namespace Avalonia.Controls
{
EnsureExpanderButtonIsChecked();
EnsureHeaderVisibility();
ApplyState(useTransitions: false);
UpdatePseudoClasses();
ApplyHeaderStatus();
}
@ -353,7 +359,7 @@ namespace Avalonia.Controls
if (IsEnabled)
{
IsMouseOver = true;
ApplyState(useTransitions: true);
UpdatePseudoClasses();
}
base.OnPointerEnter(e);
@ -364,7 +370,7 @@ namespace Avalonia.Controls
if (IsEnabled)
{
IsMouseOver = false;
ApplyState(useTransitions: true);
UpdatePseudoClasses();
}
base.OnPointerLeave(e);
@ -402,7 +408,7 @@ namespace Avalonia.Controls
EnsureExpanderButtonIsChecked();
ApplyState(true /*useTransitions*/);
UpdatePseudoClasses();
}
}

21
src/Avalonia.Controls.DataGrid/DataGridRowHeader.cs

@ -99,7 +99,7 @@ namespace Avalonia.Controls.Primitives
_rootElement = e.NameScope.Find<Control>(DATAGRIDROWHEADER_elementRootName);
if (_rootElement != null)
{
ApplyOwnerStatus();
UpdatePseudoClasses();
}
}
@ -131,12 +131,27 @@ namespace Avalonia.Controls.Primitives
return measuredSize;
}
//TODO Implement
internal void ApplyOwnerStatus()
internal void UpdatePseudoClasses()
{
if (_rootElement != null && Owner != null && Owner.IsVisible)
{
if (OwningRow != null)
{
PseudoClasses.Set(":invalid", !OwningRow.IsValid);
PseudoClasses.Set(":selected", OwningRow.IsSelected);
PseudoClasses.Set(":editing", OwningRow.IsEditing);
if (OwningGrid != null)
{
PseudoClasses.Set(":current", OwningRow.Slot == OwningGrid.CurrentSlot);
}
}
else if (OwningRowGroupHeader != null && OwningGrid != null)
{
PseudoClasses.Set(":current", OwningRowGroupHeader.RowGroupInfo.Slot == OwningGrid.CurrentSlot);
}
}
}

2
src/Avalonia.Controls.DataGrid/DataGridRows.cs

@ -1912,7 +1912,7 @@ namespace Avalonia.Controls
{
// Assume it's a RowGroupHeader
DataGridRowGroupHeader groupHeader = element as DataGridRowGroupHeader;
groupHeader.ApplyState(useTransitions: true);
groupHeader.UpdatePseudoClasses();
}
}

Loading…
Cancel
Save