diff --git a/pseudocodeIde/PseudocodeIDEForm.Designer.cs b/pseudocodeIde/PseudocodeIDEForm.Designer.cs index 4654402..b412e42 100644 --- a/pseudocodeIde/PseudocodeIDEForm.Designer.cs +++ b/pseudocodeIde/PseudocodeIDEForm.Designer.cs @@ -40,6 +40,7 @@ private void InitializeComponent() this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.findMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.replaceMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); this.goToMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.wordWrapMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -53,7 +54,7 @@ private void InitializeComponent() this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.updatePseudocodeIDEMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.codeTextBox = new ScintillaNET.Scintilla(); - this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.autoCompleteMenu = new AutocompleteMenuNS.AutocompleteMenu(); this.menuStrip.SuspendLayout(); this.SuspendLayout(); // @@ -87,7 +88,7 @@ private void InitializeComponent() // this.newMenuItem.Name = "newMenuItem"; this.newMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); - this.newMenuItem.Size = new System.Drawing.Size(270, 34); + this.newMenuItem.Size = new System.Drawing.Size(257, 34); this.newMenuItem.Text = "Neu"; this.newMenuItem.Click += new System.EventHandler(this.newMenuItem_Click); // @@ -95,7 +96,7 @@ private void InitializeComponent() // this.openMenuItem.Name = "openMenuItem"; this.openMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); - this.openMenuItem.Size = new System.Drawing.Size(270, 34); + this.openMenuItem.Size = new System.Drawing.Size(257, 34); this.openMenuItem.Text = "Öffnen"; this.openMenuItem.Click += new System.EventHandler(this.openMenuItem_Click); // @@ -104,7 +105,7 @@ private void InitializeComponent() this.saveMenuItem.Enabled = false; this.saveMenuItem.Name = "saveMenuItem"; this.saveMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); - this.saveMenuItem.Size = new System.Drawing.Size(270, 34); + this.saveMenuItem.Size = new System.Drawing.Size(257, 34); this.saveMenuItem.Text = "Speichern"; this.saveMenuItem.Click += new System.EventHandler(this.saveMenuItem_Click); // @@ -161,6 +162,11 @@ private void InitializeComponent() this.replaceMenuItem.Text = "Ersetzen"; this.replaceMenuItem.Click += new System.EventHandler(this.replaceMenuItem_Click); // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(308, 6); + // // goToMenuItem // this.goToMenuItem.Name = "goToMenuItem"; @@ -288,10 +294,15 @@ private void InitializeComponent() this.codeTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.codeTextBox_KeyDown); this.codeTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.codeTextBox_KeyPress); // - // toolStripSeparator4 + // autoCompleteMenu // - this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(308, 6); + this.autoCompleteMenu.AllowsTabKey = true; + this.autoCompleteMenu.AppearInterval = 50; + this.autoCompleteMenu.Colors = ((AutocompleteMenuNS.Colors)(resources.GetObject("autoCompleteMenu.Colors"))); + this.autoCompleteMenu.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F); + this.autoCompleteMenu.ImageList = null; + this.autoCompleteMenu.Items = new string[0]; + this.autoCompleteMenu.TargetControlWrapper = null; // // PseudocodeIDEForm // @@ -345,6 +356,7 @@ private void InitializeComponent() private ScintillaNET.Scintilla codeTextBox; private System.Windows.Forms.ToolStripMenuItem goToMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private AutocompleteMenuNS.AutocompleteMenu autoCompleteMenu; } } diff --git a/pseudocodeIde/PseudocodeIDEForm.cs b/pseudocodeIde/PseudocodeIDEForm.cs index 82921f3..26819cd 100644 --- a/pseudocodeIde/PseudocodeIDEForm.cs +++ b/pseudocodeIde/PseudocodeIDEForm.cs @@ -14,6 +14,7 @@ using pseudocode_ide.interpreter.scanner; using System.Drawing; using ScintillaNET_FindReplaceDialog; +using AutocompleteMenuNS; namespace pseudocodeIde { @@ -96,6 +97,20 @@ public PseudocodeIDEForm() this.setFileSaved(); } + private void buildAutocompleteMenu() + { + autoCompleteMenu.TargetControlWrapper = new ScintillaWrapper(codeTextBox); + + List items = new List(); + + foreach (string item in Scanner.KEYWORDS.Keys) + { + items.Add(new SnippetAutocompleteItem(item) { ImageIndex = 1 }); + } + + autoCompleteMenu.SetAutocompleteItems(items); + } + // --------------------------------------------- // COMMON EVENT LISTENERS // --------------------------------------------- @@ -113,6 +128,7 @@ private void PseudocodeIDEForm_Load(object sender, EventArgs e) // set font this.configureCodeTextBox(); + this.buildAutocompleteMenu(); } private void configureCodeTextBox() @@ -229,6 +245,12 @@ private void codeTextBox_TextChanged(object sender, EventArgs e) private void codeTextBox_KeyDown(object sender, KeyEventArgs e) { + // hack to allow enter to autocomplete even if down wasnt pressed before + if ((e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab) && e.Modifiers == Keys.None && autoCompleteMenu.SelectedItemIndex < 0) + { + autoCompleteMenu.ProcessKey((char)Keys.Down, e.Modifiers); + } + // ignore CTRL[+SHIFT]+(Z/Y/L/R/E/S) if ((e.KeyCode == Keys.Z || e.KeyCode == Keys.Y || e.KeyCode == Keys.L || e.KeyCode == Keys.R || e.KeyCode == Keys.E || e.KeyCode == Keys.S) && (Control.ModifierKeys == Keys.Control || Control.ModifierKeys == (Keys.Control | Keys.Shift))) diff --git a/pseudocodeIde/PseudocodeIDEForm.resx b/pseudocodeIde/PseudocodeIDEForm.resx index 40feaa8..f36c999 100644 --- a/pseudocodeIde/PseudocodeIDEForm.resx +++ b/pseudocodeIde/PseudocodeIDEForm.resx @@ -120,6 +120,26 @@ 17, 17 + + 165, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFRBdXRvY29tcGxldGVNZW51LVNjaW50aWxsYU5FVCwgVmVyc2lv + bj0xLjYuMi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwMAwAAAFFTeXN0ZW0u + RHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIw + M2Y1ZjdmMTFkNTBhM2EFAQAAABlBdXRvY29tcGxldGVNZW51TlMuQ29sb3JzBgAAABo8Rm9yZUNvbG9y + PmtfX0JhY2tpbmdGaWVsZBo8QmFja0NvbG9yPmtfX0JhY2tpbmdGaWVsZCI8U2VsZWN0ZWRGb3JlQ29s + b3I+a19fQmFja2luZ0ZpZWxkIjxTZWxlY3RlZEJhY2tDb2xvcj5rX19CYWNraW5nRmllbGQjPFNlbGVj + dGVkQmFja0NvbG9yMj5rX19CYWNraW5nRmllbGQiPEhpZ2hsaWdodGluZ0NvbG9yPmtfX0JhY2tpbmdG + aWVsZAQEBAQEBBRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAA + FFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAAUU3lzdGVtLkRy + YXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAIAAAAF/P///xRTeXN0ZW0uRHJh + d2luZy5Db2xvcgQAAAAEbmFtZQV2YWx1ZQprbm93bkNvbG9yBXN0YXRlAQAAAAkHBwMAAAAKAAAAAAAA + AAAjAAEAAfv////8////CgAAAAAAAAAApAABAAH6/////P///woAAAAAAAAAACMAAQAB+f////z///8K + AAAAAAAAAAB/AAEAAfj////8////CgAAAAAAAAAApAABAAH3/////P///woAAAAAAAAAAH8AAQAL + + 83 diff --git a/pseudocodeIde/SetClipboardHelper.cs b/pseudocodeIde/SetClipboardHelper.cs index 85bdb30..e531031 100644 --- a/pseudocodeIde/SetClipboardHelper.cs +++ b/pseudocodeIde/SetClipboardHelper.cs @@ -20,7 +20,7 @@ public SetClipboardHelper(string format, object data) protected override void Work() { - var obj = new System.Windows.Forms.DataObject( + DataObject obj = new System.Windows.Forms.DataObject( _format, _data ); @@ -35,7 +35,7 @@ public abstract class StaHelper public void Go() { - var thread = new Thread(new ThreadStart(DoWork)) + Thread thread = new Thread(new ThreadStart(DoWork)) { IsBackground = true, }; diff --git a/pseudocodeIde/interpreter/scanner/Scanner.cs b/pseudocodeIde/interpreter/scanner/Scanner.cs index 538754e..e1b71a4 100644 --- a/pseudocodeIde/interpreter/scanner/Scanner.cs +++ b/pseudocodeIde/interpreter/scanner/Scanner.cs @@ -76,6 +76,10 @@ static Scanner() KEYWORDS.Add("NEU", NEW); KEYWORDS.Add("NICHTS", NULL); + + KEYWORDS.Add("schreibe", IDENTIFIER); + KEYWORDS.Add("warte", IDENTIFIER); + KEYWORDS.Add("benutzereingabe", IDENTIFIER); } public Scanner(string code) diff --git a/pseudocodeIde/pseudocodeIde.csproj b/pseudocodeIde/pseudocodeIde.csproj index 224b32d..c83651f 100644 --- a/pseudocodeIde/pseudocodeIde.csproj +++ b/pseudocodeIde/pseudocodeIde.csproj @@ -37,6 +37,7 @@ + all