diff --git a/src/Perspex.Controls/Deck.cs b/src/Perspex.Controls/Deck.cs index 56151f5829..1cdfdad239 100644 --- a/src/Perspex.Controls/Deck.cs +++ b/src/Perspex.Controls/Deck.cs @@ -31,7 +31,7 @@ namespace Perspex.Controls /// static Deck() { - SelectionModeProperty.OverrideDefaultValue(SelectionMode.SingleAlways); + SelectionModeProperty.OverrideDefaultValue(SelectionMode.AlwaysSelected); ItemsPanelProperty.OverrideDefaultValue(PanelTemplate); } diff --git a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs index b1cb52b305..243d1e29e4 100644 --- a/src/Perspex.Controls/Primitives/SelectingItemsControl.cs +++ b/src/Perspex.Controls/Primitives/SelectingItemsControl.cs @@ -173,6 +173,11 @@ namespace Perspex.Controls.Primitives set { SetValue(SelectionModeProperty, value); } } + /// + /// Gets a value indicating whether is set. + /// + protected bool AlwaysSelected => (SelectionMode & SelectionMode.AlwaysSelected) != 0; + /// 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().Any()) + else if (AlwaysSelected && Items != null & Items.Cast().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(); - if (items != null && SelectionMode == SelectionMode.SingleAlways) + if (items != null && AlwaysSelected) { var index = Math.Min(SelectedIndex, items.Count() - 1); diff --git a/src/Perspex.Controls/Primitives/TabStrip.cs b/src/Perspex.Controls/Primitives/TabStrip.cs index 59139d7e2b..648103ed51 100644 --- a/src/Perspex.Controls/Primitives/TabStrip.cs +++ b/src/Perspex.Controls/Primitives/TabStrip.cs @@ -15,7 +15,7 @@ namespace Perspex.Controls.Primitives static TabStrip() { - SelectionModeProperty.OverrideDefaultValue(SelectionMode.SingleAlways); + SelectionModeProperty.OverrideDefaultValue(SelectionMode.AlwaysSelected); FocusableProperty.OverrideDefaultValue(typeof(TabStrip), false); } diff --git a/src/Perspex.Controls/SelectionMode.cs b/src/Perspex.Controls/SelectionMode.cs index 9895ec195f..bbf3a55259 100644 --- a/src/Perspex.Controls/SelectionMode.cs +++ b/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 { /// /// Defines the selection mode for a control which can select multiple items. /// + [Flags] public enum SelectionMode { /// - /// One item can be selected at a time. + /// One item can be selected. /// - Single, + Single = 0x00, /// - /// 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. /// - SingleAlways, + Multiple = 0x01, /// - /// 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. /// - MultipleToggle, + Toggle = 0x02, /// - /// 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. /// - MultipleRange, + AlwaysSelected = 0x04, } } diff --git a/src/Perspex.Controls/TabControl.cs b/src/Perspex.Controls/TabControl.cs index c4ddd6935d..ee87741980 100644 --- a/src/Perspex.Controls/TabControl.cs +++ b/src/Perspex.Controls/TabControl.cs @@ -33,7 +33,7 @@ namespace Perspex.Controls /// static TabControl() { - SelectionModeProperty.OverrideDefaultValue(SelectionMode.SingleAlways); + SelectionModeProperty.OverrideDefaultValue(SelectionMode.AlwaysSelected); FocusableProperty.OverrideDefaultValue(false); SelectedIndexProperty.Changed.AddClassHandler(x => x.SelectedIndexChanged); } diff --git a/tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs b/tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs index bae19a78ee..490fadc4ba 100644 --- a/tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs +++ b/tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_AutoSelect.cs @@ -97,7 +97,7 @@ namespace Perspex.Controls.UnitTests.Primitives { static TestSelector() { - SelectionModeProperty.OverrideDefaultValue(SelectionMode.SingleAlways); + SelectionModeProperty.OverrideDefaultValue(SelectionMode.AlwaysSelected); } }