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/FileChangedDialog.bf

138 lines
3.5 KiB
Beef
Raw Normal View History

2019-08-23 11:56:54 -07:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Beefy.theme.dark;
using System.Diagnostics;
namespace IDE.ui
{
public class FileChangedDialog : DarkDialog
{
public enum DialogKind
{
Changed,
Deleted,
COUNT
}
List<String> mFileNames = new List<String>() ~ DeleteContainerAndItems!(_);
public bool?[(int)DialogKind.COUNT] mApplyAllResult;
public DialogKind mDialogKind;
public this()
{
}
public ~this()
{
Debug.Assert(gApp.mFileChangedDialog != this);
gApp.mFileChangedDialog = null;
}
public void Show(SourceViewPanel sourceViewPanel)
{
String fileName = sourceViewPanel.mFilePath;
bool exists = File.Exists(fileName);
mFileNames.Add(new String(fileName));
if ((sourceViewPanel.mProjectSource != null) && (sourceViewPanel.mProjectSource.mEditData != null))
{
var editData = sourceViewPanel.mProjectSource.mEditData;
editData.mFileDeleted = !exists;
}
if (exists)
{
mDialogKind = .Changed;
if (mFileNames.Count == 1)
Title = "File Changed";
else
Title = "Files Changed";
mText = new String();
mText.AppendF("{0}\n\nThe file has unsaved changes inside this editor and has been changed externally.\nDo you want to reload it and lose the changes made in the source editor?", fileName);
if (!mInPopupWindow)
{
AddYesNoButtons(new (evt) =>
{
sourceViewPanel.Reload();
}, new (evt) =>
{
sourceViewPanel.RefusedReload();
});
}
}
else
{
mDialogKind = .Deleted;
if (mFileNames.Count == 1)
Title = "File Deleted";
else
Title = "Files Deleted";
/*if (sourceViewPanel.mEditData != null)
{
sourceViewPanel.mEditData.mLastFileTextVersion = -1;
}*/
//sourceViewPanel.mEditData.mWasDeleted = true;
mText = new String();
mText.AppendF("{0}\n\nThe file is open in this editor and has been deleted externally.\nDo you want to close this file?", fileName);
if (!mInPopupWindow)
{
AddYesNoButtons(new (evt) =>
{
gApp.CloseDocument(sourceViewPanel);
});
}
}
var button = AddButton("Yes To All");
button.mOnMouseClick.Add(new (evt) =>
{
if (mDialogKind == .Deleted)
gApp.CloseDocument(sourceViewPanel);
else
sourceViewPanel.Reload();
mApplyAllResult[(int)mDialogKind] = true;
});
button = AddButton("No To All");
button.mOnMouseClick.Add(new (evt) =>
{
if (mDialogKind == .Deleted)
{
// Nothing
}
else
sourceViewPanel.RefusedReload();
mApplyAllResult[(int)mDialogKind] = false;
});
PopupWindow(IDEApp.sApp.mMainWindow);
}
public void Rehup()
{
base.Update();
if (mDialogKind == .Deleted)
{
bool allFilesExist = true;
for (var fileName in mFileNames)
{
allFilesExist &= File.Exists(fileName);
}
if (allFilesExist)
Close();
}
}
}
}