2019-08-23 11:56:54 -07:00
|
|
|
using System;
|
2020-04-29 06:40:03 -07:00
|
|
|
using System.Collections;
|
2019-08-23 11:56:54 -07:00
|
|
|
using System.Text;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using Beefy.theme.dark;
|
|
|
|
using Beefy.widgets;
|
|
|
|
|
|
|
|
namespace IDE.ui
|
|
|
|
{
|
|
|
|
/*public class VirtualListViewItem : DarkListViewItem
|
|
|
|
{
|
|
|
|
public VirtualListViewItem mVirtualHeadItem;
|
|
|
|
public int32 mVirtualCount; // Including head item
|
|
|
|
public int32 mVirtualIdx;
|
|
|
|
public bool mDisabled = false;
|
|
|
|
|
|
|
|
public this(VirtualListView listView)
|
|
|
|
: base(listView)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
public override void Update()
|
|
|
|
{
|
|
|
|
base.Update();
|
|
|
|
|
|
|
|
if (mParentItem == null)
|
|
|
|
return;
|
|
|
|
|
|
|
|
var virtualListView = (VirtualListView)mListView;
|
|
|
|
|
|
|
|
if (mParentItem.mChildAreaHeight != 0)
|
|
|
|
{
|
|
|
|
float itemHeight = virtualListView.mFont.GetLineSpacing();
|
|
|
|
if (mVirtualHeadItem == this)
|
|
|
|
{
|
|
|
|
/*float ofsX;
|
|
|
|
float ofsY;
|
|
|
|
mParent.SelfToOtherTranslate(mListView, 0, 0, out ofsX, out ofsY);*/
|
|
|
|
|
|
|
|
float ofsX;
|
|
|
|
float ofsY;
|
|
|
|
mParent.SelfToOtherTranslate(mListView, 0, 0, out ofsX, out ofsY);
|
|
|
|
ofsY -= mListView.mVertPos.mDest + mListView.mScrollContent.mY;
|
|
|
|
|
|
|
|
int32 curMemberIdx = 0;
|
|
|
|
VirtualListViewItem prevVirtualListViewItem = null;
|
|
|
|
VirtualListViewItem nextVirtualListViewItem = (VirtualListViewItem)mParentItem.mChildItems[curMemberIdx];
|
|
|
|
|
|
|
|
int32 showCount = mVirtualCount;
|
|
|
|
|
|
|
|
float curY = mY;
|
|
|
|
float prevY = curY;
|
|
|
|
float lastBottomPadding = 0;
|
|
|
|
for (int32 idx = 0; idx < showCount; idx++)
|
|
|
|
{
|
|
|
|
VirtualListViewItem curVirtualListViewItem = null;
|
|
|
|
|
|
|
|
if ((nextVirtualListViewItem != null) && (idx == nextVirtualListViewItem.mVirtualIdx))
|
|
|
|
{
|
|
|
|
curVirtualListViewItem = nextVirtualListViewItem;
|
|
|
|
curMemberIdx++;
|
|
|
|
if (curMemberIdx < mParentItem.mChildItems.Count)
|
|
|
|
{
|
|
|
|
nextVirtualListViewItem = (VirtualListViewItem)mParentItem.mChildItems[curMemberIdx];
|
|
|
|
if (nextVirtualListViewItem.mVirtualHeadItem != this)
|
|
|
|
nextVirtualListViewItem = null;
|
|
|
|
if (nextVirtualListViewItem != null)
|
|
|
|
lastBottomPadding = nextVirtualListViewItem.mBottomPadding;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
nextVirtualListViewItem = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool wantsFillIn = (curY + ofsY + itemHeight >= 0) && (curY + ofsY < mListView.mHeight);
|
|
|
|
bool wantsDelete = !wantsFillIn;
|
|
|
|
|
|
|
|
if (mDisabled)
|
|
|
|
{
|
|
|
|
wantsFillIn = false;
|
|
|
|
wantsDelete = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*bool wantsFillIn = (Utils.Rand() % 1000) == 0;
|
|
|
|
bool wantsDelete = (Utils.Rand() % 1000) == 0;*/
|
|
|
|
|
|
|
|
if ((curVirtualListViewItem == null) && (wantsFillIn))
|
|
|
|
{
|
|
|
|
prevVirtualListViewItem.mBottomPadding = (curY - prevVirtualListViewItem.mY) - prevVirtualListViewItem.mSelfHeight - prevVirtualListViewItem.mChildAreaHeight;
|
|
|
|
curVirtualListViewItem = (VirtualListViewItem)mParentItem.CreateChildItemAtIndex(curMemberIdx);
|
|
|
|
curVirtualListViewItem.mVisible = false;
|
|
|
|
curVirtualListViewItem.mX = mX;
|
|
|
|
curVirtualListViewItem.mVirtualHeadItem = this;
|
|
|
|
curVirtualListViewItem.mVirtualIdx = idx;
|
|
|
|
virtualListView.PopulateVirtualItem(curVirtualListViewItem);
|
|
|
|
curMemberIdx++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((wantsDelete) && (idx != 0) && (curVirtualListViewItem != null) && (curVirtualListViewItem.mChildAreaHeight == 0))
|
|
|
|
{
|
|
|
|
curMemberIdx--;
|
|
|
|
mParentItem.RemoveChildItem(curVirtualListViewItem);
|
|
|
|
curVirtualListViewItem = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (prevVirtualListViewItem != null)
|
|
|
|
{
|
|
|
|
if (mDisabled)
|
|
|
|
prevVirtualListViewItem.mBottomPadding = 0;
|
|
|
|
else
|
|
|
|
prevVirtualListViewItem.mBottomPadding = (curY - prevY) - prevVirtualListViewItem.mSelfHeight - prevVirtualListViewItem.mChildAreaHeight;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (curVirtualListViewItem != null)
|
|
|
|
prevY = curY;
|
|
|
|
|
|
|
|
curY += itemHeight;
|
|
|
|
if (curVirtualListViewItem != null)
|
|
|
|
{
|
|
|
|
curY += curVirtualListViewItem.mChildAreaHeight;
|
|
|
|
prevVirtualListViewItem = curVirtualListViewItem;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (prevVirtualListViewItem != null)
|
|
|
|
{
|
|
|
|
if (mDisabled)
|
|
|
|
prevVirtualListViewItem.mBottomPadding = 0;
|
|
|
|
else
|
|
|
|
prevVirtualListViewItem.mBottomPadding = (curY - prevY) - prevVirtualListViewItem.mSelfHeight - prevVirtualListViewItem.mChildAreaHeight;
|
|
|
|
|
|
|
|
if (prevVirtualListViewItem.mBottomPadding != lastBottomPadding)
|
|
|
|
mListView.mListSizeDirty = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
while (curMemberIdx < mParentItem.mChildItems.Count)
|
|
|
|
{
|
|
|
|
var curVirtualListViewItem = (VirtualListViewItem)mParentItem.mChildItems[curMemberIdx];
|
|
|
|
if (curVirtualListViewItem.mVirtualHeadItem != this)
|
|
|
|
break;
|
|
|
|
mParentItem.RemoveChildItem(curVirtualListViewItem);
|
|
|
|
if (mParentItem == null) // Last item
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public class VirtualListView : IDEListView
|
|
|
|
{
|
|
|
|
protected override ListViewItem CreateListViewItem()
|
|
|
|
{
|
|
|
|
var anItem = new VirtualListViewItem(this);
|
|
|
|
return anItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
public virtual void PopulateVirtualItem(VirtualListViewItem item)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
}
|