|
using System;
using System.Collections.Generic;
using HappyNomad.PresentationModel;
using HappyNomad.Outlining;
namespace HappyNomad.Examples.PresentationModel.GUI.Model {
public sealed class Demo3ItemView : HierarchicalPresentationModel<SampleItem,Demo3ItemView> {
#region Object Creation
/// <summary>Creates a root-level Demo3ItemView.</summary>
public Demo3ItemView()
: base( new Representative("Root"), App.SampleListContainer.SampleList, false, false, true ) { }
/// <summary>
/// Creates a Demo3ItemView that does not (yet) have any sub-items.
/// </summary>
/// <param name="domainItem">The sample item to be represented by this node</param>
private Demo3ItemView( SampleItem domainItem ) : base( domainItem, null, false, false, true ) { }
/// <inheritdoc/>
protected override Demo3ItemView CreateInstance( SampleItem domainItem ) {
return new Demo3ItemView( domainItem );
}
#endregion
#region 'DesiredPosition' Method
/// <inheritdoc/>
protected override RelativePosition<Demo3ItemView> DesiredPosition( SampleItem itemToAdd ) {
Represented represented = itemToAdd as Represented;
if ( represented != null && represented.RepresentedBy != null ) { //If it's represented...
Demo3ItemView representativeWrapper =
FindDescendant( represented.RepresentedBy ); //Is the representative also related?
if ( representativeWrapper != null ) { //If related...
//representativeWrapper.subItems.Add( itemToAdd ); //then add as sub-item of representative
return new RelativePosition<Demo3ItemView>(
OutliningCommands.NewChild, representativeWrapper, null );
}
}
Representative representative = itemToAdd as Representative;
if ( representative != null ) { //If it's a representative...
IList<Demo3ItemView> itemsRepresented =
ItemsRepresented( representative ); //Are any of its represented items present?
if ( itemsRepresented.Count > 0 ) { //If present, then insert as parent of represented items:
return new RelativePosition<Demo3ItemView>(
OutliningCommands.NewParent, this, itemsRepresented );
}
}
//subItems.Add( itemToAdd );
return new RelativePosition<Demo3ItemView>( OutliningCommands.NewChild, this, null );
}
private IList<Demo3ItemView> ItemsRepresented( Representative representative ) {
List<Demo3ItemView> result = new List<Demo3ItemView>();
foreach ( Demo3ItemView wrapper in subItems ) {
Represented represented = wrapper.DomainItem as Represented;
if ( represented != null && represented.RepresentedBy != null && represented.RepresentedBy.Equals( representative ) )
result.Add( wrapper );
}
return result;
}
#endregion
public Representative RepresentedBy {
get {
Represented represented = DomainItem as Represented;
if ( represented != null ) return represented.RepresentedBy;
else return null;
}
set {
Represented represented = DomainItem as Represented;
if ( represented != null ) represented.RepresentedBy = value;
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Adrian loves facilitating suave user experiences via the latest and greatest GUI technologies such as Windows 8 Metro-style apps as well as WPF. More generally, he finds joy in architecting software that is easy to comprehend and maintain. He does so by applying design patterns at the top-level, and by incessantly refactoring code at lower levels. He's always interested in hearing about opportunities for full or part-time development work. He resides in Pennsylvania but can potentially travel anywhere in the country. (Writing about himself in the third-person is Adrian's new hobby.)