mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Removed System.Tuple type
This commit is contained in:
parent
e37e1ac687
commit
d11b09dd07
6 changed files with 316 additions and 64 deletions
|
@ -255,8 +255,8 @@ namespace Beefy.widgets
|
||||||
public class IndentTextAction : TextAction
|
public class IndentTextAction : TextAction
|
||||||
{
|
{
|
||||||
// InsertCharList is for block indent, RemoveCharList is for unindent (shift-tab)
|
// InsertCharList is for block indent, RemoveCharList is for unindent (shift-tab)
|
||||||
public List<Tuple<int32, char8>> mRemoveCharList = new List<Tuple<int32, char8>>() ~ delete _;
|
public List<(int32, char8)> mRemoveCharList = new .() ~ delete _;
|
||||||
public List<Tuple<int32, char8>> mInsertCharList = new List<Tuple<int32, char8>>() ~ delete _;
|
public List<(int32, char8)> mInsertCharList = new .() ~ delete _;
|
||||||
public EditSelection mNewSelection;
|
public EditSelection mNewSelection;
|
||||||
|
|
||||||
public this(EditWidgetContent editWidget)
|
public this(EditWidgetContent editWidget)
|
||||||
|
@ -272,13 +272,13 @@ namespace Beefy.widgets
|
||||||
{
|
{
|
||||||
var idxChar = mRemoveCharList[idx];
|
var idxChar = mRemoveCharList[idx];
|
||||||
|
|
||||||
editWidgetContent.InsertText(idxChar.Item1, ToStackString!(idxChar.Item2));
|
editWidgetContent.InsertText(idxChar.0, ToStackString!(idxChar.1));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int idx = mInsertCharList.Count - 1; idx >= 0; idx--)
|
for (int idx = mInsertCharList.Count - 1; idx >= 0; idx--)
|
||||||
{
|
{
|
||||||
var idxChar = mInsertCharList[idx];
|
var idxChar = mInsertCharList[idx];
|
||||||
editWidgetContent.RemoveText(idxChar.Item1, 1);
|
editWidgetContent.RemoveText(idxChar.0, 1);
|
||||||
}
|
}
|
||||||
editWidgetContent.ContentChanged();
|
editWidgetContent.ContentChanged();
|
||||||
SetPreviousState(false);
|
SetPreviousState(false);
|
||||||
|
@ -290,12 +290,12 @@ namespace Beefy.widgets
|
||||||
var editWidgetContent = EditWidgetContent;
|
var editWidgetContent = EditWidgetContent;
|
||||||
SetPreviousState(true);
|
SetPreviousState(true);
|
||||||
for (var idxChar in mRemoveCharList)
|
for (var idxChar in mRemoveCharList)
|
||||||
editWidgetContent.RemoveText(idxChar.Item1, 1);
|
editWidgetContent.RemoveText(idxChar.0, 1);
|
||||||
var charStr = scope String(' ', 1);
|
var charStr = scope String(' ', 1);
|
||||||
for (var idxChar in mInsertCharList)
|
for (var idxChar in mInsertCharList)
|
||||||
{
|
{
|
||||||
charStr[0] = idxChar.Item2;
|
charStr[0] = idxChar.1;
|
||||||
editWidgetContent.InsertText(idxChar.Item1, charStr);
|
editWidgetContent.InsertText(idxChar.0, charStr);
|
||||||
}
|
}
|
||||||
editWidgetContent.ContentChanged();
|
editWidgetContent.ContentChanged();
|
||||||
editWidgetContent.mSelection = mNewSelection;
|
editWidgetContent.mSelection = mNewSelection;
|
||||||
|
@ -3158,7 +3158,7 @@ namespace Beefy.widgets
|
||||||
char8 c = (char8)mData.mText[lineStart + i].mChar;
|
char8 c = (char8)mData.mText[lineStart + i].mChar;
|
||||||
if (((c == '\t') && (i == 0)) || (c == ' '))
|
if (((c == '\t') && (i == 0)) || (c == ' '))
|
||||||
{
|
{
|
||||||
indentTextAction.mRemoveCharList.Add(Tuple<int32, char8>((int32)lineStart + i + endAdjust, c));
|
indentTextAction.mRemoveCharList.Add(((int32)lineStart + i + endAdjust, c));
|
||||||
//RemoveText(lineStart, 1);
|
//RemoveText(lineStart, 1);
|
||||||
endAdjust--;
|
endAdjust--;
|
||||||
}
|
}
|
||||||
|
@ -3181,7 +3181,7 @@ namespace Beefy.widgets
|
||||||
GetLinePosition(lineIdx, out lineStart, out lineEnd);
|
GetLinePosition(lineIdx, out lineStart, out lineEnd);
|
||||||
lineStart += endAdjust;
|
lineStart += endAdjust;
|
||||||
//InsertText(lineStart, "\t");
|
//InsertText(lineStart, "\t");
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)lineStart, '\t'));
|
indentTextAction.mInsertCharList.Add(((int32)lineStart, '\t'));
|
||||||
endAdjust++;
|
endAdjust++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
namespace System
|
|
||||||
{
|
|
||||||
struct Tuple<T1, T2> : IHashable where T1 : IHashable where T2 : IHashable
|
|
||||||
{
|
|
||||||
public T1 Item1;
|
|
||||||
public T2 Item2;
|
|
||||||
|
|
||||||
public this()
|
|
||||||
{
|
|
||||||
Item1 = default(T1);
|
|
||||||
Item2 = default(T2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public this(T1 item1, T2 item2)
|
|
||||||
{
|
|
||||||
Item1 = item1;
|
|
||||||
Item2 = item2;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetHashCode()
|
|
||||||
{
|
|
||||||
int h1 = Item1.GetHashCode();
|
|
||||||
int h2 = Item2.GetHashCode();
|
|
||||||
return (((h1 << 5) + h1) ^ h2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -539,12 +539,12 @@ namespace IDE.ui
|
||||||
if ((GetCategoryTargetedKind(categoryTypeInt) == .Config) &&
|
if ((GetCategoryTargetedKind(categoryTypeInt) == .Config) &&
|
||||||
((mConfigNames.Count == 1) && (mPlatformNames.Count == 1)))
|
((mConfigNames.Count == 1) && (mPlatformNames.Count == 1)))
|
||||||
{
|
{
|
||||||
var key = Tuple<String, String>(configName, platformName);
|
var key = ConfigPlatformPair(configName, platformName);
|
||||||
var targetedConfigDataResult = mTargetedConfigDatas.GetValue(key);
|
var targetedConfigDataResult = mTargetedConfigDatas.GetValue(key);
|
||||||
if (!(targetedConfigDataResult case .Ok(out targetedConfigData)))
|
if (!(targetedConfigDataResult case .Ok(out targetedConfigData)))
|
||||||
{
|
{
|
||||||
key.Item1 = new String(key.Item1);
|
key.mConfig = new String(key.mConfig);
|
||||||
key.Item2 = new String(key.Item2);
|
key.mPlatform = new String(key.mPlatform);
|
||||||
targetedConfigData = new ConfigDataGroup((int32)CategoryType.COUNT);
|
targetedConfigData = new ConfigDataGroup((int32)CategoryType.COUNT);
|
||||||
targetedConfigData.mTarget = key;
|
targetedConfigData.mTarget = key;
|
||||||
mTargetedConfigDatas[key] = targetedConfigData;
|
mTargetedConfigDatas[key] = targetedConfigData;
|
||||||
|
@ -1021,7 +1021,7 @@ namespace IDE.ui
|
||||||
projectProperties.HadExternalChanges(configName, platformName);
|
projectProperties.HadExternalChanges(configName, platformName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
projectProperties.HadExternalChanges(targetedConfigData.mTarget.Item1, targetedConfigData.mTarget.Item2);
|
projectProperties.HadExternalChanges(targetedConfigData.mTarget.mConfig, targetedConfigData.mTarget.mPlatform);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
projectProperties.HadExternalChanges(null, null);
|
projectProperties.HadExternalChanges(null, null);
|
||||||
|
|
|
@ -1763,7 +1763,7 @@ namespace IDE.ui
|
||||||
for (i = 0; i < indentCount; i++)
|
for (i = 0; i < indentCount; i++)
|
||||||
{
|
{
|
||||||
InsertText(lineStart + i, "\t");
|
InsertText(lineStart + i, "\t");
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i), '\t'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i), '\t'));
|
||||||
endAdjust++;
|
endAdjust++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1772,16 +1772,16 @@ namespace IDE.ui
|
||||||
if (wantsContentTab)
|
if (wantsContentTab)
|
||||||
{
|
{
|
||||||
InsertText(lineStart + i, "{\n\t");
|
InsertText(lineStart + i, "{\n\t");
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i), '{'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i), '{'));
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i + 1), '\n'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i + 1), '\n'));
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i + 2), '\t'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i + 2), '\t'));
|
||||||
endAdjust += 3;
|
endAdjust += 3;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
InsertText(lineStart + i, "{\n");
|
InsertText(lineStart + i, "{\n");
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i), '{'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i), '{'));
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i + 1), '\n'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i + 1), '\n'));
|
||||||
startAdjust -= 1;
|
startAdjust -= 1;
|
||||||
endAdjust += 2;
|
endAdjust += 2;
|
||||||
}
|
}
|
||||||
|
@ -1803,19 +1803,19 @@ namespace IDE.ui
|
||||||
for (i = 0; i < indentCount; i++)
|
for (i = 0; i < indentCount; i++)
|
||||||
{
|
{
|
||||||
InsertText(lineStart + i, "\t");
|
InsertText(lineStart + i, "\t");
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i), '\t'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i), '\t'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isEmbeddedEnd)
|
if (isEmbeddedEnd)
|
||||||
{
|
{
|
||||||
InsertText(lineStart + i, "}");
|
InsertText(lineStart + i, "}");
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i), '}'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i), '}'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
InsertText(lineStart + i, "}\n");
|
InsertText(lineStart + i, "}\n");
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i), '}'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i), '}'));
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart + i + 1), '\n'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart + i + 1), '\n'));
|
||||||
}
|
}
|
||||||
|
|
||||||
newSel.mEndPos = (int32)(lineStart + i + 1);
|
newSel.mEndPos = (int32)(lineStart + i + 1);
|
||||||
|
@ -1828,7 +1828,7 @@ namespace IDE.ui
|
||||||
if (c != '#')
|
if (c != '#')
|
||||||
{
|
{
|
||||||
InsertText(lineStart, "\t");
|
InsertText(lineStart, "\t");
|
||||||
indentTextAction.mInsertCharList.Add(Tuple<int32, char8>((int32)(lineStart), '\t'));
|
indentTextAction.mInsertCharList.Add(((int32)(lineStart), '\t'));
|
||||||
endAdjust++;
|
endAdjust++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2121,7 +2121,7 @@ namespace IDE.ui
|
||||||
|
|
||||||
public void DuplicateLine()
|
public void DuplicateLine()
|
||||||
{
|
{
|
||||||
UndoBatchStart undoBatchStart = new UndoBatchStart("embeddedToggleComment");
|
UndoBatchStart undoBatchStart = new UndoBatchStart("duplicateLine");
|
||||||
mData.mUndoManager.Add(undoBatchStart);
|
mData.mUndoManager.Add(undoBatchStart);
|
||||||
|
|
||||||
mData.mUndoManager.Add(new SetCursorAction(this));
|
mData.mUndoManager.Add(new SetCursorAction(this));
|
||||||
|
@ -2139,6 +2139,268 @@ namespace IDE.ui
|
||||||
mData.mUndoManager.Add(undoBatchStart.mBatchEnd);
|
mData.mUndoManager.Add(undoBatchStart.mBatchEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GetStatementRange(int checkIdx, out int startIdx, out int endIdx, out char8 endChar)
|
||||||
|
{
|
||||||
|
startIdx = -1;
|
||||||
|
endIdx = -1;
|
||||||
|
endChar = 0;
|
||||||
|
|
||||||
|
GetLineCharAtIdx(checkIdx, var line, var lineChar);
|
||||||
|
GetBlockStart(line, var foundBlockStartIdx, var blockOpenSpaceCount);
|
||||||
|
|
||||||
|
bool expectingStatement = true;
|
||||||
|
int stmtStart = -1;
|
||||||
|
|
||||||
|
int lastNonWS = -1;
|
||||||
|
int parenCount = 0;
|
||||||
|
int lastCrPos = -1;
|
||||||
|
|
||||||
|
for (int checkPos = foundBlockStartIdx; true; checkPos++)
|
||||||
|
{
|
||||||
|
if (checkPos >= mData.mTextLength)
|
||||||
|
break;
|
||||||
|
|
||||||
|
char8 checkC = mData.mText[checkPos].mChar;
|
||||||
|
if (checkC == '\n')
|
||||||
|
lastCrPos = checkPos;
|
||||||
|
|
||||||
|
if (checkC.IsWhiteSpace)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let displayType = (SourceElementType)mData.mText[checkPos].mDisplayTypeId;
|
||||||
|
if (displayType == .Comment)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (displayType == .Normal)
|
||||||
|
{
|
||||||
|
if (checkC == '(')
|
||||||
|
parenCount++;
|
||||||
|
else if (checkC == ')')
|
||||||
|
parenCount--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parenCount != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ((displayType == .Normal) &&
|
||||||
|
((checkC == '{') || (checkC == '}') || (checkC == ';')))
|
||||||
|
{
|
||||||
|
if ((checkPos >= checkIdx) && (!expectingStatement))
|
||||||
|
{
|
||||||
|
endChar = checkC;
|
||||||
|
if (lastNonWS < checkIdx)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
startIdx = stmtStart;
|
||||||
|
endIdx = lastNonWS + 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
expectingStatement = true;
|
||||||
|
}
|
||||||
|
else if (expectingStatement)
|
||||||
|
{
|
||||||
|
if (lastCrPos >= checkIdx)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
expectingStatement = false;
|
||||||
|
stmtStart = checkPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastNonWS = checkPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveSelection(int toLinePos)
|
||||||
|
{
|
||||||
|
/*if (GetStatementRange(CursorTextPos, var startIdx, var endIdx))
|
||||||
|
{
|
||||||
|
mSelection = .(startIdx, endIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;*/
|
||||||
|
|
||||||
|
UndoBatchStart undoBatchStart = new UndoBatchStart("moveSelection");
|
||||||
|
mData.mUndoManager.Add(undoBatchStart);
|
||||||
|
|
||||||
|
mData.mUndoManager.Add(new SetCursorAction(this));
|
||||||
|
|
||||||
|
var prevCursorLineAndColumn = CursorLineAndColumn;
|
||||||
|
var str = scope String();
|
||||||
|
ExtractString(mSelection.Value.MinPos, mSelection.Value.Length, str);
|
||||||
|
DeleteSelection();
|
||||||
|
|
||||||
|
if (str.EndsWith('\n'))
|
||||||
|
str.RemoveFromEnd(1);
|
||||||
|
|
||||||
|
int offsetLinePos = toLinePos;
|
||||||
|
bool movingDown = offsetLinePos > prevCursorLineAndColumn.mLine;
|
||||||
|
if (movingDown)
|
||||||
|
offsetLinePos -= str.Count('\n');
|
||||||
|
|
||||||
|
GetLinePosition(Math.Max(offsetLinePos, 0), var offsetLineStart, var offsetLineEnd);
|
||||||
|
String offsetText = scope .();
|
||||||
|
ExtractString(offsetLineStart, offsetLineEnd - offsetLineStart, offsetText);
|
||||||
|
|
||||||
|
if (movingDown)
|
||||||
|
{
|
||||||
|
GetLinePosition(Math.Max(offsetLinePos - 1, 0), var toLineStart, var toLineEnd);
|
||||||
|
String txt = scope .();
|
||||||
|
ExtractString(toLineStart, toLineEnd - toLineStart, txt);
|
||||||
|
if (GetStatementRange(toLineStart, var stmtStartIdx, var stmtEndIdx, var stmtEndChar))
|
||||||
|
{
|
||||||
|
String stmt = scope .();
|
||||||
|
ExtractString(stmtStartIdx, stmtEndIdx - stmtStartIdx, stmt);
|
||||||
|
GetLineCharAtIdx(stmtEndIdx - 1, var stmtLine, var stmtLineChar);
|
||||||
|
offsetLinePos = stmtLine + 1;
|
||||||
|
GetLinePosition(Math.Max(offsetLinePos, 0), out offsetLineStart, out offsetLineEnd);
|
||||||
|
|
||||||
|
if (stmtEndChar == '{')
|
||||||
|
offsetLinePos++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*for (int checkPos = offsetLineStart; checkPos < offsetLineEnd; checkPos++)
|
||||||
|
{
|
||||||
|
if (mData.mText[checkPos].mDisplayTypeId != 0)
|
||||||
|
continue;
|
||||||
|
char8 checkC = mData.mText[checkPos].mChar;
|
||||||
|
if (checkC.IsWhiteSpace)
|
||||||
|
continue;
|
||||||
|
if (checkC == '{')
|
||||||
|
{
|
||||||
|
if (offsetLinePos > prevCursorLineAndColumn.mLine)
|
||||||
|
offsetLinePos--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
GetLinePosition(Math.Max(offsetLinePos, 0), var toLineStart, var toLineEnd);
|
||||||
|
String txt = scope .();
|
||||||
|
ExtractString(toLineStart, toLineEnd - toLineStart, txt);
|
||||||
|
|
||||||
|
if (!GetStatementRange(toLineStart, var stmtStartIdx, var stmtEndIdx, var stmtEndChar))
|
||||||
|
{
|
||||||
|
if (stmtEndChar == '{')
|
||||||
|
GetLinePosition(Math.Max(offsetLinePos - 1, 0), out toLineStart, out toLineEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GetStatementRange(toLineStart, var stmtStartIdx, var stmtEndIdx, var stmtEndChar))
|
||||||
|
{
|
||||||
|
String stmt = scope .();
|
||||||
|
ExtractString(stmtStartIdx, stmtEndIdx - stmtStartIdx, stmt);
|
||||||
|
GetLineCharAtIdx(stmtStartIdx, var stmtLine, var stmtLineChar);
|
||||||
|
offsetLinePos = stmtLine;
|
||||||
|
GetLinePosition(Math.Max(offsetLinePos, 0), out offsetLineStart, out offsetLineEnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let wantCursorPos = LineAndColumn(Math.Max(offsetLinePos, 0), 0);
|
||||||
|
if (wantCursorPos.mLine >= GetLineCount())
|
||||||
|
{
|
||||||
|
CursorTextPos = mData.mTextLength;
|
||||||
|
InsertAtCursor("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
CursorLineAndColumn = wantCursorPos;
|
||||||
|
PasteText(str, "line");
|
||||||
|
CursorLineAndColumn = LineAndColumn(wantCursorPos.mLine, prevCursorLineAndColumn.mColumn);
|
||||||
|
|
||||||
|
mData.mUndoManager.Add(undoBatchStart.mBatchEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MoveLine(VertDir dir)
|
||||||
|
{
|
||||||
|
int lineNum = CursorLineAndColumn.mLine;
|
||||||
|
GetLinePosition(lineNum, var lineStart, var lineEnd);
|
||||||
|
mSelection = .(lineStart, Math.Min(lineEnd + 1, mData.mTextLength));
|
||||||
|
MoveSelection(lineNum + (int)dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MoveStatement(VertDir dir)
|
||||||
|
{
|
||||||
|
int lineNum = CursorLineAndColumn.mLine;
|
||||||
|
GetLinePosition(lineNum, var lineStart, var lineEnd);
|
||||||
|
|
||||||
|
int selStart = -1;
|
||||||
|
int selEnd = -1;
|
||||||
|
int parenDepth = 0;
|
||||||
|
|
||||||
|
int checkPos = lineStart;
|
||||||
|
for ( ; checkPos < mData.mTextLength - 1; checkPos++)
|
||||||
|
{
|
||||||
|
char8 checkC = mData.mText[checkPos].mChar;
|
||||||
|
|
||||||
|
if (selStart == -1)
|
||||||
|
{
|
||||||
|
if (checkC == '\n')
|
||||||
|
break; // Don't support moving empty lines
|
||||||
|
if (!checkC.IsWhiteSpace)
|
||||||
|
{
|
||||||
|
selStart = checkPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mData.mText[checkPos].mDisplayTypeId != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ((checkC == ';') && (parenDepth == 0))
|
||||||
|
{
|
||||||
|
selEnd = checkPos + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checkC == '{')
|
||||||
|
{
|
||||||
|
parenDepth++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checkC == '}')
|
||||||
|
{
|
||||||
|
parenDepth--;
|
||||||
|
if (parenDepth <= 0)
|
||||||
|
{
|
||||||
|
selEnd = checkPos + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selEnd == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for ( ; checkPos < mData.mTextLength - 1; checkPos++)
|
||||||
|
{
|
||||||
|
char8 checkC = mData.mText[checkPos].mChar;
|
||||||
|
selEnd = checkPos + 1;
|
||||||
|
if (checkC == '\n')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
UndoBatchStart undoBatchStart = new UndoBatchStart("moveLine");
|
||||||
|
mData.mUndoManager.Add(undoBatchStart);
|
||||||
|
|
||||||
|
mData.mUndoManager.Add(new SetCursorAction(this));
|
||||||
|
|
||||||
|
mSelection = .(lineStart, selEnd);
|
||||||
|
|
||||||
|
int toLine = lineNum + (int)dir;
|
||||||
|
if (dir == .Down)
|
||||||
|
{
|
||||||
|
GetLineCharAtIdx(selEnd, var line, var lineChar);
|
||||||
|
toLine = line;
|
||||||
|
}
|
||||||
|
MoveSelection(toLine);
|
||||||
|
|
||||||
|
mData.mUndoManager.Add(undoBatchStart.mBatchEnd);
|
||||||
|
}
|
||||||
|
|
||||||
public override void ContentChanged()
|
public override void ContentChanged()
|
||||||
{
|
{
|
||||||
base.ContentChanged();
|
base.ContentChanged();
|
||||||
|
|
|
@ -278,10 +278,27 @@ namespace IDE.ui
|
||||||
protected DarkComboBox mConfigComboBox;
|
protected DarkComboBox mConfigComboBox;
|
||||||
protected DarkComboBox mPlatformComboBox;
|
protected DarkComboBox mPlatformComboBox;
|
||||||
|
|
||||||
|
public struct ConfigPlatformPair : IHashable
|
||||||
|
{
|
||||||
|
public String mConfig;
|
||||||
|
public String mPlatform;
|
||||||
|
|
||||||
|
public this(String config, String platform)
|
||||||
|
{
|
||||||
|
mConfig = config;
|
||||||
|
mPlatform = platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetHashCode()
|
||||||
|
{
|
||||||
|
return mConfig.GetHashCode() ^ mPlatform.GetHashCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected class ConfigDataGroup
|
protected class ConfigDataGroup
|
||||||
{
|
{
|
||||||
public bool mIsMultiTargeted;
|
public bool mIsMultiTargeted;
|
||||||
public Tuple<String, String> mTarget;
|
public ConfigPlatformPair mTarget;
|
||||||
public PropPage[] mPropPages ~ delete _;
|
public PropPage[] mPropPages ~ delete _;
|
||||||
|
|
||||||
public this(int categoryCount)
|
public this(int categoryCount)
|
||||||
|
@ -296,7 +313,7 @@ namespace IDE.ui
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Dictionary<Tuple<String, String>, ConfigDataGroup> mTargetedConfigDatas = new Dictionary<Tuple<String, String>, ConfigDataGroup>() ~ delete _;
|
protected Dictionary<ConfigPlatformPair, ConfigDataGroup> mTargetedConfigDatas = new .() ~ delete _;
|
||||||
protected ConfigDataGroup mMultiTargetConfigData;
|
protected ConfigDataGroup mMultiTargetConfigData;
|
||||||
protected List<ConfigDataGroup> mConfigDatas = new List<ConfigDataGroup>() ~ DeleteContainerAndItems!(_);
|
protected List<ConfigDataGroup> mConfigDatas = new List<ConfigDataGroup>() ~ DeleteContainerAndItems!(_);
|
||||||
|
|
||||||
|
@ -328,8 +345,8 @@ namespace IDE.ui
|
||||||
{
|
{
|
||||||
for (var kv in mTargetedConfigDatas)
|
for (var kv in mTargetedConfigDatas)
|
||||||
{
|
{
|
||||||
delete kv.key.Item1;
|
delete kv.key.mConfig;
|
||||||
delete kv.key.Item2;
|
delete kv.key.mPlatform;
|
||||||
delete kv.value;
|
delete kv.value;
|
||||||
mConfigDatas.Remove(kv.value);
|
mConfigDatas.Remove(kv.value);
|
||||||
}
|
}
|
||||||
|
@ -659,8 +676,8 @@ namespace IDE.ui
|
||||||
|
|
||||||
if (mTargetedConfigDatas.GetAndRemove(.(configName, platformName)) case .Ok((var key, var configDataGroup)))
|
if (mTargetedConfigDatas.GetAndRemove(.(configName, platformName)) case .Ok((var key, var configDataGroup)))
|
||||||
{
|
{
|
||||||
delete key.Item1;
|
delete key.mConfig;
|
||||||
delete key.Item2;
|
delete key.mPlatform;
|
||||||
if (configDataGroup.mPropPages[categoryType] == mPropPage)
|
if (configDataGroup.mPropPages[categoryType] == mPropPage)
|
||||||
RemovePropPage();
|
RemovePropPage();
|
||||||
mConfigDatas.Remove(configDataGroup);
|
mConfigDatas.Remove(configDataGroup);
|
||||||
|
@ -779,8 +796,8 @@ namespace IDE.ui
|
||||||
{
|
{
|
||||||
var targetedConfigName = targetedConfigData.mTarget;
|
var targetedConfigName = targetedConfigData.mTarget;
|
||||||
|
|
||||||
bool isCurrent = (targetedConfigName.Item1 == null) ||
|
bool isCurrent = (targetedConfigName.mConfig == null) ||
|
||||||
((mConfigNames.Contains(targetedConfigName.Item1)) && (mPlatformNames.Contains(targetedConfigName.Item2)));
|
((mConfigNames.Contains(targetedConfigName.mConfig)) && (mPlatformNames.Contains(targetedConfigName.mPlatform)));
|
||||||
|
|
||||||
for (int32 pageIdx = 0; pageIdx < targetedConfigData.mPropPages.Count; pageIdx++)
|
for (int32 pageIdx = 0; pageIdx < targetedConfigData.mPropPages.Count; pageIdx++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -401,12 +401,12 @@ namespace IDE.ui
|
||||||
if ((GetCategoryTargetedKind(categoryTypeInt) != .None) &&
|
if ((GetCategoryTargetedKind(categoryTypeInt) != .None) &&
|
||||||
((mConfigNames.Count == 1) && (mPlatformNames.Count == 1)))
|
((mConfigNames.Count == 1) && (mPlatformNames.Count == 1)))
|
||||||
{
|
{
|
||||||
var key = Tuple<String, String>(configName, platformName);
|
var key = ConfigPlatformPair(configName, platformName);
|
||||||
mTargetedConfigDatas.TryGetValue(key, out targetedConfigData);
|
mTargetedConfigDatas.TryGetValue(key, out targetedConfigData);
|
||||||
if (targetedConfigData == null)
|
if (targetedConfigData == null)
|
||||||
{
|
{
|
||||||
key.Item1 = new String(key.Item1);
|
key.mConfig = new String(key.mConfig);
|
||||||
key.Item2 = new String(key.Item2);
|
key.mPlatform = new String(key.mPlatform);
|
||||||
targetedConfigData = new ConfigDataGroup((int32)CategoryType.COUNT);
|
targetedConfigData = new ConfigDataGroup((int32)CategoryType.COUNT);
|
||||||
targetedConfigData.mTarget = key;
|
targetedConfigData.mTarget = key;
|
||||||
mConfigDatas.Add(targetedConfigData);
|
mConfigDatas.Add(targetedConfigData);
|
||||||
|
@ -873,7 +873,7 @@ namespace IDE.ui
|
||||||
workspaceProperties.HadExternalChanges(configName, platformName);
|
workspaceProperties.HadExternalChanges(configName, platformName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
workspaceProperties.HadExternalChanges(targetedConfigData.mTarget.Item1, targetedConfigData.mTarget.Item2);
|
workspaceProperties.HadExternalChanges(targetedConfigData.mTarget.mConfig, targetedConfigData.mTarget.mPlatform);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
workspaceProperties.HadExternalChanges(null, null);
|
workspaceProperties.HadExternalChanges(null, null);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue