|
|
|
@ -23,170 +23,201 @@ using System.Windows.Markup; |
|
|
|
|
|
|
|
namespace Xceed.Wpf.AvalonDock.Layout |
|
|
|
{ |
|
|
|
[ContentProperty("Children")] |
|
|
|
[Serializable] |
|
|
|
public class LayoutDocumentPane : LayoutPositionableGroup<LayoutContent>, ILayoutDocumentPane, ILayoutPositionableElement, ILayoutContentSelector, ILayoutPaneSerializable |
|
|
|
[ContentProperty( "Children" )] |
|
|
|
[Serializable] |
|
|
|
public class LayoutDocumentPane : LayoutPositionableGroup<LayoutContent>, ILayoutDocumentPane, ILayoutPositionableElement, ILayoutContentSelector, ILayoutPaneSerializable |
|
|
|
{ |
|
|
|
public LayoutDocumentPane() |
|
|
|
{ |
|
|
|
public LayoutDocumentPane() |
|
|
|
{ |
|
|
|
} |
|
|
|
public LayoutDocumentPane(LayoutContent firstChild) |
|
|
|
{ |
|
|
|
Children.Add(firstChild); |
|
|
|
} |
|
|
|
} |
|
|
|
public LayoutDocumentPane( LayoutContent firstChild ) |
|
|
|
{ |
|
|
|
Children.Add( firstChild ); |
|
|
|
} |
|
|
|
|
|
|
|
protected override bool GetVisibility() |
|
|
|
{ |
|
|
|
if (Parent is LayoutDocumentPaneGroup) |
|
|
|
return ChildrenCount > 0; |
|
|
|
protected override bool GetVisibility() |
|
|
|
{ |
|
|
|
if( Parent is LayoutDocumentPaneGroup ) |
|
|
|
return ChildrenCount > 0; |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
#region SelectedContentIndex
|
|
|
|
#region ShowHeader
|
|
|
|
|
|
|
|
private int _selectedIndex = -1; |
|
|
|
public int SelectedContentIndex |
|
|
|
{ |
|
|
|
get { return _selectedIndex; } |
|
|
|
set |
|
|
|
{ |
|
|
|
if (value < 0 || |
|
|
|
value >= Children.Count) |
|
|
|
value = -1; |
|
|
|
|
|
|
|
if (_selectedIndex != value) |
|
|
|
{ |
|
|
|
RaisePropertyChanging("SelectedContentIndex"); |
|
|
|
RaisePropertyChanging("SelectedContent"); |
|
|
|
if (_selectedIndex >= 0 && |
|
|
|
_selectedIndex < Children.Count) |
|
|
|
Children[_selectedIndex].IsSelected = false; |
|
|
|
|
|
|
|
_selectedIndex = value; |
|
|
|
|
|
|
|
if (_selectedIndex >= 0 && |
|
|
|
_selectedIndex < Children.Count) |
|
|
|
Children[_selectedIndex].IsSelected = true; |
|
|
|
|
|
|
|
RaisePropertyChanged("SelectedContentIndex"); |
|
|
|
RaisePropertyChanged("SelectedContent"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
private bool _showHeader = true; |
|
|
|
public bool ShowHeader |
|
|
|
{ |
|
|
|
get |
|
|
|
{ |
|
|
|
return _showHeader; |
|
|
|
} |
|
|
|
set |
|
|
|
{ |
|
|
|
if( value != _showHeader ) |
|
|
|
{ |
|
|
|
_showHeader = value; |
|
|
|
RaisePropertyChanged( "ShowHeader" ); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
protected override void ChildMoved(int oldIndex, int newIndex) |
|
|
|
{ |
|
|
|
if (_selectedIndex == oldIndex) |
|
|
|
{ |
|
|
|
RaisePropertyChanging("SelectedContentIndex"); |
|
|
|
_selectedIndex = newIndex; |
|
|
|
RaisePropertyChanged("SelectedContentIndex"); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region SelectedContentIndex
|
|
|
|
|
|
|
|
base.ChildMoved(oldIndex, newIndex); |
|
|
|
} |
|
|
|
private int _selectedIndex = -1; |
|
|
|
public int SelectedContentIndex |
|
|
|
{ |
|
|
|
get |
|
|
|
{ |
|
|
|
return _selectedIndex; |
|
|
|
} |
|
|
|
set |
|
|
|
{ |
|
|
|
if( value < 0 || |
|
|
|
value >= Children.Count ) |
|
|
|
value = -1; |
|
|
|
|
|
|
|
if( _selectedIndex != value ) |
|
|
|
{ |
|
|
|
RaisePropertyChanging( "SelectedContentIndex" ); |
|
|
|
RaisePropertyChanging( "SelectedContent" ); |
|
|
|
if( _selectedIndex >= 0 && |
|
|
|
_selectedIndex < Children.Count ) |
|
|
|
Children[ _selectedIndex ].IsSelected = false; |
|
|
|
|
|
|
|
_selectedIndex = value; |
|
|
|
|
|
|
|
if( _selectedIndex >= 0 && |
|
|
|
_selectedIndex < Children.Count ) |
|
|
|
Children[ _selectedIndex ].IsSelected = true; |
|
|
|
|
|
|
|
RaisePropertyChanged( "SelectedContentIndex" ); |
|
|
|
RaisePropertyChanged( "SelectedContent" ); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public LayoutContent SelectedContent |
|
|
|
{ |
|
|
|
get { return _selectedIndex == -1 ? null : Children[_selectedIndex]; } |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
protected override void ChildMoved( int oldIndex, int newIndex ) |
|
|
|
{ |
|
|
|
if( _selectedIndex == oldIndex ) |
|
|
|
{ |
|
|
|
RaisePropertyChanging( "SelectedContentIndex" ); |
|
|
|
_selectedIndex = newIndex; |
|
|
|
RaisePropertyChanged( "SelectedContentIndex" ); |
|
|
|
} |
|
|
|
|
|
|
|
protected override void OnChildrenCollectionChanged() |
|
|
|
{ |
|
|
|
if (SelectedContentIndex >= ChildrenCount) |
|
|
|
SelectedContentIndex = Children.Count - 1; |
|
|
|
if (SelectedContentIndex == -1 && ChildrenCount > 0) |
|
|
|
{ |
|
|
|
if( Root == null ) |
|
|
|
{ |
|
|
|
SetNextSelectedIndex(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
var childrenToSelect = Children.OrderByDescending( c => c.LastActivationTimeStamp.GetValueOrDefault() ).First(); |
|
|
|
SelectedContentIndex = Children.IndexOf( childrenToSelect ); |
|
|
|
childrenToSelect.IsActive = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
base.OnChildrenCollectionChanged(); |
|
|
|
|
|
|
|
RaisePropertyChanged("ChildrenSorted"); |
|
|
|
} |
|
|
|
|
|
|
|
public int IndexOf(LayoutContent content) |
|
|
|
{ |
|
|
|
return Children.IndexOf(content); |
|
|
|
} |
|
|
|
base.ChildMoved( oldIndex, newIndex ); |
|
|
|
} |
|
|
|
|
|
|
|
protected override void OnIsVisibleChanged() |
|
|
|
{ |
|
|
|
UpdateParentVisibility(); |
|
|
|
base.OnIsVisibleChanged(); |
|
|
|
} |
|
|
|
public LayoutContent SelectedContent |
|
|
|
{ |
|
|
|
get |
|
|
|
{ |
|
|
|
return _selectedIndex == -1 ? null : Children[ _selectedIndex ]; |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
internal void SetNextSelectedIndex() |
|
|
|
protected override void OnChildrenCollectionChanged() |
|
|
|
{ |
|
|
|
if( SelectedContentIndex >= ChildrenCount ) |
|
|
|
SelectedContentIndex = Children.Count - 1; |
|
|
|
if( SelectedContentIndex == -1 && ChildrenCount > 0 ) |
|
|
|
{ |
|
|
|
if( Root == null ) |
|
|
|
{ |
|
|
|
SelectedContentIndex = -1; |
|
|
|
for( int i = 0; i < this.Children.Count; ++i ) |
|
|
|
{ |
|
|
|
if( Children[ i ].IsEnabled ) |
|
|
|
{ |
|
|
|
SelectedContentIndex = i; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
SetNextSelectedIndex(); |
|
|
|
} |
|
|
|
|
|
|
|
void UpdateParentVisibility() |
|
|
|
else |
|
|
|
{ |
|
|
|
var parentPane = Parent as ILayoutElementWithVisibility; |
|
|
|
if (parentPane != null) |
|
|
|
parentPane.ComputeVisibility(); |
|
|
|
var childrenToSelect = Children.OrderByDescending( c => c.LastActivationTimeStamp.GetValueOrDefault() ).First(); |
|
|
|
SelectedContentIndex = Children.IndexOf( childrenToSelect ); |
|
|
|
childrenToSelect.IsActive = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public IEnumerable<LayoutContent> ChildrenSorted |
|
|
|
{ |
|
|
|
get |
|
|
|
{ |
|
|
|
var listSorted = Children.ToList(); |
|
|
|
listSorted.Sort(); |
|
|
|
return listSorted; |
|
|
|
} |
|
|
|
} |
|
|
|
base.OnChildrenCollectionChanged(); |
|
|
|
|
|
|
|
RaisePropertyChanged( "ChildrenSorted" ); |
|
|
|
} |
|
|
|
|
|
|
|
public int IndexOf( LayoutContent content ) |
|
|
|
{ |
|
|
|
return Children.IndexOf( content ); |
|
|
|
} |
|
|
|
|
|
|
|
string _id; |
|
|
|
string ILayoutPaneSerializable.Id |
|
|
|
protected override void OnIsVisibleChanged() |
|
|
|
{ |
|
|
|
UpdateParentVisibility(); |
|
|
|
base.OnIsVisibleChanged(); |
|
|
|
} |
|
|
|
|
|
|
|
internal void SetNextSelectedIndex() |
|
|
|
{ |
|
|
|
SelectedContentIndex = -1; |
|
|
|
for( int i = 0; i < this.Children.Count; ++i ) |
|
|
|
{ |
|
|
|
if( Children[ i ].IsEnabled ) |
|
|
|
{ |
|
|
|
get |
|
|
|
{ |
|
|
|
return _id; |
|
|
|
} |
|
|
|
set |
|
|
|
{ |
|
|
|
_id = value; |
|
|
|
} |
|
|
|
SelectedContentIndex = i; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public override void WriteXml(System.Xml.XmlWriter writer) |
|
|
|
{ |
|
|
|
if (_id != null) |
|
|
|
writer.WriteAttributeString("Id", _id); |
|
|
|
void UpdateParentVisibility() |
|
|
|
{ |
|
|
|
var parentPane = Parent as ILayoutElementWithVisibility; |
|
|
|
if( parentPane != null ) |
|
|
|
parentPane.ComputeVisibility(); |
|
|
|
} |
|
|
|
|
|
|
|
base.WriteXml(writer); |
|
|
|
} |
|
|
|
public IEnumerable<LayoutContent> ChildrenSorted |
|
|
|
{ |
|
|
|
get |
|
|
|
{ |
|
|
|
var listSorted = Children.ToList(); |
|
|
|
listSorted.Sort(); |
|
|
|
return listSorted; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public override void ReadXml(System.Xml.XmlReader reader) |
|
|
|
{ |
|
|
|
if (reader.MoveToAttribute("Id")) |
|
|
|
_id = reader.Value; |
|
|
|
string _id; |
|
|
|
string ILayoutPaneSerializable.Id |
|
|
|
{ |
|
|
|
get |
|
|
|
{ |
|
|
|
return _id; |
|
|
|
} |
|
|
|
set |
|
|
|
{ |
|
|
|
_id = value; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public override void WriteXml( System.Xml.XmlWriter writer ) |
|
|
|
{ |
|
|
|
if( _id != null ) |
|
|
|
writer.WriteAttributeString( "Id", _id ); |
|
|
|
if( !_showHeader ) |
|
|
|
writer.WriteAttributeString( "ShowHeader", _showHeader.ToString() ); |
|
|
|
|
|
|
|
base.ReadXml(reader); |
|
|
|
} |
|
|
|
base.WriteXml( writer ); |
|
|
|
} |
|
|
|
|
|
|
|
public override void ReadXml( System.Xml.XmlReader reader ) |
|
|
|
{ |
|
|
|
if( reader.MoveToAttribute( "Id" ) ) |
|
|
|
_id = reader.Value; |
|
|
|
if( reader.MoveToAttribute( "ShowHeader" ) ) |
|
|
|
_showHeader = bool.Parse( reader.Value ); |
|
|
|
|
|
|
|
|
|
|
|
base.ReadXml( reader ); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#if TRACE
|
|
|
|
@ -200,5 +231,5 @@ namespace Xceed.Wpf.AvalonDock.Layout |
|
|
|
} |
|
|
|
#endif
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|