Exemplo n.º 1
0
        private void Register()
        {
            itemsPresenter = listBox.FindVisualChildOfType <ItemsPresenter>();

            if (itemsPresenter == null)
            {
                return;
            }

            var adornerLayer = AdornerLayer.GetAdornerLayer(itemsPresenter);

            if (adornerLayer == null)
            {
                return;
            }

            selectionRect = new SelectionAdorner(itemsPresenter);
            adornerLayer.Add(selectionRect);

            selector = new ItemsControlSelector(listBox);

            autoScroller = new AutoScroller(listBox);
            autoScroller.OffsetChanged += OnOffsetChanged;

            // The ListBox intercepts the regular MouseLeftButtonDown event
            // to do its selection processing, so we need to handle the
            // PreviewMouseLeftButtonDown. The scroll content won't receive
            // the message if we click on a blank area so use the ListBox.
            listBox.PreviewMouseLeftButtonDown += OnPreviewMouseLeftButtonDown;
            listBox.MouseLeftButtonUp          += OnMouseLeftButtonUp;
            listBox.MouseMove += OnMouseMove;
        }
Exemplo n.º 2
0
        private void UpdateAdorner(UIElement directlyOverElement)
        {
            if (_selectionAdorner != null)
            {
                _adornerLayer.Remove(_selectionAdorner);
            }

            if (directlyOverElement != null && _settings.IsShowAdorner)
            {
                var adornerLayer = AdornerLayer.GetAdornerLayer(directlyOverElement);
                if (adornerLayer != null)
                {
                    _adornerLayer = adornerLayer;
                    if (directlyOverElement is Grid)
                    {
                        _selectionAdorner = new GridAdorner(directlyOverElement);
                    }
                    else
                    {
                        _selectionAdorner = new SelectionAdorner(directlyOverElement);
                    }

                    _adornerLayer.Add(_selectionAdorner);
                }
            }
        }
        private static void OnDesignerContinueSelect(object sender,
                                                     MouseEventArgs e)
        {
            if (_selectedItemType != SelectedItemType.SelectItem)
            {
                return;
            }

            if (e.LeftButton != MouseButtonState.Pressed)
            {
                _rubberbandSelectionStartPoint = null;
            }

            if (_rubberbandSelectionStartPoint.HasValue)
            {
                var adornerLayer = AdornerLayer.GetAdornerLayer(_itemsPanel);
                if (adornerLayer != null)
                {
                    var adorner = new SelectionAdorner(_itemsPanel,
                                                       _rubberbandSelectionStartPoint,
                                                       _designerVewModel,
                                                       _designerVewModel.ItemToDraw as ISelectionItem);
                    adornerLayer.Add(adorner);
                }
            }
            e.Handled = true;
        }
Exemplo n.º 4
0
        public RegionSelectorViewModel(
            [NotNull] ISelectionAdornerViewModel selectionAdorner,
            [NotNull][Dependency(WellKnownSchedulers.UI)] IScheduler uiScheduler,
            [NotNull][Dependency(WellKnownSchedulers.Background)] IScheduler bgScheduler)
        {
            SelectionAdorner = selectionAdorner.AddTo(Anchors);
            windowSeeker     = new TaskWindowSeeker
            {
                SkipNotVisibleWindows = true
            };

            var refreshRequest = new Subject <Unit>();

            SelectionAdorner.WhenAnyValue(x => x.MousePosition, x => x.Owner).ToUnit()
            .Merge(refreshRequest)
            .Select(x => new { SelectionAdorner.MousePosition, SelectionAdorner.Owner })
            .Where(x => x.Owner != null)
            .Sample(ThrottlingPeriod, bgScheduler)
            .ObserveOn(uiScheduler)
            .Select(x => x.MousePosition.ToScreen(x.Owner))
            .Select(x => new Rectangle(x.X, x.Y, 1, 1))
            .Select(ToRegionResult)
            .Do(x => Log.Debug($"Selection candidate: {x}"))
            .Subscribe(x => SelectionCandidate = x)
            .AddTo(Anchors);

            refreshRequest
            .Subscribe(() => windowSeeker.Refresh())
            .AddTo(Anchors);

            Observable.Timer(DateTimeOffset.Now, TimeSpan.FromSeconds(1), bgScheduler).ToUnit()
            .Subscribe(refreshRequest)
            .AddTo(Anchors);
        }
Exemplo n.º 5
0
        static void UpdatePosition(ScrollContentPresenter p, bool highlightOnly)
        {
            ScrollViewer     scrollViewer = UITools.FindAncestor <ScrollViewer>(p);
            SelectionAdorner _adorner     = GetSelectionAdorner(p);

            if (GetIsDragging(p))
            {
                Point startScrollbarPosition = GetStartScrollbarPosition(p);
                Point curScrollbarPosition   = GetScrollbarPosition(p);
                Point startPosition          = GetStartPosition(p);
                Point curPosition            = Mouse.GetPosition(p);

                if (!_adorner.IsSelecting)
                {
                    if (Math.Abs(startPosition.X - curPosition.X) > SystemParameters.MinimumHorizontalDragDistance ||
                        Math.Abs(startPosition.Y - curPosition.Y) > SystemParameters.MinimumVerticalDragDistance)
                    {
                        _adorner.IsSelecting = true;
                        Mouse.Capture(p);
                    }
                }
                else
                {
                    Vector offset = Point.Subtract(startScrollbarPosition, curScrollbarPosition);
                    _adorner.StartPosition = Point.Add(startPosition, offset);
                    _adorner.EndPosition   = curPosition;
                    UpdateSelection(p, new Rect(
                                        new Point(startPosition.X + startScrollbarPosition.X, startPosition.Y + startScrollbarPosition.Y),
                                        new Point(curPosition.X + curScrollbarPosition.X, curPosition.Y + curScrollbarPosition.Y)), highlightOnly);
                }
            }
        }
Exemplo n.º 6
0
        private bool Register()
        {
            this.scrollContent = FindChild <ScrollContentPresenter>(this.listBox);
            if (this.scrollContent != null)
            {
                this.autoScroller = new AutoScroller(this.listBox);
                this.autoScroller.OffsetChanged += this.OnOffsetChanged;

                this.selectionRect = new SelectionAdorner(this.scrollContent);
                this.scrollContent.AdornerLayer.Add(this.selectionRect);

                this.selector = new ItemsControlSelector(this.listBox);

                // The ListBox intercepts the regular MouseLeftButtonDown event
                // to do its selection processing, so we need to handle the
                // PreviewMouseLeftButtonDown. The scroll content won't receive
                // the message if we click on a blank area so use the ListBox.
                this.listBox.PreviewMouseLeftButtonDown += this.OnPreviewMouseLeftButtonDown;
                this.listBox.MouseLeftButtonUp          += this.OnMouseLeftButtonUp;
                this.listBox.MouseMove += this.OnMouseMove;
            }

            // Return success if we found the ScrollContentPresenter
            return(this.scrollContent != null);
        }
Exemplo n.º 7
0
        static void EndDragging(ScrollContentPresenter p)
        {
            SelectionAdorner _adorner = GetSelectionAdorner(p);

            if (_adorner.IsSelecting)
            {
                UpdatePosition(p, false);
                _adorner.IsSelecting = false;
                SetIsDragging(p, false);
            }
        }
Exemplo n.º 8
0
        private ScrollContentPresenter UpdateScrollContent()
        {
            scrollContent = FindChild <ScrollContentPresenter>(listBox);
            if (scrollContent != null)
            {
                selectionRect = new SelectionAdorner(scrollContent);
                scrollContent.AdornerLayer.Add(selectionRect);
            }

            return(scrollContent);
        }
Exemplo n.º 9
0
        private void CreateSelectionAdorner(Point startPoint)
        {
            RemoveSelectionAdorner();

            if (_adornerLayer == null)
            {
                _adornerLayer = AdornerLayer.GetAdornerLayer(_selector);
            }

            _selectionAdorner = new SelectionAdorner(_selector, startPoint);
            _adornerLayer.Add(_selectionAdorner);
        }
        private void CreateAdorner(Canvas canvas, PointEx origin, PointEx point)
        {
            Adorner                     = new SelectionAdorner(canvas);
            Adorner.Zoom                = GetZoomScaleTransform().ScaleX;
            Adorner.SelectionOrigin     = new Point(origin.X, origin.Y);
            Adorner.SelectionRect       = new RectEx(origin.X, origin.Y, point.X, point.Y);
            Adorner.SnapsToDevicePixels = false;

            RenderOptions.SetEdgeMode(Adorner, EdgeMode.Aliased);
            AdornerLayer.GetAdornerLayer(canvas).Add(Adorner);
            Adorner.InvalidateVisual();
        }
Exemplo n.º 11
0
 internal static object PositionCheck(DependencyObject sender, object value)
 {
     if (value is Point)
     {
         Point            ptValue = (Point)value;
         SelectionAdorner adorner = sender as SelectionAdorner;
         ptValue.X = Math.Max(ptValue.X, 0);
         ptValue.X = Math.Min(ptValue.X, adorner.ActualWidth);
         ptValue.Y = Math.Max(ptValue.Y, 0);
         ptValue.Y = Math.Min(ptValue.Y, adorner.ActualHeight);
         return(ptValue);
     }
     return(value);
 }
Exemplo n.º 12
0
        private void SelectElement(FrameworkElement element)
        {
            if (_overlayElement != null)
            {
                AdornerLayer.GetAdornerLayer(_overlayElement.AdornedElement)?.Remove(_overlayElement);
            }

            if (element != null)
            {
                _overlayElement = new SelectionAdorner(element);
                _overlayElement.MouseLeftButtonDown += OverlayElementMouseLeftButtonDown;
                AdornerLayer.GetAdornerLayer(element)?.Add(_overlayElement);
            }
            else
            {
                _overlayElement = null;
            }
        }
Exemplo n.º 13
0
        private void RemoveSelectionAdorner()
        {
            if (_adornerLayer == null)
            {
                return;
            }
            if (_selectionAdorner == null)
            {
                return;
            }

            _selectionAdorner.EndPoint = null;

            _adornerLayer.Remove(_selectionAdorner);

            _selectionAdorner = null;
            _adornerLayer     = null;
        }
Exemplo n.º 14
0
 private void InitializePathAdorner(SelectionAdorner adorner, Geometry geometry)
 {
     adorner.Outline = geometry;
     adorner.Visibility = Visibility.Visible;
 }
Exemplo n.º 15
0
 private void ResetPathAdorner(SelectionAdorner adorner)
 {
     adorner.Outline = (Geometry)null;
     adorner.Visibility = Visibility.Collapsed;
 }
 private void RemoveAdorner(Canvas canvas)
 {
     AdornerLayer.GetAdornerLayer(canvas).Remove(Adorner);
     Adorner = null;
 }
        protected override Script.IScriptCommand executeInner(ParameterDic pm, ItemsControl sender,
                                                              RoutedEventArgs evnt, IUIInput input, IList <IUIInputProcessor> inpProcs)
        {
            var scp = ControlUtils.GetScrollContentPresenter(sender);

            if (scp != null)
            {
                AdornerLayer adornerLayer = ControlUtils.GetAdornerLayer(sender);

                switch (AdornerMode)
                {
                case UIEventHub.AdornerMode.Attach:
                    if (adornerLayer == null)
                    {
                        return(ResultCommand.Error(new Exception("Adorner layer not found.")));
                    }
                    if (UIEventHubProperties.GetSelectionAdorner(scp) == null)
                    {
                        Window parentWindow = UITools.FindAncestor <Window>(sender);

                        Point scpPos = scp.TranslatePoint(new Point(0, 0), sender);

                        //Create and register adorner.
                        SelectionAdorner adorner = new SelectionAdorner(scp)
                        {
                            //AdjustVector = new Vector(-scpPos.X, -scpPos.Y)
                        };
                        pm.SetValue(SelectionAdornerKey, adorner);
                        UIEventHubProperties.SetSelectionAdorner(scp, adorner);
                        UIEventHubProperties.SetLastScrollContentPresenter(sender, scp);     //For used when detach.

                        adornerLayer.Add(adorner);
                    }
                    break;

                case UIEventHub.AdornerMode.Detach:

                    var lastScp     = UIEventHubProperties.GetLastScrollContentPresenter(sender); //For used when detach.
                    var lastAdorner = UIEventHubProperties.GetSelectionAdorner(scp);
                    if (lastAdorner != null)
                    {
                        adornerLayer.Remove(lastAdorner);
                    }

                    UIEventHubProperties.SetLastScrollContentPresenter(sender, null);
                    UIEventHubProperties.SetSelectionAdorner(scp, null);
                    pm.SetValue <Object>(SelectionAdornerKey, null);
                    break;

                case UIEventHub.AdornerMode.Update:
                    var updateAdorner = pm.GetValue <SelectionAdorner>(SelectionAdornerKey) ??
                                        UIEventHubProperties.GetSelectionAdorner(scp);

                    if (updateAdorner == null)
                    {
                        return(ResultCommand.Error(new Exception("Adorner not found.")));
                    }

                    updateAdorner.IsSelecting = UIEventHubProperties.GetIsSelecting(sender);
                    Point startAdjusted = pm.GetValue <Point>("{StartPosition}");
                    Point current       = pm.GetValue <Point>(CurrentPositionKey);
                    updateAdorner.SetValue(SelectionAdorner.StartPositionProperty, startAdjusted);
                    updateAdorner.SetValue(SelectionAdorner.EndPositionProperty, current);
                    break;
                }
            }
            return(NextCommand);
        }
Exemplo n.º 18
0
 private void InitializePathAdorner(SelectionAdorner adorner, Geometry geometry)
 {
     adorner.Outline    = geometry;
     adorner.Visibility = Visibility.Visible;
 }
Exemplo n.º 19
0
 public static void SetSelectionAdorner(DependencyObject target, SelectionAdorner value)
 {
     target.SetValue(SelectionAdornerProperty, value);
 }
Exemplo n.º 20
0
 private void ResetPathAdorner(SelectionAdorner adorner)
 {
     adorner.Outline    = (Geometry)null;
     adorner.Visibility = Visibility.Collapsed;
 }
Exemplo n.º 21
0
        public static void OnEnableSelectionpChanged(DependencyObject s, DependencyPropertyChangedEventArgs e)
        {
            if (s is ListView)
            {
                ListView control = s as ListView;


                var OnSizeChanged = (RoutedEventHandler) delegate(object sender, RoutedEventArgs args)
                {
                    ItemsPresenter         ip = UITools.FindVisualChild <ItemsPresenter>(sender as ListView);
                    ScrollContentPresenter p  = UITools.FindAncestor <ScrollContentPresenter>(ip);
                    EndDragging(p);
                };

                Func <ScrollContentPresenter, AdornerLayer> getAdornerLayer = (p) =>
                {
                    AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(p);
                    if (adornerLayer != null)
                    {
                        return(adornerLayer);
                    }

                    ItemsPresenter   ip = UITools.FindVisualChild <ItemsPresenter>(s as ListView);
                    AdornerDecorator ad = UITools.FindAncestor <AdornerDecorator>(ip);
                    try
                    {
                        adornerLayer = AdornerLayer.GetAdornerLayer(ad);
                        if (adornerLayer != null)
                        {
                            return(adornerLayer);
                        }
                    }
                    catch { }
                    return(p.AdornerLayer);;
                };

                Action unloadAdorner = () =>
                {
                    ScrollContentPresenter p = GetLastScrollContentPresenter(control);
                    if (p != null)
                    {
                        SelectionAdorner _adorner = GetSelectionAdorner(p);
                        if (_adorner != null)
                        {
                            getAdornerLayer(p).Remove(_adorner);
                            _adorner.PreviewMouseDown -= new MouseButtonEventHandler(OnPreviewMouseDown);
                            _adorner.MouseMove        -= new MouseEventHandler(OnMouseMove);
                            _adorner.MouseUp          -= new MouseButtonEventHandler(OnMouseUp);
                        }

                        control.MouseUp   -= new MouseButtonEventHandler(OnMouseUp);
                        control.MouseMove -= new MouseEventHandler(OnMouseMove);

                        control.RemoveHandler(ListView.SizeChangedEvent, OnSizeChanged);

                        SetSelectionAdorner(p, null);
                    }
                };

                Action attachAdorner = () =>
                {
                    unloadAdorner();
                    ItemsPresenter         ip = UITools.FindVisualChild <ItemsPresenter>(control);
                    ScrollContentPresenter p  = UITools.FindAncestor <ScrollContentPresenter>(ip);
                    if (p != null)
                    {
                        SelectionAdorner _adorner = new SelectionAdorner(p);
                        SetSelectionAdorner(p, _adorner);

                        AdornerLayer adornerLayer = getAdornerLayer(p);

                        if (adornerLayer != null)
                        {
                            adornerLayer.Add(_adorner);
                            _adorner.PreviewMouseDown += new MouseButtonEventHandler(OnPreviewMouseDown);
                            _adorner.MouseMove        += new MouseEventHandler(OnMouseMove);
                            _adorner.MouseUp          += new MouseButtonEventHandler(OnMouseUp);
                        }

                        control.PreviewMouseDown += new MouseButtonEventHandler(OnPreviewMouseDown);
                        control.MouseUp          += new MouseButtonEventHandler(OnMouseUp);
                        control.MouseMove        += new MouseEventHandler(OnMouseMove);

                        control.AddHandler(ListView.SizeChangedEvent, OnSizeChanged);

                        SetLastScrollContentPresenter(control, p);
                    }
                };

                if ((bool)e.NewValue == true)
                {
                    if (control.IsLoaded)
                    {
                        attachAdorner();
                    }
                    else
                    {
                        control.Loaded += delegate { attachAdorner(); }
                    };

                    control.AddHandler(ScrollViewer.ScrollChangedEvent, new RoutedEventHandler(OnScrollChange));
                    control.AddHandler(ListView.MouseDownEvent, new RoutedEventHandler(OnMouseDown));

                    //Monitor view change, and reattach handlers.
                    DependencyPropertyDescriptor viewDescriptor = DependencyPropertyDescriptor.FromProperty(ListView.ViewProperty, typeof(ListView));

                    viewDescriptor.AddValueChanged
                        (control, delegate
                    {
                        control.Dispatcher.BeginInvoke(DispatcherPriority.Input, attachAdorner);
                    });
                }
                else //If EnableSelection = False
                {
                    unloadAdorner();

                    control.RemoveHandler(ScrollViewer.ScrollChangedEvent, new RoutedEventHandler(OnScrollChange));
                    control.RemoveHandler(ListView.MouseDownEvent, new RoutedEventHandler(OnMouseDown));

                    SetSelectionAdorner(control, null);
                }
            }
        }