/// <summary>
        /// Sets the order parameters.
        /// </summary>
        protected virtual void SetOrderParameters()
        {
            void setNumericProperties(bool setMargin = false)
            {
                var listboxItems = modList.GetLogicalChildren().Cast <ListBoxItem>();

                foreach (var item in listboxItems)
                {
                    var grid = item.GetLogicalChildren().OfType <Grid>().FirstOrDefault();
                    if (grid != null)
                    {
                        var orderCtrl = grid.GetLogicalChildren().OfType <MinMaxNumericUpDown>().FirstOrDefault(p => p.Name == OrderName);
                        if (orderCtrl != null)
                        {
                            orderCtrl.Minimum = 1;
                            orderCtrl.Maximum = ViewModel.MaxOrder;
                            if (setMargin)
                            {
                                var left  = 0;
                                var right = 0;
                                if (orderCtrl.Bounds.Width > 100)
                                {
                                    right = 10;
                                }
                                else
                                {
                                    left = 6;
                                }
                                orderCtrl.Margin = new Avalonia.Thickness(left, 0, right, 0);
                            }
                        }
                    }
                }
            }

            ViewModel.ModReordered += (mod, instant) =>
            {
                setNumericProperties(instant);
                modList.Focus();
                FocusOrderTextBoxAsync(mod).ConfigureAwait(true);
            };

            this.WhenAnyValue(v => v.ViewModel.MaxOrder).Subscribe(max =>
            {
                if (Dispatcher.UIThread.CheckAccess())
                {
                    setNumericProperties();
                }
                else
                {
                    Dispatcher.UIThread.InvokeAsync(() => setNumericProperties());
                }
            }).DisposeWith(Disposables);

            modList.LayoutUpdated += (sender, args) =>
            {
                setNumericProperties(true);
            };
        }
        /// <summary>
        /// Sets the UI parameters.
        /// </summary>
        protected virtual void SetUIParameters()
        {
            var performingUISet = false;

            async Task setUIProperties()
            {
                while (performingUISet)
                {
                    await Task.Delay(25);
                }
                performingUISet = true;
                await Dispatcher.UIThread.SafeInvokeAsync(() =>
                {
                    var listboxItems = modList.GetLogicalChildren().Cast <ListBoxItem>();
                    foreach (var item in listboxItems)
                    {
                        var grid = item.GetLogicalChildren().OfType <Grid>().FirstOrDefault();
                        if (grid != null)
                        {
                            for (int i = 0; i < grid.ColumnDefinitions.Count; i++)
                            {
                                var col   = grid.ColumnDefinitions[i];
                                var width = header.ColumnDefinitions[i].ActualWidth;
                                if (width >= 0 && !double.IsInfinity(width) && !double.IsNaN(width))
                                {
                                    col.Width = new GridLength(header.ColumnDefinitions[i].ActualWidth);
                                }
                            }
                            var orderCtrl = grid.GetLogicalChildren().OfType <MinMaxNumericUpDown>().FirstOrDefault(p => p.Name == OrderName);
                            if (orderCtrl != null)
                            {
                                orderCtrl.Minimum = 1;
                                orderCtrl.Maximum = ViewModel.MaxOrder;
                            }
                        }
                    }
                });

                performingUISet = false;
            }

            ViewModel.ModReordered += (mod, instant) =>
            {
                setUIProperties().ConfigureAwait(false);
                modList.Focus();
                FocusListBoxItemAsync(mod, instant).ConfigureAwait(true);
            };

            this.WhenAnyValue(v => v.ViewModel.MaxOrder).Subscribe(max =>
            {
                setUIProperties().ConfigureAwait(false);
            }).DisposeWith(Disposables);

            modList.LayoutUpdated += (sender, args) =>
            {
                setUIProperties().ConfigureAwait(false);
            };
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Sets the order parameters.
        /// </summary>
        protected virtual void SetOrderParameters()
        {
            void setNumericProperties(bool setMargin = false)
            {
                var listboxItems = modList.GetLogicalChildren().Cast <ListBoxItem>();

                foreach (var item in listboxItems)
                {
                    var grid = item.GetLogicalChildren().OfType <Grid>().FirstOrDefault();
                    if (grid != null)
                    {
                        var orderCtrl = grid.GetLogicalChildren().OfType <MinMaxNumericUpDown>().FirstOrDefault(p => p.Name == OrderName);
                        if (orderCtrl != null)
                        {
                            orderCtrl.Minimum = 1;
                            orderCtrl.Maximum = ViewModel.MaxOrder;
                            if (setMargin)
                            {
                                var left  = 0;
                                var right = 0;
                                if (orderCtrl.Bounds.Width > 100)
                                {
                                    right = 10;
                                }
                                else
                                {
                                    left = 6;
                                }
                                orderCtrl.Margin = new Avalonia.Thickness(left, 0, right, 0);
                            }
                        }
                    }
                }
            }

            ViewModel.ModReordered += (args) =>
            {
                setNumericProperties();
                modList.Focus();
                FocusOrderTextboxAsync(args).ConfigureAwait(true);
            };

            this.WhenAnyValue(v => v.ViewModel.MaxOrder).Subscribe(max =>
            {
                setNumericProperties();
            }).DisposeWith(Disposables);

            var previousHashState = false;

            this.WhenAnyValue(v => v.ViewModel.CanExportModHashReport).Subscribe(s =>
            {
                if (s != previousHashState)
                {
                    cachedMenuItems = new Dictionary <object, List <MenuItem> >();
                }
                previousHashState = s;
            }).DisposeWith(Disposables);

            modList.LayoutUpdated += (sender, args) =>
            {
                setNumericProperties(true);
            };
        }