Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/WPF/CS/GridDemo.Wpf/Modules/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/WPF/CS/GridDemo.Wpf/Modules/HitTest.xaml.cs

using System;
using System.Windows;
using DevExpress.Xpf.Grid;
using System.Collections.ObjectModel;
using DevExpress.Xpf.Core;
using System.Globalization;
using System.Linq;
using System.Data;
using System.Windows.Data;
using DevExpress.Xpf.DemoBase;
using System.Windows.Input;
using System.ComponentModel;

namespace GridDemo {
    [CodeFile("Controls/ControlStyles/NameTextControl(.SL).xaml")]
    [CodeFile("ModuleResources/HitTestTemplates(.SL).xaml")]
    [CodeFile("ModuleResources/HitTestClasses.(cs)")]
    public partial class HitTest : GridDemoModule {
        DevExpress.Xpf.Grid.TableView TableView { get { return (DevExpress.Xpf.Grid.TableView)grid.View; } }
        ObservableCollection<HitTestInfo> hitInfoList = new ObservableCollection<HitTestInfo>();
        Point startPosition;
        int floatingContainerIsOpenCount;


        public bool AllowShowHitInfo {
            get { return (bool)GetValue(AllowShowHitInfoProperty); }
            set { SetValue(AllowShowHitInfoProperty, value); }
        }
        public override bool AllowRtl { get { return false; } }

        public static readonly DependencyProperty AllowShowHitInfoProperty =
            DependencyProperty.Register("AllowShowHitInfo", typeof(bool), typeof(HitTest), new UIPropertyMetadata(true));


        public HitTest() {
            InitializeComponent();

            viewsListBox.EditValueChanged += new DevExpress.Xpf.Editors.EditValueChangedEventHandler(viewsListBox_SelectionChanged);

            FloatingContainer.AddFloatingContainerIsOpenChangedHandler(this, OnFloatingContainerIsOpenChanged);
            grid.Loaded += new RoutedEventHandler(grid_Loaded);

            hitIfoItemsControl.ItemsSource = hitInfoList;

        }
        void grid_Loaded(object sender, RoutedEventArgs e) {
            MultiBinding mBinding = new MultiBinding();
            mBinding.Mode = BindingMode.OneWay;
            Binding bIsMouseOver = new Binding() { Mode = BindingMode.OneWay, ElementName = "grid", Path = new PropertyPath("IsMouseOver", null) };
            mBinding.Bindings.Add(bIsMouseOver);
            Binding bIsMouseCaptureWithin = new Binding() { Mode = BindingMode.OneWay, ElementName = "grid", Path = new PropertyPath("IsMouseCaptureWithin", null), Converter = new NegationConverterExtension() };
            mBinding.Bindings.Add(bIsMouseCaptureWithin);
            Binding bIsChecked = new Binding() { Mode = BindingMode.OneWay, ElementName = "showHitInfoCheckEdit", Path = new PropertyPath("IsChecked", null) };
            mBinding.Bindings.Add(bIsChecked);
            Binding bAllowShowHitInfo = new Binding() { Mode = BindingMode.OneWay, RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, this.GetType(), 1), Path = new PropertyPath("AllowShowHitInfo", null) };
            mBinding.Bindings.Add(bAllowShowHitInfo);
            mBinding.Converter = new AndConverter();
            hitInfoPopup.SetBinding(PopupBase.IsOpenProperty, mBinding);
        }
        void viewsListBox_SelectionChanged(object sender, DevExpress.Xpf.Editors.EditValueChangedEventArgs e) {
            grid.View = (GridViewBase)FindResource(viewsListBox.SelectedIndex == 0 ? "tableView" : "cardView");
        }

        private void grid_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) {
            Point location = e.GetPosition(grid);
            double hOffset = location.X - startPosition.X;
            if(FlowDirection == System.Windows.FlowDirection.RightToLeft)
                hOffset = -hOffset;

            hitInfoPopup.HorizontalOffset = hOffset;
            hitInfoPopup.VerticalOffset = location.Y - startPosition.Y;

            GridViewHitInfoBase info = GetHitInfo(e);

            hitInfoList.Clear();

            AddHitInfo("HitTest", TypeDescriptor.GetProperties(info)["HitTest"].GetValue(info).ToString());

            AddHitInfo("Column", info.Column != null ? info.Column.HeaderCaption as string : "No column");
            AddHitInfo("RowHandle", GetRowHandleDescription(info.RowHandle));
            AddHitInfo("CellValue", info.Column != null ? grid.GetCellDisplayText(info.RowHandle, info.Column) : null);
            info.Accept(CreateDemoHitTestVisitor());
        }
        void OnFloatingContainerIsOpenChanged(object sender, FloatingContainerEventArgs e) {
            if(e.Container.IsOpen)
                floatingContainerIsOpenCount++;
            else
                floatingContainerIsOpenCount--;
            AllowShowHitInfo = floatingContainerIsOpenCount == 0;
        }
        GridViewHitTestVisitorBase CreateDemoHitTestVisitor() {
            if(grid.View is DevExpress.Xpf.Grid.TableView)
                return new DemoTableViewHitTestVisitor(this);
            return new DemoCardViewHitTestVisitor(this);
        }
        GridViewHitInfoBase GetHitInfo(RoutedEventArgs e) {
            if(grid.View is DevExpress.Xpf.Grid.TableView)
                return (GridViewHitInfoBase)TableView.CalcHitInfo(e.OriginalSource as DependencyObject);
            return ((DevExpress.Xpf.Grid.CardView)grid.View).CalcHitInfo(e.OriginalSource as DependencyObject);

        }
        string GetRowHandleDescription(int rowHanle) {
            if(rowHanle == GridControl.InvalidRowHandle)
                return "No row";
            if(rowHanle == GridControl.NewItemRowHandle)
                return "New Item Row";
            if(rowHanle == GridControl.AutoFilterRowHandle)
                return "Auto Filter Row";
            return string.Format("{0} ({1})", rowHanle, grid.IsGroupRowHandle(rowHanle) ? "group row" : "data row");
        }
        internal void AddHitInfo(string name, string text) {
            hitInfoList.Add(new HitTestInfo(name, text));
        }
        internal void RemoveHitInfo(string name) {
            HitTestInfo infoToRemove = hitInfoList.Where(info => info.Name == name).FirstOrDefault();
            if(infoToRemove != null)
                hitInfoList.Remove(infoToRemove);
        }
        internal void AddTotalSummaryInfo(ColumnBase column) {
            AddHitInfo("TotalSummary", column.TotalSummaryText);
        }
        internal void AddFixedTotalSummaryInfo(string summaryText) {
            RemoveHitInfo("CellValue");
            AddHitInfo("FixedTotalSummary", summaryText);
        }
        internal void AddGroupValueInfo(GridColumnData columnData) {
            AddHitInfo("GroupValue", string.Format("{0}: {1}", columnData.Column.FieldName, columnData.Value));
        }
        internal void AddGroupSummaryInfo(GridGroupSummaryData summaryData) {
            AddHitInfo("GroupSummary", summaryData.Text);
        }
        void hitInfoPopup_Opened(object sender, EventArgs e) {
            startPosition = Mouse.GetPosition(grid);
        }

    }
}