Пример #1
0
 public SelectedItemsBinder(MultiSelector multiSelector)
 {
     this.multiSelector = multiSelector;
     this.multiSelector.SelectionChanged += this.OnMultiSelectorSelectionChanged;
     this.multiSelector.Unloaded         += this.OnMultiSelectorUnloaded;
     this.multiSelector.SetValue(SelectedItemsBinderProperty, this);
 }
Пример #2
0
		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);
		}
Пример #3
0
        /// <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));
        }
Пример #4
0
        public static IList GetSelectedItems(this MultiSelector multiSelector)
        {
            if (multiSelector == null)
            {
                throw new ArgumentNullException("multiSelector");
            }

            return((IList)multiSelector.GetValue(SelectedItemsProperty));
        }
Пример #5
0
        public static void SetSelectedItems(this MultiSelector multiSelector, IList selectedItems)
        {
            if (multiSelector == null)
            {
                throw new ArgumentNullException("multiSelector");
            }

            multiSelector.SetValue(SelectedItemsProperty, selectedItems);
        }
Пример #6
0
 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
     });
Пример #7
0
 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);
 }
Пример #8
0
        /// <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();
        }
Пример #9
0
        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;
        }
    }
Пример #11
0
 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");
         }
     }
 }
Пример #12
0
        /// <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;
 }
Пример #14
0
        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;
                }
            }
        }
Пример #15
0
 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);
         }
     })
         );
 }
Пример #16
0
        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();
        }
Пример #17
0
        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);
                }
            }
        }
Пример #18
0
        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);
        }
Пример #19
0
 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);
     })
         );
 }
Пример #20
0
        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>());
        }
Пример #21
0
        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);
            }
        }
Пример #22
0
        //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);
            }
        }
Пример #23
0
        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));
 }
Пример #26
0
 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;
 }
Пример #32
0
 public static List <T> SelectedItems <T>(this MultiSelector multiSelector) => multiSelector.SelectedItems.Cast <T>().ToList();