public SelectedItemsBinder(MultiSelector multiSelector) { this.multiSelector = multiSelector; this.multiSelector.SelectionChanged += this.OnMultiSelectorSelectionChanged; this.multiSelector.Unloaded += this.OnMultiSelectorUnloaded; this.multiSelector.SetValue(SelectedItemsBinderProperty, this); }
protected override void OnStart() { var scene = new ReactiveScene(); var layer = new ReactiveLayer2D(); var layout = new LinearPanel() { ItemSpan = new Vector2DF(0, 36), Position = new Vector2DF(20, 20), }; layout.SetEasingBehaviorUp(EasingStart.StartRapidly2, EasingEnd.EndSlowly3, 10); Func<Object2D> cursorCreator = () => new TextureObject2D() { Texture = Engine.Graphics.CreateTexture2D("ListCursor.png"), Color = new Color(0, 255, 0, 128), }; selector = new MultiSelector<int, Control>(CreateController(), layout, cursorCreator) { Loop = true, CursorOffset = new Vector2DF(-5, -3), }; selector.Cursor.Texture = Engine.Graphics.CreateTexture2D("ListCursor.png"); selector.BindKey(Control.Down, Control.Up, Control.Decide, Control.Cancel, Control.Sub); selector.SetEasingBehaviorUp(EasingStart.StartRapidly2, EasingEnd.EndSlowly3, 10); font = Engine.Graphics.CreateDynamicFont("", 20, new Color(255, 255, 255, 255), 0, new Color(0, 0, 0, 255)); for(int i = 0; i < 8; i++) { var obj = new ListItem() { Text = $"選択肢{i}", Font = font, }; Engine.AddObject2D(obj); selector.AddChoice(i, obj); } var moveSound = Engine.Sound.CreateSoundSource("kachi38.wav", true); var decideSound = Engine.Sound.CreateSoundSource("pi78.wav", true); var cancelSound = Engine.Sound.CreateSoundSource("pi11.wav", true); selector.OnSelectionChanged.Subscribe(i => Engine.Sound.Play(moveSound)); selector.OnDecide.Subscribe(i => Engine.Sound.Play(decideSound)); selector.OnCancel.Subscribe(i => Engine.Sound.Play(cancelSound)); selector.OnAdd.Subscribe(i => Engine.Sound.Play(decideSound)); selector.OnRemove.Subscribe(i => Engine.Sound.Play(cancelSound)); selector.OnDecideForMulti.Subscribe(xs => { foreach(var x in xs.ToList()) { selector.GetItemForChocie(x)?.Dispose(); selector.RemoveChoice(x); } }); Engine.ChangeScene(scene); scene.AddLayer(layer); layer.AddObject(selector); }
/// <summary> /// Execute the selection algorithm, returning multiple results. /// </summary> public List <T> SelectMultiple(int count) { CalculateCumulativeWeights(); var Selector = new MultiSelector <T>(this); return(Selector.Select(count)); }
public static IList GetSelectedItems(this MultiSelector multiSelector) { if (multiSelector == null) { throw new ArgumentNullException("multiSelector"); } return((IList)multiSelector.GetValue(SelectedItemsProperty)); }
public static void SetSelectedItems(this MultiSelector multiSelector, IList selectedItems) { if (multiSelector == null) { throw new ArgumentNullException("multiSelector"); } multiSelector.SetValue(SelectedItemsProperty, selectedItems); }
public static object GetSelectedItem(this ItemsControl itemsControl) { return(itemsControl switch { MultiSelector multiSelector => multiSelector.SelectedItem, ListBox listBox => listBox.SelectedItem, TreeView treeView => treeView.GetValue(TreeView.SelectedItemProperty), Selector selector => selector.SelectedItem, _ => null });
public void Setup() { _flattener = new Mock <ITreeItemHierarchyFlattener>(); _rangeSelector = new Mock <IRangeSelector>(); _inverseSelector = new Mock <ISelector>(); _regularSelector = new Mock <ISelector>(); _selectionService = new MultiSelector(_rangeSelector.Object , _inverseSelector.Object , _regularSelector.Object); }
/// <summary> /// Metodo para rellenar una tabla /// </summary> /// <param name="grid"> Nombre de la tabla principal</param> /// <param name="campos"> Columnas de la tabla SQL "columna1,columna2" </param> /// <param name="tabla_SQL"> Nombre de la tabla SQL </param> /// <param name="tabla_DataGRID"> nombre de la ruta de enlace con DataGrid </param> public void popular_tabla(MultiSelector grid, string campos, string tabla_SQL, string tabla_DataGRID) { ConectorDB.AbrirConexion(); string SQL = "SELECT " + campos + " FROM " + tabla_SQL; MySqlCommand mySqlCommand = new MySqlCommand(SQL, ConectorDB.conectar); MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(mySqlCommand); DataSet dataSet = new DataSet(); mySqlDataAdapter.Fill(dataSet, tabla_DataGRID); grid.DataContext = dataSet; ConectorDB.CerrarConexion(); }
protected override void OnAttached() { base.OnAttached(); multiSelector = AssociatedObject as MultiSelector; if (multiSelector == null) { throw new InvalidOperationException(); } multiSelector.ItemContainerGenerator.StatusChanged += ItemContainerGeneratorOnStatusChanged; }
private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { MultiSelector multiSelectorControl = d as MultiSelector; NotifyCollectionChangedEventHandler handler = (sender, args) => { if (multiSelectorControl != null) { IList listSelectedItems = multiSelectorControl.SelectedItems; if (args.OldItems != null) { foreach (var item in args.OldItems) { if (listSelectedItems.Contains(item)) { listSelectedItems.Remove(item); } } } if (args.NewItems != null) { foreach (var item in args.NewItems) { if (!listSelectedItems.Contains(item)) { listSelectedItems.Add(item); } } } } }; if (e.OldValue == null && multiSelectorControl != null) { multiSelectorControl.SelectionChanged += OnSelectionChanged; } if (e.OldValue is INotifyCollectionChanged) { (e.OldValue as INotifyCollectionChanged).CollectionChanged -= handler; } if (e.NewValue is INotifyCollectionChanged) { (e.NewValue as INotifyCollectionChanged).CollectionChanged += handler; } }
public void AttachControl(MultiSelector selector) { if (AssociatedObject == null) { AssociatedObject = selector; AssociatedObject.SelectionChanged += SelectionChanged; } else { if (AssociatedObject != selector) { throw new InvalidOperationException("event receiver is not correct"); } } }
/// <summary> /// Metodo para rellenar una tabla /// </summary> /// <param name="DataGrid"> Nombre de la tabla principal</param> /// <param name="NombreTabla"> Nombre de la tabla SQL </param> /// <param name="RutaEnlaceDataGrid"> nombre de la ruta de enlace con DataGrid </param> /// <param name="Columnas"> Columnas de la tabla SQL </param> public DataSet LLENAR_DATAGRID(MultiSelector DataGrid, string NombreTabla, string RutaEnlaceDataGrid, params string[] Columnas) { string campos_local = String.Join(",", Columnas); ConectorDB.AbrirConexion(); string SQL = "SELECT " + campos_local + " FROM " + NombreTabla; SqlCommand mySqlCommand = new SqlCommand(SQL, ConectorDB.conectar); SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(mySqlCommand); DataSet dataSet = new DataSet(); mySqlDataAdapter.Fill(dataSet, RutaEnlaceDataGrid); //DataGrid.DataContext = dataSet; ConectorDB.CerrarConexion(); return(dataSet); }
public MultiSelectorSelectedItemsAdapter( MultiSelector control, Func <object, object> itemKeySelector) { if (control == null) { throw new ArgumentNullException("control"); } if (itemKeySelector == null) { throw new ArgumentNullException("itemKeySelector"); } _control = control; _control.SelectionChanged += OnControlSelectionChanged; _itemKeySelector = itemKeySelector; }
private static void SelectedItemListPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { MultiSelector selector = sender as MultiSelector; if (selector != null) { if (e.OldValue == null && e.NewValue != null) { selector.SelectionChanged += Selector_SelectionChanged;; } else if (e.OldValue != null && e.NewValue == null) { selector.SelectionChanged -= Selector_SelectionChanged; } } }
public static void SelectManyItems(this MultiSelector control, IEnumerable itemsToBeSelected) { control.Dispatcher.Invoke( (Action)(() => { if (!(bool)_piIsUpdatingSelectedItems.GetValue(control, null)) { _miBeginUpdateSelectedItems.Invoke(control, null); foreach (object item in itemsToBeSelected) { control.SelectedItems.Add(item); } _miEndUpdateSelectedItems.Invoke(control, null); } }) ); }
protected override void OnAttached() { base.OnAttached(); var binding = BindingOperations.GetBinding(this, SelectedItemsProperty); if (binding.Mode != BindingMode.OneWayToSource) { throw new InvalidOperationException("SelectedItems binding mode must be OneWayToSource"); } this.associatedListBox = this.AssociatedObject as ListBox; this.associatedMultiSelector = this.AssociatedObject as MultiSelector; this.AssociatedObject.SelectionChanged += this.AssociatedObject_SelectionChanged; this.UpdateSelectedItems(); }
public static void SetItemSelected(this ItemsControl itemsControl, object item, bool value) { if (itemsControl is MultiSelector) { MultiSelector multiSelector = (MultiSelector)itemsControl; if (value) { if (multiSelector.CanSelectMultipleItems()) { multiSelector.SelectedItems.Add(item); } else { multiSelector.SelectedItem = item; } } else { multiSelector.SelectedItems.Remove(item); } } else if (itemsControl is ListBox) { ListBox listBox = (ListBox)itemsControl; if (value) { if (listBox.SelectionMode != SelectionMode.Single) { listBox.SelectedItems.Add(item); } else { listBox.SelectedItem = item; } } else { listBox.SelectedItems.Remove(item); } } }
public static bool CanSelectMultipleItems(this ItemsControl itemsControl) { MultiSelector multiSelector = itemsControl as MultiSelector; if (multiSelector != null) { // The CanSelectMultipleItems property is protected. Use reflection to // get it's value anyway. return((bool)multiSelector.GetType() .GetProperty("CanSelectMultipleItems", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(itemsControl, null)); } ListBox listBox = itemsControl as ListBox; if (listBox != null) { return(listBox.SelectionMode != SelectionMode.Single); } return(false); }
public static void SelectManyItems(this MultiSelector control, IEnumerable itemsToBeSelected) { control.Dispatcher.Invoke( (Action)(() => { if ((bool)_piIsUpdatingSelectedItems.GetValue(control, null)) { // That should not happen, as this code now runs in the // control dispatcher thread. But if it does, then throw // an exception, or do some other error handling appropriate // for your software. } _miBeginUpdateSelectedItems.Invoke(control, null); foreach (object item in itemsToBeSelected) { control.SelectedItems.Add(item); } _miEndUpdateSelectedItems.Invoke(control, null); }) ); }
public static IEnumerable GetSelectedItems(this ItemsControl itemsControl) { MultiSelector multiSelector = itemsControl as MultiSelector; if (multiSelector != null) { return(multiSelector.SelectedItems); } ListBox listBox = itemsControl as ListBox; if (listBox != null) { if (listBox.SelectionMode == SelectionMode.Single) { return(Enumerable.Repeat(listBox.SelectedItem, 1)); } else { return(listBox.SelectedItems); } } TreeView treeView = itemsControl as TreeView; if (treeView != null) { return(Enumerable.Repeat(treeView.SelectedItem, 1)); } Selector selector = itemsControl as Selector; if (selector != null) { return(Enumerable.Repeat(selector.SelectedItem, 1)); } return(Enumerable.Empty <object>()); }
private static void UpdateSelectedItems(MultiSelector grid) { var list = GetSelectedItems(grid); var i = 0; for (; i < grid.SelectedItems.Count; i++) { var gridItem = grid.SelectedItems[i]; while (list.Count > i && !AreEqual(gridItem, list[i])) { list.RemoveAt(i); } if (list.Count <= i || !AreEqual(gridItem, list[i])) { list.Insert(i, gridItem); } } while (list.Count > i) { list.RemoveAt(i); } }
//d is MultiSelector (d as ListBox not supported) static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs args) { if (GetSelectionChangedHandler(d) != null) { return; } if (d is MultiSelector)//DataGrid { MultiSelector multiselector = d as MultiSelector; SelectionChangedEventHandler selectionchanged = null; if (GetSelectedItems(d) != null) { foreach (var selected in GetSelectedItems(d) as IList) { multiselector.SelectedItems.Add(selected); } } selectionchanged = (sender, e) => { SetSelectedItems(d, multiselector.SelectedItems); }; SetSelectionChangedHandler(d, selectionchanged); multiselector.SelectionChanged += GetSelectionChangedHandler(d); } else if (d is ListBox) { ListBox listbox = d as ListBox; SelectionChangedEventHandler selectionchanged = null; selectionchanged = (sender, e) => { SetSelectedItems(d, listbox.SelectedItems); }; SetSelectionChangedHandler(d, selectionchanged); listbox.SelectionChanged += GetSelectionChangedHandler(d); } }
void SetSelection(Selector selector) { MultiSelector multiSelector = selector as MultiSelector; ListBox listBox = selector as ListBox; if (multiSelector != null) { multiSelector.SelectedItems.Clear(); foreach (T item in SelectedItems) { multiSelector.SelectedItems.Add(item); } } else if (listBox != null) { listBox.SelectedItems.Clear(); foreach (T item in SelectedItems) { listBox.SelectedItems.Add(item); } } }
/// <summary> /// Metodo che mi consente di effettuare il refresh della lista mantenendo le vecchie selezioni /// </summary> public void RefreshSelectedItemWithMemory() { // Update the UI control. foreach (Control control in controls) { MultiSelector multiSelector = control as MultiSelector; ListBox listBox = control as ListBox; if (multiSelector != null) { foreach (T item in SelectedItems) { multiSelector.SelectedItems.Add(item); } } else if (listBox != null) { foreach (T item in SelectedItems) { listBox.SelectedItems.Add(item); } } } }
public static IObservable <EventPattern <ToolTipEventArgs> > ToolTipClosingObserver(this MultiSelector This) { return(Observable.FromEventPattern <ToolTipEventHandler, ToolTipEventArgs>(h => This.ToolTipClosing += h, h => This.ToolTipClosing -= h)); }
public MultiSelectorAdapter(MultiSelector multiSelector) { this.multiSelector = multiSelector; }
protected override void OnStart() { font = Engine.Graphics.CreateDynamicFont("", 20, new Color(255, 0, 0, 255), 0, new Color(0, 0, 0, 0)); var layout = new LinearPanel() { ItemSpan = new Vector2DF(0, 40), }; var texture = Engine.Graphics.CreateTexture2D("ListCursor.png"); selector = new MultiSelector<int, Control>( CreateController(), layout, () => new TextureObject2D { Texture = texture, Color = new Color(0, 255, 0, 128), }) { IsControllerUpdated = true, Position = new Vector2DF(30, 30), }; selector.BindKey(Control.Down, Control.Up, Control.Decide, Control.Cancel, Control.Sub); selector.Cursor.Texture = Engine.Graphics.CreateTexture2D("ListCursor.png"); layout.SetEasingBehaviorUp(EasingStart.StartRapidly2, EasingEnd.EndSlowly3, 10); selector.SetEasingBehaviorUp(EasingStart.StartRapidly2, EasingEnd.EndSlowly3, 10); selector.OnDecideForMulti.Subscribe(xs => { foreach(var item in xs.ToArray()) { collection.Remove(item); } }); collection = new ObservableCollection<int>(); for(int i = 0; i < 5; i++) { collection.Add(i); } CollectionBinderForSelector<int>.Bind(selector, collection, i => new TextObject2D() { Font = font, Text = $"アイテム{i}", Color = new Color(0, 0, 0, 255), }, true); for(int i = 5; i < 10; i++) { collection.Add(i); } Engine.AddObject2D(new GeometryObject2D { Shape = new RectangleShape { DrawingArea = new RectF(0, 0, 640, 480) }, DrawingPriority = -1 }); Engine.AddObject2D(selector); }
public static IObservable <EventPattern <ContextMenuEventArgs> > ContextMenuClosingObserver(this MultiSelector This) { return(Observable.FromEventPattern <ContextMenuEventHandler, ContextMenuEventArgs>(h => This.ContextMenuClosing += h, h => This.ContextMenuClosing -= h)); }
public static IObservable <EventPattern <MouseButtonEventArgs> > MouseDownObserver(this MultiSelector This) { return(Observable.FromEventPattern <MouseButtonEventHandler, MouseButtonEventArgs>(h => This.MouseDown += h, h => This.MouseDown -= h)); }
public static IObservable <EventPattern <MouseButtonEventArgs> > PreviewMouseUpObserver(this MultiSelector This) { return(Observable.FromEventPattern <MouseButtonEventHandler, MouseButtonEventArgs>(h => This.PreviewMouseUp += h, h => This.PreviewMouseUp -= h)); }
public SelectionViewManager(MultiSelector attachedElement, SelectionView selectionView) { this.attachedElement = attachedElement; this.selectionView = selectionView; //selectionView.SelectionChanged += selectionView_SelectionChanged; }
public static List <T> SelectedItems <T>(this MultiSelector multiSelector) => multiSelector.SelectedItems.Cast <T>().ToList();