예제 #1
0
        private void Capture_PointerMoved(object sender, PointerRoutedEventArgs e)
        {
            var uiElement = sender as UIElement;
            var p         = e.GetCurrentPoint(uiElement);

            if (!HasPart())
            {
                return;
            }

            if (_pointerId != (int)e.Pointer.PointerId)
            {
                return;
            }

            // Ignore pointer move when the pointing device is up
            if (!p.IsInContact)
            {
                return;
            }

            // Consider left button only
            if (!p.Properties.IsLeftButtonPressed)
            {
                return;
            }

            var pointerType      = GetPointerType(e);
            var previousPosition = _lastPointerPosition;

            _lastPointerPosition = new Graphics.Point((float)p.Position.X, (float)p.Position.Y);

            if (!_onScroll && (pointerType == PointerType.TOUCH))
            {
                var deltaMin = 3.0f;
                var deltaX   = _lastPointerPosition.X - previousPosition.X;
                var deltaY   = _lastPointerPosition.Y - previousPosition.Y;

                _onScroll = _editor.IsScrollAllowed() && ((System.Math.Abs(deltaX) > deltaMin) || (System.Math.Abs(deltaY) > deltaMin));

                if (_onScroll)
                {
                    // Entering scrolling mode, cancel previous pointerDown event
                    _editor.PointerCancel(GetPointerId(e));
                }
            }

            if (_onScroll)
            {
                // Scroll the view
                var deltaX = _lastPointerPosition.X - previousPosition.X;
                var deltaY = _lastPointerPosition.Y - previousPosition.Y;
                Scroll(-deltaX, -deltaY);
            }
            else
            {
                var pointList = e.GetIntermediatePoints(uiElement);
                if (pointList.Count > 0)
                {
                    var events = new PointerEvent[pointList.Count];

                    // Intermediate points are stored in reverse order:
                    // Revert the list and send the pointer events all at once
                    int j = 0;
                    for (int i = pointList.Count - 1; i >= 0; i--)
                    {
                        var p_ = pointList[i];
                        events[j++] = new PointerEvent(PointerEventType.MOVE, (float)p_.Position.X, (float)p_.Position.Y, GetTimestamp(p_), p_.Properties.Pressure, pointerType, GetPointerId(e));
                    }

                    _editor.PointerEvents(events);
                }
            }

            // Prevent most handlers along the event route from handling the same event again.
            e.Handled = true;
        }
예제 #2
0
        internal static void ShowFilterPanel(unvell.ReoGrid.Data.AutoColumnFilter.AutoColumnFilterBody headerBody, Point point)
        {
            if (headerBody.ColumnHeader == null || headerBody.ColumnHeader.Worksheet == null)
            {
                return;
            }

            var worksheet = headerBody.ColumnHeader.Worksheet;

            if (worksheet == null)
            {
                return;
            }

            RGRectF headerRect = unvell.ReoGrid.Views.ColumnHeaderView.GetColHeaderBounds(worksheet, headerBody.ColumnHeader.Index, point);

            if (headerRect.Width == 0 || headerRect.Height == 0)
            {
                return;
            }

            RGRectF buttonRect = headerBody.GetColumnFilterButtonRect(headerRect.Size);

            if (headerBody.ContextMenuStrip == null)
            {
                var filterPanel = new ColumnFilterContextMenu();

                filterPanel.SortAZItem.Click += (s, e) =>
                {
                    try
                    {
                        worksheet.SortColumn(headerBody.ColumnHeader.Index, headerBody.autoFilter.ApplyRange, SortOrder.Ascending);
                    }
                    catch (Exception ex)
                    {
                        worksheet.NotifyExceptionHappen(ex);
                    }
                };

                filterPanel.SortZAItem.Click += (s, e) =>
                {
                    try
                    {
                        worksheet.SortColumn(headerBody.ColumnHeader.Index, headerBody.autoFilter.ApplyRange, SortOrder.Descending);
                    }
                    catch (Exception ex)
                    {
                        worksheet.NotifyExceptionHappen(ex);
                    }
                };

                filterPanel.OkButton.Click += (s, e) =>
                {
                    if (filterPanel.CheckedListBox.GetItemCheckState(0) == CheckState.Checked)
                    {
                        headerBody.IsSelectAll = true;
                    }
                    else
                    {
                        headerBody.IsSelectAll = false;
                        headerBody.selectedTextItems.Clear();

                        for (int i = 1; i < filterPanel.CheckedListBox.Items.Count; i++)
                        {
                            if (filterPanel.CheckedListBox.GetItemChecked(i))
                            {
                                headerBody.selectedTextItems.Add(Convert.ToString(filterPanel.CheckedListBox.Items[i]));
                            }
                        }
                    }

                    headerBody.autoFilter.Apply();
                    filterPanel.Hide();
                };

                filterPanel.CancelButton.Click += (s, e) => filterPanel.Hide();

                headerBody.ContextMenuStrip = filterPanel;
            }

            if (headerBody.ContextMenuStrip != null)
            {
                if (headerBody.ContextMenuStrip is ColumnFilterContextMenu)
                {
                    var filterPanel = (ColumnFilterContextMenu)headerBody.ContextMenuStrip;

                    if (headerBody.DataDirty)
                    {
                        // todo: keep select status for every items before clear
                        filterPanel.CheckedListBox.Items.Clear();

                        filterPanel.CheckedListBox.Items.Add(LanguageResource.Filter_SelectAll);
                        filterPanel.CheckedListBox.SetItemChecked(0, true);

                        try
                        {
                            headerBody.ColumnHeader.Worksheet.ControlAdapter.ChangeCursor(CursorStyle.Busy);

                            var items = headerBody.GetDistinctItems();
                            foreach (string item in items)
                            {
                                filterPanel.CheckedListBox.Items.Add(item);

                                if (headerBody.IsSelectAll)
                                {
                                    filterPanel.CheckedListBox.SetItemChecked(filterPanel.CheckedListBox.Items.Count - 1, true);
                                }
                                else
                                {
                                    filterPanel.CheckedListBox.SetItemChecked(filterPanel.CheckedListBox.Items.Count - 1,
                                                                              headerBody.selectedTextItems.Contains(item));
                                }
                            }
                        }
                        finally
                        {
                            headerBody.ColumnHeader.Worksheet.ControlAdapter.ChangeCursor(CursorStyle.PlatformDefault);
                        }

                        filterPanel.SelectedCount = filterPanel.CheckedListBox.Items.Count - 1;

                        headerBody.DataDirty = false;

                        headerBody.IsSelectAll = true;
                    }
                }

                var pp = new Graphics.Point(headerRect.Right - 240, buttonRect.Bottom + 1);

                pp = worksheet.ControlAdapter.PointToScreen(pp);

                headerBody.ContextMenuStrip.Show(Point.Round(pp));
            }
        }
예제 #3
0
 public override IView GetViewByPoint(Graphics.Point p)
 {
     return(GetChildrenByPoint(p));
 }