コード例 #1
0
 public void OnLostFocus(DiffViewEventArgs <RichTextBox> e)
 {
     foreach (var rtb in e.Container.ResolveAll <RichTextBox>())
     {
         rtb.Height = 30d;
     }
 }
コード例 #2
0
        public void OnViewportMoved(DiffViewEventArgs <Rectangle> e)
        {
            var row = Grid.GetRow(e.Sender);
            var col = Grid.GetColumn(e.Sender);

            e.Container.Resolve <FastGridControl>(Key).Scroll(row, col, row, col);
        }
コード例 #3
0
 public void OnPostExecuteDiff(DiffViewEventArgs <FastGridControl> e)
 {
     foreach (var textBox in e.Container.ResolveAll <RichTextBox>())
     {
         textBox.Document.Blocks.FirstOrDefault()?.ContentStart.Paragraph.Inlines.Clear();
     }
 }
コード例 #4
0
        public void OnSelectedCellChanged(DiffViewEventArgs <FastGridControl> e)
        {
            var dataGrid = e.Container.Resolve <FastGridControl>(Key);

            if (e.Sender == dataGrid)
            {
                return;
            }

            var targetCell = new FastGridCellAddress(e.Sender.CurrentCell.Row, e.Sender.CurrentCell.Column);

            if (!targetCell.Equals(dataGrid.CurrentCell))
            {
                if (dataGrid.Model == null)
                {
                    return;
                }

                if (dataGrid.Model.RowCount < targetCell.Row || dataGrid.Model.ColumnCount < targetCell.Column)
                {
                    return;
                }

                dataGrid.CurrentCell = targetCell;

                if (e.Sender.GetSelectedModelCells().Aggregate(false, (r, c) => r |= dataGrid.AddSelectedCell(c)))
                {
                    dataGrid.InvalidateAll();
                }
            }

            var valuteTextBox = e.Container.ResolveAll <RichTextBox>();
        }
コード例 #5
0
        public void OnFileSettingUpdated(DiffViewEventArgs <FastGridControl> e, FileSetting fileSetting)
        {
            if (e.Sender != e.Container.Resolve <FastGridControl>(Key))
            {
                return;
            }

            if (fileSetting != null)
            {
                var model = e.Sender.Model as DiffGridModel;
                if (model != null)
                {
                    model.SetColumnHeader(fileSetting.ColumnHeaderIndex);
                    if (string.IsNullOrEmpty(fileSetting.RowHeaderName))
                    {
                        model.SetRowHeader(fileSetting.RowHeaderIndex);
                    }
                    else
                    {
                        model.SetRowHeader(fileSetting.RowHeaderName);
                    }
                }

                e.Sender.MaxRowHeaderWidth = fileSetting.MaxRowHeaderWidth;
            }
        }
コード例 #6
0
        private void Window_ContentRendered(object sender, EventArgs e)
        {
            var args = new DiffViewEventArgs <FastGridControl>(MergeDataGrid, container);

            DataGridEventDispatcher.Instance.DispatchDisplayFormatChangeEvent(args, false);
            DataGridEventDispatcher.Instance.DispatchPostExecuteDiffEvent(args);
        }
コード例 #7
0
        public void OnModelUpdated(DiffViewEventArgs <FastGridControl> e)
        {
            var dataGrid = e.Container.Resolve <FastGridControl>(Key);

            if (e.Sender.Model == null || e.Sender != dataGrid)
            {
                return;
            }

            var locationGrid = e.Container.Resolve <Grid>(Key);

            if (locationGrid == null)
            {
                return;
            }

            var rowCount = e.Sender.Model.RowCount - e.Sender.Model.GetHiddenRows(e.Sender).Count;
            var colCount = e.Sender.Model.ColumnCount;

            UpdateLocationGridDefinisions(locationGrid, locationGrid.RenderSize, rowCount, colCount);

            var viewport = e.Container.Resolve <Rectangle>(Key);

            RecalculateViewport(viewport, e.Sender);

            var colorMap = CreateColorMap(e.Sender);

            UpdateLocationGridColors(locationGrid, colorMap, viewport);

            e.Sender.NotifyRefresh();
        }
コード例 #8
0
        public MergeWindow(DiffView diffView, DiffGridModel model, string dstFilePath, string mergeFilePath, string currentSheetName, FileSetting fileSetting)
        {
            InitializeComponent();
            InitializeContainer();
            InitializeEventListeners();

            if (diffView == null)
            {
                this.Close();
            }

            App.Instance.OnSettingUpdated += OnApplicationSettingUpdated;

            _diffView         = diffView;
            _dstFilePath      = dstFilePath;
            _mergeFilePath    = mergeFilePath;
            _currentSheetName = currentSheetName;

            var args = new DiffViewEventArgs <FastGridControl>(null, container, TargetType.First);

            DataGridEventDispatcher.Instance.DispatchPreExecuteDiffEvent(args);

            ReadWorkBook();

            // MergeDataGrid.Model = new SheetGridModel(excelSheet);
            MergeDataGrid.Model = model;

            args = new DiffViewEventArgs <FastGridControl>(MergeDataGrid, container);
            DataGridEventDispatcher.Instance.DispatchFileSettingUpdateEvent(args, fileSetting);

            InitCurrentCell();
        }
コード例 #9
0
        public void OnMouseWheel(DiffViewEventArgs <Grid> e, MouseWheelEventArgs me)
        {
            if (e.Sender != e.Container.Resolve <Grid>(Key))
            {
                return;
            }

            var viewport = e.Container.Resolve <Rectangle>(Key);

            var rowSpan    = Grid.GetRowSpan(viewport);
            var currentRow = Grid.GetRow(viewport);
            var row        = currentRow - (Math.Sign(me.Delta) * rowSpan / 2);
            var last       = Math.Max((e.Sender.RowDefinitions.Count) - Grid.GetRowSpan(viewport), 0);

            row = Math.Max(row, 0);
            row = Math.Min(row, last);

            Grid.SetRow(viewport, row);

            if (currentRow != row)
            {
                var args = new DiffViewEventArgs <Rectangle>(viewport, e.Container);
                ViewportEventDispatcher.Instance.DispatchMoveEvent(args);
            }
        }
コード例 #10
0
 public void OnScrolled(DiffViewEventArgs <RichTextBox> e, ScrollChangedEventArgs se)
 {
     foreach (var rtb in e.Container.ResolveAll <RichTextBox>())
     {
         rtb.ScrollToVerticalOffset(se.VerticalOffset);
         rtb.ScrollToHorizontalOffset(se.HorizontalOffset);
     }
 }
コード例 #11
0
 public void OnRowHeaderReset(DiffViewEventArgs <FastGridControl> e)
 {
     foreach (var grid in e.Container.ResolveAll <FastGridControl>())
     {
         (grid.Model as DiffGridModel).SetRowHeader(-1);
         grid.NotifyRefresh();
     }
 }
コード例 #12
0
 private void LocationGrid_MouseMove(object sender, MouseEventArgs e)
 {
     if (e.LeftButton == MouseButtonState.Pressed)
     {
         var args = new DiffViewEventArgs <Grid>(sender as Grid, container);
         LocationGridEventDispatcher.Instance.DispatchMouseDownEvent(args, e);
     }
 }
コード例 #13
0
        public void OnRowHeaderChanged(DiffViewEventArgs <FastGridControl> e)
        {
            var column = e.Sender.CurrentCell.Column;

            foreach (var grid in e.Container.ResolveAll <FastGridControl>())
            {
                (grid.Model as DiffGridModel).SetRowHeader(column);
                grid.NotifyRefresh();
            }
        }
コード例 #14
0
        public void OnSizeChanged(DiffViewEventArgs <FastGridControl> e, SizeChangedEventArgs se)
        {
            var dataGrid = e.Container.Resolve <FastGridControl>(Key);

            if (dataGrid == null || dataGrid != e.Sender)
            {
                return;
            }

            RecalculateViewport(e.Container.Resolve <Rectangle>(Key), dataGrid);
        }
コード例 #15
0
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            var args = new DiffViewEventArgs <FastGridControl>(null, container, TargetType.First);

            DataGridEventDispatcher.Instance.DispatchParentLoadEvent(args);

            ExecuteDiff(isStartup: true);

            // In order to enable Ctrl + F immediately after startup.
            ToolExpander.IsExpanded = false;
        }
コード例 #16
0
 public virtual void Dispatch(Action <TListener> action, DiffViewEventArgs <TSender> e)
 {
     if (e.TargetType == TargetType.All)
     {
         Listeners.ForEach(l => action(l));
     }
     else if (e.TargetType == TargetType.First && Listeners.Any())
     {
         action(Listeners.First());
     }
 }
コード例 #17
0
        public void OnScrolled(DiffViewEventArgs <FastGridControl> e)
        {
            var dataGrid = e.Container.Resolve <FastGridControl>(Key);

            if (dataGrid == null || dataGrid == e.Sender)
            {
                return;
            }

            SyncScroll(e.Sender, dataGrid);
            RecalculateViewport(e.Container.Resolve <Rectangle>(Key), dataGrid);
        }
コード例 #18
0
        public void OnHoverRowChanged(DiffViewEventArgs <FastGridControl> e, HoverRowChangedEventArgs he)
        {
            foreach (var grid in e.Container.ResolveAll <FastGridControl>())
            {
                if (e.Sender == grid)
                {
                    continue;
                }

                grid.SetHoverRow(he.Cell);
            }
        }
コード例 #19
0
        public void OnColumnWidthChanged(DiffViewEventArgs <FastGridControl> e, ColumnWidthChangedEventArgs ce)
        {
            foreach (var grid in e.Container.ResolveAll <FastGridControl>())
            {
                if (grid == e.Sender)
                {
                    continue;
                }

                grid.ResizeColumn(ce.NewWidth, ce.Column);
            }
        }
コード例 #20
0
        public void OnGotFocus(DiffViewEventArgs <RichTextBox> e)
        {
            var margin         = 10;
            var textHeightList = e.Container.ResolveAll <RichTextBox>().Select(rtb => CalculateTextBoxHeight(rtb) + margin);

            var height = Math.Min(textHeightList.Max(), App.Instance.MainWindow.Height / 3);

            foreach (var rtb in e.Container.ResolveAll <RichTextBox>())
            {
                rtb.Height = height;
            }
        }
コード例 #21
0
        public void OnPreExecuteDiff(DiffViewEventArgs <FastGridControl> e)
        {
            foreach (var grid in e.Container.ResolveAll <FastGridControl>())
            {
                grid.Model = null;
                grid.ScrollIntoView(FastGridCellAddress.Empty);
                grid.FirstVisibleColumnScrollIndex = 0;
                grid.FirstVisibleRowScrollIndex    = 0;
                grid.InitializeComponent();
            }

            DataGridEventDispatcher.Instance.DispatchApplicationSettingUpdateEvent(e);
        }
コード例 #22
0
        private void DataGrid_SelectedCellsChanged(object sender, FastWpfGrid.SelectionChangedEventArgs e)
        {
            var grid = copyTargetGrid = sender as FastGridControl;

            if (grid == null)
            {
                return;
            }

            copyTargetGrid = grid;

            var args = new DiffViewEventArgs <FastGridControl>(sender as FastGridControl, container);

            DataGridEventDispatcher.Instance.DispatchSelectedCellChangeEvent(args);

            if (!SrcDataGrid.CurrentCell.Row.HasValue || !DstDataGrid.CurrentCell.Row.HasValue)
            {
                return;
            }

            if (!SrcDataGrid.CurrentCell.Column.HasValue || !DstDataGrid.CurrentCell.Column.HasValue)
            {
                return;
            }

            if (SrcDataGrid.Model == null || DstDataGrid.Model == null)
            {
                return;
            }

            var srcValue =
                (SrcDataGrid.Model as DiffGridModel).GetCellText(SrcDataGrid.CurrentCell.Row.Value, SrcDataGrid.CurrentCell.Column.Value, true);
            var dstValue =
                (DstDataGrid.Model as DiffGridModel).GetCellText(DstDataGrid.CurrentCell.Row.Value, DstDataGrid.CurrentCell.Column.Value, true);

            UpdateValueDiff(srcValue, dstValue);

            if (App.Instance.Setting.AlwaysExpandCellDiff)
            {
                var a = new DiffViewEventArgs <RichTextBox>(null, container, TargetType.First);
                ValueTextBoxEventDispatcher.Instance.DispatchGotFocusEvent(a);
            }

            int?row    = DstDataGrid.CurrentCell.Row;
            int?column = DstDataGrid.CurrentCell.Column;

            if (mergeWindow != null)
            {
                mergeWindow.SetCurrentCell(row, column);
            }
        }
コード例 #23
0
        private void ResetColumnHeader_Click(object sender, RoutedEventArgs e)
        {
            var menuItem = sender as MenuItem;

            if (menuItem != null)
            {
                var dataGrid = ((ContextMenu)menuItem.Parent).PlacementTarget as FastGridControl;
                if (dataGrid != null)
                {
                    var args = new DiffViewEventArgs <FastGridControl>(dataGrid, container, TargetType.First);
                    DataGridEventDispatcher.Instance.DispatchColumnHeaderResetEvent(args);
                }
            }
        }
コード例 #24
0
        public void OnFontSizeChanged(DiffViewEventArgs <FastGridControl> e, FontSizeChangedEventArgs fe)
        {
            foreach (var grid in e.Container.ResolveAll <FastGridControl>())
            {
                if (e.Sender == grid)
                {
                    continue;
                }

                grid.CellFontSize = fe.NewSize;
            }

            SyncRowHeight(e.Container);
        }
コード例 #25
0
        public void OnMouseDown(DiffViewEventArgs <Grid> e, MouseEventArgs me)
        {
            if (e.Sender != e.Container.Resolve <Grid>(Key))
            {
                return;
            }

            var viewport = e.Container.Resolve <Rectangle>(Key);

            var rowSpan    = Grid.GetRowSpan(viewport);
            var currentRow = Grid.GetRow(viewport);

            var row = e.Sender.GetRow(me.GetPosition(e.Sender));

            if (!row.HasValue)
            {
                return;
            }

            while (row + rowSpan / 2 > e.Sender.RowDefinitions.Count)
            {
                row--;
            }

            Grid.SetRow(viewport, Math.Max(row.Value - rowSpan / 2, 0));

            var colSpan    = Grid.GetColumnSpan(viewport);
            var currentCol = Grid.GetColumn(viewport);

            var col = e.Sender.GetColumn(me.GetPosition(e.Sender));

            if (!col.HasValue)
            {
                return;
            }

            while (col + colSpan / 2 > e.Sender.ColumnDefinitions.Count)
            {
                col--;
            }

            Grid.SetColumn(viewport, Math.Max(col.Value - colSpan / 2, 0));

            if (currentRow != row || currentCol != col)
            {
                var args = new DiffViewEventArgs <Rectangle>(viewport, e.Container);
                ViewportEventDispatcher.Instance.DispatchMoveEvent(args);
            }
        }
コード例 #26
0
        private void ExecuteDiff(bool isStartup = false)
        {
            if (!File.Exists(SrcPathTextBox.Text) || !File.Exists(DstPathTextBox.Text))
            {
                return;
            }

            var args = new DiffViewEventArgs <FastGridControl>(null, container, TargetType.First);

            DataGridEventDispatcher.Instance.DispatchPreExecuteDiffEvent(args);

            var srcPath = SrcPathTextBox.Text;
            var dstPath = DstPathTextBox.Text;

            Debug.Assert(Path.GetExtension(srcPath) == Path.GetExtension(dstPath), $"Compared files should have the same extension.");

            var workbooks   = ReadWorkbooks();
            var srcWorkbook = workbooks.Item1;
            var dstWorkbook = workbooks.Item2;

            DstSheetCombobox.SelectedIndex = SrcSheetCombobox.SelectedIndex;

            // SrcSheetCombobox.SelectedIndex = diffConfig.SrcSheetIndex;
            // DstSheetCombobox.SelectedIndex = diffConfig.DstSheetIndex;

            srcSheetName = SrcSheetCombobox.SelectedItem.ToString();
            dstSheetName = DstSheetCombobox.SelectedItem.ToString();

            var srcSheet = srcWorkbook.Sheets[srcSheetName];
            var dstSheet = dstWorkbook.Sheets[dstSheetName];

            SourceSheet = srcSheet;
            DestSheet   = dstSheet;

            LeftWorkbook  = srcWorkbook;
            RightWorkbook = dstWorkbook;

            if (srcSheet.Rows.Count > 10000 || dstSheet.Rows.Count > 10000)
            {
                MessageBox.Show(Properties.Resources.Msg_WarnSize);
            }

            SheetDiff = ExecuteDiff(srcSheet, dstSheet);

            RefreshBySheet(isStartup);
        }
コード例 #27
0
        public void DataGrid_SelectedCellsChanged(object sender, FastWpfGrid.SelectionChangedEventArgs e)
        {
            var grid = copyTargetGrid = sender as FastGridControl;

            if (grid == null)
            {
                return;
            }

            copyTargetGrid = grid;

            var args = new DiffViewEventArgs <FastGridControl>(sender as FastGridControl, container);

            DataGridEventDispatcher.Instance.DispatchSelectedCellChangeEvent(args);


            if (!MergeDataGrid.CurrentCell.Row.HasValue)
            {
                return;
            }

            if (!MergeDataGrid.CurrentCell.Column.HasValue)
            {
                return;
            }

            if (MergeDataGrid.Model == null)
            {
                return;
            }

            var value = (MergeDataGrid.Model as DiffGridModel).GetCellText(MergeDataGrid.CurrentCell.Row.Value, MergeDataGrid.CurrentCell.Column.Value, true);

            UpdateValue(value);

            if (App.Instance.Setting.AlwaysExpandCellDiff)
            {
                var a = new DiffViewEventArgs <RichTextBox>(null, container, TargetType.First);
                ValueTextBoxEventDispatcher.Instance.DispatchGotFocusEvent(a);
            }

            if (_diffView != null)
            {
                _diffView.SetCurrentCell(MergeDataGrid.CurrentCell.Row, MergeDataGrid.CurrentCell.Column);
            }
        }
コード例 #28
0
        public void OnParentLoaded(DiffViewEventArgs <FastGridControl> e)
        {
            foreach (var grid in e.Container.ResolveAll <FastGridControl>())
            {
                var a = new DiffViewEventArgs <FastGridControl>(grid, e.Container);

                grid.ScrolledModelRows += (sender, args)
                                          => DataGridEventDispatcher.Instance.DispatchScrollEvnet(a);
                grid.ScrolledModelColumns += (sender, args)
                                             => DataGridEventDispatcher.Instance.DispatchScrollEvnet(a);
                grid.ColumnWidthChanged += (sender, args)
                                           => DataGridEventDispatcher.Instance.DispatchColumnWidthChangeEvent(a, args);
                grid.HoverRowChanged += (sender, args)
                                        => DataGridEventDispatcher.Instance.DispatchHoverRowChangeEvent(a, args);
                grid.FontSizeChanged += (sender, args)
                                        => DataGridEventDispatcher.Instance.DispatchFontSizeChangeEvent(a, args);
            }
        }
コード例 #29
0
        private void RefreshBySheet(bool isStartup, bool edit = false)
        {
            SrcDataGrid.Model = new DiffGridModel(SheetDiff, DiffType.Source);
            DstDataGrid.Model = new DiffGridModel(SheetDiff, DiffType.Dest);

            var fileSettings   = FindFileSettings(isStartup);
            var srcFileSetting = fileSettings.Item1;
            var dstFileSetting = fileSettings.Item2;

            var args1 = new DiffViewEventArgs <FastGridControl>(null, container, TargetType.First);

            if (!edit)
            {
                var args = new DiffViewEventArgs <FastGridControl>(SrcDataGrid, container);
                DataGridEventDispatcher.Instance.DispatchFileSettingUpdateEvent(args, srcFileSetting);

                args = new DiffViewEventArgs <FastGridControl>(DstDataGrid, container);
                DataGridEventDispatcher.Instance.DispatchFileSettingUpdateEvent(args, dstFileSetting);


                DataGridEventDispatcher.Instance.DispatchDisplayFormatChangeEvent(args1, ShowOnlyDiffRadioButton.IsChecked.Value);
                DataGridEventDispatcher.Instance.DispatchPostExecuteDiffEvent(args1);

                var summary = SheetDiff.CreateSummary();
                GetViewModel().UpdateDiffSummary(summary);

                if (App.Instance.Setting.NotifyEqual && !summary.HasDiff)
                {
                    MessageBox.Show(Properties.Resources.Message_NoDiff);
                }
            }


            if (!App.Instance.KeepFileHistory)
            {
                App.Instance.UpdateRecentFiles(SrcPathTextBox.Text, DstPathTextBox.Text);
            }

            if (App.Instance.Setting.FocusFirstDiff)
            {
                MoveNextModifiedCell();
            }
        }
コード例 #30
0
        public void OnDiffDisplayFormatChanged(DiffViewEventArgs <FastGridControl> e, bool onlyDiff)
        {
            foreach (var grid in e.Container.ResolveAll <FastGridControl>())
            {
                if (onlyDiff)
                {
                    (grid.Model as DiffGridModel)?.HideEqualRows();
                }
                else
                {
                    (grid.Model as DiffGridModel)?.ShowEqualRows();
                }

                var args = new DiffViewEventArgs <FastGridControl>(grid, e.Container);
                DataGridEventDispatcher.Instance.DispatchModelUpdateEvent(args);

                grid.FirstVisibleRowScrollIndex = 0;
            }

            SyncRowHeight(e.Container);
        }