Make structural changes to repository
Modernizes the repository
This commit is contained in:
parent
a67593b58f
commit
7f7f8970bc
412 changed files with 72437 additions and 155552 deletions
175
source/Docking/DockContentCollection.cs
Normal file
175
source/Docking/DockContentCollection.cs
Normal file
|
@ -0,0 +1,175 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace LSLEditor.Docking
|
||||
{
|
||||
public class DockContentCollection : ReadOnlyCollection<IDockContent>
|
||||
{
|
||||
private static List<IDockContent> _emptyList = new List<IDockContent>(0);
|
||||
|
||||
internal DockContentCollection()
|
||||
: base(new List<IDockContent>())
|
||||
{
|
||||
}
|
||||
|
||||
internal DockContentCollection(DockPane pane)
|
||||
: base(_emptyList)
|
||||
{
|
||||
m_dockPane = pane;
|
||||
}
|
||||
|
||||
private DockPane m_dockPane = null;
|
||||
private DockPane DockPane
|
||||
{
|
||||
get { return m_dockPane; }
|
||||
}
|
||||
|
||||
public new IDockContent this[int index]
|
||||
{
|
||||
get
|
||||
{
|
||||
if (DockPane == null)
|
||||
return Items[index] as IDockContent;
|
||||
else
|
||||
return GetVisibleContent(index);
|
||||
}
|
||||
}
|
||||
|
||||
internal int Add(IDockContent content)
|
||||
{
|
||||
#if DEBUG
|
||||
if (DockPane != null)
|
||||
throw new InvalidOperationException();
|
||||
#endif
|
||||
|
||||
if (Contains(content))
|
||||
return IndexOf(content);
|
||||
|
||||
Items.Add(content);
|
||||
return Count - 1;
|
||||
}
|
||||
|
||||
internal void AddAt(IDockContent content, int index)
|
||||
{
|
||||
#if DEBUG
|
||||
if (DockPane != null)
|
||||
throw new InvalidOperationException();
|
||||
#endif
|
||||
|
||||
if (index < 0 || index > Items.Count - 1)
|
||||
return;
|
||||
|
||||
if (Contains(content))
|
||||
return;
|
||||
|
||||
Items.Insert(index, content);
|
||||
}
|
||||
|
||||
public new bool Contains(IDockContent content)
|
||||
{
|
||||
if (DockPane == null)
|
||||
return Items.Contains(content);
|
||||
else
|
||||
return (GetIndexOfVisibleContents(content) != -1);
|
||||
}
|
||||
|
||||
public new int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
if (DockPane == null)
|
||||
return base.Count;
|
||||
else
|
||||
return CountOfVisibleContents;
|
||||
}
|
||||
}
|
||||
|
||||
public new int IndexOf(IDockContent content)
|
||||
{
|
||||
if (DockPane == null)
|
||||
{
|
||||
if (!Contains(content))
|
||||
return -1;
|
||||
else
|
||||
return Items.IndexOf(content);
|
||||
}
|
||||
else
|
||||
return GetIndexOfVisibleContents(content);
|
||||
}
|
||||
|
||||
internal void Remove(IDockContent content)
|
||||
{
|
||||
if (DockPane != null)
|
||||
throw new InvalidOperationException();
|
||||
|
||||
if (!Contains(content))
|
||||
return;
|
||||
|
||||
Items.Remove(content);
|
||||
}
|
||||
|
||||
private int CountOfVisibleContents
|
||||
{
|
||||
get
|
||||
{
|
||||
#if DEBUG
|
||||
if (DockPane == null)
|
||||
throw new InvalidOperationException();
|
||||
#endif
|
||||
|
||||
int count = 0;
|
||||
foreach (IDockContent content in DockPane.Contents)
|
||||
{
|
||||
if (content.DockHandler.DockState == DockPane.DockState)
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
private IDockContent GetVisibleContent(int index)
|
||||
{
|
||||
#if DEBUG
|
||||
if (DockPane == null)
|
||||
throw new InvalidOperationException();
|
||||
#endif
|
||||
|
||||
int currentIndex = -1;
|
||||
foreach (IDockContent content in DockPane.Contents)
|
||||
{
|
||||
if (content.DockHandler.DockState == DockPane.DockState)
|
||||
currentIndex++;
|
||||
|
||||
if (currentIndex == index)
|
||||
return content;
|
||||
}
|
||||
throw (new ArgumentOutOfRangeException());
|
||||
}
|
||||
|
||||
private int GetIndexOfVisibleContents(IDockContent content)
|
||||
{
|
||||
#if DEBUG
|
||||
if (DockPane == null)
|
||||
throw new InvalidOperationException();
|
||||
#endif
|
||||
|
||||
if (content == null)
|
||||
return -1;
|
||||
|
||||
int index = -1;
|
||||
foreach (IDockContent c in DockPane.Contents)
|
||||
{
|
||||
if (c.DockHandler.DockState == DockPane.DockState)
|
||||
{
|
||||
index++;
|
||||
|
||||
if (c == content)
|
||||
return index;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue