using System; using System.Collections.Generic; using System.Linq; using JD.Collections.Extensions; using TeaBox; using TeaBox.Gui; using TeaBox.Gui.PropertyGrid; using TeaBox.Macros; using Image = System.Drawing.Image; namespace JD.Pickers.PickerControls { public class Picker : ButtonExtension where TModel : class where TViewModel : class { private readonly Func _createViewModel; private IEnumerable _availableItems; private MultiPicker _multiSelector; private ViewModelCollection _viewModels; protected IEnumerable AvailableItems { set { _availableItems = value; } } protected ViewModelCollection ViewModels { set { _viewModels = value; } } public Picker(IEnumerable availableItems, CellEditor editor, Func createViewModel, Image icon) : base(icon ?? ResourcesCached.Pick, null, editor, "Edit Collection") { _availableItems = availableItems; _createViewModel = createViewModel; } protected override void OnClick(object sender, ExtensionActivateEventArgs e) { if (_viewModels == null) { _viewModels = new ViewModelCollection(_availableItems, _createViewModel); } _multiSelector = new MultiPicker(_viewModels); var selection = new RowValues(Editor.CurrentRow); _multiSelector.Selection.AddRange(selection.Select(_viewModels.GetViewModel)); using (WindowsFormsHostEx.KeepFocusOn(Editor.Control)) { var showDialog = _multiSelector.ShowDialog(); if (showDialog.HasValue && showDialog.Value) { selection.Clear(); foreach (var item in _multiSelector.Selection) { if (item != null) { selection.Add(_viewModels.GetModel(item)); } } } } } } }