private void UpdateSelectedItem() { if (IsSelectedItemSelectable()) { _selectedItem = (IScriptValueListItem)this.SelectedItem; } else { _selectedItem = null; } }
protected override void OnMeasureItem(MeasureItemEventArgs e) { IScriptValueListItem item = this.Items[e.Index] as IScriptValueListItem; if (item == null) { return; } string text = item.DisplayText; var m = e.Graphics.MeasureString(text, item.IsLabel ? _labelFont : this.Font); e.ItemHeight = (int)m.Height; }
protected override void OnKeyDown(KeyEventArgs e) { System.Diagnostics.Debug.WriteLine(e.KeyData.ToString()); switch (e.KeyData) { case Keys.Escape: _selectedItem = null; if (ItemSelected != null) { ItemSelected(this, EventArgs.Empty); } break; case Keys.Enter: UpdateSelectedItem(); if (_selectedItem != null && ItemSelected != null) { ItemSelected(this, EventArgs.Empty); } break; case Keys.Up: if (SelectedIndex > 0) { SelectedIndex -= 1; } e.Handled = IsSelectedItemSelectable(); break; case Keys.Down: if (SelectedIndex < Items.Count - 1) { SelectedIndex += 1; } e.Handled = IsSelectedItemSelectable(); break; } base.OnKeyDown(e); }
/// <summary> /// Edits the value of the specified object. /// </summary> /// <param name="ctx">An <see cref="ITypeDescriptorContext"/> that can be used to gain additional context information.</param> /// <param name="provider">An <see cref="IServiceProvider"/> through which editing services may be obtained.</param> /// <param name="value">An instance of the value being edited.</param> /// <returns>A string containing the new value of the object.</returns> public override object EditValue(ITypeDescriptorContext ctx, IServiceProvider provider, object value) { // sanity if (provider == null) { return(value); } object instance; FlexDesignerHostServices services; if (!Util.EditableModelHelper.GetInstanceAndServices(ctx, out instance, out services)) { return(value); } IGetReportsService grs = services.GetGetReportService(); IScriptEditorService ses = services.GetScriptEditorService(); if (grs == null || ses == null) { return(value); } C1FlexReport report = grs.Report; if (report == null) { return(value); } // Handle both string and ScriptStringValue properties: Type targetType = ctx != null && ctx.PropertyDescriptor != null ? ctx.PropertyDescriptor.PropertyType : typeof(string); // script editor call: Func <object, object> doEdit = (v_) => { string dataSourceName; ScriptEditorContextKind contextKind; EditorScriptContextBase.GuessContextName(report, instance, ctx.PropertyDescriptor.Name, out dataSourceName, out contextKind); object result; if (ses.EditScript(report, dataSourceName, contextKind, instance, ctx.PropertyDescriptor.Name, null, true, out result)) { return(result); } else { return(v_); } }; // select editor style UITypeEditorEditStyle style = GetEditStyle(ctx); object retValue; switch (style) { case UITypeEditorEditStyle.None: retValue = value; break; case UITypeEditorEditStyle.Modal: retValue = doEdit(value); break; case UITypeEditorEditStyle.DropDown: _edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (_edSvc != null) { // show the list _edSvc.DropDownControl(_listBox); _edSvc = null; IScriptValueListItem selectedItem = _listBox.GetSelectedItem(); if (selectedItem == null) { retValue = value; } else if (selectedItem.IsScriptEditor) { retValue = doEdit(value); } else if (selectedItem.IsValue) { retValue = Util.ScriptValueHelper.TextToObject(selectedItem.Text, targetType, selectedItem.IsExpression); } else { retValue = value; } } else { retValue = value; } break; default: System.Diagnostics.Debug.Assert(false); retValue = null; break; } // return whatever we got return(retValue); }