public IEnumerable<WidgetGroup> PrepareWidgets(IEnumerable<WidgetPersistentState> storedStates)
{
if (storedStates != null)
{
List<Widget> widgets = this.widgetRepo.GetAll().ToList();
foreach (var widgetState in storedStates)
{
var stateClone = widgetState;
var multiInstanceState = widgetState as MultiInstanceWidgetState;
if (multiInstanceState != null)
{
CreateMultiInstanceWidget(multiInstanceState);
}
else
{
// Ordinary widgets will already exist in the repository as they are single instance per class.
var typedWidget = widgets.FirstOrDefault(w => w.GetType().FullName == stateClone.WidgetType);
if (typedWidget != null)
{
typedWidget.Visibility = widgetState.Visible;
}
}
}
}
return this.widgetRepo.GetAll()
.GroupBy(w => w.Category)
.Select(
group => new WidgetGroup
{
Heading = group.Key,
Widgets = new ObservableCollection<Widget>(group.OrderBy(w => w.Sequence)),
Sequence = GroupSequence[group.Key]
})
.OrderBy(g => g.Sequence).ThenBy(g => g.Heading);
}