public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { IWindowsFormsEditorService iwes = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; AdvancedTextBox atb = new AdvancedTextBox(); atb.normalmode = false; atb.Buffer.Language = ComponentModel.ServiceHost.Language["ls"]; atb.ProjectHint = (ServiceHost.Scripting as ScriptingService).proj; string sv = conshistory[value] as string; if (sv == null) { if (value is Symbol && value == LSharp.Runtime.Eval(value, (context.Instance as Grid).Environment)) { } else { sv = Printer.WriteToString(value); } } if (sv == null) { sv = string.Empty; } if (sv.Length > 0) { // convert ranges ArrayList reps = new ArrayList(); foreach (Match m in rangematch2.Matches(sv)) { string[] sr = m.Value.Split(' '); int l = sr.Length; if (sr.Length > 1) { Grid.Range r = new Grid.Range(sr[0] + ".." + sr[l - 1]); if (r.Count == l) { int i = 0; foreach (Grid.Cell c in r) { if (c.ToString().ToLower() != sr[i]) { if (i > 0) { r = new Grid.Range(sr[0] + ".." + sr[i - 1]); sv = sv.Replace(string.Join(" ", sr, 0, i), r.ToString().ToLower()); } goto NEXTMATCH; } i++; } sv = sv.Replace(m.Value, r.ToString().ToLower()); } } NEXTMATCH :; } } atb.Buffer.InsertString(sv); atb.Width = 350; atb.Height = 200; // HACK HACK HACK HACK FileManager fm = ServiceHost.File as FileManager; //fm.buffers.Add("$hack$", atb); string ob = fm.current; fm.current = "$hack$"; ApplicationState os = ServiceHost.State; ServiceHost.State |= (ApplicationState.Edit | ApplicationState.Buffer); ServiceHost.State &= ~(ApplicationState.Grid); iwes.DropDownControl(atb); fm.buffers.Remove("$hack$"); ServiceHost.State = os; fm.current = ob; object o = null; string text = atb.Text.Trim(); if (text.Length > 0) { // convert ranges ArrayList reps = new ArrayList(); foreach (Match m in rangematch.Matches(text)) { Grid.Range r = new Grid.Range(m.Value); ArrayList cs = new ArrayList(); foreach (Grid.Cell c in r) { cs.Add(c.ToString()); } string[] sr = cs.ToArray(typeof(string)) as string[]; text = text.Replace(m.Value, string.Join(" ", sr)); } if (text.StartsWith("=")) { o = LSharp.Runtime.EvalString(text.TrimStart('='), (context.Instance as Grid).Environment); } else { o = LSharp.Runtime.ReadString(text, (context.Instance as Grid).Environment); conshistory[o] = atb.Text; } } atb.Dispose(); return(o); }