diff --git a/IDE/src/IDEApp.bf b/IDE/src/IDEApp.bf index 0c371647..33732da9 100644 --- a/IDE/src/IDEApp.bf +++ b/IDE/src/IDEApp.bf @@ -11586,7 +11586,7 @@ namespace IDE if ((mBuildContext == null) && (!IsCompiling)) DeleteAndNullify!(mLaunchData); - mErrorsPanel?.CheckResolveAll(); + mErrorsPanel?.UpdateAlways(); } public void ShowPassOutput(BfPassInstance bfPassInstance) diff --git a/IDE/src/Project.bf b/IDE/src/Project.bf index 9d43fab3..7d5fc732 100644 --- a/IDE/src/Project.bf +++ b/IDE/src/Project.bf @@ -290,6 +290,11 @@ namespace IDE } } + public this() + { + + } + public ~this() { Dispose(); diff --git a/IDE/src/ScriptManager.bf b/IDE/src/ScriptManager.bf index 3f93cf18..cafc0270 100644 --- a/IDE/src/ScriptManager.bf +++ b/IDE/src/ScriptManager.bf @@ -969,48 +969,46 @@ namespace IDE /*if (gApp.AreTestsRunning()) checkRunState = false;*/ - if (checkRunState) + if (!checkRunState) + return true; + + var runState = gApp.mDebugger.GetRunState(); + if (runState == .Terminating) { - var runState = gApp.mDebugger.GetRunState(); - if (runState == .Terminating) - { - return false; - } - - if (runState == .SearchingSymSrv) - { - return false; - } - - if (runState == .DebugEval) - { - return false; - } - - if (runState == .Running_ToTempBreakpoint) - return false; - - Debug.Assert((runState == .NotStarted) || (runState == .Paused) || (runState == .Running_ToTempBreakpoint) || - (runState == .Exception) || (runState == .Breakpoint) || (runState == .Terminated)); - /*if (runState == .Paused) - { - NOP!(); - } - else if ((runState == .Paused) || (runState == .Exception) || (runState == .Breakpoint))*/ - { - if ((runState != .NotStarted) && (mIsFirstBreak)) - { - //Debug.Assert((runState == .Breakpoint) || (gApp.IsCrashDump)); - mIsFirstBreak = false; - } - - //TEMPORARY TEST: - //Debug.Assert(runState == .Breakpoint); - return true; - } + return false; } - return false; + if (runState == .SearchingSymSrv) + { + return false; + } + + if (runState == .DebugEval) + { + return false; + } + + if (runState == .Running_ToTempBreakpoint) + return false; + + Debug.Assert((runState == .NotStarted) || (runState == .Paused) || (runState == .Running_ToTempBreakpoint) || + (runState == .Exception) || (runState == .Breakpoint) || (runState == .Terminated)); + /*if (runState == .Paused) + { + NOP!(); + } + else if ((runState == .Paused) || (runState == .Exception) || (runState == .Breakpoint))*/ + { + if ((runState != .NotStarted) && (mIsFirstBreak)) + { + //Debug.Assert((runState == .Breakpoint) || (gApp.IsCrashDump)); + mIsFirstBreak = false; + } + + //TEMPORARY TEST: + //Debug.Assert(runState == .Breakpoint); + return true; + } } [IDECommand] diff --git a/IDE/src/ui/ErrorsPanel.bf b/IDE/src/ui/ErrorsPanel.bf index cbf19e5c..ac637f8b 100644 --- a/IDE/src/ui/ErrorsPanel.bf +++ b/IDE/src/ui/ErrorsPanel.bf @@ -47,7 +47,9 @@ namespace IDE.ui public ErrorsListView mErrorLV; public bool mNeedsResolveAll; - public bool mErrorsDirty; + public int mDataId; + public int mErrorListId; + public int mErrorRefreshId; public Monitor mMonitor = new .() ~ delete _; public Dictionary> mParseErrors = new .() ~ delete _; public List mResolveErrors = new .() ~ DeleteContainerAndItems!(_); @@ -121,7 +123,7 @@ namespace IDE.ui if (passKind != .Parse) { if (!mResolveErrors.IsEmpty) - mErrorsDirty = true; + mDataId++; for (let error in mResolveErrors) { @@ -170,7 +172,7 @@ namespace IDE.ui else mResolveErrors.Add(bfError); - mErrorsDirty = true; + mDataId++; } } } @@ -198,7 +200,7 @@ namespace IDE.ui { delete kv.key; DeleteErrorList(kv.value); - mErrorsDirty = true; + mDataId++; } mParseErrors.Clear(); } @@ -208,7 +210,7 @@ namespace IDE.ui { delete key; DeleteErrorList(list); - mErrorsDirty = true; + mDataId++; } } } @@ -220,7 +222,7 @@ namespace IDE.ui { ClearParserErrors(null); ClearAndDeleteItems(mResolveErrors); - mErrorsDirty = true; + mDataId++; mErrorCount = 0; mWarningCount = 0; } @@ -230,7 +232,7 @@ namespace IDE.ui { using (mMonitor.Enter()) { - if (mErrorsDirty) + if (mDataId != mErrorListId) { let root = mErrorLV.GetRoot(); @@ -315,13 +317,20 @@ namespace IDE.ui while (root.GetChildCount() > idx) root.RemoveChildItemAt(root.GetChildCount() - 1); - mErrorsDirty = false; + mErrorListId = mDataId; + MarkDirty(); } } } - public void CheckResolveAll() + public void UpdateAlways() { + if (mErrorRefreshId != mDataId) + { + gApp.MarkDirty(); + mErrorRefreshId = mDataId; + } + let compiler = gApp.mBfResolveCompiler; if ((mNeedsResolveAll) && (!compiler.IsPerformingBackgroundOperation())) { diff --git a/IDE/src/ui/NewProjectDialog.bf b/IDE/src/ui/NewProjectDialog.bf index d3fa33b8..b64b69cf 100644 --- a/IDE/src/ui/NewProjectDialog.bf +++ b/IDE/src/ui/NewProjectDialog.bf @@ -161,6 +161,9 @@ namespace IDE.ui { String path = scope .(); mDirectoryEdit.GetText(path); + path.Trim(); + if ((path.EndsWith('\\')) || (path.EndsWith('/'))) + path.RemoveFromEnd(1); String projName = scope .(); Path.GetFileName(path, projName); diff --git a/IDE/src/ui/ProjectPanel.bf b/IDE/src/ui/ProjectPanel.bf index 8561d379..ca02660e 100644 --- a/IDE/src/ui/ProjectPanel.bf +++ b/IDE/src/ui/ProjectPanel.bf @@ -1103,7 +1103,7 @@ namespace IDE.ui app.RemoveProject(project); } - void ProjectItemUnregister(ProjectItem projectItem) + void ProjectItemUnregister(ProjectItem projectItem, bool isDeleting) { var projectSource = projectItem as ProjectSource; if (projectSource != null) @@ -1136,14 +1136,20 @@ namespace IDE.ui var sourceViewPanel = tab.mContent as SourceViewPanel; if ((sourceViewPanel != null) && (sourceViewPanel.mProjectSource == projectSource)) { - sourceViewPanel.DetachFromProjectItem(); + if (isDeleting) + sourceViewPanel.DetachFromProjectItem(); + else + sourceViewPanel.QueueFullRefresh(true); } }); if (isProjectEnabled) { - gApp.mBfResolveHelper.ProjectSourceRemoved(projectSource); - gApp.mWorkspace.ProjectSourceRemoved(projectSource); + if (isDeleting) + { + gApp.mBfResolveHelper.ProjectSourceRemoved(projectSource); + gApp.mWorkspace.ProjectSourceRemoved(projectSource); + } gApp.RefreshVisibleViews(); } } @@ -1192,7 +1198,7 @@ namespace IDE.ui if (projectItem == null) return; - ProjectItemUnregister(projectItem); + ProjectItemUnregister(projectItem, forceRemove); bool doReleaseRef = false; bool didRemove = false; @@ -1227,16 +1233,31 @@ namespace IDE.ui } else { - /*if (projectItem.mParentFolder.mIncludeKind == .Ignore) - projectItem.mIncludeKind = .Auto; - else - projectItem.mIncludeKind = .Ignore;*/ + // Mark item as ignored - note, this was removed at some point. Why? Did this trigger some bug? + ProjectItem.IncludeKind includeKind = .Ignore; + if (projectItem.mParentFolder.mIncludeKind == .Ignore) + includeKind = .Auto; + + if (projectItem.mIncludeKind != includeKind) + { + projectItem.mIncludeKind = includeKind; + projectItem.mProject.SetChanged(); + } + + if (let projectSource = projectItem as ProjectSource) + { + String path = scope .(); + projectSource.GetFullImportPath(path); + gApp.mErrorsPanel.ClearParserErrors(path); + } } if ((didRemove) || (!mShowIgnored)) - listItem.mParentItem.RemoveChildItem(listItem); - using (gApp.mMonitor.Enter()) - projectItem.Dispose(); + { + listItem.mParentItem.RemoveChildItem(listItem); + using (gApp.mMonitor.Enter()) + projectItem.Dispose(); + } if (doReleaseRef) projectItem.ReleaseRef(); diff --git a/IDE/src/ui/SourceViewPanel.bf b/IDE/src/ui/SourceViewPanel.bf index 881b5361..74be54f3 100644 --- a/IDE/src/ui/SourceViewPanel.bf +++ b/IDE/src/ui/SourceViewPanel.bf @@ -577,7 +577,8 @@ namespace IDE.ui { if (mProjectSource == null) return null; - + if (mProjectSource.IsIgnored()) + return null; if (!gApp.IsProjectSourceEnabled(mProjectSource)) return null; @@ -1831,7 +1832,8 @@ namespace IDE.ui ((resolveType == .Classify) || (resolveType == .ClassifyFullRefresh))) { gApp.mErrorsPanel.ClearParserErrors(mFilePath); - gApp.mErrorsPanel.ProcessPassInstance(passInstance, .Parse); + if (!isFastClassify) + gApp.mErrorsPanel.ProcessPassInstance(passInstance, .Parse); } if (isInterrupt) @@ -1872,7 +1874,7 @@ namespace IDE.ui parser.SetAutocomplete(Math.Max(0, mEditWidget.mEditWidgetContent.CursorTextPos - 1)); }*/ - if ((!isFastClassify) && (bfCompiler != null)) + if ((!isFastClassify) && (bfCompiler != null)) { if (!bfCompiler.ClassifySource(passInstance, parser, resolvePassData, char8Data)) { @@ -1910,7 +1912,7 @@ namespace IDE.ui { //bool isAutocomplete = (resolveType == ResolveType.Autocomplete) || (resolveType == ResolveType.Autocomplete_HighPri); //if (isAutocomplete) - if ((!isBackground) && (resolveType == ResolveType.Autocomplete)) + if ((!isFastClassify) && (!isBackground) && (resolveType == ResolveType.Autocomplete)) InjectErrors(passInstance, mEditWidget.mEditWidgetContent.mData.mText, mEditWidget.mEditWidgetContent.mData.mTextIdData.GetPrepared(), true); //IDEApp.sApp.ShowPassOutput(passInstance);