mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 20:12:21 +02:00
155 lines
4.9 KiB
Beef
155 lines
4.9 KiB
Beef
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using IDE.ui;
|
|
using Beefy;
|
|
using System.IO;
|
|
|
|
namespace IDE
|
|
{
|
|
public class HistoryEntry : TrackedTextElement
|
|
{
|
|
//public String mNotes ~ delete _;
|
|
|
|
public bool mNoMerge;
|
|
|
|
public this()
|
|
{
|
|
mSnapToLineStart = false;
|
|
}
|
|
|
|
public ~this()
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public class HistoryManager
|
|
{
|
|
const int32 LINE_MERGE_MAX_DELTA = 8;
|
|
const int32 MAX_ENTRIES = 24;
|
|
|
|
public List<HistoryEntry> mHistoryList = new List<HistoryEntry>() ~
|
|
{
|
|
for (var entry in _)
|
|
entry.Deref();
|
|
delete _;
|
|
};
|
|
public int32 mHistoryIdx = -1;
|
|
|
|
public HistoryEntry CreateHistory(SourceViewPanel sourceViewPanel, String fileName, int wantLineNum, int wantColumn, bool ignoreIfClose)
|
|
{
|
|
// If we are backwards in history, try to update the current entry if we're close to it.
|
|
// Otherwise we truncate the history from the current location and append a new entry
|
|
HistoryEntry historyEntry;
|
|
if (mHistoryIdx >= 0)
|
|
{
|
|
historyEntry = mHistoryList[mHistoryIdx];
|
|
if ((!historyEntry.mNoMerge) && (historyEntry.mFileName == fileName) && (Math.Abs(historyEntry.mLineNum - wantLineNum) <= LINE_MERGE_MAX_DELTA))
|
|
{
|
|
if (ignoreIfClose)
|
|
return null;
|
|
|
|
historyEntry.mMoveIdx++;
|
|
historyEntry.mLineNum = (int32)wantLineNum;
|
|
historyEntry.mColumn = (int32)wantColumn;
|
|
|
|
bool foundExistingTrackedElement = false;
|
|
if ((sourceViewPanel != null) && (sourceViewPanel.mTrackedTextElementViewList != null))
|
|
{
|
|
for (var trackedElement in sourceViewPanel.mTrackedTextElementViewList)
|
|
{
|
|
if (trackedElement.mTrackedElement == historyEntry)
|
|
{
|
|
sourceViewPanel.UpdateTrackedElementView(trackedElement);
|
|
foundExistingTrackedElement = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!foundExistingTrackedElement)
|
|
IDEApp.sApp.mDebugger.mBreakpointsChangedDelegate();
|
|
return historyEntry;
|
|
}
|
|
}
|
|
|
|
int32 removeIdx = mHistoryIdx + 1;
|
|
while (removeIdx < mHistoryList.Count)
|
|
DeleteHistory(mHistoryList[removeIdx]);
|
|
|
|
while (mHistoryList.Count > MAX_ENTRIES)
|
|
{
|
|
var entry = mHistoryList.PopFront();
|
|
entry.Kill();
|
|
}
|
|
|
|
mHistoryIdx = (int32)mHistoryList.Count;
|
|
|
|
historyEntry = new HistoryEntry();
|
|
historyEntry.mFileName = new String(fileName);
|
|
historyEntry.mLineNum = (int32)wantLineNum;
|
|
historyEntry.mColumn = (int32)wantColumn;
|
|
mHistoryList.Add(historyEntry);
|
|
|
|
IDEApp.sApp.mDebugger.mBreakpointsChangedDelegate();
|
|
return historyEntry;
|
|
}
|
|
|
|
public void DeleteHistory(HistoryEntry history)
|
|
{
|
|
mHistoryList.Remove(history);
|
|
if (mHistoryIdx >= mHistoryList.Count)
|
|
mHistoryIdx = (int32)mHistoryList.Count - 1;
|
|
IDEApp.sApp.mDebugger.mBreakpointsChangedDelegate();
|
|
history.Kill();
|
|
}
|
|
|
|
public bool IsAtCurrentHistory(SourceViewPanel sourceViewPanel, String fileName, int wantLineNum, int wantColumn, bool ignoreIfClose)
|
|
{
|
|
if (mHistoryIdx >= 0)
|
|
{
|
|
HistoryEntry historyEntry = mHistoryList[mHistoryIdx];
|
|
if ((Path.Equals(historyEntry.mFileName, fileName)) && (Math.Abs(historyEntry.mLineNum - wantLineNum) == 0))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void GoToCurrentHistory()
|
|
{
|
|
if (mHistoryIdx == -1)
|
|
return;
|
|
|
|
var History = mHistoryList[mHistoryIdx];
|
|
IDEApp.sApp.ShowSourceFileLocation(History.mFileName, -1, -1, History.mLineNum, History.mColumn, LocatorType.Smart);
|
|
}
|
|
|
|
public void PrevHistory()
|
|
{
|
|
if (mHistoryList.Count == 0)
|
|
return;
|
|
|
|
mHistoryIdx--;
|
|
if (mHistoryIdx < 0)
|
|
mHistoryIdx = 0;
|
|
|
|
GoToCurrentHistory();
|
|
}
|
|
|
|
public void NextHistory()
|
|
{
|
|
if (mHistoryList.Count == 0)
|
|
return;
|
|
|
|
mHistoryIdx++;
|
|
if (mHistoryIdx >= mHistoryList.Count)
|
|
mHistoryIdx = (int32)mHistoryList.Count - 1;
|
|
|
|
GoToCurrentHistory();
|
|
}
|
|
}
|
|
}
|