mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-17 15:46:05 +02:00
Initial checkin
This commit is contained in:
parent
c74712dad9
commit
078564ac9e
3242 changed files with 1616395 additions and 0 deletions
162
IDE/src/ui/VirtualListView.bf
Normal file
162
IDE/src/ui/VirtualListView.bf
Normal file
|
@ -0,0 +1,162 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
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)
|
||||
{
|
||||
|
||||
}
|
||||
}*/
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue