Browse Source

Merge e1560ebffc into ba7361fdd0

pull/1243/merge
Jalex 9 years ago
committed by GitHub
parent
commit
bf6ae79ef7
  1. 102
      ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutRoot.cs

102
ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Layout/LayoutRoot.cs

@ -678,62 +678,65 @@ namespace Xceed.Wpf.AvalonDock.Layout
return; return;
} }
var layoutPanelElements = ReadRootPanel( reader ); RootPanel = ReadRootPanel( reader );
if( layoutPanelElements != null )
{
//Create the RootPanel with the first child
RootPanel = new LayoutPanel( layoutPanelElements.First() );
//Add all children to RootPanel
for( int i = 1; i < layoutPanelElements.Count; ++i )
{
RootPanel.Children.Add( layoutPanelElements[ i ] );
}
}
TopSide = ( LayoutAnchorSide )ReadElement( reader ); TopSide = ( LayoutAnchorSide )ReadElement( reader );
if( TopSide != null ) if( TopSide != null )
{ {
TopSide.Children.Add( ( LayoutAnchorGroup )ReadElement( reader ) ); foreach(var g in ReadElements<LayoutAnchorGroup>(reader))
TopSide.Children.Add( g );
reader.Read(); reader.Read();
} else {
TopSide = new LayoutAnchorSide();
} }
RightSide = ( LayoutAnchorSide )ReadElement( reader ); RightSide = ( LayoutAnchorSide )ReadElement( reader );
if( RightSide != null ) if( RightSide != null )
{ {
RightSide.Children.Add( ( LayoutAnchorGroup )ReadElement( reader ) ); foreach(var g in ReadElements<LayoutAnchorGroup>(reader))
RightSide.Children.Add( g );
reader.Read(); reader.Read();
} else {
RightSide = new LayoutAnchorSide();
} }
LeftSide = ( LayoutAnchorSide )ReadElement( reader ); LeftSide = ( LayoutAnchorSide )ReadElement( reader );
if( LeftSide != null ) if( LeftSide != null )
{ {
LeftSide.Children.Add( ( LayoutAnchorGroup )ReadElement( reader ) ); foreach(var g in ReadElements<LayoutAnchorGroup>(reader))
LeftSide.Children.Add( g );
reader.Read(); reader.Read();
} else {
LeftSide = new LayoutAnchorSide();
} }
BottomSide = ( LayoutAnchorSide )ReadElement( reader ); BottomSide = ( LayoutAnchorSide )ReadElement( reader );
if( BottomSide != null ) if( BottomSide != null )
{ {
BottomSide.Children.Add( ( LayoutAnchorGroup )ReadElement( reader ) ); foreach(var g in ReadElements<LayoutAnchorGroup>(reader))
BottomSide.Children.Add( g );
reader.Read(); reader.Read();
} else {
BottomSide = new LayoutAnchorSide();
} }
FloatingWindows.Clear(); FloatingWindows.Clear();
var floatingWindows = ReadElementList( reader ); var floatingWindows = ReadElementList<LayoutFloatingWindow>( reader );
foreach( var floatingWindow in floatingWindows ) foreach( var floatingWindow in floatingWindows )
{ {
FloatingWindows.Add( ( LayoutFloatingWindow )floatingWindow ); FloatingWindows.Add( floatingWindow );
} }
Hidden.Clear(); Hidden.Clear();
var hidden = ReadElementList( reader ); var hidden = ReadElementList<LayoutAnchorable>( reader );
foreach( var hiddenObject in hidden ) foreach( var hiddenObject in hidden )
{ {
Hidden.Add( ( LayoutAnchorable )hiddenObject ); Hidden.Add( hiddenObject );
} }
} }
private List<ILayoutPanelElement> ReadRootPanel( XmlReader reader ) private LayoutPanel ReadRootPanel( XmlReader reader )
{ {
var result = new List<ILayoutPanelElement>();
var startElementName = reader.LocalName; var startElementName = reader.LocalName;
reader.Read(); reader.Read();
if( reader.LocalName.Equals(startElementName) && (reader.NodeType == XmlNodeType.EndElement) ) if( reader.LocalName.Equals(startElementName) && (reader.NodeType == XmlNodeType.EndElement) )
@ -746,33 +749,36 @@ namespace Xceed.Wpf.AvalonDock.Layout
reader.Read(); reader.Read();
} }
LayoutPanel rootPanel = null;
if( reader.LocalName.Equals("RootPanel")) if( reader.LocalName.Equals("RootPanel"))
{ {
reader.Read(); rootPanel = ReadElement( reader ) as LayoutPanel;
} else {
reader.ReadInnerXml();
}
while( true ) return rootPanel;
{ }
//Read all RootPanel children
var element = ReadElement( reader ) as ILayoutPanelElement; private List<T> ReadElements<T>(XmlReader reader) where T : class
if( element != null ) {
{ var resultList = new List<T>();
result.Add( element );
} while(true) {
else if( reader.NodeType == XmlNodeType.EndElement ) var result = ReadElement(reader) as T;
{ if(result == null) {
break; break;
}
} }
}
reader.ReadEndElement(); resultList.Add(result);
}
return result; return resultList;
} }
private List<object> ReadElementList( XmlReader reader ) private List<T> ReadElementList<T>( XmlReader reader ) where T: class
{ {
var resultList = new List<object>(); var resultList = new List<T>();
if( reader.IsEmptyElement ) if( reader.IsEmptyElement )
{ {
@ -784,7 +790,7 @@ namespace Xceed.Wpf.AvalonDock.Layout
reader.Read(); reader.Read();
if( reader.LocalName.Equals(startElementName) && (reader.NodeType == XmlNodeType.EndElement) ) if( reader.LocalName.Equals(startElementName) && (reader.NodeType == XmlNodeType.EndElement) )
{ {
return null; return resultList;
} }
while( reader.NodeType == XmlNodeType.Whitespace ) while( reader.NodeType == XmlNodeType.Whitespace )
@ -792,16 +798,7 @@ namespace Xceed.Wpf.AvalonDock.Layout
reader.Read(); reader.Read();
} }
while( true ) resultList = ReadElements<T>(reader);
{
var result = ReadElement( reader ) as LayoutFloatingWindow;
if( result == null )
{
break;
}
resultList.Add( result );
}
reader.ReadEndElement(); reader.ReadEndElement();
@ -823,6 +820,9 @@ namespace Xceed.Wpf.AvalonDock.Layout
XmlSerializer serializer; XmlSerializer serializer;
switch( reader.LocalName ) switch( reader.LocalName )
{ {
case "RootPanel":
serializer = new XmlSerializer( typeof( LayoutPanel ), new XmlRootAttribute("RootPanel") );
break;
case "LayoutAnchorablePaneGroup": case "LayoutAnchorablePaneGroup":
serializer = new XmlSerializer( typeof( LayoutAnchorablePaneGroup ) ); serializer = new XmlSerializer( typeof( LayoutAnchorablePaneGroup ) );
break; break;

Loading…
Cancel
Save