From 8acdcdfe818c682964d00665d6e92a3b01bcf0eb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Philippe=20Bruy=C3=A8re?= Date: Sat, 27 Mar 2021 14:11:27 +0100 Subject: [PATCH] ISelectable handling improvments --- Crow/src/Widgets/TemplatedContainer.cs | 5 ++++- Crow/src/Widgets/TemplatedGroup.cs | 15 +++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Crow/src/Widgets/TemplatedContainer.cs b/Crow/src/Widgets/TemplatedContainer.cs index b607ff91..b8d7a128 100644 --- a/Crow/src/Widgets/TemplatedContainer.cs +++ b/Crow/src/Widgets/TemplatedContainer.cs @@ -1,6 +1,7 @@ -// Copyright (c) 2013-2019 Bruyère Jean-Philippe jp_bruyere@hotmail.com +// Copyright (c) 2013-2021 Bruyère Jean-Philippe jp_bruyere@hotmail.com // // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT) +using System; namespace Crow { @@ -38,6 +39,8 @@ namespace Crow return _contentContainer == null ? null : _contentContainer.Child; } set { + if (_contentContainer == null) + throw new Exception ("TemplatedContainer template Must contain a Container named 'Content'"); _contentContainer.SetChild(value); NotifyValueChanged ("HasContent", HasContent); } diff --git a/Crow/src/Widgets/TemplatedGroup.cs b/Crow/src/Widgets/TemplatedGroup.cs index 3e22480e..713f4979 100644 --- a/Crow/src/Widgets/TemplatedGroup.cs +++ b/Crow/src/Widgets/TemplatedGroup.cs @@ -454,9 +454,8 @@ namespace Crow { } } - if (g is ListItem li) { + if (g is ISelectable li) li.Selected += Li_Selected; - } g.DataSource = o; } @@ -464,6 +463,10 @@ namespace Crow { //void expandable_expandevent (object sender, EventHandler ) void Li_Selected (object sender, EventArgs e) { + if (selectedItemContainer is ISelectable li) + li.IsSelected = false; + selectedItemContainer = sender as Widget; + SelectedItemContainerChanged.Raise (this, new SelectionChangeEventArgs (sender)); } @@ -498,11 +501,11 @@ namespace Crow { } internal virtual void itemClick(object sender, MouseButtonEventArgs e){ //SelectedIndex = (int)((IList)data)?.IndexOf((sender as Widget).DataSource); - if (selectedItemContainer is ISelectable li) - li.IsSelected = false; - selectedItemContainer = sender as Widget; - if (selectedItemContainer is ISelectable nli) + + if (sender is ISelectable nli) nli.IsSelected = true; + else + selectedItemContainer = sender as Widget; if (selectedItemContainer == null) return; SelectedItem = selectedItemContainer.DataSource; -- 2.47.3