mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-23 18:18:00 +02:00
178 lines
4.8 KiB
Beef
178 lines
4.8 KiB
Beef
using Beefy.utils;
|
|
using Beefy.theme.dark;
|
|
using Beefy.widgets;
|
|
|
|
namespace IDE.ui
|
|
{
|
|
class AutoCompletePanel : Panel
|
|
{
|
|
public class DataArea : DockedWidget
|
|
{
|
|
public AutoCompletePanel mPanel;
|
|
|
|
public void ResizeContent()
|
|
{
|
|
var autoComplete = mPanel.mAutoComplete;
|
|
|
|
if (autoComplete == null)
|
|
return;
|
|
|
|
float yOfs = 0;
|
|
if (autoComplete.mInvokeWidget != null)
|
|
{
|
|
/*float height = GS!(20);
|
|
mAutoComplete.mInvokeWidget.Resize(0, 2, mWidth, height);
|
|
yOfs += mAutoComplete.mInvokeWidget.mHeight;*/
|
|
|
|
autoComplete.mInvokeWidget.ResizeContent(false);
|
|
float height = autoComplete.mInvokeWidget.mHeight - GS!(12);
|
|
autoComplete.mInvokeWidget.Resize(GS!(0), GS!(2), mWidth, height);
|
|
yOfs += height;
|
|
}
|
|
|
|
if (autoComplete.mAutoCompleteListWidget != null)
|
|
{
|
|
autoComplete.mAutoCompleteListWidget.Resize(0, yOfs, mWidth, mHeight - yOfs);
|
|
autoComplete.mAutoCompleteListWidget.mScrollContent.mWidth = mWidth;
|
|
}
|
|
}
|
|
|
|
public override void Resize(float x, float y, float width, float height)
|
|
{
|
|
base.Resize(x, y, width, height);
|
|
ResizeContent();
|
|
}
|
|
}
|
|
|
|
public class CommentArea : DockedWidget
|
|
{
|
|
public AutoCompletePanel mPanel;
|
|
|
|
public override void Draw(Beefy.gfx.Graphics g)
|
|
{
|
|
base.Draw(g);
|
|
|
|
var autoComplete = mPanel.mAutoComplete;
|
|
|
|
if (autoComplete == null)
|
|
return;
|
|
if (autoComplete.mAutoCompleteListWidget == null)
|
|
return;
|
|
if (autoComplete.mAutoCompleteListWidget.mSelectIdx == -1)
|
|
return;
|
|
if (autoComplete.mAutoCompleteListWidget.mDocumentationDelay > 0)
|
|
return;
|
|
var selectedEntry = autoComplete.mAutoCompleteListWidget.mEntryList[autoComplete.mAutoCompleteListWidget.mSelectIdx];
|
|
if (selectedEntry.mDocumentation == null)
|
|
return;
|
|
|
|
DocumentationParser docParser = scope .(selectedEntry.mDocumentation);
|
|
float drawX = GS!(6);
|
|
float drawY = GS!(4);
|
|
using (g.PushColor(0xFFC0C0C0))
|
|
g.DrawString(docParser.ShowDocString, drawX, drawY, .Left, mWidth - drawX - GS!(8), .Wrap);
|
|
}
|
|
|
|
public override void DrawAll(Beefy.gfx.Graphics g)
|
|
{
|
|
base.DrawAll(g);
|
|
using (g.PushColor(0x80FFFFFF))
|
|
g.DrawBox(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Bkg), 0, -GS!(6), mWidth, GS!(6));
|
|
}
|
|
}
|
|
|
|
public AutoComplete mAutoComplete;
|
|
public DarkDockingFrame mDockingFrame;
|
|
public DataArea mDataArea;
|
|
public CommentArea mCommentArea;
|
|
|
|
public this()
|
|
{
|
|
mDataArea = new .();
|
|
mDataArea.mPanel = this;
|
|
mDataArea.mIsFillWidget = true;
|
|
mCommentArea = new .();
|
|
mCommentArea.mPanel = this;
|
|
mCommentArea.mRequestedHeight = GS!(60);
|
|
|
|
mDockingFrame = new DarkDockingFrame();
|
|
mDockingFrame.mDrawBkg = false;
|
|
mDockingFrame.AddDockedWidget(mDataArea, null, .Top);
|
|
mDockingFrame.AddDockedWidget(mCommentArea, mDataArea, .Bottom);
|
|
AddWidget(mDockingFrame);
|
|
}
|
|
|
|
public bool Unbind(AutoComplete autoComplete)
|
|
{
|
|
if (mAutoComplete != autoComplete)
|
|
return false;
|
|
|
|
if ((mAutoComplete.mInvokeWidget != null) && (mAutoComplete.mInvokeWidget.mParent == mDataArea))
|
|
mDataArea.RemoveWidget(mAutoComplete.mInvokeWidget);
|
|
if ((mAutoComplete.mAutoCompleteListWidget != null) && (mAutoComplete.mAutoCompleteListWidget.mParent == mDataArea))
|
|
mDataArea.RemoveWidget(mAutoComplete.mAutoCompleteListWidget);
|
|
mAutoComplete = null;
|
|
return true;
|
|
}
|
|
|
|
public bool StartBind(AutoComplete autoComplete)
|
|
{
|
|
bool showInPanel = gApp.mSettings.mEditorSettings.mAutoCompleteShowKind == .Panel;
|
|
if (gApp.mSettings.mEditorSettings.mAutoCompleteShowKind == .PanelIfVisible)
|
|
showInPanel = mWidgetWindow != null;
|
|
|
|
if (!showInPanel)
|
|
{
|
|
if (mAutoComplete != null)
|
|
Unbind(mAutoComplete);
|
|
return false;
|
|
}
|
|
|
|
if (mAutoComplete == autoComplete)
|
|
return true;
|
|
|
|
if (mAutoComplete != null)
|
|
Unbind(mAutoComplete);
|
|
|
|
if (mWidgetWindow == null)
|
|
return false;
|
|
|
|
mAutoComplete = autoComplete;
|
|
|
|
return true;
|
|
}
|
|
|
|
public void FinishBind()
|
|
{
|
|
if (mAutoComplete == null)
|
|
return;
|
|
|
|
if ((mAutoComplete.mInvokeWidget != null) && (mAutoComplete.mInvokeWidget.mParent == null))
|
|
mDataArea.AddWidget(mAutoComplete.mInvokeWidget);
|
|
if ((mAutoComplete.mAutoCompleteListWidget != null) && (mAutoComplete.mAutoCompleteListWidget.mParent == null))
|
|
mDataArea.AddWidget(mAutoComplete.mAutoCompleteListWidget);
|
|
ResizeComponents();
|
|
|
|
if (mAutoComplete.mAutoCompleteListWidget != null)
|
|
mAutoComplete.mAutoCompleteListWidget.CenterSelection();
|
|
}
|
|
|
|
public void ResizeComponents()
|
|
{
|
|
mDockingFrame.Resize(0, 0, mWidth, mHeight);
|
|
|
|
|
|
}
|
|
|
|
public override void Resize(float x, float y, float width, float height)
|
|
{
|
|
base.Resize(x, y, width, height);
|
|
ResizeComponents();
|
|
}
|
|
|
|
public override void Serialize(StructuredData data)
|
|
{
|
|
data.Add("Type", "AutoCompletePanel");
|
|
}
|
|
}
|
|
}
|