Browse Source

Make SelectionMode flags.

So you can combine behaviours.
pull/278/head
Steven Kirk 11 years ago
parent
commit
271f47fb5b
  1. 2
      src/Perspex.Controls/Deck.cs
  2. 13
      src/Perspex.Controls/Primitives/SelectingItemsControl.cs
  3. 2
      src/Perspex.Controls/Primitives/TabStrip.cs
  4. 22
      src/Perspex.Controls/SelectionMode.cs
  5. 2
      src/Perspex.Controls/TabControl.cs
  6. 2
      tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs

2
src/Perspex.Controls/Deck.cs

@ -31,7 +31,7 @@ namespace Perspex.Controls
/// </summary>
static Deck()
{
SelectionModeProperty.OverrideDefaultValue<Deck>(SelectionMode.SingleAlways);
SelectionModeProperty.OverrideDefaultValue<Deck>(SelectionMode.AlwaysSelected);
ItemsPanelProperty.OverrideDefaultValue<Deck>(PanelTemplate);
}

13
src/Perspex.Controls/Primitives/SelectingItemsControl.cs

@ -173,6 +173,11 @@ namespace Perspex.Controls.Primitives
set { SetValue(SelectionModeProperty, value); }
}
/// <summary>
/// Gets a value indicating whether <see cref="SelectionMode.AlwaysSelected"/> is set.
/// </summary>
protected bool AlwaysSelected => (SelectionMode & SelectionMode.AlwaysSelected) != 0;
/// <inheritdoc/>
protected override void ItemsChanged(PerspexPropertyChangedEventArgs e)
{
@ -182,7 +187,7 @@ namespace Perspex.Controls.Primitives
{
SelectedIndex = IndexOf((IEnumerable)e.NewValue, SelectedItem);
}
else if (SelectionMode == SelectionMode.SingleAlways && Items != null & Items.Cast<object>().Any())
else if (AlwaysSelected && Items != null & Items.Cast<object>().Any())
{
SelectedIndex = 0;
}
@ -196,7 +201,7 @@ namespace Perspex.Controls.Primitives
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
if (SelectionMode == SelectionMode.SingleAlways && SelectedIndex == -1)
if (AlwaysSelected && SelectedIndex == -1)
{
SelectedIndex = 0;
}
@ -210,7 +215,7 @@ namespace Perspex.Controls.Primitives
if (selectedIndex >= e.OldStartingIndex &&
selectedIndex < e.OldStartingIndex + e.OldItems.Count)
{
if (SelectionMode != SelectionMode.SingleAlways)
if (!AlwaysSelected)
{
SelectedIndex = -1;
}
@ -411,7 +416,7 @@ namespace Perspex.Controls.Primitives
{
var items = Items?.Cast<object>();
if (items != null && SelectionMode == SelectionMode.SingleAlways)
if (items != null && AlwaysSelected)
{
var index = Math.Min(SelectedIndex, items.Count() - 1);

2
src/Perspex.Controls/Primitives/TabStrip.cs

@ -15,7 +15,7 @@ namespace Perspex.Controls.Primitives
static TabStrip()
{
SelectionModeProperty.OverrideDefaultValue<TabStrip>(SelectionMode.SingleAlways);
SelectionModeProperty.OverrideDefaultValue<TabStrip>(SelectionMode.AlwaysSelected);
FocusableProperty.OverrideDefaultValue(typeof(TabStrip), false);
}

22
src/Perspex.Controls/SelectionMode.cs

@ -1,34 +1,34 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
namespace Perspex.Controls
{
/// <summary>
/// Defines the selection mode for a control which can select multiple items.
/// </summary>
[Flags]
public enum SelectionMode
{
/// <summary>
/// One item can be selected at a time.
/// One item can be selected.
/// </summary>
Single,
Single = 0x00,
/// <summary>
/// One item can be selected at a time, and there will always be a selected item as long
/// as there are items to select.
/// Multiple items can be selected.
/// </summary>
SingleAlways,
Multiple = 0x01,
/// <summary>
/// Multiple items can be selected and their selection state is toggled by presses or by
/// pressing the spacebar.
/// Item selection can be toggled by tapping/spacebar.
/// </summary>
MultipleToggle,
Toggle = 0x02,
/// <summary>
/// A range of items can be selected by holding the shift key, and individual items can be
/// selected by holding the ctrl key.
/// An item will always be selected as long as there are items to select.
/// </summary>
MultipleRange,
AlwaysSelected = 0x04,
}
}

2
src/Perspex.Controls/TabControl.cs

@ -33,7 +33,7 @@ namespace Perspex.Controls
/// </summary>
static TabControl()
{
SelectionModeProperty.OverrideDefaultValue<TabControl>(SelectionMode.SingleAlways);
SelectionModeProperty.OverrideDefaultValue<TabControl>(SelectionMode.AlwaysSelected);
FocusableProperty.OverrideDefaultValue<TabControl>(false);
SelectedIndexProperty.Changed.AddClassHandler<TabControl>(x => x.SelectedIndexChanged);
}

2
tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs

@ -97,7 +97,7 @@ namespace Perspex.Controls.UnitTests.Primitives
{
static TestSelector()
{
SelectionModeProperty.OverrideDefaultValue<TestSelector>(SelectionMode.SingleAlways);
SelectionModeProperty.OverrideDefaultValue<TestSelector>(SelectionMode.AlwaysSelected);
}
}

Loading…
Cancel
Save