|
|
@@ -44,6 +44,7 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
|
|
|
private RoslynHost _host;
|
|
|
+ private ManualOnlyCompletionProvider? _manual;
|
|
|
|
|
|
private readonly SyntaxLanguage _language = SyntaxLanguage.CSharp;
|
|
|
|
|
|
@@ -76,9 +77,10 @@ namespace InABox.DynamicGrid
|
|
|
EditorTitle = scriptTitle;
|
|
|
|
|
|
InitializeComponent();
|
|
|
-
|
|
|
+
|
|
|
// Not Sure if we need Roslyn for XAML - need to research this
|
|
|
if (language == SyntaxLanguage.CSharp || language == SyntaxLanguage.XAML)
|
|
|
+ {
|
|
|
try
|
|
|
{
|
|
|
if (ScriptDocument.Host == null)
|
|
|
@@ -88,7 +90,8 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
MessageBox.Show("Unable to initialize Script Editor!\nPlease try again.\n\n" + e.Message);
|
|
|
}
|
|
|
-
|
|
|
+ }
|
|
|
+
|
|
|
Editor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition(
|
|
|
language == SyntaxLanguage.HTML
|
|
|
? "HTML"
|
|
|
@@ -98,6 +101,19 @@ namespace InABox.DynamicGrid
|
|
|
? "CSS"
|
|
|
: "C#"
|
|
|
);
|
|
|
+
|
|
|
+
|
|
|
+ // Arm on Ctrl+Space, but don't handle the key so the editor's command still runs.
|
|
|
+ Editor.PreviewKeyDown += (s, e) =>
|
|
|
+ {
|
|
|
+ if (e.Key == System.Windows.Input.Key.Space &&
|
|
|
+ (System.Windows.Input.Keyboard.Modifiers & System.Windows.Input.ModifierKeys.Control) != 0)
|
|
|
+ {
|
|
|
+ _manual?.AllowNextCompletionOnce();
|
|
|
+ // IMPORTANT: do not set e.Handled = true
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
|
|
|
Editor.TextArea.TextEntering += TextArea_TextEntering;
|
|
|
|
|
|
@@ -308,6 +324,17 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
private void Timer_Tick(object sender, EventArgs e)
|
|
|
{
|
|
|
+ if ((_manual == null) && (Editor.CompletionProvider != null))
|
|
|
+ {
|
|
|
+ _manual = new ManualOnlyCompletionProvider(Editor.CompletionProvider)
|
|
|
+ {
|
|
|
+ AllowSignatureHelp = false,
|
|
|
+ TreatNullTriggerAsManualInvoke = true,
|
|
|
+ AllowDotTrigger = false
|
|
|
+ };
|
|
|
+ Editor.CompletionProvider = _manual;
|
|
|
+ }
|
|
|
+
|
|
|
CheckButton(CopyButton, !string.IsNullOrEmpty(Editor.SelectedText), copy);
|
|
|
CheckButton(CutButton, !string.IsNullOrEmpty(Editor.SelectedText), cut);
|
|
|
CheckButton(PasteButton, Clipboard.ContainsText(), paste);
|