1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-16 15:24:10 +02:00
Beef/IDE/src/ui/GoToLineDialog.bf

110 lines
3.4 KiB
Beef
Raw Normal View History

2019-08-23 11:56:54 -07:00
using System;
using System.Collections;
2019-08-23 11:56:54 -07:00
using System.Text;
using System.Threading.Tasks;
using Beefy;
using Beefy.widgets;
using Beefy.theme.dark;
using Beefy.gfx;
using Beefy.events;
namespace IDE.ui
{
class GoToLineDialog : DarkDialog
{
SourceViewPanel mSourceViewPanel;
int mCursorPos;
double mVertPos;
2020-04-10 08:44:58 -07:00
bool mIsValid = true;
EditWidget mEditWidget;
2019-08-23 11:56:54 -07:00
public this(String title = null, String text = null, Image icon = null) :
base(title, text, icon)
{
}
public void Init(SourceViewPanel sourceViewPanel)
{
mSourceViewPanel = sourceViewPanel;
int line;
int lineChar;
mSourceViewPanel.mEditWidget.Content.GetCursorLineChar(out line, out lineChar);
mCursorPos = sourceViewPanel.mEditWidget.Content.CursorTextPos;
mVertPos = sourceViewPanel.mEditWidget.mVertPos.mDest;
mDefaultButton = AddButton("OK", new (evt) => GotoLineSubmit(true));
mEscButton = AddButton("Cancel", new (evt) => Cancel());
2020-04-10 08:44:58 -07:00
mEditWidget = AddEdit(StackStringFormat!("{0}", line + 1));
mEditWidget.mOnContentChanged.Add(new (evt) => GotoLineSubmit(false));
2019-08-23 11:56:54 -07:00
}
void GotoLineSubmit(bool isFinal)
{
var editWidgetContent = mSourceViewPanel.mEditWidget;
2020-04-10 08:44:58 -07:00
mIsValid = false;
2019-08-23 11:56:54 -07:00
var text = scope String();
mDialogEditWidget.GetText(text);
var lineResult = int32.Parse(text);
//if (!lineResult.Failed(true))
if (lineResult case .Ok(var line))
{
line--;
if ((line < 0) || (line >= editWidgetContent.Content.GetLineCount()))
{
2020-04-10 08:44:58 -07:00
if (isFinal)
IDEApp.Beep(IDEApp.MessageBeepType.Error);
2019-08-23 11:56:54 -07:00
return;
}
2020-04-10 08:44:58 -07:00
mIsValid = true;
2019-08-23 11:56:54 -07:00
int column = ((SourceEditWidgetContent)editWidgetContent.Content).GetLineEndColumn(line, false, true, true);
editWidgetContent.Content.CursorLineAndColumn = EditWidgetContent.LineAndColumn(line, column);
editWidgetContent.Content.CursorMoved();
editWidgetContent.Content.EnsureCursorVisible(true, true);
if (isFinal)
{
editWidgetContent.Content.mSelection = null;
mSourceViewPanel.RecordHistoryLocation();
}
else
{
int lineStart;
int lineEnd;
editWidgetContent.Content.GetLinePosition(line, out lineStart, out lineEnd);
editWidgetContent.Content.mSelection = EditSelection(lineStart, lineEnd + 1);
}
}
2020-04-10 08:44:58 -07:00
else
{
if (isFinal)
IDEApp.Beep(IDEApp.MessageBeepType.Error);
}
2019-08-23 11:56:54 -07:00
}
2020-04-10 08:44:58 -07:00
public override void DrawAll(Graphics g)
{
base.DrawAll(g);
if (!mIsValid)
{
using (g.PushColor(0xFFFF0000))
g.DrawBox(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Outline), mEditWidget.mX, mEditWidget.mY, mEditWidget.mWidth, mEditWidget.mHeight);
}
}
2019-08-23 11:56:54 -07:00
void Cancel()
{
var editWidgetContent = mSourceViewPanel.mEditWidget;
editWidgetContent.Content.mSelection = null;
mSourceViewPanel.mEditWidget.Content.CursorTextPos = mCursorPos;
mSourceViewPanel.mEditWidget.mVertPos.Set(mVertPos);
}
}
}