From 1b74760f5f00bfa96504bb38d7f1f2d179f80337 Mon Sep 17 00:00:00 2001
From: AdAstra-LD <76622070+AdAstra-LD@users.noreply.github.com>
Date: Wed, 17 Jul 2024 22:54:41 +0200
Subject: [PATCH] Indent fix
---
DS_Map/Editors/ScriptEditor.cs | 1949 ++++++++++-----------
DS_Map/ROMFiles/ScriptCommandContainer.cs | 36 +-
2 files changed, 988 insertions(+), 997 deletions(-)
diff --git a/DS_Map/Editors/ScriptEditor.cs b/DS_Map/Editors/ScriptEditor.cs
index 4cc75b0..9e1a3d0 100644
--- a/DS_Map/Editors/ScriptEditor.cs
+++ b/DS_Map/Editors/ScriptEditor.cs
@@ -11,1037 +11,1028 @@ using ScintillaNET.Utils;
using System.Globalization;
namespace DSPRE.Editors {
- public partial class ScriptEditor : UserControl {
- public bool scriptEditorIsReady { get; set; } = false;
- private Scintilla ScriptTextArea;
- private Scintilla FunctionTextArea;
- private Scintilla ActionTextArea;
- private SearchManager scriptSearchManager;
- private SearchManager functionSearchManager;
- private SearchManager actionSearchManager;
- private Scintilla currentScintillaEditor;
- private SearchManager currentSearchManager;
- private bool scriptsDirty = false;
- private bool functionsDirty = false;
- private bool actionsDirty = false;
- private string cmdKeyWords = "";
- private string secondaryKeyWords = "";
- private ScriptFile currentScriptFile;
+ public partial class ScriptEditor : UserControl {
+ public bool scriptEditorIsReady { get; set; } = false;
+ private Scintilla ScriptTextArea;
+ private Scintilla FunctionTextArea;
+ private Scintilla ActionTextArea;
+ private SearchManager scriptSearchManager;
+ private SearchManager functionSearchManager;
+ private SearchManager actionSearchManager;
+ private Scintilla currentScintillaEditor;
+ private SearchManager currentSearchManager;
+ private bool scriptsDirty = false;
+ private bool functionsDirty = false;
+ private bool actionsDirty = false;
+ private string cmdKeyWords = "";
+ private string secondaryKeyWords = "";
+ private ScriptFile currentScriptFile;
MainProgram _parent;
- ///
- /// the background color of the text area
- ///
- private readonly Color BACK_COLOR = Color.FromArgb(0x2A211C);
+ ///
+ /// the background color of the text area
+ ///
+ private readonly Color BACK_COLOR = Color.FromArgb(0x2A211C);
- ///
- /// default text color of the text area
- ///
- private readonly Color FORE_COLOR = Color.FromArgb(0xB7B7B7);
+ ///
+ /// default text color of the text area
+ ///
+ private readonly Color FORE_COLOR = Color.FromArgb(0xB7B7B7);
- ///
- /// change this to whatever margin you want the line numbers to show in
- ///
- private const int NUMBER_MARGIN = 1;
+ ///
+ /// change this to whatever margin you want the line numbers to show in
+ ///
+ private const int NUMBER_MARGIN = 1;
- ///
- /// change this to whatever margin you want the bookmarks/breakpoints to show in
- ///
- private const int BOOKMARK_MARGIN = 2;
+ ///
+ /// change this to whatever margin you want the bookmarks/breakpoints to show in
+ ///
+ private const int BOOKMARK_MARGIN = 2;
- private const int BOOKMARK_MARKER = 2;
+ private const int BOOKMARK_MARKER = 2;
- ///
- /// change this to whatever margin you want the code folding tree (+/-) to show in
- ///
- private const int FOLDING_MARGIN = 3;
+ ///
+ /// change this to whatever margin you want the code folding tree (+/-) to show in
+ ///
+ private const int FOLDING_MARGIN = 3;
- ///
- /// set this true to show circular buttons for code folding (the [+] and [-] buttons on the margin)
- ///
- private const bool CODE_FOLDING_CIRCULAR = true;
+ ///
+ /// set this true to show circular buttons for code folding (the [+] and [-] buttons on the margin)
+ ///
+ private const bool CODE_FOLDING_CIRCULAR = true;
- readonly Point initial_importScriptFileButton_location;
- readonly Point initial_exportScriptFileButton_location;
- readonly Point initial_addScriptFileButton_location;
- readonly Point initial_removeScriptFileButton_location;
- readonly Point initial_viewLevelScript_location;
+ readonly Point initial_importScriptFileButton_location;
+ readonly Point initial_exportScriptFileButton_location;
+ readonly Point initial_addScriptFileButton_location;
+ readonly Point initial_removeScriptFileButton_location;
+ readonly Point initial_viewLevelScript_location;
- readonly Point new_importScriptFileButton_location;
- readonly Point new_exportScriptFileButton_location;
- readonly Point new_addScriptFileButton_location;
- readonly Point new_removeScriptFileButton_location;
- readonly Point new_viewLevelScript_location;
+ readonly Point new_importScriptFileButton_location;
+ readonly Point new_exportScriptFileButton_location;
+ readonly Point new_addScriptFileButton_location;
+ readonly Point new_removeScriptFileButton_location;
+ readonly Point new_viewLevelScript_location;
- public ScriptEditor() {
- InitializeComponent();
-
+ public ScriptEditor() {
+ InitializeComponent();
- //initially, these buttons are off the canvas so they can be interacted with in the designer
- //they are then moved as needed
- initial_importScriptFileButton_location = importScriptFileButton.Location;
- initial_exportScriptFileButton_location = exportScriptFileButton.Location;
- initial_addScriptFileButton_location = addScriptFileButton.Location;
- initial_removeScriptFileButton_location = removeScriptFileButton.Location;
- initial_viewLevelScript_location = viewLevelScriptButton.Location;
- new_importScriptFileButton_location = new Point(164, 22);
- new_exportScriptFileButton_location = new Point(239, 22);
- new_addScriptFileButton_location = new Point(314, 22);
- new_removeScriptFileButton_location = new Point(314, 49);
- new_viewLevelScript_location = new Point(326, 37);
+ //initially, these buttons are off the canvas so they can be interacted with in the designer
+ //they are then moved as needed
+ initial_importScriptFileButton_location = importScriptFileButton.Location;
+ initial_exportScriptFileButton_location = exportScriptFileButton.Location;
+ initial_addScriptFileButton_location = addScriptFileButton.Location;
+ initial_removeScriptFileButton_location = removeScriptFileButton.Location;
+ initial_viewLevelScript_location = viewLevelScriptButton.Location;
- importScriptFileButton.Enabled = false;
- exportScriptFileButton.Enabled = false;
- addScriptFileButton.Enabled = false;
- removeScriptFileButton.Enabled = false;
- viewLevelScriptButton.Enabled = false;
- }
+ new_importScriptFileButton_location = new Point(164, 22);
+ new_exportScriptFileButton_location = new Point(239, 22);
+ new_addScriptFileButton_location = new Point(314, 22);
+ new_removeScriptFileButton_location = new Point(314, 49);
+ new_viewLevelScript_location = new Point(326, 37);
- public void SetupScriptEditor(MainProgram parent, bool force = false) {
- if (scriptEditorIsReady && !force){ return; }
- scriptEditorIsReady = true;
+ importScriptFileButton.Enabled = false;
+ exportScriptFileButton.Enabled = false;
+ addScriptFileButton.Enabled = false;
+ removeScriptFileButton.Enabled = false;
+ viewLevelScriptButton.Enabled = false;
+ }
+
+ public void SetupScriptEditor(MainProgram parent, bool force = false) {
+ if (scriptEditorIsReady && !force) { return; }
+ scriptEditorIsReady = true;
this._parent = parent;
SetupScriptEditorTextAreas();
- /* Extract essential NARCs sub-archives*/
- Helpers.statusLabelMessage("Setting up Script Editor...");
- Update();
+ /* Extract essential NARCs sub-archives*/
+ Helpers.statusLabelMessage("Setting up Script Editor...");
+ Update();
- DSUtils.TryUnpackNarcs(new List { RomInfo.DirNames.scripts }); //12 = scripts Narc Dir
+ DSUtils.TryUnpackNarcs(new List { RomInfo.DirNames.scripts }); //12 = scripts Narc Dir
- populate_selectScriptFileComboBox(0);
+ populate_selectScriptFileComboBox(0);
- UpdateScriptNumberCheckBox((NumberStyles)Properties.Settings.Default.scriptEditorFormatPreference);
- Helpers.statusLabelMessage();
- }
-
- public void OpenScriptEditor(MainProgram parent, int scriptFileID) {
- SetupScriptEditor(parent);
-
- scriptEditorTabControl.SelectedIndex = 0;
- selectScriptFileComboBox.SelectedIndex = scriptFileID;
- EditorPanels.mainTabControl.SelectedTab = EditorPanels.scriptEditorTabPage;
- }
-
- private void SetupScriptEditorTextAreas() {
- //PREPARE SCRIPT EDITOR KEYWORDS
- cmdKeyWords = String.Join(" ", RomInfo.ScriptCommandNamesDict.Values) +
- " " + String.Join(" ", ScriptDatabase.movementsDictIDName.Values);
- cmdKeyWords += " " + cmdKeyWords.ToUpper() + " " + cmdKeyWords.ToLower();
-
- secondaryKeyWords = String.Join(" ", RomInfo.ScriptComparisonOperatorsDict.Values) +
- " " + String.Join(" ", ScriptDatabase.specialOverworlds.Values) +
- " " + String.Join(" ", ScriptDatabase.overworldDirections.Values) +
- " " + ScriptFile.ContainerTypes.Script.ToString() +
- " " + ScriptFile.ContainerTypes.Function.ToString() +
- " " + ScriptFile.ContainerTypes.Action.ToString() +
- " " + Event.EventType.Overworld +
- " " + Overworld.MovementCodeKW;
- secondaryKeyWords += " " + secondaryKeyWords.ToUpper() + " " + secondaryKeyWords.ToLower();
-
- // CREATE CONTROLS
- ScriptTextArea = new Scintilla();
- scriptSearchManager = new SearchManager(EditorPanels.MainProgram, ScriptTextArea, panelFindScriptTextBox, PanelSearchScripts);
- scintillaScriptsPanel.Controls.Clear();
- scintillaScriptsPanel.Controls.Add(ScriptTextArea);
-
- FunctionTextArea = new Scintilla();
- functionSearchManager = new SearchManager(EditorPanels.MainProgram, FunctionTextArea, panelFindFunctionTextBox, PanelSearchFunctions);
- scintillaFunctionsPanel.Controls.Clear();
- scintillaFunctionsPanel.Controls.Add(FunctionTextArea);
-
- ActionTextArea = new Scintilla();
- actionSearchManager = new SearchManager(EditorPanels.MainProgram, ActionTextArea, panelFindActionTextBox, PanelSearchActions);
- scintillaActionsPanel.Controls.Clear();
- scintillaActionsPanel.Controls.Add(ActionTextArea);
-
- currentScintillaEditor = ScriptTextArea;
- currentSearchManager = scriptSearchManager;
-
- // BASIC CONFIG
- ScriptTextArea.TextChanged += (OnTextChangedScript);
- FunctionTextArea.TextChanged += (OnTextChangedFunction);
- ActionTextArea.TextChanged += (OnTextChangedAction);
-
- // INITIAL VIEW CONFIG
- InitialViewConfig(ScriptTextArea);
- InitialViewConfig(FunctionTextArea);
- InitialViewConfig(ActionTextArea);
-
- InitSyntaxColoring(ScriptTextArea);
- InitSyntaxColoring(FunctionTextArea);
- InitSyntaxColoring(ActionTextArea);
-
- // NUMBER MARGIN
- InitNumberMargin(ScriptTextArea, ScriptTextArea_MarginClick);
- InitNumberMargin(FunctionTextArea, FunctionTextArea_MarginClick);
- InitNumberMargin(ActionTextArea, ActionTextArea_MarginClick);
-
- // BOOKMARK MARGIN
- InitBookmarkMargin(ScriptTextArea);
- InitBookmarkMargin(FunctionTextArea);
- InitBookmarkMargin(ActionTextArea);
-
- // CODE FOLDING MARGIN
- InitCodeFolding(ScriptTextArea);
- InitCodeFolding(FunctionTextArea);
- InitCodeFolding(ActionTextArea);
-
- // INIT HOTKEYS
- InitHotkeys(ScriptTextArea, scriptSearchManager);
- InitHotkeys(FunctionTextArea, functionSearchManager);
- InitHotkeys(ActionTextArea, actionSearchManager);
-
- // INIT TOOLTIPS DWELLING
- /*
- ScriptTextArea.MouseDwellTime = 300;
- ScriptTextArea.DwellEnd += TextArea_DwellEnd;
- ScriptTextArea.DwellStart += TextArea_DwellStart;
-
- FunctionTextArea.MouseDwellTime = 300;
- FunctionTextArea.DwellEnd += TextArea_DwellEnd;
- FunctionTextArea.DwellStart += TextArea_DwellStart;
- */
- }
-
- private void populate_selectScriptFileComboBox(int selectedIndex = 0) {
- selectScriptFileComboBox.Items.Clear();
- int scriptCount = Filesystem.GetScriptCount();
- for (int i = 0; i < scriptCount; i++) {
- // ScriptFile currentScriptFile = new ScriptFile(i, true, true);
- // selectScriptFileComboBox.Items.Add(currentScriptFile);
- selectScriptFileComboBox.Items.Add($"Script File {i}");
- }
-
- selectScriptFileComboBox.SelectedIndex = selectedIndex;
- }
-
- private void InitialViewConfig(Scintilla textArea) {
- textArea.Dock = DockStyle.Fill;
- textArea.WrapMode = WrapMode.Word;
- textArea.IndentationGuides = IndentView.LookBoth;
- textArea.CaretPeriod = 500;
- textArea.CaretForeColor = Color.White;
- textArea.SetSelectionBackColor(true, Color.FromArgb(0x114D9C));
- textArea.WrapIndentMode = WrapIndentMode.Same;
- }
-
- private void InitSyntaxColoring(Scintilla textArea) {
- // Configure the default style
- textArea.StyleResetDefault();
- textArea.Styles[Style.Default].Font = "Consolas";
- textArea.Styles[Style.Default].Size = 12;
- textArea.Styles[Style.Default].BackColor = Color.FromArgb(0x212121);
- textArea.Styles[Style.Default].ForeColor = Color.FromArgb(0xFFFFFF);
- textArea.StyleClearAll();
-
- // Configure the lexer styles
- textArea.Styles[Style.Python.Identifier].ForeColor = Color.FromArgb(0xD0DAE2);
- textArea.Styles[Style.Python.CommentLine].ForeColor = Color.FromArgb(0x40BF57);
- textArea.Styles[Style.Python.Number].ForeColor = Color.FromArgb(0xFFFF00);
- textArea.Styles[Style.Python.String].ForeColor = Color.FromArgb(0xFF00FF);
- textArea.Styles[Style.Python.Character].ForeColor = Color.FromArgb(0xE95454);
- textArea.Styles[Style.Python.Operator].ForeColor = Color.FromArgb(0xFFFF00);
- textArea.Styles[Style.Python.Word].ForeColor = Color.FromArgb(0x48A8EE);
- textArea.Styles[Style.Python.Word2].ForeColor = Color.FromArgb(0xF98906);
-
- textArea.Lexer = Lexer.Python;
-
- textArea.SetKeywords(0, cmdKeyWords);
- textArea.SetKeywords(1, secondaryKeyWords);
- }
-
- private void InitNumberMargin(Scintilla textArea, EventHandler textArea_MarginClick) {
- textArea.Styles[Style.LineNumber].BackColor = BACK_COLOR;
- textArea.Styles[Style.LineNumber].ForeColor = FORE_COLOR;
- textArea.Styles[Style.IndentGuide].ForeColor = FORE_COLOR;
- textArea.Styles[Style.IndentGuide].BackColor = BACK_COLOR;
-
- Margin nums = textArea.Margins[NUMBER_MARGIN];
- nums.Type = MarginType.Number;
- nums.Sensitive = true;
- nums.Mask = 0;
-
- textArea.MarginClick += textArea_MarginClick;
- }
-
- private void InitBookmarkMargin(Scintilla textArea) {
- //TextArea.SetFoldMarginColor(true, IntToColor(BACK_COLOR));
-
- Margin margin = textArea.Margins[BOOKMARK_MARGIN];
- margin.Width = 20;
- margin.Sensitive = true;
- margin.Type = MarginType.Symbol;
- margin.Mask = (1 << BOOKMARK_MARKER);
- //margin.Cursor = MarginCursor.Arrow;
-
- Marker marker = textArea.Markers[BOOKMARK_MARKER];
- marker.Symbol = MarkerSymbol.Circle;
- marker.SetBackColor(Color.FromArgb(0xFF003B));
- marker.SetForeColor(Color.FromArgb(0x000000));
- marker.SetAlpha(100);
- }
-
- private void InitCodeFolding(Scintilla textArea) {
- textArea.SetFoldMarginColor(true, BACK_COLOR);
- textArea.SetFoldMarginHighlightColor(true, BACK_COLOR);
-
- // Enable code folding
- textArea.SetProperty("fold", "1");
- textArea.SetProperty("fold.compact", "1");
-
- // Configure a margin to display folding symbols
- textArea.Margins[FOLDING_MARGIN].Type = MarginType.Symbol;
- textArea.Margins[FOLDING_MARGIN].Mask = Marker.MaskFolders;
- textArea.Margins[FOLDING_MARGIN].Sensitive = true;
- textArea.Margins[FOLDING_MARGIN].Width = 20;
-
- // Set colors for all folding markers
- for (int i = 25; i <= 31; i++) {
- textArea.Markers[i].SetForeColor(BACK_COLOR); // styles for [+] and [-]
- textArea.Markers[i].SetBackColor(FORE_COLOR); // styles for [+] and [-]
- }
-
- // Configure folding markers with respective symbols
- textArea.Markers[Marker.Folder].Symbol = CODE_FOLDING_CIRCULAR ? MarkerSymbol.CirclePlus : MarkerSymbol.BoxPlus;
- textArea.Markers[Marker.FolderOpen].Symbol = CODE_FOLDING_CIRCULAR ? MarkerSymbol.CircleMinus : MarkerSymbol.BoxMinus;
- textArea.Markers[Marker.FolderEnd].Symbol = CODE_FOLDING_CIRCULAR ? MarkerSymbol.CirclePlusConnected : MarkerSymbol.BoxPlusConnected;
- textArea.Markers[Marker.FolderMidTail].Symbol = MarkerSymbol.TCorner;
- textArea.Markers[Marker.FolderOpenMid].Symbol = CODE_FOLDING_CIRCULAR ? MarkerSymbol.CircleMinusConnected : MarkerSymbol.BoxMinusConnected;
- textArea.Markers[Marker.FolderSub].Symbol = MarkerSymbol.VLine;
- textArea.Markers[Marker.FolderTail].Symbol = MarkerSymbol.LCorner;
-
- // Enable automatic folding
- textArea.AutomaticFold = (AutomaticFold.Show|AutomaticFold.Click|AutomaticFold.Change);
- }
-
- private void InitHotkeys(Scintilla scintillaTb, SearchManager sm) {
- // register the hotkeys with the form
- HotKeyManager.AddHotKey(scintillaTb, sm.OpenSearch, Keys.F, true);
- HotKeyManager.AddHotKey(scintillaTb, () => Uppercase(scintillaTb), Keys.U, true);
- HotKeyManager.AddHotKey(scintillaTb, () => Lowercase(scintillaTb), Keys.L, true);
- HotKeyManager.AddHotKey(scintillaTb, () => ZoomIn(scintillaTb), Keys.Oemplus, true);
- HotKeyManager.AddHotKey(scintillaTb, () => ZoomOut(scintillaTb), Keys.OemMinus, true);
- HotKeyManager.AddHotKey(scintillaTb, () => ZoomDefault(scintillaTb), Keys.D0, true);
- HotKeyManager.AddHotKey(scintillaTb, sm.CloseSearch, Keys.Escape);
-
- // remove conflicting hotkeys from scintilla
- scintillaTb.ClearCmdKey(Keys.Control|Keys.F);
- scintillaTb.ClearCmdKey(Keys.Control|Keys.R);
- scintillaTb.ClearCmdKey(Keys.Control|Keys.H);
- scintillaTb.ClearCmdKey(Keys.Control|Keys.L);
- scintillaTb.ClearCmdKey(Keys.Control|Keys.U);
- }
-
- private void Uppercase(Scintilla textArea) {
- // save the selection
- int start = textArea.SelectionStart;
- int end = textArea.SelectionEnd;
-
- // modify the selected text
- textArea.ReplaceSelection(textArea.GetTextRange(start, end - start).ToUpper());
-
- // preserve the original selection
- textArea.SetSelection(start, end);
- }
-
- private void Lowercase(Scintilla textArea) {
- // save the selection
- int start = textArea.SelectionStart;
- int end = textArea.SelectionEnd;
-
- // modify the selected text
- textArea.ReplaceSelection(textArea.GetTextRange(start, end - start).ToLower());
-
- // preserve the original selection
- textArea.SetSelection(start, end);
- }
-
- private void ZoomIn(Scintilla textArea) {
- textArea.ZoomIn();
- }
-
- private void ZoomOut(Scintilla textArea) {
- textArea.ZoomOut();
- }
-
- private void ZoomDefault(Scintilla textArea) {
- textArea.Zoom = 0;
- }
-
- private void ScriptEditorSetClean() {
- Helpers.DisableHandlers();
-
- scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s";
- functionsTabPage.Text = ScriptFile.ContainerTypes.Function.ToString() + "s";
- actionsTabPage.Text = ScriptFile.ContainerTypes.Action.ToString() + "s";
- scriptsDirty = functionsDirty = actionsDirty = false;
-
- Helpers.EnableHandlers();
- }
-
- private void OnTextChangedScript(object sender, EventArgs e) {
- ScriptTextArea.Margins[NUMBER_MARGIN].Width = ScriptTextArea.Lines.Count.ToString().Length * 13;
- scriptsDirty = true;
- scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s" + "*";
- }
-
- private void OnTextChangedFunction(object sender, EventArgs e) {
- FunctionTextArea.Margins[NUMBER_MARGIN].Width = FunctionTextArea.Lines.Count.ToString().Length * 13;
- functionsDirty = true;
- functionsTabPage.Text = ScriptFile.ContainerTypes.Function.ToString() + "s" + "*";
- }
-
- private void OnTextChangedAction(object sender, EventArgs e) {
- ActionTextArea.Margins[NUMBER_MARGIN].Width = ActionTextArea.Lines.Count.ToString().Length * 13;
- actionsDirty = true;
- actionsTabPage.Text = ScriptFile.ContainerTypes.Action.ToString() + "s" + "*";
- }
-
- private void ScriptTextArea_MarginClick(object sender, MarginClickEventArgs e) {
- MarginClick(ScriptTextArea, e);
- }
-
- private void FunctionTextArea_MarginClick(object sender, MarginClickEventArgs e) {
- MarginClick(FunctionTextArea, e);
- }
-
- private void ActionTextArea_MarginClick(object sender, MarginClickEventArgs e) {
- MarginClick(ActionTextArea, e);
- }
-
- private void MarginClick(Scintilla textArea, MarginClickEventArgs e) {
- if (e.Margin == BOOKMARK_MARGIN) {
- // Do we have a marker for this line?
- const uint mask = (1 << BOOKMARK_MARKER);
- Line line = textArea.Lines[textArea.LineFromPosition(e.Position)];
- if ((line.MarkerGet()&mask) > 0) {
- // Remove existing bookmark
- line.MarkerDelete(BOOKMARK_MARKER);
+ UpdateScriptNumberCheckBox((NumberStyles)Properties.Settings.Default.scriptEditorFormatPreference);
+ Helpers.statusLabelMessage();
}
- else {
- // Add bookmark
- line.MarkerAdd(BOOKMARK_MARKER);
+
+ public void OpenScriptEditor(MainProgram parent, int scriptFileID) {
+ SetupScriptEditor(parent);
+
+ scriptEditorTabControl.SelectedIndex = 0;
+ selectScriptFileComboBox.SelectedIndex = scriptFileID;
+ EditorPanels.mainTabControl.SelectedTab = EditorPanels.scriptEditorTabPage;
}
- }
- }
- private void selectScriptFileComboBox_SelectedIndexChanged(object sender, EventArgs e) {
- DisplayScript();
- }
+ private void SetupScriptEditorTextAreas() {
+ //PREPARE SCRIPT EDITOR KEYWORDS
+ cmdKeyWords = String.Join(" ", RomInfo.ScriptCommandNamesDict.Values) +
+ " " + String.Join(" ", ScriptDatabase.movementsDictIDName.Values);
+ cmdKeyWords += " " + cmdKeyWords.ToUpper() + " " + cmdKeyWords.ToLower();
- public void UpdateScriptNumberCheckBox(NumberStyles toSet) {
- Helpers.DisableHandlers();
- Properties.Settings.Default.scriptEditorFormatPreference = (int)toSet;
+ secondaryKeyWords = String.Join(" ", RomInfo.ScriptComparisonOperatorsDict.Values) +
+ " " + String.Join(" ", ScriptDatabase.specialOverworlds.Values) +
+ " " + String.Join(" ", ScriptDatabase.overworldDirections.Values) +
+ " " + ScriptFile.ContainerTypes.Script.ToString() +
+ " " + ScriptFile.ContainerTypes.Function.ToString() +
+ " " + ScriptFile.ContainerTypes.Action.ToString() +
+ " " + Event.EventType.Overworld +
+ " " + Overworld.MovementCodeKW;
+ secondaryKeyWords += " " + secondaryKeyWords.ToUpper() + " " + secondaryKeyWords.ToLower();
- switch ((NumberStyles)Properties.Settings.Default.scriptEditorFormatPreference) {
- case NumberStyles.None:
- scriptEditorNumberFormatNoPreference.Checked = true;
- break;
- case NumberStyles.HexNumber:
- scriptEditorNumberFormatHex.Checked = true;
- break;
- case NumberStyles.Integer:
- scriptEditorNumberFormatDecimal.Checked = true;
- break;
- }
+ // CREATE CONTROLS
+ ScriptTextArea = new Scintilla();
+ scriptSearchManager = new SearchManager(EditorPanels.MainProgram, ScriptTextArea, panelFindScriptTextBox, PanelSearchScripts);
+ scintillaScriptsPanel.Controls.Clear();
+ scintillaScriptsPanel.Controls.Add(ScriptTextArea);
- Console.WriteLine("changed style to " + Properties.Settings.Default.scriptEditorFormatPreference);
- Helpers.EnableHandlers();
- }
+ FunctionTextArea = new Scintilla();
+ functionSearchManager = new SearchManager(EditorPanels.MainProgram, FunctionTextArea, panelFindFunctionTextBox, PanelSearchFunctions);
+ scintillaFunctionsPanel.Controls.Clear();
+ scintillaFunctionsPanel.Controls.Add(FunctionTextArea);
- private void UpdateScriptNumberFormat(NumberStyles numberStyle) {
- if (Helpers.HandlersEnabled) {
- NumberStyles old = (NumberStyles)Properties.Settings.Default.scriptEditorFormatPreference; //Local Backup
- Properties.Settings.Default.scriptEditorFormatPreference = (int)numberStyle;
+ ActionTextArea = new Scintilla();
+ actionSearchManager = new SearchManager(EditorPanels.MainProgram, ActionTextArea, panelFindActionTextBox, PanelSearchActions);
+ scintillaActionsPanel.Controls.Clear();
+ scintillaActionsPanel.Controls.Add(ActionTextArea);
- if (!DisplayScript()) {
- UpdateScriptNumberCheckBox(old); //Restore old checkbox status! Script couldn't be redrawn
+ currentScintillaEditor = ScriptTextArea;
+ currentSearchManager = scriptSearchManager;
+
+ // BASIC CONFIG
+ ScriptTextArea.TextChanged += (OnTextChangedScript);
+ FunctionTextArea.TextChanged += (OnTextChangedFunction);
+ ActionTextArea.TextChanged += (OnTextChangedAction);
+
+ // INITIAL VIEW CONFIG
+ InitialViewConfig(ScriptTextArea);
+ InitialViewConfig(FunctionTextArea);
+ InitialViewConfig(ActionTextArea);
+
+ InitSyntaxColoring(ScriptTextArea);
+ InitSyntaxColoring(FunctionTextArea);
+ InitSyntaxColoring(ActionTextArea);
+
+ // NUMBER MARGIN
+ InitNumberMargin(ScriptTextArea, ScriptTextArea_MarginClick);
+ InitNumberMargin(FunctionTextArea, FunctionTextArea_MarginClick);
+ InitNumberMargin(ActionTextArea, ActionTextArea_MarginClick);
+
+ // BOOKMARK MARGIN
+ InitBookmarkMargin(ScriptTextArea);
+ InitBookmarkMargin(FunctionTextArea);
+ InitBookmarkMargin(ActionTextArea);
+
+ // CODE FOLDING MARGIN
+ InitCodeFolding(ScriptTextArea);
+ InitCodeFolding(FunctionTextArea);
+ InitCodeFolding(ActionTextArea);
+
+ // INIT HOTKEYS
+ InitHotkeys(ScriptTextArea, scriptSearchManager);
+ InitHotkeys(FunctionTextArea, functionSearchManager);
+ InitHotkeys(ActionTextArea, actionSearchManager);
+
+ // INIT TOOLTIPS DWELLING
+ /*
+ ScriptTextArea.MouseDwellTime = 300;
+ ScriptTextArea.DwellEnd += TextArea_DwellEnd;
+ ScriptTextArea.DwellStart += TextArea_DwellStart;
+
+ FunctionTextArea.MouseDwellTime = 300;
+ FunctionTextArea.DwellEnd += TextArea_DwellEnd;
+ FunctionTextArea.DwellStart += TextArea_DwellStart;
+ */
}
- }
- }
- private void UpdateScriptNumberFormatNoPref(object sender, EventArgs e) {
- UpdateScriptNumberFormat(NumberStyles.None);
- }
-
- private void UpdateScriptNumberFormatDec(object sender, EventArgs e) {
- UpdateScriptNumberFormat(NumberStyles.Integer);
- }
-
- private void UpdateScriptNumberFormatHex(object sender, EventArgs e) {
- UpdateScriptNumberFormat(NumberStyles.HexNumber);
- }
-
- private bool DisplayScript() {
- Console.WriteLine("Script Reload has been requested");
-
- /* clear controls */
- if (Helpers.HandlersDisabled || selectScriptFileComboBox.SelectedItem == null) {
- return false;
- }
-
- if (scriptsDirty || functionsDirty || actionsDirty) {
- DialogResult d = MessageBox.Show("There are unsaved changes in this Script File.\nDo you wish to discard them?", "Unsaved work", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
-
- if (!d.Equals(DialogResult.Yes)) {
- Helpers.DisableHandlers();
- // selectScriptFileComboBox.SelectedItem = currentScriptFile;
- selectScriptFileComboBox.SelectedIndex = (int)currentScriptFile.fileID;
- Helpers.EnableHandlers();
- return false;
- }
- }
-
- Helpers.DisableHandlers();
-
- ScriptFile lastScriptFile = currentScriptFile;
- // currentScriptFile = (ScriptFile)selectScriptFileComboBox.SelectedItem;
- currentScriptFile = new ScriptFile(selectScriptFileComboBox.SelectedIndex); // Load script file
-
- ScriptTextArea.ClearAll();
- FunctionTextArea.ClearAll();
- ActionTextArea.ClearAll();
-
- scriptsNavListbox.Items.Clear();
- functionsNavListbox.Items.Clear();
- actionsNavListbox.Items.Clear();
-
- //prevent buttons from flickering when the combobox selection changes
- bool typeChanged = true;
- if (lastScriptFile != null) {
- typeChanged = lastScriptFile.isLevelScript != currentScriptFile.isLevelScript;
- }
-
- if (typeChanged) {
- if (currentScriptFile.isLevelScript) {
- importScriptFileButton.Location = initial_importScriptFileButton_location;
- exportScriptFileButton.Location = initial_exportScriptFileButton_location;
- addScriptFileButton.Location = initial_addScriptFileButton_location;
- removeScriptFileButton.Location = initial_removeScriptFileButton_location;
-
- viewLevelScriptButton.Location = new_viewLevelScript_location;
-
- importScriptFileButton.Enabled = false;
- exportScriptFileButton.Enabled = false;
- addScriptFileButton.Enabled = false;
- removeScriptFileButton.Enabled = false;
-
- viewLevelScriptButton.Enabled = true;
- }
- else {
- importScriptFileButton.Location = new_importScriptFileButton_location;
- exportScriptFileButton.Location = new_exportScriptFileButton_location;
- addScriptFileButton.Location = new_addScriptFileButton_location;
- removeScriptFileButton.Location = new_removeScriptFileButton_location;
-
- viewLevelScriptButton.Location = initial_viewLevelScript_location;
-
- importScriptFileButton.Enabled = true;
- exportScriptFileButton.Enabled = true;
- addScriptFileButton.Enabled = true;
- removeScriptFileButton.Enabled = true;
-
- viewLevelScriptButton.Enabled = false;
- }
- }
-
- if (!currentScriptFile.isLevelScript) {
- displayScriptFile(ScriptFile.ContainerTypes.Script, currentScriptFile.allScripts, scriptsNavListbox, ScriptTextArea);
- displayScriptFile(ScriptFile.ContainerTypes.Function, currentScriptFile.allFunctions, functionsNavListbox, FunctionTextArea);
- displayScriptFileActions(ScriptFile.ContainerTypes.Action, currentScriptFile.allActions, actionsNavListbox, ActionTextArea);
- }
-
- ScriptEditorSetClean();
-
- Helpers.statusLabelMessage();
- Helpers.EnableHandlers();
-
- return true;
- }
-
- static void displayScriptFile(ScriptFile.ContainerTypes containerType, List commandList, ListBox navListBox, Scintilla textArea) {
- string buffer = "";
- /* Add commands */
- for (int i = 0; i < commandList.Count; i++) {
- ScriptCommandContainer scriptCommandContainer = commandList[i];
-
- /* Write header */
- string header = containerType + " " + (i + 1);
- buffer += header + ':' + Environment.NewLine;
- navListBox.Items.Add(header);
-
- /* If current command is identical to another, print UseScript instead of commands */
- if (scriptCommandContainer.usedScriptID < 0) {
- for (int j = 0; j < scriptCommandContainer.commands.Count; j++) {
- ScriptCommand command = scriptCommandContainer.commands[j];
- if (!ScriptDatabase.endCodes.Contains(command.id)) {
- buffer += '\t';
+ private void populate_selectScriptFileComboBox(int selectedIndex = 0) {
+ selectScriptFileComboBox.Items.Clear();
+ int scriptCount = Filesystem.GetScriptCount();
+ for (int i = 0; i < scriptCount; i++) {
+ // ScriptFile currentScriptFile = new ScriptFile(i, true, true);
+ // selectScriptFileComboBox.Items.Add(currentScriptFile);
+ selectScriptFileComboBox.Items.Add($"Script File {i}");
}
- buffer += command.name + Environment.NewLine;
- }
- }
- else {
- buffer += '\t' + "UseScript_#" + scriptCommandContainer.usedScriptID + Environment.NewLine;
+ selectScriptFileComboBox.SelectedIndex = selectedIndex;
}
- textArea.AppendText(buffer + Environment.NewLine);
- buffer = "";
- }
- }
-
- static void displayScriptFileActions(ScriptFile.ContainerTypes containerType, List commandList, ListBox navListBox, Scintilla textArea) {
- /* Add movements */
- string buffer = "";
- for (int i = 0; i < commandList.Count; i++) {
- ScriptActionContainer currentCommand = commandList[i];
-
- string header = containerType + " " + (i + 1);
- buffer += header + ':' + Environment.NewLine;
- navListBox.Items.Add(header);
-
- for (int j = 0; j < currentCommand.commands.Count; j++) {
- ScriptAction command = currentCommand.commands[j];
- if (!ScriptDatabase.movementEndCodes.Contains(command.id)) {
- buffer += '\t';
- }
-
- buffer += command.name + Environment.NewLine;
+ private void InitialViewConfig(Scintilla textArea) {
+ textArea.Dock = DockStyle.Fill;
+ textArea.WrapMode = WrapMode.Word;
+ textArea.IndentationGuides = IndentView.LookBoth;
+ textArea.CaretPeriod = 500;
+ textArea.CaretForeColor = Color.White;
+ textArea.SetSelectionBackColor(true, Color.FromArgb(0x114D9C));
+ textArea.WrapIndentMode = WrapIndentMode.Same;
}
- textArea.AppendText(buffer + Environment.NewLine);
- buffer = "";
- }
- }
+ private void InitSyntaxColoring(Scintilla textArea) {
+ // Configure the default style
+ textArea.StyleResetDefault();
+ textArea.Styles[Style.Default].Font = "Consolas";
+ textArea.Styles[Style.Default].Size = 12;
+ textArea.Styles[Style.Default].BackColor = Color.FromArgb(0x212121);
+ textArea.Styles[Style.Default].ForeColor = Color.FromArgb(0xFFFFFF);
+ textArea.StyleClearAll();
- private void scriptEditorZoomInButton_Click(object sender, EventArgs e) {
- ZoomIn(currentScintillaEditor);
- }
+ // Configure the lexer styles
+ textArea.Styles[Style.Python.Identifier].ForeColor = Color.FromArgb(0xD0DAE2);
+ textArea.Styles[Style.Python.CommentLine].ForeColor = Color.FromArgb(0x40BF57);
+ textArea.Styles[Style.Python.Number].ForeColor = Color.FromArgb(0xFFFF00);
+ textArea.Styles[Style.Python.String].ForeColor = Color.FromArgb(0xFF00FF);
+ textArea.Styles[Style.Python.Character].ForeColor = Color.FromArgb(0xE95454);
+ textArea.Styles[Style.Python.Operator].ForeColor = Color.FromArgb(0xFFFF00);
+ textArea.Styles[Style.Python.Word].ForeColor = Color.FromArgb(0x48A8EE);
+ textArea.Styles[Style.Python.Word2].ForeColor = Color.FromArgb(0xF98906);
- private void scriptEditorZoomOutButton_Click(object sender, EventArgs e) {
- ZoomOut(currentScintillaEditor);
- }
+ textArea.Lexer = Lexer.Python;
- private void scriptEditorZoomResetButton_Click(object sender, EventArgs e) {
- ZoomDefault(currentScintillaEditor);
- }
-
- private void scriptEditorTabControl_TabIndexChanged(object sender, EventArgs e) {
- if (scriptEditorTabControl.SelectedTab == scriptsTabPage) {
- currentSearchManager = scriptSearchManager;
- currentScintillaEditor = ScriptTextArea;
- }
- else if (scriptEditorTabControl.SelectedTab == functionsTabPage) {
- currentSearchManager = functionSearchManager;
- currentScintillaEditor = FunctionTextArea;
- }
- else {
- //Actions
- currentSearchManager = actionSearchManager;
- currentScintillaEditor = ActionTextArea;
- }
- }
-
- private void removeScriptFileButton_Click(object sender, EventArgs e) {
- DialogResult d = MessageBox.Show("Are you sure you want to delete the last Script File?", "Confirm deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
- if (d.Equals(DialogResult.Yes)) {
- /* Delete script file */
- string path = Filesystem.GetScriptPath(selectScriptFileComboBox.Items.Count - 1);
- File.Delete(path);
-
- /* Check if currently selected file is the last one, and in that case select the one before it */
- int lastIndex = selectScriptFileComboBox.Items.Count - 1;
- if (selectScriptFileComboBox.SelectedIndex == lastIndex) {
- selectScriptFileComboBox.SelectedIndex--;
+ textArea.SetKeywords(0, cmdKeyWords);
+ textArea.SetKeywords(1, secondaryKeyWords);
}
- /* Remove item from ComboBox */
- selectScriptFileComboBox.Items.RemoveAt(lastIndex);
- }
- }
+ private void InitNumberMargin(Scintilla textArea, EventHandler textArea_MarginClick) {
+ textArea.Styles[Style.LineNumber].BackColor = BACK_COLOR;
+ textArea.Styles[Style.LineNumber].ForeColor = FORE_COLOR;
+ textArea.Styles[Style.IndentGuide].ForeColor = FORE_COLOR;
+ textArea.Styles[Style.IndentGuide].BackColor = BACK_COLOR;
- private void addScriptFileButton_Click(object sender, EventArgs e) {
- /* Add new event file to event folder */
- int fileID = selectScriptFileComboBox.Items.Count;
+ Margin nums = textArea.Margins[NUMBER_MARGIN];
+ nums.Type = MarginType.Number;
+ nums.Sensitive = true;
+ nums.Mask = 0;
- ScriptFile scriptFile = new ScriptFile(
- scriptLines: new Scintilla { Text = "Script 1:\nEnd" }.Lines.ToStringsList(trim: true),
- functionLines: null,
- actionLines: null,
- fileID
- );
-
- //check if ScriptFile instance was created successfully
- if (scriptFile.SaveToFileDefaultDir(fileID, showSuccessMessage: false)) {
- /* Update ComboBox and select new file */
- selectScriptFileComboBox.Items.Add(scriptFile);
- selectScriptFileComboBox.SelectedItem = scriptFile;
- }
- }
-
- private void saveScriptFileButton_Click(object sender, EventArgs e) {
- /* Create new ScriptFile object using the values in the script editor */
- int fileID = currentScriptFile.fileID;
-
- ScriptFile userEdited = new ScriptFile(
- scriptLines: ScriptTextArea.Lines.ToStringsList(trim: true),
- functionLines: FunctionTextArea.Lines.ToStringsList(trim: true),
- actionLines: ActionTextArea.Lines.ToStringsList(trim: true),
- fileID
- );
-
- if (userEdited.hasNoScripts) {
- MessageBox.Show("This " + nameof(ScriptFile) + " couldn't be saved. A minimum of one script is required.", "Can't save", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
-
- //check if ScriptFile instance was created successfully
- if (userEdited.SaveToFileDefaultDir(fileID)) {
- currentScriptFile = userEdited;
- ScriptEditorSetClean();
- }
- }
-
- private void exportScriptFileButton_Click(object sender, EventArgs e) {
- currentScriptFile.SaveToFileExplorePath(currentScriptFile.ToString(), blindmode: true);
- }
-
- private void importScriptFileButton_Click(object sender, EventArgs e) {
- /* Prompt user to select .scr or .bin file */
- OpenFileDialog of = new OpenFileDialog {
- Filter = "Script File (*.scr, *.bin)|*.scr;*.bin"
- };
- if (of.ShowDialog(this) != DialogResult.OK) {
- return;
- }
-
- /* Update scriptFile object in memory */
- int i = selectScriptFileComboBox.SelectedIndex;
- string path = Filesystem.GetScriptPath(i);
- File.Copy(of.FileName, path, true);
-
- populate_selectScriptFileComboBox(i);
-
- /* Refresh controls */
- selectScriptFileComboBox_SelectedIndexChanged(null, null);
-
- /* Display success message */
- MessageBox.Show("Scripts imported successfully!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
-
- private void viewLevelScriptButton_Click(object sender, EventArgs e) {
- EditorPanels.levelScriptEditor.OpenLevelScriptEditor(this._parent, selectScriptFileComboBox.SelectedIndex);
- }
-
- private void locateCurrentScriptFile_Click(object sender, EventArgs e) {
- string path = Filesystem.GetScriptPath(selectScriptFileComboBox.SelectedIndex);
- Helpers.ExplorerSelect(path);
- }
-
- private void findNext(SearchManager searchManager) {
- searchManager.Find(true, false);
- scrollResultToTop(searchManager);
- }
-
- private void findPrev(SearchManager searchManager) {
- searchManager.Find(false, false);
- scrollResultToTop(searchManager);
- }
-
- private void findCurrent(SearchManager searchManager) {
- searchManager.Find(true, true);
- scrollResultToTop(searchManager);
- }
-
- private void TxtFindKeyDown(SearchManager searchManager, KeyEventArgs e) {
- if (HotKeyManager.IsHotkey(e, Keys.Enter)) {
- findNext(searchManager);
- }
-
- if (HotKeyManager.IsHotkey(e, Keys.Enter, true) || HotKeyManager.IsHotkey(e, Keys.Enter, false, true)) {
- findPrev(searchManager);
- }
- }
-
- private void BtnNextFindScript_Click(object sender, EventArgs e) {
- findNext(scriptSearchManager);
- }
-
- private void BtnPrevFindScript_Click(object sender, EventArgs e) {
- findPrev(scriptSearchManager);
- }
-
- private void panelFindScriptTextBox_TextChanged(object sender, EventArgs e) {
- findCurrent(scriptSearchManager);
- }
-
- private void scriptTxtFind_KeyDown(object sender, KeyEventArgs e) {
- TxtFindKeyDown(scriptSearchManager, e);
- }
-
- private void BtnCloseFindScript_Click(object sender, EventArgs e) {
- scriptSearchManager.CloseSearch();
- }
-
- private void BtnNextFindFunc_Click(object sender, EventArgs e) {
- findNext(functionSearchManager);
- }
-
- private void BtnPrevFindFunc_Click(object sender, EventArgs e) {
- findNext(functionSearchManager);
- }
-
- private void panelFindFunctionTextBox_TextChanged(object sender, EventArgs e) {
- findNext(functionSearchManager);
- }
-
- private void functionTxtFind_KeyDown(object sender, KeyEventArgs e) {
- TxtFindKeyDown(functionSearchManager, e);
- }
-
- private void BtnCloseFindFunc_Click(object sender, EventArgs e) {
- functionSearchManager.CloseSearch();
- }
-
- private void BtnNextFindActions_Click(object sender, EventArgs e) {
- findNext(actionSearchManager);
- }
-
- private void BtnPrevFindActions_Click(object sender, EventArgs e) {
- findNext(actionSearchManager);
- }
-
- private void panelFindActionTextBox_TextChanged(object sender, EventArgs e) {
- findNext(actionSearchManager);
- }
-
- private void actionTxtFind_KeyDown(object sender, KeyEventArgs e) {
- TxtFindKeyDown(actionSearchManager, e);
- }
-
- private void BtnCloseFindActions_Click(object sender, EventArgs e) {
- actionSearchManager.CloseSearch();
- }
-
- void scrollResultToTop(SearchManager searchManager) {
- int resultStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding;
- searchManager.textAreaScintilla.FirstVisibleLine = resultStart;
- }
-
- private void NavigatorGoTo(ListBox listBox, TabPage tabPage, SearchManager searchManager, ScriptFile.ContainerTypes containerType) {
- if (listBox.SelectedIndex < 0) {
- return;
- }
-
- scriptEditorTabControl.SelectedTab = tabPage;
- int commandNumber = listBox.SelectedIndex + 1;
- string CommandBlockOpen = $"{containerType} {commandNumber}:";
- searchManager.Find(true, false, CommandBlockOpen);
-
- scrollResultToTop(searchManager);
- }
-
- private void scriptsNavListbox_SelectedIndexChanged(object sender, EventArgs e) {
- NavigatorGoTo((ListBox)sender, scriptsTabPage, scriptSearchManager, ScriptFile.ContainerTypes.Script);
- }
-
- private void functionsNavListbox_SelectedIndexChanged(object sender, EventArgs e) {
- NavigatorGoTo((ListBox)sender, functionsTabPage, functionSearchManager, ScriptFile.ContainerTypes.Function);
- }
-
- private void actionsNavListbox_SelectedIndexChanged(object sender, EventArgs e) {
- NavigatorGoTo((ListBox)sender, actionsTabPage, actionSearchManager, ScriptFile.ContainerTypes.Action);
- }
-
- private void openFindScriptEditorButton_Click(object sender, EventArgs e) {
- currentSearchManager.OpenSearch();
- }
-
- private void ScriptEditorExpandButton_Click(object sender, EventArgs e) {
- currentScintillaEditor.FoldAll(FoldAction.Expand);
- }
-
- private void ScriptEditorCollapseButton_Click(object sender, EventArgs e) {
- currentScintillaEditor.FoldAll(FoldAction.Contract);
- }
-
- private void scriptEditorWordWrapCheckbox_CheckedChanged(object sender, EventArgs e) {
- ScriptTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None;
- FunctionTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None;
- ActionTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None;
- }
-
- private void viewWhiteSpacesButton_Click(object sender, EventArgs e) {
- ScriptTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible;
- FunctionTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible;
- ActionTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible;
- }
-
- private void searchInScriptsTextBox_KeyDown(object sender, KeyEventArgs e) {
- if (e.KeyCode == Keys.Enter) {
- searchInScriptsButton_Click(null, null);
- }
- }
-
- public List getScriptsToSearch() {
- List scriptsToSearch = new List();
-
- if (searchOnlyCurrentScriptCheckBox.Checked) {
- this.UIThread(() => {
- searchProgressBar.Maximum = 1;
- });
- int i = selectScriptFileComboBox.SelectedIndex;
- ScriptFile scriptFile = new ScriptFile(i);
- Console.WriteLine("Attempting to load script " + scriptFile.fileID);
- scriptsToSearch.Add(scriptFile);
- this.UIThread(() => {
- searchProgressBar.IncrementNoAnimation();
- });
- }
- else {
- this.UIThread(() => {
- searchProgressBar.Maximum = selectScriptFileComboBox.Items.Count;
- });
- for (int i = 0; i < selectScriptFileComboBox.Items.Count; i++) {
- ScriptFile scriptFile = new ScriptFile(i);
- Console.WriteLine("Attempting to load script " + scriptFile.fileID);
- scriptsToSearch.Add(scriptFile);
- this.UIThread(() => {
- searchProgressBar.IncrementNoAnimation();
- });
- }
- }
-
- return scriptsToSearch;
- }
-
- private void searchInScriptsButton_Click(object sender, EventArgs e) {
- if (searchInScriptsTextBox.Text == "") {
- return;
- }
-
- BackgroundWorker bw = new BackgroundWorker();
- bw.DoWork += (_sender, args) => {
- this.UIThread(() => {
- searchInScriptsResultListBox.Items.Clear();
- searchProgressBar.Value = 0;
- });
-
- List scriptsToSearch = getScriptsToSearch();
-
- string searchString = searchInScriptsTextBox.Text;
- Func searchCriteriaCS = (string s) => s.IndexOf(searchString, StringComparison.InvariantCulture) >= 0;
- Func searchCriteriaCI = (string s) => s.IndexOf(searchString, StringComparison.InvariantCultureIgnoreCase) >= 0;
- Func searchCriteria = scriptSearchCaseSensitiveCheckBox.Checked ? searchCriteriaCS : searchCriteriaCI;
-
- List results = new List();
- foreach (ScriptFile scriptFile in scriptsToSearch) {
- List scriptResults = SearchInScripts(scriptFile, scriptFile.allScripts, searchCriteria);
- List functionResults = SearchInScripts(scriptFile, scriptFile.allFunctions, searchCriteria);
- // List actionResults = SearchInScripts(scriptFile, scriptFile.allActions, searchCriteria);
- results.AddRange(scriptResults);
- results.AddRange(functionResults);
- // results.AddRange(actionResults);
+ textArea.MarginClick += textArea_MarginClick;
}
- this.UIThread(() => {
- searchInScriptsResultListBox.Items.AddRange(results.ToArray());
- searchProgressBar.Value = 0;
- });
- };
+ private void InitBookmarkMargin(Scintilla textArea) {
+ //TextArea.SetFoldMarginColor(true, IntToColor(BACK_COLOR));
- bw.RunWorkerAsync();
- }
+ Margin margin = textArea.Margins[BOOKMARK_MARGIN];
+ margin.Width = 20;
+ margin.Sensitive = true;
+ margin.Type = MarginType.Symbol;
+ margin.Mask = (1 << BOOKMARK_MARKER);
+ //margin.Cursor = MarginCursor.Arrow;
- private List SearchInScripts(ScriptFile scriptFile, List commandContainers, Func criteria) {
- List results = new List();
-
- for (int j = 0; j < commandContainers.Count; j++) {
- if (commandContainers[j].commands is null) {
- continue;
+ Marker marker = textArea.Markers[BOOKMARK_MARKER];
+ marker.Symbol = MarkerSymbol.Circle;
+ marker.SetBackColor(Color.FromArgb(0xFF003B));
+ marker.SetForeColor(Color.FromArgb(0x000000));
+ marker.SetAlpha(100);
}
- ScriptCommandContainer scriptCommandContainer = commandContainers[j];
- foreach (ScriptCommand scriptCommand in scriptCommandContainer.commands) {
- if (criteria(scriptCommand.name)) {
- results.Add(new ScriptEditorSearchResult(scriptFile, scriptCommandContainer.containerType, j + 1, scriptCommand));
- }
+ private void InitCodeFolding(Scintilla textArea) {
+ textArea.SetFoldMarginColor(true, BACK_COLOR);
+ textArea.SetFoldMarginHighlightColor(true, BACK_COLOR);
+
+ // Enable code folding
+ textArea.SetProperty("fold", "1");
+ textArea.SetProperty("fold.compact", "1");
+
+ // Configure a margin to display folding symbols
+ textArea.Margins[FOLDING_MARGIN].Type = MarginType.Symbol;
+ textArea.Margins[FOLDING_MARGIN].Mask = Marker.MaskFolders;
+ textArea.Margins[FOLDING_MARGIN].Sensitive = true;
+ textArea.Margins[FOLDING_MARGIN].Width = 20;
+
+ // Set colors for all folding markers
+ for (int i = 25; i <= 31; i++) {
+ textArea.Markers[i].SetForeColor(BACK_COLOR); // styles for [+] and [-]
+ textArea.Markers[i].SetBackColor(FORE_COLOR); // styles for [+] and [-]
+ }
+
+ // Configure folding markers with respective symbols
+ textArea.Markers[Marker.Folder].Symbol = CODE_FOLDING_CIRCULAR ? MarkerSymbol.CirclePlus : MarkerSymbol.BoxPlus;
+ textArea.Markers[Marker.FolderOpen].Symbol = CODE_FOLDING_CIRCULAR ? MarkerSymbol.CircleMinus : MarkerSymbol.BoxMinus;
+ textArea.Markers[Marker.FolderEnd].Symbol = CODE_FOLDING_CIRCULAR ? MarkerSymbol.CirclePlusConnected : MarkerSymbol.BoxPlusConnected;
+ textArea.Markers[Marker.FolderMidTail].Symbol = MarkerSymbol.TCorner;
+ textArea.Markers[Marker.FolderOpenMid].Symbol = CODE_FOLDING_CIRCULAR ? MarkerSymbol.CircleMinusConnected : MarkerSymbol.BoxMinusConnected;
+ textArea.Markers[Marker.FolderSub].Symbol = MarkerSymbol.VLine;
+ textArea.Markers[Marker.FolderTail].Symbol = MarkerSymbol.LCorner;
+
+ // Enable automatic folding
+ textArea.AutomaticFold = (AutomaticFold.Show | AutomaticFold.Click | AutomaticFold.Change);
}
- }
- return results;
+ private void InitHotkeys(Scintilla scintillaTb, SearchManager sm) {
+ // register the hotkeys with the form
+ HotKeyManager.AddHotKey(scintillaTb, sm.OpenSearch, Keys.F, true);
+ HotKeyManager.AddHotKey(scintillaTb, () => Uppercase(scintillaTb), Keys.U, true);
+ HotKeyManager.AddHotKey(scintillaTb, () => Lowercase(scintillaTb), Keys.L, true);
+ HotKeyManager.AddHotKey(scintillaTb, () => ZoomIn(scintillaTb), Keys.Oemplus, true);
+ HotKeyManager.AddHotKey(scintillaTb, () => ZoomOut(scintillaTb), Keys.OemMinus, true);
+ HotKeyManager.AddHotKey(scintillaTb, () => ZoomDefault(scintillaTb), Keys.D0, true);
+ HotKeyManager.AddHotKey(scintillaTb, sm.CloseSearch, Keys.Escape);
+
+ // remove conflicting hotkeys from scintilla
+ scintillaTb.ClearCmdKey(Keys.Control | Keys.F);
+ scintillaTb.ClearCmdKey(Keys.Control | Keys.R);
+ scintillaTb.ClearCmdKey(Keys.Control | Keys.H);
+ scintillaTb.ClearCmdKey(Keys.Control | Keys.L);
+ scintillaTb.ClearCmdKey(Keys.Control | Keys.U);
+ }
+
+ private void Uppercase(Scintilla textArea) {
+ // save the selection
+ int start = textArea.SelectionStart;
+ int end = textArea.SelectionEnd;
+
+ // modify the selected text
+ textArea.ReplaceSelection(textArea.GetTextRange(start, end - start).ToUpper());
+
+ // preserve the original selection
+ textArea.SetSelection(start, end);
+ }
+
+ private void Lowercase(Scintilla textArea) {
+ // save the selection
+ int start = textArea.SelectionStart;
+ int end = textArea.SelectionEnd;
+
+ // modify the selected text
+ textArea.ReplaceSelection(textArea.GetTextRange(start, end - start).ToLower());
+
+ // preserve the original selection
+ textArea.SetSelection(start, end);
+ }
+
+ private void ZoomIn(Scintilla textArea) {
+ textArea.ZoomIn();
+ }
+
+ private void ZoomOut(Scintilla textArea) {
+ textArea.ZoomOut();
+ }
+
+ private void ZoomDefault(Scintilla textArea) {
+ textArea.Zoom = 0;
+ }
+
+ private void ScriptEditorSetClean() {
+ Helpers.DisableHandlers();
+
+ scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s";
+ functionsTabPage.Text = ScriptFile.ContainerTypes.Function.ToString() + "s";
+ actionsTabPage.Text = ScriptFile.ContainerTypes.Action.ToString() + "s";
+ scriptsDirty = functionsDirty = actionsDirty = false;
+
+ Helpers.EnableHandlers();
+ }
+
+ private void OnTextChangedScript(object sender, EventArgs e) {
+ ScriptTextArea.Margins[NUMBER_MARGIN].Width = ScriptTextArea.Lines.Count.ToString().Length * 13;
+ scriptsDirty = true;
+ scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s" + "*";
+ }
+
+ private void OnTextChangedFunction(object sender, EventArgs e) {
+ FunctionTextArea.Margins[NUMBER_MARGIN].Width = FunctionTextArea.Lines.Count.ToString().Length * 13;
+ functionsDirty = true;
+ functionsTabPage.Text = ScriptFile.ContainerTypes.Function.ToString() + "s" + "*";
+ }
+
+ private void OnTextChangedAction(object sender, EventArgs e) {
+ ActionTextArea.Margins[NUMBER_MARGIN].Width = ActionTextArea.Lines.Count.ToString().Length * 13;
+ actionsDirty = true;
+ actionsTabPage.Text = ScriptFile.ContainerTypes.Action.ToString() + "s" + "*";
+ }
+
+ private void ScriptTextArea_MarginClick(object sender, MarginClickEventArgs e) {
+ MarginClick(ScriptTextArea, e);
+ }
+
+ private void FunctionTextArea_MarginClick(object sender, MarginClickEventArgs e) {
+ MarginClick(FunctionTextArea, e);
+ }
+
+ private void ActionTextArea_MarginClick(object sender, MarginClickEventArgs e) {
+ MarginClick(ActionTextArea, e);
+ }
+
+ private void MarginClick(Scintilla textArea, MarginClickEventArgs e) {
+ if (e.Margin == BOOKMARK_MARGIN) {
+ // Do we have a marker for this line?
+ const uint mask = (1 << BOOKMARK_MARKER);
+ Line line = textArea.Lines[textArea.LineFromPosition(e.Position)];
+ if ((line.MarkerGet() & mask) > 0) {
+ // Remove existing bookmark
+ line.MarkerDelete(BOOKMARK_MARKER);
+ } else {
+ // Add bookmark
+ line.MarkerAdd(BOOKMARK_MARKER);
+ }
+ }
+ }
+
+ private void selectScriptFileComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+ DisplayScript();
+ }
+
+ public void UpdateScriptNumberCheckBox(NumberStyles toSet) {
+ Helpers.DisableHandlers();
+ Properties.Settings.Default.scriptEditorFormatPreference = (int)toSet;
+
+ switch ((NumberStyles)Properties.Settings.Default.scriptEditorFormatPreference) {
+ case NumberStyles.None:
+ scriptEditorNumberFormatNoPreference.Checked = true;
+ break;
+ case NumberStyles.HexNumber:
+ scriptEditorNumberFormatHex.Checked = true;
+ break;
+ case NumberStyles.Integer:
+ scriptEditorNumberFormatDecimal.Checked = true;
+ break;
+ }
+
+ Console.WriteLine("changed style to " + Properties.Settings.Default.scriptEditorFormatPreference);
+ Helpers.EnableHandlers();
+ }
+
+ private void UpdateScriptNumberFormat(NumberStyles numberStyle) {
+ if (Helpers.HandlersEnabled) {
+ NumberStyles old = (NumberStyles)Properties.Settings.Default.scriptEditorFormatPreference; //Local Backup
+ Properties.Settings.Default.scriptEditorFormatPreference = (int)numberStyle;
+
+ if (!DisplayScript()) {
+ UpdateScriptNumberCheckBox(old); //Restore old checkbox status! Script couldn't be redrawn
+ }
+ }
+ }
+
+ private void UpdateScriptNumberFormatNoPref(object sender, EventArgs e) {
+ UpdateScriptNumberFormat(NumberStyles.None);
+ }
+
+ private void UpdateScriptNumberFormatDec(object sender, EventArgs e) {
+ UpdateScriptNumberFormat(NumberStyles.Integer);
+ }
+
+ private void UpdateScriptNumberFormatHex(object sender, EventArgs e) {
+ UpdateScriptNumberFormat(NumberStyles.HexNumber);
+ }
+
+ private bool DisplayScript() {
+ Console.WriteLine("Script Reload has been requested");
+
+ /* clear controls */
+ if (Helpers.HandlersDisabled || selectScriptFileComboBox.SelectedItem == null) {
+ return false;
+ }
+
+ if (scriptsDirty || functionsDirty || actionsDirty) {
+ DialogResult d = MessageBox.Show("There are unsaved changes in this Script File.\nDo you wish to discard them?", "Unsaved work", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
+
+ if (!d.Equals(DialogResult.Yes)) {
+ Helpers.DisableHandlers();
+ // selectScriptFileComboBox.SelectedItem = currentScriptFile;
+ selectScriptFileComboBox.SelectedIndex = (int)currentScriptFile.fileID;
+ Helpers.EnableHandlers();
+ return false;
+ }
+ }
+
+ Helpers.DisableHandlers();
+
+ ScriptFile lastScriptFile = currentScriptFile;
+ // currentScriptFile = (ScriptFile)selectScriptFileComboBox.SelectedItem;
+ currentScriptFile = new ScriptFile(selectScriptFileComboBox.SelectedIndex); // Load script file
+
+ ScriptTextArea.ClearAll();
+ FunctionTextArea.ClearAll();
+ ActionTextArea.ClearAll();
+
+ scriptsNavListbox.Items.Clear();
+ functionsNavListbox.Items.Clear();
+ actionsNavListbox.Items.Clear();
+
+ //prevent buttons from flickering when the combobox selection changes
+ bool typeChanged = true;
+ if (lastScriptFile != null) {
+ typeChanged = lastScriptFile.isLevelScript != currentScriptFile.isLevelScript;
+ }
+
+ if (typeChanged) {
+ if (currentScriptFile.isLevelScript) {
+ importScriptFileButton.Location = initial_importScriptFileButton_location;
+ exportScriptFileButton.Location = initial_exportScriptFileButton_location;
+ addScriptFileButton.Location = initial_addScriptFileButton_location;
+ removeScriptFileButton.Location = initial_removeScriptFileButton_location;
+
+ viewLevelScriptButton.Location = new_viewLevelScript_location;
+
+ importScriptFileButton.Enabled = false;
+ exportScriptFileButton.Enabled = false;
+ addScriptFileButton.Enabled = false;
+ removeScriptFileButton.Enabled = false;
+
+ viewLevelScriptButton.Enabled = true;
+ } else {
+ importScriptFileButton.Location = new_importScriptFileButton_location;
+ exportScriptFileButton.Location = new_exportScriptFileButton_location;
+ addScriptFileButton.Location = new_addScriptFileButton_location;
+ removeScriptFileButton.Location = new_removeScriptFileButton_location;
+
+ viewLevelScriptButton.Location = initial_viewLevelScript_location;
+
+ importScriptFileButton.Enabled = true;
+ exportScriptFileButton.Enabled = true;
+ addScriptFileButton.Enabled = true;
+ removeScriptFileButton.Enabled = true;
+
+ viewLevelScriptButton.Enabled = false;
+ }
+ }
+
+ if (!currentScriptFile.isLevelScript) {
+ displayScriptFile(ScriptFile.ContainerTypes.Script, currentScriptFile.allScripts, scriptsNavListbox, ScriptTextArea);
+ displayScriptFile(ScriptFile.ContainerTypes.Function, currentScriptFile.allFunctions, functionsNavListbox, FunctionTextArea);
+ displayScriptFileActions(ScriptFile.ContainerTypes.Action, currentScriptFile.allActions, actionsNavListbox, ActionTextArea);
+ }
+
+ ScriptEditorSetClean();
+
+ Helpers.statusLabelMessage();
+ Helpers.EnableHandlers();
+
+ return true;
+ }
+
+ static void displayScriptFile(ScriptFile.ContainerTypes containerType, List commandList, ListBox navListBox, Scintilla textArea) {
+ string buffer = "";
+ /* Add commands */
+ for (int i = 0; i < commandList.Count; i++) {
+ ScriptCommandContainer scriptCommandContainer = commandList[i];
+
+ /* Write header */
+ string header = containerType + " " + (i + 1);
+ buffer += header + ':' + Environment.NewLine;
+ navListBox.Items.Add(header);
+
+ /* If current command is identical to another, print UseScript instead of commands */
+ if (scriptCommandContainer.usedScriptID < 0) {
+ for (int j = 0; j < scriptCommandContainer.commands.Count; j++) {
+ ScriptCommand command = scriptCommandContainer.commands[j];
+ if (!ScriptDatabase.endCodes.Contains(command.id)) {
+ buffer += '\t';
+ }
+
+ buffer += command.name + Environment.NewLine;
+ }
+ } else {
+ buffer += '\t' + "UseScript_#" + scriptCommandContainer.usedScriptID + Environment.NewLine;
+ }
+
+ textArea.AppendText(buffer + Environment.NewLine);
+ buffer = "";
+ }
+ }
+
+ static void displayScriptFileActions(ScriptFile.ContainerTypes containerType, List commandList, ListBox navListBox, Scintilla textArea) {
+ /* Add movements */
+ string buffer = "";
+ for (int i = 0; i < commandList.Count; i++) {
+ ScriptActionContainer currentCommand = commandList[i];
+
+ string header = containerType + " " + (i + 1);
+ buffer += header + ':' + Environment.NewLine;
+ navListBox.Items.Add(header);
+
+ for (int j = 0; j < currentCommand.commands.Count; j++) {
+ ScriptAction command = currentCommand.commands[j];
+ if (!ScriptDatabase.movementEndCodes.Contains(command.id)) {
+ buffer += '\t';
+ }
+
+ buffer += command.name + Environment.NewLine;
+ }
+
+ textArea.AppendText(buffer + Environment.NewLine);
+ buffer = "";
+ }
+ }
+
+ private void scriptEditorZoomInButton_Click(object sender, EventArgs e) {
+ ZoomIn(currentScintillaEditor);
+ }
+
+ private void scriptEditorZoomOutButton_Click(object sender, EventArgs e) {
+ ZoomOut(currentScintillaEditor);
+ }
+
+ private void scriptEditorZoomResetButton_Click(object sender, EventArgs e) {
+ ZoomDefault(currentScintillaEditor);
+ }
+
+ private void scriptEditorTabControl_TabIndexChanged(object sender, EventArgs e) {
+ if (scriptEditorTabControl.SelectedTab == scriptsTabPage) {
+ currentSearchManager = scriptSearchManager;
+ currentScintillaEditor = ScriptTextArea;
+ } else if (scriptEditorTabControl.SelectedTab == functionsTabPage) {
+ currentSearchManager = functionSearchManager;
+ currentScintillaEditor = FunctionTextArea;
+ } else {
+ //Actions
+ currentSearchManager = actionSearchManager;
+ currentScintillaEditor = ActionTextArea;
+ }
+ }
+
+ private void removeScriptFileButton_Click(object sender, EventArgs e) {
+ DialogResult d = MessageBox.Show("Are you sure you want to delete the last Script File?", "Confirm deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
+ if (d.Equals(DialogResult.Yes)) {
+ /* Delete script file */
+ string path = Filesystem.GetScriptPath(selectScriptFileComboBox.Items.Count - 1);
+ File.Delete(path);
+
+ /* Check if currently selected file is the last one, and in that case select the one before it */
+ int lastIndex = selectScriptFileComboBox.Items.Count - 1;
+ if (selectScriptFileComboBox.SelectedIndex == lastIndex) {
+ selectScriptFileComboBox.SelectedIndex--;
+ }
+
+ /* Remove item from ComboBox */
+ selectScriptFileComboBox.Items.RemoveAt(lastIndex);
+ }
+ }
+
+ private void addScriptFileButton_Click(object sender, EventArgs e) {
+ /* Add new event file to event folder */
+ int fileID = selectScriptFileComboBox.Items.Count;
+
+ ScriptFile scriptFile = new ScriptFile(
+ scriptLines: new Scintilla { Text = "Script 1:\nEnd" }.Lines.ToStringsList(trim: true),
+ functionLines: null,
+ actionLines: null,
+ fileID
+ );
+
+ //check if ScriptFile instance was created successfully
+ if (scriptFile.SaveToFileDefaultDir(fileID, showSuccessMessage: false)) {
+ /* Update ComboBox and select new file */
+ selectScriptFileComboBox.Items.Add(scriptFile);
+ selectScriptFileComboBox.SelectedItem = scriptFile;
+ }
+ }
+
+ private void saveScriptFileButton_Click(object sender, EventArgs e) {
+ /* Create new ScriptFile object using the values in the script editor */
+ int fileID = currentScriptFile.fileID;
+
+ ScriptFile userEdited = new ScriptFile(
+ scriptLines: ScriptTextArea.Lines.ToStringsList(trim: true),
+ functionLines: FunctionTextArea.Lines.ToStringsList(trim: true),
+ actionLines: ActionTextArea.Lines.ToStringsList(trim: true),
+ fileID
+ );
+
+ if (userEdited.hasNoScripts) {
+ MessageBox.Show("This " + nameof(ScriptFile) + " couldn't be saved. A minimum of one script is required.", "Can't save", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ return;
+ }
+
+ //check if ScriptFile instance was created successfully
+ if (userEdited.SaveToFileDefaultDir(fileID)) {
+ currentScriptFile = userEdited;
+ ScriptEditorSetClean();
+ }
+ }
+
+ private void exportScriptFileButton_Click(object sender, EventArgs e) {
+ currentScriptFile.SaveToFileExplorePath(currentScriptFile.ToString(), blindmode: true);
+ }
+
+ private void importScriptFileButton_Click(object sender, EventArgs e) {
+ /* Prompt user to select .scr or .bin file */
+ OpenFileDialog of = new OpenFileDialog {
+ Filter = "Script File (*.scr, *.bin)|*.scr;*.bin"
+ };
+ if (of.ShowDialog(this) != DialogResult.OK) {
+ return;
+ }
+
+ /* Update scriptFile object in memory */
+ int i = selectScriptFileComboBox.SelectedIndex;
+ string path = Filesystem.GetScriptPath(i);
+ File.Copy(of.FileName, path, true);
+
+ populate_selectScriptFileComboBox(i);
+
+ /* Refresh controls */
+ selectScriptFileComboBox_SelectedIndexChanged(null, null);
+
+ /* Display success message */
+ MessageBox.Show("Scripts imported successfully!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+
+ private void viewLevelScriptButton_Click(object sender, EventArgs e) {
+ EditorPanels.levelScriptEditor.OpenLevelScriptEditor(this._parent, selectScriptFileComboBox.SelectedIndex);
+ }
+
+ private void locateCurrentScriptFile_Click(object sender, EventArgs e) {
+ string path = Filesystem.GetScriptPath(selectScriptFileComboBox.SelectedIndex);
+ Helpers.ExplorerSelect(path);
+ }
+
+ private void findNext(SearchManager searchManager) {
+ searchManager.Find(true, false);
+ scrollResultToTop(searchManager);
+ }
+
+ private void findPrev(SearchManager searchManager) {
+ searchManager.Find(false, false);
+ scrollResultToTop(searchManager);
+ }
+
+ private void findCurrent(SearchManager searchManager) {
+ searchManager.Find(true, true);
+ scrollResultToTop(searchManager);
+ }
+
+ private void TxtFindKeyDown(SearchManager searchManager, KeyEventArgs e) {
+ if (HotKeyManager.IsHotkey(e, Keys.Enter)) {
+ findNext(searchManager);
+ }
+
+ if (HotKeyManager.IsHotkey(e, Keys.Enter, true) || HotKeyManager.IsHotkey(e, Keys.Enter, false, true)) {
+ findPrev(searchManager);
+ }
+ }
+
+ private void BtnNextFindScript_Click(object sender, EventArgs e) {
+ findNext(scriptSearchManager);
+ }
+
+ private void BtnPrevFindScript_Click(object sender, EventArgs e) {
+ findPrev(scriptSearchManager);
+ }
+
+ private void panelFindScriptTextBox_TextChanged(object sender, EventArgs e) {
+ findCurrent(scriptSearchManager);
+ }
+
+ private void scriptTxtFind_KeyDown(object sender, KeyEventArgs e) {
+ TxtFindKeyDown(scriptSearchManager, e);
+ }
+
+ private void BtnCloseFindScript_Click(object sender, EventArgs e) {
+ scriptSearchManager.CloseSearch();
+ }
+
+ private void BtnNextFindFunc_Click(object sender, EventArgs e) {
+ findNext(functionSearchManager);
+ }
+
+ private void BtnPrevFindFunc_Click(object sender, EventArgs e) {
+ findNext(functionSearchManager);
+ }
+
+ private void panelFindFunctionTextBox_TextChanged(object sender, EventArgs e) {
+ findNext(functionSearchManager);
+ }
+
+ private void functionTxtFind_KeyDown(object sender, KeyEventArgs e) {
+ TxtFindKeyDown(functionSearchManager, e);
+ }
+
+ private void BtnCloseFindFunc_Click(object sender, EventArgs e) {
+ functionSearchManager.CloseSearch();
+ }
+
+ private void BtnNextFindActions_Click(object sender, EventArgs e) {
+ findNext(actionSearchManager);
+ }
+
+ private void BtnPrevFindActions_Click(object sender, EventArgs e) {
+ findNext(actionSearchManager);
+ }
+
+ private void panelFindActionTextBox_TextChanged(object sender, EventArgs e) {
+ findNext(actionSearchManager);
+ }
+
+ private void actionTxtFind_KeyDown(object sender, KeyEventArgs e) {
+ TxtFindKeyDown(actionSearchManager, e);
+ }
+
+ private void BtnCloseFindActions_Click(object sender, EventArgs e) {
+ actionSearchManager.CloseSearch();
+ }
+
+ void scrollResultToTop(SearchManager searchManager) {
+ int resultStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding;
+ searchManager.textAreaScintilla.FirstVisibleLine = resultStart;
+ }
+
+ private void NavigatorGoTo(ListBox listBox, TabPage tabPage, SearchManager searchManager, ScriptFile.ContainerTypes containerType) {
+ if (listBox.SelectedIndex < 0) {
+ return;
+ }
+
+ scriptEditorTabControl.SelectedTab = tabPage;
+ int commandNumber = listBox.SelectedIndex + 1;
+ string CommandBlockOpen = $"{containerType} {commandNumber}:";
+ searchManager.Find(true, false, CommandBlockOpen);
+
+ scrollResultToTop(searchManager);
+ }
+
+ private void scriptsNavListbox_SelectedIndexChanged(object sender, EventArgs e) {
+ NavigatorGoTo((ListBox)sender, scriptsTabPage, scriptSearchManager, ScriptFile.ContainerTypes.Script);
+ }
+
+ private void functionsNavListbox_SelectedIndexChanged(object sender, EventArgs e) {
+ NavigatorGoTo((ListBox)sender, functionsTabPage, functionSearchManager, ScriptFile.ContainerTypes.Function);
+ }
+
+ private void actionsNavListbox_SelectedIndexChanged(object sender, EventArgs e) {
+ NavigatorGoTo((ListBox)sender, actionsTabPage, actionSearchManager, ScriptFile.ContainerTypes.Action);
+ }
+
+ private void openFindScriptEditorButton_Click(object sender, EventArgs e) {
+ currentSearchManager.OpenSearch();
+ }
+
+ private void ScriptEditorExpandButton_Click(object sender, EventArgs e) {
+ currentScintillaEditor.FoldAll(FoldAction.Expand);
+ }
+
+ private void ScriptEditorCollapseButton_Click(object sender, EventArgs e) {
+ currentScintillaEditor.FoldAll(FoldAction.Contract);
+ }
+
+ private void scriptEditorWordWrapCheckbox_CheckedChanged(object sender, EventArgs e) {
+ ScriptTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None;
+ FunctionTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None;
+ ActionTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None;
+ }
+
+ private void viewWhiteSpacesButton_Click(object sender, EventArgs e) {
+ ScriptTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible;
+ FunctionTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible;
+ ActionTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible;
+ }
+
+ private void searchInScriptsTextBox_KeyDown(object sender, KeyEventArgs e) {
+ if (e.KeyCode == Keys.Enter) {
+ searchInScriptsButton_Click(null, null);
+ }
+ }
+
+ public List getScriptsToSearch() {
+ List scriptsToSearch = new List();
+
+ if (searchOnlyCurrentScriptCheckBox.Checked) {
+ this.UIThread(() => {
+ searchProgressBar.Maximum = 1;
+ });
+ int i = selectScriptFileComboBox.SelectedIndex;
+ ScriptFile scriptFile = new ScriptFile(i);
+ Console.WriteLine("Attempting to load script " + scriptFile.fileID);
+ scriptsToSearch.Add(scriptFile);
+ this.UIThread(() => {
+ searchProgressBar.IncrementNoAnimation();
+ });
+ } else {
+ this.UIThread(() => {
+ searchProgressBar.Maximum = selectScriptFileComboBox.Items.Count;
+ });
+ for (int i = 0; i < selectScriptFileComboBox.Items.Count; i++) {
+ ScriptFile scriptFile = new ScriptFile(i);
+ Console.WriteLine("Attempting to load script " + scriptFile.fileID);
+ scriptsToSearch.Add(scriptFile);
+ this.UIThread(() => {
+ searchProgressBar.IncrementNoAnimation();
+ });
+ }
+ }
+
+ return scriptsToSearch;
+ }
+
+ private void searchInScriptsButton_Click(object sender, EventArgs e) {
+ if (searchInScriptsTextBox.Text == "") {
+ return;
+ }
+
+ BackgroundWorker bw = new BackgroundWorker();
+ bw.DoWork += (_sender, args) => {
+ this.UIThread(() => {
+ searchInScriptsResultListBox.Items.Clear();
+ searchProgressBar.Value = 0;
+ });
+
+ List scriptsToSearch = getScriptsToSearch();
+
+ string searchString = searchInScriptsTextBox.Text;
+ Func searchCriteriaCS = (string s) => s.IndexOf(searchString, StringComparison.InvariantCulture) >= 0;
+ Func searchCriteriaCI = (string s) => s.IndexOf(searchString, StringComparison.InvariantCultureIgnoreCase) >= 0;
+ Func searchCriteria = scriptSearchCaseSensitiveCheckBox.Checked ? searchCriteriaCS : searchCriteriaCI;
+
+ List results = new List();
+ foreach (ScriptFile scriptFile in scriptsToSearch) {
+ List scriptResults = SearchInScripts(scriptFile, scriptFile.allScripts, searchCriteria);
+ List functionResults = SearchInScripts(scriptFile, scriptFile.allFunctions, searchCriteria);
+ // List actionResults = SearchInScripts(scriptFile, scriptFile.allActions, searchCriteria);
+ results.AddRange(scriptResults);
+ results.AddRange(functionResults);
+ // results.AddRange(actionResults);
+ }
+
+ this.UIThread(() => {
+ searchInScriptsResultListBox.Items.AddRange(results.ToArray());
+ searchProgressBar.Value = 0;
+ });
+ };
+
+ bw.RunWorkerAsync();
+ }
+
+ private List SearchInScripts(ScriptFile scriptFile, List commandContainers, Func criteria) {
+ List results = new List();
+
+ for (int j = 0; j < commandContainers.Count; j++) {
+ if (commandContainers[j].commands is null) {
+ continue;
+ }
+
+ ScriptCommandContainer scriptCommandContainer = commandContainers[j];
+ foreach (ScriptCommand scriptCommand in scriptCommandContainer.commands) {
+ if (criteria(scriptCommand.name)) {
+ results.Add(new ScriptEditorSearchResult(scriptFile, scriptCommandContainer.containerType, j + 1, scriptCommand));
+ }
+ }
+ }
+
+ return results;
+ }
+
+ private void searchInScriptsResultListBox_KeyDown(object sender, KeyEventArgs e) {
+ if (e.KeyCode == Keys.Enter) {
+ goToSearchResult();
+ }
+ }
+
+ private void searchInScripts_GoToEntryResult(object sender, MouseEventArgs e) {
+ goToSearchResult();
+ }
+
+ private void goToSearchResult() {
+ if (searchInScriptsResultListBox.SelectedItem == null) { return; }
+
+ ScriptEditorSearchResult searchResult = (ScriptEditorSearchResult)searchInScriptsResultListBox.SelectedItem;
+ ScriptFile scriptFile = searchResult.scriptFile;
+ ScriptFile.ContainerTypes containerType = searchResult.containerType;
+
+ selectScriptFileComboBox.SelectedIndex = scriptFile.fileID;
+
+ if (containerType == ScriptFile.ContainerTypes.Script) {
+ displaySearchResult(scriptsTabPage, scriptSearchManager, searchResult);
+ } else if (containerType == ScriptFile.ContainerTypes.Function) {
+ displaySearchResult(functionsTabPage, functionSearchManager, searchResult);
+ } else if (containerType == ScriptFile.ContainerTypes.Action) {
+ displaySearchResult(actionsTabPage, actionSearchManager, searchResult);
+ }
+ }
+
+ private void displaySearchResult(TabPage tabPage, SearchManager searchManager, ScriptEditorSearchResult searchResult) {
+ if (scriptEditorTabControl.SelectedTab != tabPage) {
+ scriptEditorTabControl.SelectedTab = tabPage;
+ }
+
+ searchManager.Find(true, false, searchResult.CommandBlockOpen);
+ int blockStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding;
+
+ searchManager.Find(true, false, searchResult.scriptCommand.name);
+ int resultStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding;
+
+ if (scrollToBlockStartcheckBox.Checked) {
+ searchManager.textAreaScintilla.FirstVisibleLine = blockStart;
+ } else {
+ searchManager.textAreaScintilla.FirstVisibleLine = resultStart;
+ }
+ }
}
- private void searchInScriptsResultListBox_KeyDown(object sender, KeyEventArgs e) {
- if (e.KeyCode == Keys.Enter) {
- goToSearchResult();
- }
+ public class ScriptEditorSearchResult {
+ public readonly ScriptFile scriptFile;
+ public readonly ScriptFile.ContainerTypes containerType;
+ public readonly int commandNumber;
+ public readonly ScriptCommand scriptCommand;
+
+ public const int ResultsPadding = 1;
+
+ public ScriptEditorSearchResult(ScriptFile scriptFile, ScriptFile.ContainerTypes containerType, int commandNumber, ScriptCommand scriptCommand) {
+ this.scriptFile = scriptFile;
+ this.containerType = containerType;
+ this.commandNumber = commandNumber;
+ this.scriptCommand = scriptCommand;
+ }
+
+ public string CommandBlockOpen { get { return $"{containerType} {commandNumber}:"; } }
+
+ public override string ToString() {
+ return $"File {scriptFile.fileID} - {CommandBlockOpen} {scriptCommand.name}";
+ }
}
-
- private void searchInScripts_GoToEntryResult(object sender, MouseEventArgs e) {
- goToSearchResult();
- }
-
- private void goToSearchResult() {
- if (searchInScriptsResultListBox.SelectedItem == null){ return; }
-
- ScriptEditorSearchResult searchResult = (ScriptEditorSearchResult)searchInScriptsResultListBox.SelectedItem;
- ScriptFile scriptFile = searchResult.scriptFile;
- ScriptFile.ContainerTypes containerType = searchResult.containerType;
-
- selectScriptFileComboBox.SelectedIndex = scriptFile.fileID;
-
- if (containerType == ScriptFile.ContainerTypes.Script) {
- displaySearchResult(scriptsTabPage, scriptSearchManager, searchResult);
- }
- else if (containerType == ScriptFile.ContainerTypes.Function) {
- displaySearchResult(functionsTabPage, functionSearchManager, searchResult);
- }
- else if (containerType == ScriptFile.ContainerTypes.Action) {
- displaySearchResult(actionsTabPage, actionSearchManager, searchResult);
- }
- }
-
- private void displaySearchResult(TabPage tabPage, SearchManager searchManager, ScriptEditorSearchResult searchResult) {
- if (scriptEditorTabControl.SelectedTab != tabPage) {
- scriptEditorTabControl.SelectedTab = tabPage;
- }
-
- searchManager.Find(true, false, searchResult.CommandBlockOpen);
- int blockStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding;
-
- searchManager.Find(true, false, searchResult.scriptCommand.name);
- int resultStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding;
-
- if (scrollToBlockStartcheckBox.Checked) {
- searchManager.textAreaScintilla.FirstVisibleLine = blockStart;
- }
- else {
- searchManager.textAreaScintilla.FirstVisibleLine = resultStart;
- }
- }
- }
-
- public class ScriptEditorSearchResult {
- public readonly ScriptFile scriptFile;
- public readonly ScriptFile.ContainerTypes containerType;
- public readonly int commandNumber;
- public readonly ScriptCommand scriptCommand;
-
- public const int ResultsPadding = 1;
-
- public ScriptEditorSearchResult(ScriptFile scriptFile, ScriptFile.ContainerTypes containerType, int commandNumber, ScriptCommand scriptCommand) {
- this.scriptFile = scriptFile;
- this.containerType = containerType;
- this.commandNumber = commandNumber;
- this.scriptCommand = scriptCommand;
- }
-
- public string CommandBlockOpen { get { return $"{containerType} {commandNumber}:"; } }
-
- public override string ToString() {
- return $"File {scriptFile.fileID} - {CommandBlockOpen} {scriptCommand.name}";
- }
- }
}
diff --git a/DS_Map/ROMFiles/ScriptCommandContainer.cs b/DS_Map/ROMFiles/ScriptCommandContainer.cs
index e374cea..5654980 100644
--- a/DS_Map/ROMFiles/ScriptCommandContainer.cs
+++ b/DS_Map/ROMFiles/ScriptCommandContainer.cs
@@ -1,25 +1,25 @@
using System.Collections.Generic;
namespace DSPRE.ROMFiles {
- public class ScriptCommandContainer {
- public List commands;
- public uint manualUserID;
- public int usedScriptID; //useScript ID referenced by this Script/Function
- public ScriptFile.ContainerTypes containerType;
- internal static readonly string functionStart;
+ public class ScriptCommandContainer {
+ public List commands;
+ public uint manualUserID;
+ public int usedScriptID; //useScript ID referenced by this Script/Function
+ public ScriptFile.ContainerTypes containerType;
+ internal static readonly string functionStart;
- public ScriptCommandContainer(uint scriptNumber, ScriptFile.ContainerTypes containerType, int usedScriptID = -1, List commandList = null) {
- manualUserID = scriptNumber;
- this.usedScriptID = usedScriptID;
- this.containerType = containerType;
- commands = commandList;
- }
+ public ScriptCommandContainer(uint scriptNumber, ScriptFile.ContainerTypes containerType, int usedScriptID = -1, List commandList = null) {
+ manualUserID = scriptNumber;
+ this.usedScriptID = usedScriptID;
+ this.containerType = containerType;
+ commands = commandList;
+ }
- public ScriptCommandContainer(uint newID, ScriptCommandContainer toCopy) {
- manualUserID = newID;
- usedScriptID = toCopy.usedScriptID;
- containerType = toCopy.containerType;
- commands = new List(toCopy.commands); //command parameters need to be copied recursively
+ public ScriptCommandContainer(uint newID, ScriptCommandContainer toCopy) {
+ manualUserID = newID;
+ usedScriptID = toCopy.usedScriptID;
+ containerType = toCopy.containerType;
+ commands = new List(toCopy.commands); //command parameters need to be copied recursively
+ }
}
- }
}