diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj index 35638254..781c9d15 100644 --- a/Source/Core/Builder.csproj +++ b/Source/Core/Builder.csproj @@ -808,9 +808,6 @@ ScriptEditorPreviewControl.cs - - ScriptResourcesControl.cs - @@ -831,12 +828,6 @@ Component - - UserControl - - - ScriptResourcesControl.cs - Component diff --git a/Source/Core/Controls/Scripting/ScriptDocumentTab.cs b/Source/Core/Controls/Scripting/ScriptDocumentTab.cs index 73718dcf..ddb805d3 100755 --- a/Source/Core/Controls/Scripting/ScriptDocumentTab.cs +++ b/Source/Core/Controls/Scripting/ScriptDocumentTab.cs @@ -189,7 +189,6 @@ namespace CodeImp.DoomBuilder.Controls // Bind events editor.OnExplicitSaveTab += panel.ExplicitSaveCurrentTab; - editor.OnOpenScriptBrowser += panel.OpenBrowseScript; editor.OnOpenFindAndReplace += panel.OpenFindAndReplace; editor.OnFindNext += panel.FindNext; editor.OnFindPrevious += panel.FindPrevious; //mxd @@ -218,7 +217,6 @@ namespace CodeImp.DoomBuilder.Controls { // Remove events editor.OnExplicitSaveTab -= panel.ExplicitSaveCurrentTab; - editor.OnOpenScriptBrowser -= panel.OpenBrowseScript; editor.OnOpenFindAndReplace -= panel.OpenFindAndReplace; editor.OnFindNext -= panel.FindNext; editor.OnFindPrevious -= panel.FindPrevious; //mxd diff --git a/Source/Core/Controls/Scripting/ScriptEditorPanel.cs b/Source/Core/Controls/Scripting/ScriptEditorPanel.cs index 4504477e..5c311dbd 100755 --- a/Source/Core/Controls/Scripting/ScriptEditorPanel.cs +++ b/Source/Core/Controls/Scripting/ScriptEditorPanel.cs @@ -155,46 +155,6 @@ namespace CodeImp.DoomBuilder.Controls } } - // Load files, which were previously opened for this map - foreach(ScriptDocumentSettings settings in General.Map.Options.ScriptDocumentSettings.Values) - { - switch(settings.TabType) - { - //TODO: load all tab types here... - case ScriptDocumentTabType.LUMP: continue; - - case ScriptDocumentTabType.FILE: - // Does this file exist? - if(File.Exists(settings.Filename)) - { - // Load this! - ScriptFileDocumentTab t = OpenFile(settings.Filename, settings.ScriptType); - t.SetViewSettings(settings); //mxd - if(settings.IsActiveTab) activetab = t; - } - break; - - case ScriptDocumentTabType.RESOURCE: - // Find target resource... - if(!General.Map.Data.ScriptResources.ContainsKey(settings.ScriptType)) continue; - foreach(ScriptResource res in General.Map.Data.ScriptResources[settings.ScriptType]) - { - if(res.Resource.Location.location == settings.ResourceLocation) - { - // Load this! - ScriptResourceDocumentTab t = OpenResource(res); - t.SetViewSettings(settings); - if(settings.IsActiveTab) activetab = t; - break; - } - } - break; - - default: - throw new NotImplementedException("Unknown ScriptDocumentTabType!"); - } - } - //mxd. Reselect previously selected tab if(activetab != null) { @@ -346,11 +306,6 @@ namespace CodeImp.DoomBuilder.Controls rtabs.Add(ActiveTab); break; - case FindReplaceSearchMode.OPENED_TABS_CURRENT_SCRIPT_TYPE: - if (ActiveTab == null) - return 0; - // .NET is heavily retarded - goto case FindReplaceSearchMode.OPENED_TABS_ALL_SCRIPT_TYPES; case FindReplaceSearchMode.OPENED_TABS_ALL_SCRIPT_TYPES: foreach (ScriptDocumentTab tab in tabs.TabPages) { @@ -358,30 +313,6 @@ namespace CodeImp.DoomBuilder.Controls tab.Config.ScriptType == ActiveTab.Config.ScriptType) rtabs.Add(tab); } break; - - case FindReplaceSearchMode.CURRENT_PROJECT_CURRENT_SCRIPT_TYPE: - if (ActiveTab == null) - return 0; - // .NET is heavily retarded - goto case FindReplaceSearchMode.CURRENT_PROJECT_ALL_SCRIPT_TYPES; - case FindReplaceSearchMode.CURRENT_PROJECT_ALL_SCRIPT_TYPES: - // Just search among all resources - var usedscripttypes = new List(General.Map.Data.ScriptResources.Keys); - for (int i = 0; i < usedscripttypes.Count; i++) - { - if (options.SearchMode != FindReplaceSearchMode.CURRENT_PROJECT_ALL_SCRIPT_TYPES && - usedscripttypes[i] != ActiveTab.Config.ScriptType) continue; // [ZZ] skip irrelevant script types - foreach (ScriptResource sr in General.Map.Data.ScriptResources[usedscripttypes[i]]) - { - if (!sr.IsReadOnly && sr.ContainsText(singlesearchoptions)) - { - // open this tab - var newtab = OpenResource(sr); - rtabs.Add(newtab); - } - } - } - break; } int replacements = 0; @@ -484,10 +415,9 @@ namespace CodeImp.DoomBuilder.Controls { case FindReplaceSearchMode.CURRENT_FILE: return false; // Let the tab handle wrap-around - case FindReplaceSearchMode.OPENED_TABS_CURRENT_SCRIPT_TYPE: case FindReplaceSearchMode.OPENED_TABS_ALL_SCRIPT_TYPES: ScriptType targettabtype = curtab.Config.ScriptType; - bool checktabtype = (options.SearchMode == FindReplaceSearchMode.OPENED_TABS_CURRENT_SCRIPT_TYPE); + bool checktabtype = false; // Search in processed tab only var searchoptions = new FindReplaceOptions(options) { SearchMode = FindReplaceSearchMode.CURRENT_FILE }; @@ -525,134 +455,6 @@ namespace CodeImp.DoomBuilder.Controls // No dice return false; - case FindReplaceSearchMode.CURRENT_PROJECT_CURRENT_SCRIPT_TYPE: - case FindReplaceSearchMode.CURRENT_PROJECT_ALL_SCRIPT_TYPES: - ScriptType targetrestype = curtab.Config.ScriptType; - bool searchallresources = (options.SearchMode == FindReplaceSearchMode.CURRENT_PROJECT_ALL_SCRIPT_TYPES); - - // Search in processed tab only - var ressearchoptions = new FindReplaceOptions(options) { SearchMode = FindReplaceSearchMode.CURRENT_FILE }; - bool replacemode = (options.ReplaceWith != null); - - // Find current resource, then search - if(General.Map.Data.ScriptResources.ContainsKey(targetrestype)) - { - var reslist = new List(General.Map.Data.ScriptResources[targetrestype]); - - // Determine starting resource - int startres = -1; - if(curtab is ScriptResourceDocumentTab) - { - startres = reslist.IndexOf(((ScriptResourceDocumentTab)curtab).Resource); - } - else if(curtab is ScriptLumpDocumentTab) - { - // Only temporary map wad qualifies - var scripttab = (ScriptLumpDocumentTab)curtab; - for(int i = 0; i < reslist.Count; i++) - { - if(reslist[i].Resource == General.Map.TemporaryMapFile && reslist[i].Filename == scripttab.Filename) - { - startres = i; - break; - } - } - } - - // Search after current resource - // This will search among all resources of targetrestype when startres == -1 - for(int i = startres + 1; i < reslist.Count; i++) - { - // Perform search... - if((!reslist[i].IsReadOnly || !replacemode) && reslist[i].ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(reslist[i]); - newtab.FindNext(ressearchoptions); // Search again using actual tab... - return true; - } - } - - if(searchallresources) - { - // Search all script types after current ScriptType - var usedscripttypes = new List(General.Map.Data.ScriptResources.Keys); - int startrestypepos = usedscripttypes.IndexOf(targetrestype); - for(int i = startrestypepos + 1; i < usedscripttypes.Count; i++) - { - foreach(ScriptResource sr in General.Map.Data.ScriptResources[usedscripttypes[i]]) - { - // Perform search... - if((!sr.IsReadOnly || !replacemode) && sr.ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(sr); - newtab.FindNext(ressearchoptions); // Search again using actual tab... - return true; - } - } - } - - // Search all script types before current ScriptType - if(startrestypepos > 0) - { - for(int i = 0; i < startrestypepos; i++) - { - foreach(ScriptResource sr in General.Map.Data.ScriptResources[usedscripttypes[i]]) - { - // Perform search... - if((!sr.IsReadOnly || !replacemode) && sr.ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(sr); - newtab.FindNext(ressearchoptions); // Search again using actual tab... - return true; - } - } - } - } - } - - // Search before current resource - if(startres > 0) - { - for(int i = 0; i < startres; i++) - { - // Perform search... - if((!reslist[i].IsReadOnly || !replacemode) && reslist[i].ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(reslist[i]); - newtab.FindNext(ressearchoptions); // Search again using actual tab... - return true; - } - } - } - - } - else if(searchallresources) - { - // Just search among all resources - var usedscripttypes = new List(General.Map.Data.ScriptResources.Keys); - for(int i = 0; i < usedscripttypes.Count; i++) - { - foreach(ScriptResource sr in General.Map.Data.ScriptResources[usedscripttypes[i]]) - { - // Perform search... - if((!sr.IsReadOnly || !replacemode) && sr.ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(sr); - newtab.FindNext(ressearchoptions); // Search again using actual tab... - return true; - } - } - } - } - - // No dice - return false; - default: throw new NotImplementedException("Unknown FindReplaceSearchMode!"); } } @@ -666,10 +468,9 @@ namespace CodeImp.DoomBuilder.Controls { case FindReplaceSearchMode.CURRENT_FILE: return false; // Let the tab handle wrap-around - case FindReplaceSearchMode.OPENED_TABS_CURRENT_SCRIPT_TYPE: case FindReplaceSearchMode.OPENED_TABS_ALL_SCRIPT_TYPES: ScriptType targettabtype = curtab.Config.ScriptType; - bool checktabtype = (options.SearchMode == FindReplaceSearchMode.OPENED_TABS_CURRENT_SCRIPT_TYPE); + bool checktabtype = false; // Search in processed tab only var searchoptions = new FindReplaceOptions(options) { SearchMode = FindReplaceSearchMode.CURRENT_FILE }; @@ -707,134 +508,6 @@ namespace CodeImp.DoomBuilder.Controls // No dice return false; - case FindReplaceSearchMode.CURRENT_PROJECT_CURRENT_SCRIPT_TYPE: - case FindReplaceSearchMode.CURRENT_PROJECT_ALL_SCRIPT_TYPES: - ScriptType targetrestype = curtab.Config.ScriptType; - bool searchallresources = (options.SearchMode == FindReplaceSearchMode.CURRENT_PROJECT_ALL_SCRIPT_TYPES); - - // Search in processed tab only - var ressearchoptions = new FindReplaceOptions(options) { SearchMode = FindReplaceSearchMode.CURRENT_FILE }; - bool replacemode = (options.ReplaceWith != null); - - // Find current resource, then search - if(General.Map.Data.ScriptResources.ContainsKey(targetrestype)) - { - var reslist = new List(General.Map.Data.ScriptResources[targetrestype]); - - // Determine starting resource - int startres = -1; - if(curtab is ScriptResourceDocumentTab) - { - startres = reslist.IndexOf(((ScriptResourceDocumentTab)curtab).Resource); - } - else if(curtab is ScriptLumpDocumentTab) - { - // Only temporary map wad qualifies - var scripttab = (ScriptLumpDocumentTab)curtab; - for(int i = 0; i < reslist.Count; i++) - { - if(reslist[i].Resource == General.Map.TemporaryMapFile && reslist[i].Filename == scripttab.Filename) - { - startres = i; - break; - } - } - } - - // Search before current resource - // This will search among all resources of targetrestype when startres == -1 - for(int i = startres - 1; i > -1; i--) - { - // Perform search... - if((!reslist[i].IsReadOnly || !replacemode) && reslist[i].ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(reslist[i]); - newtab.FindPrevious(ressearchoptions); // Search again using actual tab... - return true; - } - } - - if(searchallresources) - { - // Search all script types before current ScriptType - var usedscripttypes = new List(General.Map.Data.ScriptResources.Keys); - int startrestypepos = usedscripttypes.IndexOf(targetrestype); - for(int i = startrestypepos - 1; i > 0; i--) - { - foreach(ScriptResource sr in General.Map.Data.ScriptResources[usedscripttypes[i]]) - { - // Perform search... - if((!sr.IsReadOnly || !replacemode) && sr.ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(sr); - newtab.FindPrevious(ressearchoptions); // Search again using actual tab... - return true; - } - } - } - - // Search all script types after current ScriptType - if(startrestypepos < usedscripttypes.Count) - { - for(int i = usedscripttypes.Count - 1; i > startrestypepos; i--) - { - foreach(ScriptResource sr in General.Map.Data.ScriptResources[usedscripttypes[i]]) - { - // Perform search... - if((!sr.IsReadOnly || !replacemode) && sr.ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(sr); - newtab.FindPrevious(ressearchoptions); // Search again using actual tab... - return true; - } - } - } - } - } - - // Search after current resource - if(startres > 0) - { - for(int i = reslist.Count - 1; i > startres; i--) - { - // Perform search... - if((!reslist[i].IsReadOnly || !replacemode) && reslist[i].ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(reslist[i]); - newtab.FindPrevious(ressearchoptions); // Search again using actual tab... - return true; - } - } - } - - } - else if(searchallresources) - { - // Just search among all resources - var usedscripttypes = new List(General.Map.Data.ScriptResources.Keys); - for(int i = usedscripttypes.Count - 1; i > -1; i--) - { - foreach(ScriptResource sr in General.Map.Data.ScriptResources[usedscripttypes[i]]) - { - // Perform search... - if((!sr.IsReadOnly || !replacemode) && sr.ContainsText(ressearchoptions)) - { - // Found it! - var newtab = OpenResource(sr); - newtab.FindPrevious(ressearchoptions); // Search again using actual tab... - return true; - } - } - } - } - - // No dice - return false; - default: throw new NotImplementedException("Unknown FindReplaceSearchMode!"); } } @@ -1271,122 +944,23 @@ namespace CodeImp.DoomBuilder.Controls scripttype.Text = ((t != null && t.Config != null) ? t.Config.Description : "Plain Text"); } - // This opens the given file, returns null when failed - public ScriptFileDocumentTab OpenFile(string filename, ScriptType scripttype) - { - //mxd. Check if we already have this file opened - foreach(var tab in tabs.TabPages) - { - if(!(tab is ScriptFileDocumentTab)) continue; - ScriptFileDocumentTab filetab = (ScriptFileDocumentTab)tab; - - if(filetab.Filename == filename) - { - tabs.SelectedTab = filetab; - return filetab; - } - } - - ScriptConfiguration foundconfig = new ScriptConfiguration(); - - // Find the most suitable script configuration to use - if(scripttype == ScriptType.UNKNOWN) - { - foreach(ScriptConfiguration cfg in scriptconfigs) - { - foreach(string ext in cfg.Extensions) - { - // Use this configuration if the extension matches - if(filename.EndsWith("." + ext, StringComparison.OrdinalIgnoreCase)) - { - foundconfig = cfg; - break; - } - } - } - } - else - { - foundconfig = General.GetScriptConfiguration(scripttype); - } - - // Create new document - ScriptFileDocumentTab t = new ScriptFileDocumentTab(this, foundconfig); - if(t.Open(filename)) - { - //mxd. Try to determine script type from file contents... - if(scripttype == ScriptType.UNKNOWN) - { - ScriptType st = t.VerifyScriptType(); - if(st != ScriptType.UNKNOWN) - { - foreach(ScriptConfiguration cfg in scriptconfigs) - { - if(cfg.ScriptType == st) - { - t.ChangeScriptConfig(cfg); - break; - } - } - } - } - - // Mark any errors this script may have - if(compilererrors != null) t.MarkScriptErrors(compilererrors); - - // Add to tabs - tabs.TabPages.Add(t); - tabs.SelectedTab = t; - - // Done - t.OnTextChanged += tabpage_OnTextChanged; //mxd - t.Editor.Scintilla.UpdateUI += scintilla_OnUpdateUI; - UpdateInterface(true); - return t; - } - - // Failed - return null; - } - //mxd internal ScriptResourceDocumentTab OpenResource(ScriptResource resource) { // Check if we already have this file opened - foreach(var tab in tabs.TabPages) + foreach (var tab in tabs.TabPages) { - if(!(tab is ScriptResourceDocumentTab)) continue; + if (!(tab is ScriptResourceDocumentTab)) continue; ScriptResourceDocumentTab restab = (ScriptResourceDocumentTab)tab; - if(restab.Resource.LumpIndex == resource.LumpIndex && restab.Resource.FilePathName == resource.FilePathName) + if (restab.Resource.LumpIndex == resource.LumpIndex && restab.Resource.FilePathName == resource.FilePathName) { tabs.SelectedTab = restab; return restab; } } - - // Create new document - ScriptConfiguration config = General.GetScriptConfiguration(resource.ScriptType); - if(config == null || config.ScriptType != resource.ScriptType) - { - General.ErrorLogger.Add(ErrorType.Warning, "Incorrect or missing script configuration for \"" + resource.ScriptType + "\" script type. Using plain text configuration."); - config = new ScriptConfiguration(); - } - var t = new ScriptResourceDocumentTab(this, resource, config); - - // Mark any errors this script may have - if(compilererrors != null) t.MarkScriptErrors(compilererrors); - - // Add to tabs - tabs.TabPages.Add(t); - tabs.SelectedTab = t; - - // Done - t.OnTextChanged += tabpage_OnTextChanged; - t.Editor.Scintilla.UpdateUI += scintilla_OnUpdateUI; - UpdateInterface(true); - return t; + return null; } // This saves the current open script @@ -1408,12 +982,6 @@ namespace CodeImp.DoomBuilder.Controls } } - // This opens a script - public void OpenBrowseScript() - { - buttonopen_Click(this, EventArgs.Empty); - } - //mxd. This launches keyword help website public bool LaunchKeywordHelp() { @@ -1542,68 +1110,6 @@ namespace CodeImp.DoomBuilder.Controls UpdateInterface(true); } - // When new script is clicked - private void buttonnew_Click(object sender, EventArgs e) - { - // Get the script config to use - ScriptConfiguration scriptconfig = ((sender as ToolStripMenuItem).Tag as ScriptConfiguration); - - // Create new document - ScriptFileDocumentTab t = new ScriptFileDocumentTab(this, scriptconfig); - tabs.TabPages.Add(t); - tabs.SelectedTab = t; - - // Done - UpdateInterface(true); - } - - // Open script clicked - private void buttonopen_Click(object sender, EventArgs e) - { - // Show open file dialog - if(openfile.ShowDialog(this.ParentForm) == DialogResult.OK) - { - //mxd. Gather already opened file names - List openedfiles = new List(); - foreach(var page in tabs.TabPages) - { - var scriptpage = page as ScriptFileDocumentTab; - if(scriptpage != null) openedfiles.Add(scriptpage.Filename); - } - - //mxd. Add new tabs - foreach(string name in openfile.FileNames) - { - if(!openedfiles.Contains(name)) - { - ScriptFileDocumentTab t = OpenFile(name, ScriptType.UNKNOWN); - - // Apply document settings - if(General.Map.Options.ScriptDocumentSettings.ContainsKey(t.Filename)) - { - t.SetViewSettings(General.Map.Options.ScriptDocumentSettings[t.Filename]); - } - else - { - // Apply default settings - t.SetDefaultViewSettings(); - } - } - } - - // Select the last new item - foreach(var page in tabs.TabPages) - { - var scriptpage = page as ScriptFileDocumentTab; - if(scriptpage != null && scriptpage.Filename == openfile.FileNames[openfile.FileNames.Length - 1]) - { - tabs.SelectedTab = scriptpage; - break; - } - } - } - } - // Save script clicked private void buttonsave_Click(object sender, EventArgs e) { @@ -1933,39 +1439,6 @@ namespace CodeImp.DoomBuilder.Controls } } - // User double-clicks and error in the list - private void errorlist_ItemActivate(object sender, EventArgs e) - { - // Anything selection? - if(errorlist.SelectedItems.Count > 0) - { - // Get the compiler error - CompilerError err = (CompilerError)errorlist.SelectedItems[0].Tag; - - // Show the tab with the script that matches - bool foundscript = false; - foreach(ScriptDocumentTab t in tabs.TabPages) - { - if(t.VerifyErrorForScript(err)) - { - tabs.SelectedTab = t; - t.MoveToLine(err.linenumber); - foundscript = true; - break; - } - } - - // If we don't have the script opened, see if we can find the file and open the script - if(!foundscript && File.Exists(err.filename)) - { - ScriptDocumentTab t = OpenFile(err.filename, ScriptType.UNKNOWN); - if(t != null) t.MoveToLine(err.linenumber); - } - - ForceFocus(); - } - } - #endregion #region ================== Quick Search (mxd) diff --git a/Source/Core/Controls/Scripting/ScriptResourcesControl.cs b/Source/Core/Controls/Scripting/ScriptResourcesControl.cs deleted file mode 100755 index 3d6a4dea..00000000 --- a/Source/Core/Controls/Scripting/ScriptResourcesControl.cs +++ /dev/null @@ -1,544 +0,0 @@ -#region ================== Namespaces - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Windows.Forms; -using CodeImp.DoomBuilder.Config; -using CodeImp.DoomBuilder.Data; -using CodeImp.DoomBuilder.Data.Scripting; -using CodeImp.DoomBuilder.Windows; - -#endregion - -namespace CodeImp.DoomBuilder.Controls -{ - internal partial class ScriptResourcesControl : UserControl - { - - #region ================== Nodes sorter - - private class ScriptNodesSorter : IComparer - { - private List resourceorder; - private HashSet resourcetypes; - - public ScriptNodesSorter() - { - // Needed to show resources in the map-defined order - resourceorder = new List(); - foreach(DataReader reader in General.Map.Data.Containers) - { - resourceorder.Add(reader.Location.location); - } - - resourcetypes = new HashSet { TextResourceNodeType.RESOURCE_DIRECTORY, TextResourceNodeType.RESOURCE_PK3, TextResourceNodeType.RESOURCE_WAD }; - } - - // Compare between two tree nodes - public int Compare(object o1, object o2) - { - TreeNode n1 = o1 as TreeNode; - TreeNode n2 = o2 as TreeNode; - - TextResourceNodeData d1 = (TextResourceNodeData)n1.Tag; - TextResourceNodeData d2 = (TextResourceNodeData)n2.Tag; - - // Sort resources by load order - if(resourcetypes.Contains(d1.NodeType) && resourcetypes.Contains(d2.NodeType)) - { - int n1index = resourceorder.IndexOf(d1.ResourceLocation); - int n2index = resourceorder.IndexOf(d2.ResourceLocation); - - if(n1index > n2index) return 1; - if(n1index < n2index) return -1; - return 0; - } - - // Push map namespace resources before anything else - if(d1.NodeType == TextResourceNodeType.RESOURCE_MAP && d2.NodeType != TextResourceNodeType.RESOURCE_MAP) return -1; - if(d1.NodeType != TextResourceNodeType.RESOURCE_MAP && d2.NodeType == TextResourceNodeType.RESOURCE_MAP) return 1; - - // Push embedded WADs before anything else except map resources - if(n1.Parent != null && n2.Parent != null) - { - if(d1.NodeType == TextResourceNodeType.RESOURCE_WAD && d2.NodeType != TextResourceNodeType.RESOURCE_WAD) return -1; - if(d1.NodeType != TextResourceNodeType.RESOURCE_WAD && d2.NodeType == TextResourceNodeType.RESOURCE_WAD) return 1; - } - - // Push script folders before script files - if(d1.NodeType == TextResourceNodeType.DIRECTORY && d2.NodeType != TextResourceNodeType.DIRECTORY) return -1; - if(d1.NodeType != TextResourceNodeType.DIRECTORY && d2.NodeType == TextResourceNodeType.DIRECTORY) return 1; - - // Sort by name - return n1.Text.CompareTo(n2.Text); - } - } - - #endregion - - #region ================== Constants - - #endregion - - #region ================== Enums - - private enum TextResourceNodeType - { - RESOURCE_WAD, - RESOURCE_DIRECTORY, - RESOURCE_PK3, - RESOURCE_MAP, - DIRECTORY, - NODE, - } - - #endregion - - #region ================== Structs - - private struct TextResourceNodeData - { - public ScriptResource Resource; - public string ResourceLocation; // Where PK3/WAD/Folder resource is located - public string LocationInResource; // Path to text file inside resource - public TextResourceNodeType NodeType; - public ScriptType ScriptType; - - public override string ToString() - { - return (NodeType == TextResourceNodeType.NODE - ? Path.Combine(ResourceLocation, LocationInResource) + (Resource.LumpIndex != -1 ? ":" + Resource.LumpIndex : "") - : ResourceLocation); - } - } - - private struct ScriptTypeItem - { - public string Name; - public ScriptType Type; - public override string ToString() { return Name; } - } - - #endregion - - #region ================== Variables - - private ScriptEditorPanel scriptpanel; - private Dictionary>> resourcesperlocation; - private List usedscripttypes; - - #endregion - - #region ================== Properties - - #endregion - - #region ================== Constructor / Setup - - public ScriptResourcesControl() - { - InitializeComponent(); - } - - public void Setup(ScriptEditorPanel scriptpanel, Dictionary> resources) - { - this.scriptpanel = scriptpanel; - projecttree.ImageList = scriptpanel.Icons.Icons; // Link icons - resourcesperlocation = new Dictionary>>(); - foreach(HashSet group in resources.Values) - { - foreach(ScriptResource resource in group) - { - string key = resource.Resource.Location.location; - if(!resourcesperlocation.ContainsKey(key)) - resourcesperlocation.Add(key, new Dictionary>()); - - if(!resourcesperlocation[key].ContainsKey(resource.ScriptType)) - resourcesperlocation[key].Add(resource.ScriptType, new HashSet()); - - resourcesperlocation[key][resource.ScriptType].Add(resource); - } - } - - // Add used script types to the filter combobox - string curfilter = filterbytype.SelectedText; - filterbytype.Items.Clear(); - filterbytype.Items.Add(new ScriptTypeItem { Name = "All", Type = ScriptType.UNKNOWN }); - - usedscripttypes = new List(); - foreach(ScriptType st in resources.Keys) - usedscripttypes.Add(new ScriptTypeItem { Name = Enum.GetName(typeof(ScriptType), st), Type = st }); - usedscripttypes.Sort((i1, i2) => String.Compare(i1.Name, i2.Name, StringComparison.Ordinal)); - - int toselect = 0; - for(int i = 0; i < usedscripttypes.Count; i++) - { - if(usedscripttypes[i].Name == curfilter) toselect = i; - filterbytype.Items.Add(usedscripttypes[i]); - } - filterbytype.SelectedIndex = toselect; // This will also trigger tree update - } - - #endregion - - #region ================== Methods - - public void SelectItem(ScriptResourceDocumentTab tab) - { - if(tab == null) return; - SelectItem(tab.Resource.Resource.Location.location, tab.Resource.Filename, - tab.Resource.LumpIndex, tab.Resource.ScriptType); - } - - public void SelectItem(string resourcelocation, string lumpname, int lumpindex, ScriptType scripttype) - { - TreeNode target = FindItem(projecttree.Nodes, resourcelocation, lumpname, lumpindex, scripttype); - if(target != null) - { - projecttree.SelectedNode = target; - } - } - - private static TreeNode FindItem(TreeNodeCollection nodes, string resourcelocation, string lumpname, int lumpindex, ScriptType scripttype) - { - foreach(TreeNode node in nodes) - { - // Is this the item we are looking for? - TextResourceNodeData data = (TextResourceNodeData)node.Tag; - - if(data.NodeType == TextResourceNodeType.NODE && data.ResourceLocation == resourcelocation - && data.ScriptType == scripttype && data.Resource.Filename == lumpname && data.Resource.LumpIndex == lumpindex) - { - // Found it! - return node; - } - - // Try children... - if(node.Nodes.Count > 0) - { - TreeNode item = FindItem(node.Nodes, resourcelocation, lumpname, lumpindex, scripttype); - if(item != null) return item; - } - } - - // No dice... - return null; - } - - private void UpdateResourcesTree() - { - ScriptType targettype = (filterbytype.SelectedIndex > -1 ? ((ScriptTypeItem)filterbytype.SelectedItem).Type : ScriptType.UNKNOWN); - UpdateResourcesTree(targettype, filterproject.Text); - } - - private void UpdateResourcesTree(ScriptType filtertype, string filterfilename) - { - TreeNode selected = projecttree.SelectedNode; - TreeNode toselect = null; - - projecttree.BeginUpdate(); - projecttree.Nodes.Clear(); - - char[] splitter = { Path.DirectorySeparatorChar }; - bool filenamefiltered = !string.IsNullOrEmpty(filterfilename); - bool filteringapplied = (filenamefiltered || filtertype != ScriptType.UNKNOWN); - - // Create nodes - foreach(KeyValuePair>> group in resourcesperlocation) - { - foreach(ScriptTypeItem item in usedscripttypes) - { - // Filter by script type? - if(filtertype != ScriptType.UNKNOWN && item.Type != filtertype) continue; - - // Current resource has this scrit type? - if(!group.Value.ContainsKey(item.Type)) continue; - - HashSet resources = group.Value[item.Type]; - foreach(ScriptResource res in resources) - { - bool asreadonly = res.Resource.IsReadOnly; - - // Filter by filename? - if(filenamefiltered && Path.GetFileName(res.Filename).IndexOf(filterfilename, StringComparison.OrdinalIgnoreCase) == -1) - continue; - - // Resource type node added? - TreeNode root; - string key = res.Resource.Location.location; - - // WAD resource inside another resource? - if(res.Resource is WADReader && ((WADReader)res.Resource).ParentResource != null) - { - WADReader wr = (WADReader)res.Resource; - string parentkey = wr.ParentResource.Location.location; - TreeNode parent = GetResourceNode(projecttree.Nodes, wr.ParentResource.Location.GetDisplayName(), parentkey, wr.ParentResource); - - if(parent.Nodes.ContainsKey(key)) - { - root = parent.Nodes[key]; - } - else - { - root = GetResourceNode(parent.Nodes, Path.GetFileName(wr.Location.GetDisplayName()), key, res.Resource); - TrySelectNode(selected, root, ref toselect); - } - } - else if(projecttree.Nodes.ContainsKey(key)) - { - root = projecttree.Nodes[key]; - } - else - { - root = GetResourceNode(projecttree.Nodes, res.Resource.Location.GetDisplayName(), key, res.Resource); - TrySelectNode(selected, root, ref toselect); - } - - // Single resource item or active filtering? - int iconindex = scriptpanel.Icons.GetScriptIcon(res.ScriptType); - if(filteringapplied || (resources.Count == 1 && res.ScriptType != ScriptType.ACS)) - { - // Create new node - var data = new TextResourceNodeData - { - ResourceLocation = key, - LocationInResource = Path.GetDirectoryName(res.Filename), - NodeType = TextResourceNodeType.NODE, - Resource = res, - ScriptType = res.ScriptType, - }; - TreeNode scriptnode = new TreeNode(res.ToString(), iconindex, iconindex) { Tag = data, ToolTipText = data.ToString() }; - if(asreadonly) scriptnode.ForeColor = SystemColors.GrayText; - TrySelectNode(selected, scriptnode, ref toselect); - - // Add the node - root.Nodes.Add(scriptnode); - } - else - { - // Script type added? - string typename = "[" + Enum.GetName(typeof(ScriptType), res.ScriptType) + "]"; - int groupiconindex = scriptpanel.Icons.GetScriptFolderIcon(res.ScriptType, false); - - TreeNode scriptroot; - if(root.Nodes.ContainsKey(typename)) - { - scriptroot = root.Nodes[typename]; - } - else - { - var rdata = new TextResourceNodeData - { - ResourceLocation = key, - NodeType = TextResourceNodeType.DIRECTORY, - ScriptType = res.ScriptType, - }; - scriptroot = new TreeNode(typename, groupiconindex, groupiconindex) - { - Tag = rdata, - Name = typename, - ToolTipText = rdata.ToString() - }; - if(asreadonly) scriptroot.ForeColor = SystemColors.GrayText; - root.Nodes.Add(scriptroot); - - TrySelectNode(selected, scriptroot, ref toselect); - } - - // Add the resource path nodes if needed... - string path = Path.GetDirectoryName(res.Filename); - TreeNode pathnode = scriptroot; - string localpath = string.Empty; - - if(!string.IsNullOrEmpty(path)) - { - List parts = new List(path.Split(splitter, StringSplitOptions.RemoveEmptyEntries)); - while(parts.Count > 0) - { - if(pathnode.Nodes.ContainsKey(parts[0])) - { - pathnode = pathnode.Nodes[parts[0]]; - } - else - { - localpath = Path.Combine(localpath, parts[0]); - - TreeNode child = new TreeNode(parts[0], groupiconindex, groupiconindex); - child.Name = parts[0]; - var cdata = new TextResourceNodeData - { - ResourceLocation = key, - LocationInResource = path, - NodeType = TextResourceNodeType.DIRECTORY, - ScriptType = res.ScriptType - }; - child.Tag = cdata; - child.ToolTipText = cdata.ToString(); - if(asreadonly) child.ForeColor = SystemColors.GrayText; - pathnode.Nodes.Add(child); - pathnode = child; - - TrySelectNode(selected, pathnode, ref toselect); - } - - parts.RemoveAt(0); - } - } - - // Create new node - TextResourceNodeData data = new TextResourceNodeData - { - ResourceLocation = key, - LocationInResource = path, - NodeType = TextResourceNodeType.NODE, - Resource = res, - ScriptType = res.ScriptType, - }; - string includepath = (res.ScriptType == ScriptType.ACS ? "\nInclude path: \"" + res.Filename + "\"" : ""); - TreeNode scriptnode = new TreeNode(res.ToString(), iconindex, iconindex) { Tag = data, ToolTipText = data + includepath }; - if(asreadonly) scriptnode.ForeColor = SystemColors.GrayText; - TrySelectNode(selected, scriptnode, ref toselect); - - // Add the node - pathnode.Nodes.Add(scriptnode); - } - } - } - } - - // If there's only one root node, shift all nodes up - if(projecttree.Nodes.Count == 1 && projecttree.Nodes[0].Nodes.Count > 0) - { - TreeNode[] children = new TreeNode[projecttree.Nodes[0].Nodes.Count]; - projecttree.Nodes[0].Nodes.CopyTo(children, 0); - - projecttree.Nodes.Clear(); - projecttree.Nodes.AddRange(children); - } - - // Sort the nodes - projecttree.TreeViewNodeSorter = new ScriptNodesSorter(); - - // Have valid selection? - if(toselect != null) projecttree.SelectedNode = toselect; - - // Expand all nodes when filtered - if(filenamefiltered) projecttree.ExpandAll(); - - projecttree.EndUpdate(); - } - - private TreeNode GetResourceNode(TreeNodeCollection nodes, string title, string key, DataReader resource) - { - // Node already added? - if(nodes.ContainsKey(key)) return nodes[key]; - - // Create new node - int resourceiconindex = scriptpanel.Icons.GetResourceIcon(resource.Location.type); - - TreeNode root = new TreeNode(title, resourceiconindex, resourceiconindex); - root.Name = key; - root.Tag = new TextResourceNodeData { ResourceLocation = key, NodeType = (TextResourceNodeType)resource.Location.type }; - root.ToolTipText = key; - if(resource.IsReadOnly) root.ForeColor = SystemColors.GrayText; - nodes.Add(root); - - return root; - } - - private static void TrySelectNode(TreeNode oldselection, TreeNode node, ref TreeNode toselect) - { - if(oldselection == null || oldselection.Text != node.Text - || oldselection.ToolTipText != node.ToolTipText - || oldselection.Tag.ToString() != node.Tag.ToString()) - return; - - // Found match! - toselect = node; - } - - protected override void OnLoad(EventArgs e) - { - // Manual reposition required... - if(MainForm.DPIScaler.Width != 1.0f || MainForm.DPIScaler.Height != 1.0f) - { - filterprojectclear.Left = this.Width - filterprojectclear.Width - filterprojectclear.Margin.Right; - filterproject.Width = filterprojectclear.Left - filterprojectclear.Margin.Left - filterproject.Left; - filterbytype.Left = filterproject.Left; - filterbytype.Width = filterprojectclear.Right - filterproject.Left; - projecttree.Width = this.Width - projecttree.Left - projecttree.Margin.Right; - projecttree.Height = this.Height - projecttree.Top - projecttree.Margin.Bottom; - } - - base.OnLoad(e); - } - - #endregion - - #region ================== Events - - private void filterproject_TextChanged(object sender, EventArgs e) - { - UpdateResourcesTree(); - } - - private void filterprojectclear_Click(object sender, EventArgs e) - { - filterproject.Clear(); - } - - private void filterbytype_SelectedIndexChanged(object sender, EventArgs e) - { - UpdateResourcesTree(); - } - - private void projecttree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) - { - // Select node on Right-click - projecttree.SelectedNode = e.Node; - } - - private void projecttree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) - { - //TODO: special handling for SCRIPTS/DIALOGUE - if(!(e.Node.Tag is TextResourceNodeData)) throw new NotSupportedException("Tag must be TextResourceData!"); - TextResourceNodeData data = (TextResourceNodeData)e.Node.Tag; - - // Open file - if(data.Resource != null) scriptpanel.OpenResource(data.Resource); - } - - // Switch to opened resource icon - private void projecttree_BeforeExpand(object sender, TreeViewCancelEventArgs e) - { - if(!(e.Node.Tag is TextResourceNodeData)) throw new NotSupportedException("Tag must be TextResourceData!"); - TextResourceNodeData data = (TextResourceNodeData)e.Node.Tag; - - // Group node? - if(data.NodeType == TextResourceNodeType.DIRECTORY) - { - e.Node.ImageIndex = scriptpanel.Icons.GetScriptFolderIcon(data.ScriptType, true); - e.Node.SelectedImageIndex = e.Node.ImageIndex; - } - } - - // Switch to closed resource icon - private void projecttree_BeforeCollapse(object sender, TreeViewCancelEventArgs e) - { - if(!(e.Node.Tag is TextResourceNodeData)) throw new NotSupportedException("Tag must be TextResourceData!"); - TextResourceNodeData data = (TextResourceNodeData)e.Node.Tag; - - // Group node? - if(data.NodeType == TextResourceNodeType.DIRECTORY) - { - e.Node.ImageIndex = scriptpanel.Icons.GetScriptFolderIcon(data.ScriptType, false); - e.Node.SelectedImageIndex = e.Node.ImageIndex; - } - } - - #endregion - } -} diff --git a/Source/Core/Controls/Scripting/ScriptResourcesControl.designer.cs b/Source/Core/Controls/Scripting/ScriptResourcesControl.designer.cs deleted file mode 100755 index f7763389..00000000 --- a/Source/Core/Controls/Scripting/ScriptResourcesControl.designer.cs +++ /dev/null @@ -1,133 +0,0 @@ -namespace CodeImp.DoomBuilder.Controls -{ - partial class ScriptResourcesControl - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if(disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.filterproject = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.filterprojectclear = new System.Windows.Forms.Button(); - this.filterbytype = new System.Windows.Forms.ComboBox(); - this.label2 = new System.Windows.Forms.Label(); - this.projecttree = new CodeImp.DoomBuilder.Controls.BufferedTreeView(); - this.SuspendLayout(); - // - // filterproject - // - this.filterproject.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.filterproject.Location = new System.Drawing.Point(76, 3); - this.filterproject.Name = "filterproject"; - this.filterproject.Size = new System.Drawing.Size(190, 20); - this.filterproject.TabIndex = 5; - this.filterproject.TextChanged += new System.EventHandler(this.filterproject_TextChanged); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(37, 6); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(32, 13); - this.label1.TabIndex = 4; - this.label1.Text = "Filter:"; - // - // filterprojectclear - // - this.filterprojectclear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.filterprojectclear.Image = global::CodeImp.DoomBuilder.Properties.Resources.SearchClear; - this.filterprojectclear.Location = new System.Drawing.Point(271, 1); - this.filterprojectclear.Name = "filterprojectclear"; - this.filterprojectclear.Size = new System.Drawing.Size(25, 24); - this.filterprojectclear.TabIndex = 6; - this.filterprojectclear.UseVisualStyleBackColor = true; - this.filterprojectclear.Click += new System.EventHandler(this.filterprojectclear_Click); - // - // filterbytype - // - this.filterbytype.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.filterbytype.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.filterbytype.FormattingEnabled = true; - this.filterbytype.Location = new System.Drawing.Point(75, 29); - this.filterbytype.Name = "filterbytype"; - this.filterbytype.Size = new System.Drawing.Size(221, 21); - this.filterbytype.TabIndex = 8; - this.filterbytype.SelectedIndexChanged += new System.EventHandler(this.filterbytype_SelectedIndexChanged); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(9, 33); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(60, 13); - this.label2.TabIndex = 9; - this.label2.Text = "Script type:"; - // - // projecttree - // - this.projecttree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.projecttree.HideSelection = false; - this.projecttree.Location = new System.Drawing.Point(3, 56); - this.projecttree.Name = "projecttree"; - this.projecttree.ShowNodeToolTips = true; - this.projecttree.Size = new System.Drawing.Size(293, 494); - this.projecttree.TabIndex = 7; - this.projecttree.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.projecttree_NodeMouseDoubleClick); - this.projecttree.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.projecttree_BeforeExpand); - this.projecttree.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.projecttree_BeforeCollapse); - this.projecttree.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.projecttree_NodeMouseClick); - // - // ScriptResourcesControl - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.Controls.Add(this.label2); - this.Controls.Add(this.filterbytype); - this.Controls.Add(this.projecttree); - this.Controls.Add(this.filterprojectclear); - this.Controls.Add(this.filterproject); - this.Controls.Add(this.label1); - this.Margin = new System.Windows.Forms.Padding(0); - this.Name = "ScriptResourcesControl"; - this.Size = new System.Drawing.Size(299, 553); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private CodeImp.DoomBuilder.Controls.BufferedTreeView projecttree; - private System.Windows.Forms.Button filterprojectclear; - private System.Windows.Forms.TextBox filterproject; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox filterbytype; - private System.Windows.Forms.Label label2; - } -} diff --git a/Source/Core/Controls/Scripting/ScriptResourcesControl.resx b/Source/Core/Controls/Scripting/ScriptResourcesControl.resx deleted file mode 100755 index ff31a6db..00000000 --- a/Source/Core/Controls/Scripting/ScriptResourcesControl.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Source/Core/Windows/FindReplaceOptions.cs b/Source/Core/Windows/FindReplaceOptions.cs index df42350c..d19f429d 100755 --- a/Source/Core/Windows/FindReplaceOptions.cs +++ b/Source/Core/Windows/FindReplaceOptions.cs @@ -23,10 +23,7 @@ namespace CodeImp.DoomBuilder.Windows internal enum FindReplaceSearchMode //mxd { CURRENT_FILE, - OPENED_TABS_CURRENT_SCRIPT_TYPE, - OPENED_TABS_ALL_SCRIPT_TYPES, - CURRENT_PROJECT_CURRENT_SCRIPT_TYPE, - CURRENT_PROJECT_ALL_SCRIPT_TYPES, + OPENED_TABS_ALL_SCRIPT_TYPES } internal struct FindReplaceOptions diff --git a/Source/Core/Windows/ScriptFindReplaceForm.Designer.cs b/Source/Core/Windows/ScriptFindReplaceForm.Designer.cs index 0ca9a461..370bc6d7 100755 --- a/Source/Core/Windows/ScriptFindReplaceForm.Designer.cs +++ b/Source/Core/Windows/ScriptFindReplaceForm.Designer.cs @@ -184,10 +184,7 @@ namespace CodeImp.DoomBuilder.Windows this.findinbox.FormattingEnabled = true; this.findinbox.Items.AddRange(new object[] { "Current tab", - "All opened tabs (current script type)", - "All opened tabs (any script type)", - "All resources (current script type)", - "All resources (any script type)"}); + "All opened tabs"}); this.findinbox.Location = new System.Drawing.Point(9, 80); this.findinbox.Name = "findinbox"; this.findinbox.Size = new System.Drawing.Size(276, 21); diff --git a/Source/Core/Windows/ScriptFindReplaceForm.cs b/Source/Core/Windows/ScriptFindReplaceForm.cs index 8998af76..fd5e630c 100755 --- a/Source/Core/Windows/ScriptFindReplaceForm.cs +++ b/Source/Core/Windows/ScriptFindReplaceForm.cs @@ -270,8 +270,6 @@ namespace CodeImp.DoomBuilder.Windows switch(options.SearchMode) { case FindReplaceSearchMode.CURRENT_FILE: - case FindReplaceSearchMode.CURRENT_PROJECT_CURRENT_SCRIPT_TYPE: - case FindReplaceSearchMode.OPENED_TABS_CURRENT_SCRIPT_TYPE: ScriptDocumentTab t = General.Map.ScriptEditor.Editor.ActiveTab; if(t != null) scripttype = t.Config.ScriptType; break;