|
@@ -76,6 +76,7 @@ namespace IDE
|
|
|
OpenOrNew,
|
|
|
Test,
|
|
|
Run,
|
|
|
+ Update,
|
|
|
GetVersion
|
|
|
}
|
|
|
|
|
@@ -182,6 +183,7 @@ namespace IDE
|
|
|
public MainFrame mMainFrame;
|
|
|
public GlobalUndoManager mGlobalUndoManager = new GlobalUndoManager() ~ delete _;
|
|
|
public SourceControl mSourceControl = new SourceControl() ~ delete _;
|
|
|
+ public GitManager mGitManager = new .() ~ delete _;
|
|
|
|
|
|
public WidgetWindow mPopupWindow;
|
|
|
public RecentFileSelector mRecentFileSelector;
|
|
@@ -223,6 +225,7 @@ namespace IDE
|
|
|
public WakaTime mWakaTime ~ delete _;
|
|
|
|
|
|
public PackMan mPackMan = new PackMan() ~ delete _;
|
|
|
+ public HashSet<String> mWantUpdateVersionLocks ~ DeleteContainerAndItems!(_);
|
|
|
public Settings mSettings = new Settings() ~ delete _;
|
|
|
public Workspace mWorkspace = new Workspace() ~ delete _;
|
|
|
public FileWatcher mFileWatcher = new FileWatcher() ~ delete _;
|
|
@@ -2145,6 +2148,91 @@ namespace IDE
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ bool SaveWorkspaceLockData(bool force = false)
|
|
|
+ {
|
|
|
+ if ((mWorkspace.mProjectLockMap.IsEmpty) && (!force))
|
|
|
+ return true;
|
|
|
+
|
|
|
+ StructuredData sd = scope StructuredData();
|
|
|
+ sd.CreateNew();
|
|
|
+ sd.Add("FileVersion", 1);
|
|
|
+ using (sd.CreateObject("Locks"))
|
|
|
+ {
|
|
|
+ List<String> projectNames = scope .(mWorkspace.mProjectLockMap.Keys);
|
|
|
+ projectNames.Sort();
|
|
|
+
|
|
|
+ for (var projectName in projectNames)
|
|
|
+ {
|
|
|
+ var lock = mWorkspace.mProjectLockMap[projectName];
|
|
|
+ switch (lock)
|
|
|
+ {
|
|
|
+ case .Git(let url, let tag, let hash):
|
|
|
+ using (sd.CreateObject(projectName))
|
|
|
+ {
|
|
|
+ using (sd.CreateObject("Git"))
|
|
|
+ {
|
|
|
+ sd.Add("URL", url);
|
|
|
+ sd.Add("Tag", tag);
|
|
|
+ sd.Add("Hash", hash);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ String jsonString = scope String();
|
|
|
+ sd.ToTOML(jsonString);
|
|
|
+
|
|
|
+ String lockFileName = scope String();
|
|
|
+ GetWorkspaceLockFileName(lockFileName);
|
|
|
+ if (lockFileName.IsEmpty)
|
|
|
+ return false;
|
|
|
+ return SafeWriteTextFile(lockFileName, jsonString);
|
|
|
+ }
|
|
|
+
|
|
|
+ bool LoadWorkspaceLockData()
|
|
|
+ {
|
|
|
+ String lockFilePath = scope String();
|
|
|
+ GetWorkspaceLockFileName(lockFilePath);
|
|
|
+ if (lockFilePath.IsEmpty)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ var sd = scope StructuredData();
|
|
|
+ if (sd.Load(lockFilePath) case .Err)
|
|
|
+ return false;
|
|
|
+
|
|
|
+ for (var projectName in sd.Enumerate("Locks"))
|
|
|
+ {
|
|
|
+ Workspace.Lock lock = default;
|
|
|
+ if (sd.Contains("Git"))
|
|
|
+ {
|
|
|
+ using (sd.Open("Git"))
|
|
|
+ {
|
|
|
+ var url = sd.GetString("URL", .. new .());
|
|
|
+ var tag = sd.GetString("Tag", .. new .());
|
|
|
+ var hash = sd.GetString("Hash", .. new .());
|
|
|
+ lock = .Git(url, tag, hash);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ mWorkspace.SetLock(projectName, lock);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ bool GetWorkspaceLockFileName(String outResult)
|
|
|
+ {
|
|
|
+ if (mWorkspace.mDir == null)
|
|
|
+ return false;
|
|
|
+ if (mWorkspace.mCompositeFile != null)
|
|
|
+ outResult.Append(mWorkspace.mCompositeFile.mFilePath, ".bfuser");
|
|
|
+ else
|
|
|
+ outResult.Append(mWorkspace.mDir, "/BeefSpace_Lock.toml");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
void GetDefaultLayoutDataFileName(String outResult)
|
|
|
{
|
|
|
outResult.Append(mInstallDir, "/DefaultLayout.toml");
|
|
@@ -2377,6 +2465,17 @@ namespace IDE
|
|
|
project.mDependencies.Add(dep);
|
|
|
}
|
|
|
|
|
|
+ public void ProjectCreated(Project project)
|
|
|
+ {
|
|
|
+ mProjectPanel.InitProject(project, mProjectPanel.GetSelectedWorkspaceFolder());
|
|
|
+ mProjectPanel.Sort();
|
|
|
+ mWorkspace.FixOptions();
|
|
|
+ mWorkspace.mHasChanged = true;
|
|
|
+
|
|
|
+ mWorkspace.ClearProjectNameCache();
|
|
|
+ CurrentWorkspaceConfigChanged();
|
|
|
+ }
|
|
|
+
|
|
|
public Project CreateProject(String projName, String projDir, Project.TargetType targetType)
|
|
|
{
|
|
|
Project project = new Project();
|
|
@@ -2391,13 +2490,8 @@ namespace IDE
|
|
|
AddNewProjectToWorkspace(project);
|
|
|
project.FinishCreate();
|
|
|
|
|
|
- mProjectPanel.InitProject(project, mProjectPanel.GetSelectedWorkspaceFolder());
|
|
|
- mProjectPanel.Sort();
|
|
|
- mWorkspace.FixOptions();
|
|
|
- mWorkspace.mHasChanged = true;
|
|
|
+ ProjectCreated(project);
|
|
|
|
|
|
- mWorkspace.ClearProjectNameCache();
|
|
|
- CurrentWorkspaceConfigChanged();
|
|
|
return project;
|
|
|
}
|
|
|
|
|
@@ -2517,6 +2611,8 @@ namespace IDE
|
|
|
|
|
|
mBookmarkManager.Clear();
|
|
|
|
|
|
+ mPackMan.CancelAll();
|
|
|
+
|
|
|
OutputLine("Workspace closed.");
|
|
|
}
|
|
|
|
|
@@ -2757,9 +2853,16 @@ namespace IDE
|
|
|
return .Err;
|
|
|
}
|
|
|
|
|
|
+ public void CheckDependenciesLoaded()
|
|
|
+ {
|
|
|
+ for (var project in mWorkspace.mProjects)
|
|
|
+ project.CheckDependenciesLoaded();
|
|
|
+ }
|
|
|
+
|
|
|
void FlushDeferredLoadProjects(bool addToUI = false)
|
|
|
{
|
|
|
bool hasDeferredProjects = false;
|
|
|
+ bool loadFailed = false;
|
|
|
|
|
|
while (true)
|
|
|
{
|
|
@@ -2767,11 +2870,29 @@ namespace IDE
|
|
|
for (int projectIdx = 0; projectIdx < mWorkspace.mProjects.Count; projectIdx++)
|
|
|
{
|
|
|
var project = mWorkspace.mProjects[projectIdx];
|
|
|
+
|
|
|
+ if (project.mDeferState == .Searching)
|
|
|
+ {
|
|
|
+ if (mPackMan.mFailed)
|
|
|
+ {
|
|
|
+ // Just let it fail now
|
|
|
+ LoadFailed();
|
|
|
+ project.mDeferState = .None;
|
|
|
+ project.mFailed = true;
|
|
|
+ loadFailed = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ hasDeferredProjects = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if ((project.mDeferState == .ReadyToLoad) || (project.mDeferState == .Pending))
|
|
|
{
|
|
|
hadLoad = true;
|
|
|
|
|
|
var projectPath = project.mProjectPath;
|
|
|
+
|
|
|
if (project.mDeferState == .Pending)
|
|
|
{
|
|
|
hasDeferredProjects = true;
|
|
@@ -2794,9 +2915,26 @@ namespace IDE
|
|
|
}
|
|
|
|
|
|
if (hasDeferredProjects)
|
|
|
+ {
|
|
|
mWorkspace.mProjectLoadState = .Preparing;
|
|
|
+ }
|
|
|
else
|
|
|
+ {
|
|
|
mWorkspace.mProjectLoadState = .Loaded;
|
|
|
+ SaveWorkspaceLockData();
|
|
|
+ CheckDependenciesLoaded();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (loadFailed)
|
|
|
+ {
|
|
|
+ mProjectPanel.RebuildUI();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void CancelWorkspaceLoading()
|
|
|
+ {
|
|
|
+ mPackMan.CancelAll();
|
|
|
+ FlushDeferredLoadProjects();
|
|
|
}
|
|
|
|
|
|
protected void LoadWorkspace(BeefVerb verb)
|
|
@@ -2937,6 +3075,7 @@ namespace IDE
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ LoadWorkspaceLockData();
|
|
|
mWorkspace.mProjectFileEntries.Add(new .(workspaceFileName));
|
|
|
|
|
|
if (mVerb == .New)
|
|
@@ -3044,9 +3183,10 @@ namespace IDE
|
|
|
outRelaunchCmd.Append(" -safe");
|
|
|
}
|
|
|
|
|
|
- public void RetryProjectLoad(Project project)
|
|
|
+ public void RetryProjectLoad(Project project, bool reloadConfig)
|
|
|
{
|
|
|
- LoadConfig();
|
|
|
+ if (reloadConfig)
|
|
|
+ LoadConfig();
|
|
|
|
|
|
var projectPath = project.mProjectPath;
|
|
|
if (!project.Load(projectPath))
|
|
@@ -3054,6 +3194,8 @@ namespace IDE
|
|
|
Fail(scope String()..AppendF("Failed to load project '{0}' from '{1}'", project.mProjectName, projectPath));
|
|
|
LoadFailed();
|
|
|
project.mFailed = true;
|
|
|
+ FlushDeferredLoadProjects();
|
|
|
+ mProjectPanel?.RebuildUI();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -3061,7 +3203,7 @@ namespace IDE
|
|
|
mWorkspace.FixOptions();
|
|
|
|
|
|
project.mFailed = false;
|
|
|
- mProjectPanel.RebuildUI();
|
|
|
+ mProjectPanel?.RebuildUI();
|
|
|
CurrentWorkspaceConfigChanged();
|
|
|
}
|
|
|
}
|
|
@@ -3080,7 +3222,17 @@ namespace IDE
|
|
|
String verConfigDir = mWorkspace.mDir;
|
|
|
|
|
|
if (let project = mWorkspace.FindProject(projectName))
|
|
|
+ {
|
|
|
+ switch (useVerSpec)
|
|
|
+ {
|
|
|
+ case .Git(let url, let ver):
|
|
|
+ if (ver != null)
|
|
|
+ mPackMan.UpdateGitConstraint(url, ver);
|
|
|
+ default:
|
|
|
+ }
|
|
|
+
|
|
|
return project;
|
|
|
+ }
|
|
|
|
|
|
if (useVerSpec case .SemVer)
|
|
|
{
|
|
@@ -3153,27 +3305,24 @@ namespace IDE
|
|
|
case .SemVer(let semVer):
|
|
|
//
|
|
|
case .Git(let url, let ver):
|
|
|
- var verReference = new Project.VerReference();
|
|
|
- verReference.mSrcProjectName = new String(projectName);
|
|
|
- verReference.mVerSpec = _.Duplicate();
|
|
|
- project.mVerReferences.Add(verReference);
|
|
|
-
|
|
|
+
|
|
|
var checkPath = scope String();
|
|
|
if (mPackMan.CheckLock(projectName, checkPath))
|
|
|
{
|
|
|
projectFilePath = scope:: String(checkPath);
|
|
|
}
|
|
|
else
|
|
|
+ {
|
|
|
+ mPackMan.GetWithVersion(projectName, url, ver);
|
|
|
isDeferredLoad = true;
|
|
|
+ }
|
|
|
default:
|
|
|
Fail("Invalid version specifier");
|
|
|
return .Err(.InvalidVersionSpec);
|
|
|
}
|
|
|
|
|
|
if ((projectFilePath == null) && (!isDeferredLoad))
|
|
|
- {
|
|
|
return .Err(.NotFound);
|
|
|
- }
|
|
|
|
|
|
if (isDeferredLoad)
|
|
|
{
|
|
@@ -3197,6 +3346,59 @@ namespace IDE
|
|
|
return .Ok(project);
|
|
|
}
|
|
|
|
|
|
+ public void UpdateProjectVersionLocks(params Span<StringView> projectNames)
|
|
|
+ {
|
|
|
+ bool removedLock = false;
|
|
|
+
|
|
|
+ for (var projectName in projectNames)
|
|
|
+ {
|
|
|
+ if (var kv = gApp.mWorkspace.mProjectLockMap.GetAndRemoveAlt(projectName))
|
|
|
+ {
|
|
|
+ removedLock = true;
|
|
|
+ delete kv.key;
|
|
|
+ kv.value.Dispose();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (removedLock)
|
|
|
+ {
|
|
|
+ if (SaveAll())
|
|
|
+ {
|
|
|
+ SaveWorkspaceLockData(true);
|
|
|
+ CloseOldBeefManaged();
|
|
|
+ ReloadWorkspace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void UpdateProjectVersionLocks(Span<String> projectNames)
|
|
|
+ {
|
|
|
+ List<StringView> svNames = scope .();
|
|
|
+ for (var name in projectNames)
|
|
|
+ svNames.Add(name);
|
|
|
+ UpdateProjectVersionLocks(params (Span<StringView>)svNames);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void NotifyProjectVersionLocks(Span<String> projectNames)
|
|
|
+ {
|
|
|
+ if (projectNames.IsEmpty)
|
|
|
+ return;
|
|
|
+
|
|
|
+ String message = scope .();
|
|
|
+ message.Append((projectNames.Length == 1) ? "Project " : "Projects ");
|
|
|
+ for (var projectName in projectNames)
|
|
|
+ {
|
|
|
+ if (@projectName.Index > 0)
|
|
|
+ message.Append(", ");
|
|
|
+ message.AppendF($"'{projectName}'");
|
|
|
+ }
|
|
|
+
|
|
|
+ message.Append((projectNames.Length == 1) ? " has " : " have ");
|
|
|
+
|
|
|
+ message.AppendF("modified version constraints. Use 'Update Version Lock' in the project or workspace right-click menus to apply the new constraints.");
|
|
|
+ MessageDialog("Version Constraints Modified", message, DarkTheme.sDarkTheme.mIconWarning);
|
|
|
+ }
|
|
|
+
|
|
|
protected void WorkspaceLoaded()
|
|
|
{
|
|
|
scope AutoBeefPerf("IDE.WorkspaceLoaded");
|
|
@@ -3848,9 +4050,9 @@ namespace IDE
|
|
|
return dialog;
|
|
|
}
|
|
|
|
|
|
- public void MessageDialog(String title, String text)
|
|
|
+ public void MessageDialog(String title, String text, Image icon = null)
|
|
|
{
|
|
|
- Dialog dialog = ThemeFactory.mDefault.CreateDialog(title, text);
|
|
|
+ Dialog dialog = ThemeFactory.mDefault.CreateDialog(title, text, icon);
|
|
|
dialog.mDefaultButton = dialog.AddButton("OK");
|
|
|
dialog.mEscButton = dialog.mDefaultButton;
|
|
|
dialog.PopupWindow(mMainWindow);
|
|
@@ -7433,6 +7635,37 @@ namespace IDE
|
|
|
CloseDocument(activeDocumentPanel);
|
|
|
}
|
|
|
|
|
|
+ public void CloseOldBeefManaged()
|
|
|
+ {
|
|
|
+ List<SourceViewPanel> pendingClosePanels = scope .();
|
|
|
+ WithSourceViewPanels(scope (sourceViewPanel) =>
|
|
|
+ {
|
|
|
+ if (sourceViewPanel.mProjectSource != null)
|
|
|
+ {
|
|
|
+ var checkHash = gApp.mPackMan.GetHashFromFilePath(sourceViewPanel.mFilePath, .. scope .());
|
|
|
+ if (!checkHash.IsEmpty)
|
|
|
+ {
|
|
|
+ bool foundHash = false;
|
|
|
+
|
|
|
+ if (gApp.mWorkspace.mProjectLockMap.TryGet(sourceViewPanel.mProjectSource.mProject.mProjectName, ?, var lock))
|
|
|
+ {
|
|
|
+ if (lock case .Git(let url, let tag, let hash))
|
|
|
+ {
|
|
|
+ if (hash == checkHash)
|
|
|
+ foundHash = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!foundHash)
|
|
|
+ pendingClosePanels.Add(sourceViewPanel);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ for (var sourceViewPanel in pendingClosePanels)
|
|
|
+ CloseDocument(sourceViewPanel);
|
|
|
+ }
|
|
|
+
|
|
|
public SourceViewPanel ShowProjectItem(ProjectItem projectItem, bool showTemp = true, bool setFocus = true)
|
|
|
{
|
|
|
if (projectItem is ProjectSource)
|
|
@@ -7845,7 +8078,7 @@ namespace IDE
|
|
|
case "-autoshutdown":
|
|
|
mDebugAutoShutdownCounter = 200;
|
|
|
case "-new":
|
|
|
- mVerb = .New;
|
|
|
+ mVerb = .Open;
|
|
|
case "-testNoExit":
|
|
|
mExitWhenTestScriptDone = false;
|
|
|
case "-firstRun":
|
|
@@ -8090,15 +8323,16 @@ namespace IDE
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
- public virtual void OutputErrorLine(String format, params Object[] args)
|
|
|
+ public virtual void OutputErrorLine(StringView format, params Object[] args)
|
|
|
{
|
|
|
mWantShowOutput = true;
|
|
|
var errStr = scope String();
|
|
|
- errStr.Append("ERROR: ", format);
|
|
|
+ errStr.Append("ERROR: ");
|
|
|
+ errStr.Append(format);
|
|
|
OutputLineSmart(errStr, params args);
|
|
|
}
|
|
|
|
|
|
- public virtual void OutputWarnLine(String format, params Object[] args)
|
|
|
+ public virtual void OutputWarnLine(StringView format, params Object[] args)
|
|
|
{
|
|
|
var warnStr = scope String();
|
|
|
warnStr.AppendF(format, params args);
|
|
@@ -8113,7 +8347,7 @@ namespace IDE
|
|
|
OutputLine(outStr);
|
|
|
}
|
|
|
|
|
|
- public virtual void OutputLineSmart(String format, params Object[] args)
|
|
|
+ public virtual void OutputLineSmart(StringView format, params Object[] args)
|
|
|
{
|
|
|
String outStr;
|
|
|
if (args.Count > 0)
|
|
@@ -10027,7 +10261,7 @@ namespace IDE
|
|
|
#endif
|
|
|
}
|
|
|
mWorkspace.ClearProjectNameCache();
|
|
|
- mProjectPanel.RehupProjects();
|
|
|
+ mProjectPanel?.RehupProjects();
|
|
|
}
|
|
|
|
|
|
/*public string GetClangDepConfigName(Project project)
|
|
@@ -10064,8 +10298,8 @@ namespace IDE
|
|
|
RemoveProjectItems(project);
|
|
|
}
|
|
|
|
|
|
- mBfResolveCompiler.QueueDeferredResolveAll();
|
|
|
- mBfResolveCompiler.QueueRefreshViewCommand(.FullRefresh);
|
|
|
+ mBfResolveCompiler?.QueueDeferredResolveAll();
|
|
|
+ mBfResolveCompiler?.QueueRefreshViewCommand(.FullRefresh);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -10093,11 +10327,14 @@ namespace IDE
|
|
|
{
|
|
|
mWantsBeefClean = true;
|
|
|
|
|
|
+ var checkDeclName = (project.mProjectName !== project.mProjectNameDecl) && (mWorkspace.FindProject(project.mProjectNameDecl) == project);
|
|
|
+
|
|
|
for (var checkProject in mWorkspace.mProjects)
|
|
|
{
|
|
|
for (var dep in checkProject.mDependencies)
|
|
|
{
|
|
|
- if (dep.mProjectName == project.mProjectName)
|
|
|
+ if ((dep.mProjectName == project.mProjectName) ||
|
|
|
+ ((checkDeclName) && (dep.mProjectName == project.mProjectNameDecl)))
|
|
|
{
|
|
|
dep.mProjectName.Set(newName);
|
|
|
checkProject.SetChanged();
|
|
@@ -10115,14 +10352,27 @@ namespace IDE
|
|
|
}
|
|
|
|
|
|
project.mProjectName.Set(newName);
|
|
|
+ if (project.mProjectNameDecl != project.mProjectName)
|
|
|
+ delete project.mProjectNameDecl;
|
|
|
+ project.mProjectNameDecl = project.mProjectName;
|
|
|
project.SetChanged();
|
|
|
mWorkspace.ClearProjectNameCache();
|
|
|
+
|
|
|
+ mProjectPanel.RebuildUI();
|
|
|
}
|
|
|
|
|
|
public void RemoveProject(Project project)
|
|
|
{
|
|
|
RemoveProjectItems(project);
|
|
|
|
|
|
+ if (mWorkspace.mProjectLockMap.GetAndRemove(project.mProjectName) case .Ok(let kv))
|
|
|
+ {
|
|
|
+ delete kv.key;
|
|
|
+ kv.value.Dispose();
|
|
|
+ if (mWorkspace.mProjectLockMap.IsEmpty)
|
|
|
+ SaveWorkspaceLockData(true);
|
|
|
+ }
|
|
|
+
|
|
|
project.mDeleted = true;
|
|
|
mWorkspace.SetChanged();
|
|
|
mWorkspace.mProjects.Remove(project);
|
|
@@ -10911,7 +11161,7 @@ namespace IDE
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- static void QuoteIfNeeded(String str)
|
|
|
+ protected static void QuoteIfNeeded(String str)
|
|
|
{
|
|
|
if (!str.Contains(' '))
|
|
|
return;
|
|
@@ -12398,6 +12648,8 @@ namespace IDE
|
|
|
base.Init();
|
|
|
mSettings.Apply();
|
|
|
|
|
|
+ mGitManager.Init();
|
|
|
+
|
|
|
//Yoop();
|
|
|
|
|
|
/*for (int i = 0; i < 100*1024*1024; i++)
|
|
@@ -14865,6 +15117,8 @@ namespace IDE
|
|
|
if (mLongUpdateProfileId != 0)
|
|
|
DoLongUpdateCheck();
|
|
|
|
|
|
+ mGitManager.Update();
|
|
|
+ mPackMan.Update();
|
|
|
if (mWakaTime != null)
|
|
|
mWakaTime.Update();
|
|
|
if (mFindResultsPanel != null)
|
|
@@ -15053,7 +15307,6 @@ namespace IDE
|
|
|
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
|
|
|
public static extern bool MessageBeep(MessageBeepType type);
|
|
|
#endif
|
|
|
-
|
|
|
}
|
|
|
|
|
|
static
|