From: jpbruyere Date: Tue, 24 Jan 2017 11:11:30 +0000 (+0100) Subject: dataType for expandable itemTemplate use 'isAssignableFrom'; GraphicTree View X-Git-Tag: v0.9.5-beta~259^2~6 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=e39ac936765e88382d858ee6922293315a18b60d;p=jp%2Fcrow.git dataType for expandable itemTemplate use 'isAssignableFrom'; GraphicTree View --- diff --git a/src/GraphicObjects/TemplatedGroup.cs b/src/GraphicObjects/TemplatedGroup.cs index f636786d..ee799fd0 100644 --- a/src/GraphicObjects/TemplatedGroup.cs +++ b/src/GraphicObjects/TemplatedGroup.cs @@ -106,11 +106,11 @@ namespace Crow public virtual List Items{ get { return items.Children; }} [XmlAttributeAttribute][DefaultValue(-1)]public int SelectedIndex{ get { return _selectedIndex; } - set { + set { if (value == _selectedIndex) return; - _selectedIndex = value; + _selectedIndex = value; NotifyValueChanged ("SelectedIndex", _selectedIndex); NotifyValueChanged ("SelectedItem", SelectedItem); @@ -179,7 +179,7 @@ namespace Crow protected void raiseSelectedItemChanged(){ SelectedItemChanged.Raise (this, new SelectionChangeEventArgs (SelectedItem)); } - + public virtual void AddItem(GraphicObject g){ items.AddChild (g); @@ -313,7 +313,7 @@ namespace Crow if (loadingThread == null) return; if (!loadingThread.IsAlive) - return; + return; cancelLoading = true; loadingThread.Join (); cancelLoading = false; @@ -341,7 +341,7 @@ namespace Crow page = gs; }else - page = Activator.CreateInstance (items.GetType ()) as Group; + page = Activator.CreateInstance (items.GetType ()) as Group; page.Name = "page" + pageNum; @@ -383,9 +383,20 @@ namespace Crow itempKey = getItempKey (dataType, data [i]); if (ItemTemplates.ContainsKey (itempKey)) - iTemp = ItemTemplates [itempKey]; - else - iTemp = ItemTemplates ["default"]; + iTemp = ItemTemplates [itempKey]; + else { + foreach (string it in ItemTemplates.Keys) { + Type t = Type.GetType (it); + if (t == null) + continue; + if (t.IsAssignableFrom (dataType)) {//TODO:types could be cached + iTemp = ItemTemplates [it]; + break; + } + } + if (iTemp == null) + iTemp = ItemTemplates ["default"]; + } lock (CurrentInterface.LayoutMutex) { g = iTemp.CreateInstance(CurrentInterface);