예제 #1
0
        /// <summary>Callback for Windows.</summary>
        /// <param name="hwnd">Window handle of the browse dialog box.</param>
        /// <param name="uMsg">Dialog box event that generated the statusMessage.</param>
        /// <param name="lParam">Value whose meaning depends on the event specified in uMsg.</param>
        /// <param name="lpData">Application-defined value that was specified in the lParam member of the BROWSEINFO structure used in the call to SHBrowseForFolder.</param>
        /// <returns>
        /// Returns 0 except in the case of BFFM_VALIDATEFAILED. For that flag, returns 0 to dismiss the dialog or nonzero to keep the dialog displayed.
        /// </returns>
        //[CLSCompliant(false)]
        private int OnBrowseEvent(IntPtr hwnd, BrowseForFolderMessages uMsg, IntPtr lParam, IntPtr lpData)
        {
            var messsage = uMsg;

            href = new HandleRef(this, hwnd);
            switch (messsage)
            {
            case BrowseForFolderMessages.BFFM_INITIALIZED:
                // Dialog is being initialized, so set the initial parameters
                if (!string.IsNullOrEmpty(Caption))
                {
                    SetWindowText(href, Caption);
                }

                if (!string.IsNullOrEmpty(SelectedItem))
                {
                    SendMessage(href, (uint)BrowseForFolderMessages.BFFM_SETSELECTIONW, (IntPtr)1, SelectedItem);
                }

                if (Expanded)
                {
                    SendMessage(href, (uint)BrowseForFolderMessages.BFFM_SETEXPANDED, (IntPtr)1, rootPidl.DangerousGetHandle());
                }

                if (!string.IsNullOrEmpty(OkText))
                {
                    SendMessage(href, (uint)BrowseForFolderMessages.BFFM_SETOKTEXT, (IntPtr)0, OkText);
                }

                Initialized?.Invoke(this, new FolderBrowserDialogInitializedEventArgs(hwnd));
                initialized = true;
                return(0);

            case BrowseForFolderMessages.BFFM_SELCHANGED:
                try
                {
                    if (!initialized || pidl?.DangerousGetHandle() == lParam)
                    {
                        return(0);
                    }
                    var tmpPidl = new PIDL(lParam, false, false);
                    var str     = GetNameForPidl(tmpPidl);
                    if (string.IsNullOrEmpty(str))
                    {
                        return(0);
                    }
                    SelectedItem = str;
                    pidl         = tmpPidl;
                }
                catch
                {
                    return(0);
                }

                SelectedItemChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedItem)));
                return(0);

            case BrowseForFolderMessages.BFFM_VALIDATEFAILEDA:
            case BrowseForFolderMessages.BFFM_VALIDATEFAILEDW:
                if (InvalidFolderSelected != null)
                {
                    var folderName = messsage == BrowseForFolderMessages.BFFM_VALIDATEFAILEDA ? Marshal.PtrToStringAnsi(lParam) : Marshal.PtrToStringUni(lParam);
                    var e          = new InvalidFolderEventArgs(folderName, true);
                    InvalidFolderSelected?.Invoke(this, e);
                    return(e.DismissDialog ? 0 : 1);
                }
                return(0);

            default:
                return(0);
            }
        }
예제 #2
0
        /// <summary>
        /// Selects the item.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="raiseChange">if set to <c>true</c> [raise change].</param>
        protected async System.Threading.Tasks.Task SelectItem(object item, bool raiseChange = true)
        {
            if (!Multiple)
            {
                if (object.Equals(item, selectedItem))
                {
                    return;
                }

                selectedItem = item;
                if (!string.IsNullOrEmpty(ValueProperty))
                {
                    internalValue = PropertyAccess.GetItemOrValueFromProperty(item, ValueProperty);
                }
                else
                {
                    internalValue = item;
                }

                SetSelectedIndexFromSelectedItem();

                SelectedItemChanged?.Invoke(selectedItem);
            }
            else
            {
                if (selectedItems.IndexOf(item) == -1)
                {
                    selectedItems.Add(item);
                }
                else
                {
                    selectedItems.Remove(item);
                }

                if (!string.IsNullOrEmpty(ValueProperty))
                {
                    System.Reflection.PropertyInfo pi = PropertyAccess.GetElementType(Data.GetType()).GetProperty(ValueProperty);
                    internalValue = selectedItems.Select(i => PropertyAccess.GetItemOrValueFromProperty(i, ValueProperty)).AsQueryable().Cast(pi.PropertyType);
                }
                else
                {
                    var firstElement = Data.Cast <object>().FirstOrDefault();
                    var elementType  = firstElement != null?firstElement.GetType() : null;

                    if (elementType != null)
                    {
                        internalValue = selectedItems.AsQueryable().Cast(elementType);
                    }
                    else
                    {
                        internalValue = selectedItems;
                    }
                }
            }
            if (raiseChange)
            {
                await ValueChanged.InvokeAsync(object.Equals(internalValue, null)?default(T) : (T)internalValue);

                if (FieldIdentifier.FieldName != null)
                {
                    EditContext?.NotifyFieldChanged(FieldIdentifier);
                }
                await Change.InvokeAsync(internalValue);
            }
            StateHasChanged();
        }
예제 #3
0
        /// <summary>
        /// Selects the item from value.
        /// </summary>
        /// <param name="value">The value.</param>
        protected virtual void SelectItemFromValue(object value)
        {
            if (value != null && View != null)
            {
                if (!Multiple)
                {
                    if (!string.IsNullOrEmpty(ValueProperty))
                    {
                        if (typeof(EnumerableQuery).IsAssignableFrom(View.GetType()))
                        {
                            SelectedItem = View.OfType <object>().Where(i => object.Equals(PropertyAccess.GetValue(i, ValueProperty), value)).FirstOrDefault();
                        }
                        else
                        {
                            SelectedItem = View.AsQueryable().Where($@"{ValueProperty} == @0", value).FirstOrDefault();
                        }
                    }
                    else
                    {
                        selectedItem = internalValue;
                    }

                    SetSelectedIndexFromSelectedItem();

                    SelectedItemChanged?.Invoke(selectedItem);
                }
                else
                {
                    var values = value as dynamic;
                    if (values != null)
                    {
                        if (!string.IsNullOrEmpty(ValueProperty))
                        {
                            foreach (object v in values)
                            {
                                dynamic item;

                                if (typeof(EnumerableQuery).IsAssignableFrom(View.GetType()))
                                {
                                    item = View.OfType <object>().Where(i => object.Equals(PropertyAccess.GetValue(i, ValueProperty), v)).FirstOrDefault();
                                }
                                else
                                {
                                    item = View.AsQueryable().Where($@"{ValueProperty} == @0", v).FirstOrDefault();
                                }

                                if (!object.Equals(item, null) && selectedItems.IndexOf(item) == -1)
                                {
                                    selectedItems.Add(item);
                                }
                            }
                        }
                        else
                        {
                            selectedItems = ((IEnumerable)values).Cast <object>().ToList();
                        }
                    }
                }
            }
            else
            {
                selectedItem = null;
            }
        }
        void OnSelectedItemChanged(object sender, GenListItemEventArgs e)
        {
            _flyoutMenu.TryGetValue(e.Item.Data as MItem, out Element element);

            SelectedItemChanged?.Invoke(this, new SelectedItemChangedEventArgs(element, -1));
        }
        private async Task OpenDetailAsync(object selectedItem)
        {
            if (selectedItem != null)
            {
                var wg = GridView.ItemsPanelRoot as VariableSizedWrapGrid;

                var itemsPerRow = Math.Floor(wg.ActualWidth / wg.ItemWidth);

                var currentIndexOfDetailItem = GridView.Items.IndexOf(DetailGridItem);

                var itemIndex = GridView.Items.IndexOf(selectedItem);

                if (currentIndexOfDetailItem > -1 && currentIndexOfDetailItem < itemIndex)
                {
                    itemIndex--;
                }

                var row = Math.Min(((int)(itemIndex / itemsPerRow) + 1) * itemsPerRow,
                                   GridView.Items.Count);

                if (DetailGridItem == null)
                {
                    DetailGridItem = new DetailGridItem();
                    DetailGridItem.DetailItemTemplate = DetailItemTemplate;
                    DetailGridItem.Grid = this;

                    Binding bgBinding = new Binding();
                    bgBinding.Path   = new PropertyPath(nameof(DetailBackground));
                    bgBinding.Source = this;
                    DetailGridItem.SetBinding(DetailGridItem.BackgroundProperty, bgBinding);
                }
                else
                {
                    if (currentIndexOfDetailItem != row)
                    {
                        GridView.Items.Remove(DetailGridItem);

                        if (Animate)
                        {
                            await Task.Delay(55);
                        }
                    }
                    DetailGridItem.DataContext = null;
                }

                if (IsOverviewDataSameAsDetailData)
                {
                    DetailItem = selectedItem;

                    //Else = user should do it manualy by listening to the SelectedIndexChanged
                    //or something like that and set the DetailItem manually
                }

                if (!GridView.Items.Contains(DetailGridItem))
                {
                    if (row < GridView.Items.Count(i => !(i is DetailGridItem)))
                    {
                        GridView.Items.Insert((int)row, DetailGridItem);
                    }
                    else
                    {
                        GridView.Items.Add(DetailGridItem);
                    }
                }

                var itemContainer = GridView.ContainerFromItem(DetailGridItem) as GridViewItem;
                if (itemContainer != null)
                {
                    itemContainer.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, itemsPerRow);
                    itemContainer.SetValue(VariableSizedWrapGrid.RowSpanProperty, DetailRowSpan);
                }

                selectedItemChangedInternally = true;
                SelectedItem = selectedItem;
                SelectedItemChanged?.Invoke(this, null);
                selectedItemChangedInternally = false;
            }
        }
예제 #6
0
 // Raises the event on the automation thread (but the SyncContext.Post here is redundant)
 void OnSelectedItemChanged()
 {
     Logger.WindowWatcher.Verbose($"PopupList SelectedItemChanged {SelectedItemText} ListBounds: {ListBounds}");
     _syncContextAuto.Post(_ => SelectedItemChanged?.Invoke(this, EventArgs.Empty), null);
 }
 /// <summary>
 /// Fires the SelectedItemChanged event.
 /// </summary>
 protected virtual void OnSelectedItemChanged()
 {
     SelectedItemChanged?.Invoke(this, EventArgs.Empty);
 }
예제 #8
0
 private void FireSelectedItemChanged(PersonViewModel oldValue, PersonViewModel newValue)
 {
     SelectedItemChanged?.Invoke(this, new ValueChangedEventArgs <PersonViewModel>(oldValue, newValue));
 }
예제 #9
0
 private void RaiseSelectedItemChanged(object oldItem, object newItem)
 {
     SelectedItemChanged?.Invoke(this, new SelectedItemChangedEventArgs(oldItem, newItem));
 }
예제 #10
0
 protected void OnSelectedItemChanged()
 {
     SelectedItemChanged?.Invoke(this, new EventArgs());
 }
예제 #11
0
 public void OnSelectedItemChanged(BoardItem selectedItem)
 {
     if (SelectedItemChanged != null) SelectedItemChanged.Invoke(selectedItem);
 }
 /// <summary>
 /// Raises the <see cref="SelectedItemChanged"/> event.
 /// </summary>
 /// <param name="eventArgs">
 /// <see cref="EventArgs"/> object that provides the arguments for the event.
 /// </param>
 /// <remarks>
 /// <strong>Notes to Inheritors:</strong><br/> When overriding
 /// <see cref="OnSelectedItemChanged"/> in a derived class, be sure to call the base class's
 /// <see cref="OnSelectedItemChanged"/> method so that registered delegates receive the
 /// event.
 /// </remarks>
 protected virtual void OnSelectedItemChanged(EventArgs eventArgs)
 {
     SelectedItemChanged?.Invoke(this, eventArgs);
 }
예제 #13
0
 private void Item_SelectedItem(UserTreeViewItem sender) => SelectedItemChanged?.Invoke(sender);
예제 #14
0
 public override void Selected(UIPickerView picker, nint row, nint component)
 {
     _selectedItem = _itemsSource == null ? null : _itemsSource.ElementAtIndex((int)row);
     SelectedItemChanged?.Invoke(this, EventArgs.Empty);
 }
 private void OnSelectedItemChanged() => SelectedItemChanged?.Invoke(this, EventArgs.Empty);
예제 #16
0
        void Initialize(EvasObject parent)
        {
            _box = new Native.Box(parent)
            {
                AlignmentX = -1,
                AlignmentY = -1,
                WeightX    = 1,
                WeightY    = 1
            };
            SetContent(_box);

            _menu = new GenList(parent)
            {
                BackgroundColor = EColor.Transparent,
                Style           = "solid/default",
            };

            _menu.ItemSelected += (s, e) =>
            {
                _flyoutMenu.TryGetValue(e.Item.Data as Item, out Element element);

                SelectedItemChanged?.Invoke(this, new SelectedItemChangedEventArgs(element, -1));
            };

            _menu.Show();
            _box.PackEnd(_menu);

            _defaultClass = new GenItemClass("double_label")
            {
                GetTextHandler = (obj, part) =>
                {
                    if (part == "elm.text")
                    {
                        return(((Item)obj).Title);
                    }
                    else
                    {
                        return(null);
                    }
                },
                GetContentHandler = (obj, part) =>
                {
                    if (part == "elm.swallow.icon")
                    {
                        var icon = ((Item)obj).Icon;
                        if (icon != null)
                        {
                            var image = new Native.Image(parent)
                            {
                                MinimumWidth  = System.Maui.Maui.ConvertToScaledPixel(24),
                                MinimumHeight = System.Maui.Maui.ConvertToScaledPixel(24)
                            };
                            var result = image.LoadFromImageSourceAsync(icon);
                            return(image);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                    else
                    {
                        return(null);
                    }
                }
            };
        }
예제 #17
0
 public void FireSelectedItemChanged(ITestItem testItem)
 {
     SelectedItemChanged?.Invoke(new TestItemEventArgs(testItem));
 }
 /// <summary>
 /// On SelectedItem changed
 /// </summary>
 /// <param name="oldValue">Old Value</param>
 /// <param name="newValue">New Value</param>
 protected virtual void OnSelectedItemChanged(object oldValue, object newValue)
 {
     SelectedItemChanged?.Invoke(this, EventArgs.Empty);
 }
예제 #19
0
        protected Task SelectedListGroupItemChanged(string text)
        {
            SelectedItem = GetItemBySelectedText(text);

            return(SelectedItemChanged.InvokeAsync(SelectedItem));
        }
예제 #20
0
 private void SubFile_SelectedItemChanged(UserTreeViewItem sender) => SelectedItemChanged?.Invoke(sender);
예제 #21
0
        void UserControl1_MouseDown(object sender, MouseEventArgs e)
        {
            // See where the mouse is clicked
            // If on an object, activate that object
            // If on the background, activate scrolling
            Vector2 location = viewport.TransformToViewport(ClientRectangle, e.Location);

            //IClickable last = clickedObject;

            DateTime t = DateTime.Now;

            for (int i = 0; i < 100; i++)
            {
                float closest = float.PositiveInfinity;
                foreach (Object o in this.objects)
                {
                    IClickable c = o as IClickable;
                    if (c != null)
                    {
                        float distance = c.IsPointOnObject(location);
                        //Console.WriteLine("Distance = " + distance);
                        if (distance < closest)
                        {
                            closest       = distance;
                            clickedObject = c;
                        }
                    }
                }
            }
            double time = (DateTime.Now - t).TotalMilliseconds;

            Console.WriteLine("Took " + time + " Milliseconds");

            //if (clickedObject != null)
            //{
            //    if (last != clickedObject)
            //    {
            //        last.UnHover();
            //    }
            //    clickedObject.Hover(location);
            //}

            if (clickedObject == null)
            {
                clickedObject = viewport as IClickable;
            }

            if (this.SelectedItemChanged != null)
            {
                SelectedItemChanged.Invoke(clickedObject, EventArgs.Empty);
            }

            if (e.Button == MouseButtons.Left)
            {
                clickedObject.MouseDownLeft(location);
            }
            else if (e.Button == MouseButtons.Right)
            {
                clickedObject.MouseDownRight(new Vector2(e.Location.X, e.Location.Y));
            }
            this.Invalidate();
        }
예제 #22
0
 private void CddColorSelectedIndexChanged(object sender, EventArgs e)
 {
     SelectedItemChanged?.Invoke(this, EventArgs.Empty);
 }
 protected virtual void OnSelectedItemChanged(ItemEventArgs e)
 {
     SelectedItemChanged?.Invoke(this, e);
 }
예제 #24
0
 private void RaiseSelectedItemChanged(object value)
 {
     SelectedItemChanged?.Invoke(this, value);
 }