using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using System.Text; using CPF.Controls; using CPF.Drawing; using CPF.Input; using CPF.ReoGrid.Actions; using CPF.ReoGrid.Common; using CPF.ReoGrid.Events; using CPF.ReoGrid.Graphics; using CPF.ReoGrid.Interaction; using CPF.ReoGrid.IO; using CPF.ReoGrid.Main; using CPF.ReoGrid.Print; using CPF.ReoGrid.Rendering; using CPF.ReoGrid.Utility; using CPF.ReoGrid.Views; using CPF.ReoGrid.WPF; using CPF.Threading; namespace CPF.ReoGrid { public class ReoGridControl : Control, IVisualWorkbook, IScrollableWorksheetContainer, IRangePickableControl, IContextMenuControl, IPersistenceWorkbook, IActionControl, IWorkbook, IDisposable { private void InitControl() { this.builtInCellsSelectionCursor = Cursors.Arrow; this.internalCurrentCursor = this.builtInCellsSelectionCursor; this.defaultPickRangeCursor = Cursors.Cross; this.builtInFullColSelectCursor = Cursors.BottomSide; this.builtInFullRowSelectCursor = Cursors.LeftSide; this.builtInEntireSheetSelectCursor = this.builtInCellsSelectionCursor; this.builtInCrossCursor = Cursors.Cross; this.ControlStyle = ControlAppearanceStyle.CreateDefaultControlStyle(); } private void InitWorkbook(IControlAdapter adapter) { this.workbook = new Workbook(adapter); this.workbook.WorksheetCreated += delegate(object s, WorksheetCreatedEventArgs e) { EventHandler worksheetCreated = this.WorksheetCreated; if (worksheetCreated != null) { worksheetCreated(this, e); } }; this.workbook.WorksheetInserted += delegate(object s, WorksheetInsertedEventArgs e) { EventHandler worksheetInserted = this.WorksheetInserted; if (worksheetInserted != null) { worksheetInserted(this, e); } }; this.workbook.WorksheetRemoved += delegate(object s, WorksheetRemovedEventArgs e) { this.ClearActionHistoryForWorksheet(e.Worksheet); bool flag = this.workbook.worksheets.Count > 0; if (flag) { int num = this.sheetTab.SelectedIndex; bool flag2 = num >= this.workbook.worksheets.Count; if (flag2) { num = this.workbook.worksheets.Count - 1; } this.sheetTab.SelectedIndex = num; this.currentWorksheet = this.workbook.worksheets[this.sheetTab.SelectedIndex]; } else { this.sheetTab.SelectedIndex = -1; this.currentWorksheet = null; } EventHandler worksheetRemoved = this.WorksheetRemoved; if (worksheetRemoved != null) { worksheetRemoved(this, e); } }; this.workbook.WorksheetNameChanged += delegate(object s, WorksheetNameChangingEventArgs e) { EventHandler worksheetNameChanged = this.WorksheetNameChanged; if (worksheetNameChanged != null) { worksheetNameChanged(this, e); } }; this.workbook.SettingsChanged += delegate(object s, EventArgs e) { bool flag = this.workbook.HasSettings(WorkbookSettings.View_Default); if (flag) { this.ShowSheetTabControl(); } else { this.HideSheetTabControl(); } bool flag2 = this.workbook.HasSettings(WorkbookSettings.View_ShowHorScroll); if (flag2) { this.ShowHorScrollBar(); } else { this.HideHorScrollBar(); } bool flag3 = this.workbook.HasSettings(WorkbookSettings.View_ShowVerScroll); if (flag3) { this.ShowVerScrollBar(); } else { this.HideVerScrollBar(); } EventHandler settingsChanged = this.SettingsChanged; if (settingsChanged != null) { settingsChanged(this, null); } }; this.workbook.ExceptionHappened += this.Workbook_ErrorHappened; this.workbook.AddWorksheet(this.workbook.CreateWorksheet(null)); this.CurrentWorksheet = this.workbook.worksheets[0]; this.sheetTab.SelectedIndexChanged += delegate(object s, EventArgs e) { bool flag = this.sheetTab.SelectedIndex >= 0 && this.sheetTab.SelectedIndex < this.workbook.worksheets.Count; if (flag) { this.CurrentWorksheet = this.workbook.worksheets[this.sheetTab.SelectedIndex]; } }; this.workbook.WorkbookLoaded += delegate(object s, EventArgs e) { bool flag = this.workbook.worksheets.Count <= 0; if (flag) { this.currentWorksheet = null; } else { bool flag2 = this.currentWorksheet != this.workbook.worksheets[0]; if (flag2) { this.currentWorksheet = this.workbook.worksheets[0]; } else { this.currentWorksheet.UpdateViewportControllBounds(); } } EventHandler workbookLoaded = this.WorkbookLoaded; if (workbookLoaded != null) { workbookLoaded(s, e); } }; this.workbook.WorkbookSaved += delegate(object s, EventArgs e) { EventHandler workbookSaved = this.WorkbookSaved; if (workbookSaved != null) { workbookSaved(s, e); } }; this.actionManager.BeforePerformAction += delegate(object s, ActionEventArgs e) { bool flag = this.BeforeActionPerform != null; if (flag) { BeforeActionPerformEventArgs beforeActionPerformEventArgs = new BeforeActionPerformEventArgs(e.Action); this.BeforeActionPerform(this, beforeActionPerformEventArgs); e.Cancel = beforeActionPerformEventArgs.IsCancelled; } }; this.actionManager.AfterPerformAction += delegate(object s, ActionEventArgs e) { bool flag = e.Action is WorksheetReusableAction; if (flag) { this.lastReusableAction = (e.Action as WorksheetReusableAction); } EventHandler actionPerformed = this.ActionPerformed; if (actionPerformed != null) { actionPerformed(this, new WorkbookActionEventArgs(e.Action)); } }; } public static IWorkbook CreateMemoryWorkbook() { Workbook workbook = new Workbook(null); Worksheet sheet = workbook.CreateWorksheet(null); workbook.AddWorksheet(sheet); return workbook; } public void Save(string path) { this.Save(path, FileFormat._Auto); } public void Save(string path, FileFormat fileFormat) { this.Save(path, fileFormat, Encoding.Default); } public void Save(string path, FileFormat fileFormat, Encoding encoding) { this.workbook.Save(path, fileFormat, encoding); } public void Save(Stream stream, FileFormat fileFormat) { this.workbook.Save(stream, fileFormat, Encoding.Default); } public void Save(Stream stream, FileFormat fileFormat, Encoding encoding) { this.workbook.Save(stream, fileFormat, encoding); } public void Load(string path) { this.Load(path, FileFormat._Auto, Encoding.Default); } public void Load(string path, FileFormat fileFormat) { this.Load(path, fileFormat, Encoding.Default); } public void Load(string path, FileFormat fileFormat, Encoding encoding) { this.workbook.Load(path, fileFormat, encoding); } public void Load(Stream stream, FileFormat fileFormat) { this.Load(stream, fileFormat, Encoding.Default); } public void Load(Stream stream, FileFormat fileFormat, Encoding encoding) { this.workbook.Load(stream, fileFormat, encoding); bool flag = this.workbook.worksheets.Count > 0; if (flag) { this.CurrentWorksheet = this.workbook.worksheets[0]; } } //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler WorkbookLoaded; //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler WorkbookSaved; public Worksheet CurrentWorksheet { get { return this.currentWorksheet; } set { bool flag = value == null; if (flag) { throw new ArgumentNullException("cannot set current worksheet to null"); } bool flag2 = this.currentWorksheet != value; if (flag2) { bool flag3 = this.currentWorksheet != null && this.currentWorksheet.IsEditing; if (flag3) { this.currentWorksheet.EndEdit(EndEditReason.NormalFinish); } this.currentWorksheet = value; this.currentWorksheet.UpdateViewportControllBounds(); IScrollableViewportController scrollableViewportController = this.currentWorksheet.ViewportController as IScrollableViewportController; bool flag4 = scrollableViewportController != null; if (flag4) { scrollableViewportController.SynchronizeScrollBar(); } EventHandler currentWorksheetChanged = this.CurrentWorksheetChanged; if (currentWorksheetChanged != null) { currentWorksheetChanged(this, null); } this.sheetTab.SelectedIndex = this.GetWorksheetIndex(this.currentWorksheet); this.sheetTab.ScrollToItem(this.sheetTab.SelectedIndex); this.adapter.Invalidate(); } } } public Worksheet CreateWorksheet() { return this.CreateWorksheet(null); } public Worksheet CreateWorksheet(string name) { return this.workbook.CreateWorksheet(name); } public void AddWorksheet(Worksheet sheet) { this.workbook.AddWorksheet(sheet); } public Worksheet NewWorksheet(string name = null) { Worksheet worksheet = this.CreateWorksheet(name); this.AddWorksheet(worksheet); return worksheet; } public void InsertWorksheet(int index, Worksheet sheet) { this.workbook.InsertWorksheet(index, sheet); } public bool RemoveWorksheet(int index) { return this.workbook.RemoveWorksheet(index); } public bool RemoveWorksheet(Worksheet sheet) { return this.workbook.RemoveWorksheet(sheet); } public Worksheet CopyWorksheet(int index, int newIndex, string newName = null) { return this.workbook.CopyWorksheet(index, newIndex, newName); } public Worksheet CopyWorksheet(Worksheet sheet, int newIndex, string newName = null) { return this.workbook.CopyWorksheet(sheet, newIndex, newName); } public Worksheet MoveWorksheet(int index, int newIndex) { return this.workbook.MoveWorksheet(index, newIndex); } public Worksheet MoveWorksheet(Worksheet sheet, int newIndex) { return this.workbook.MoveWorksheet(sheet, newIndex); } public int GetWorksheetIndex(Worksheet sheet) { return this.workbook.GetWorksheetIndex(sheet); } public int GetWorksheetIndex(string name) { return this.workbook.GetWorksheetIndex(name); } public Worksheet GetWorksheetByName(string name) { return this.workbook.GetWorksheetByName(name); } public WorksheetCollection Worksheets { get { return this.workbook.Worksheets; } } //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler CurrentWorksheetChanged; //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler WorksheetCreated; //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler WorksheetInserted; //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler WorksheetRemoved; //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler WorksheetNameChanged; [Description("Determine whether or not this workbook is read-only")] [DefaultValue(false)] public bool Readonly { get { return this.workbook.Readonly; } set { this.workbook.Readonly = value; } } public void Reset() { this.workbook.Reset(); this.CurrentWorksheet = this.workbook.worksheets[0]; } public bool IsWorkbookEmpty { get { return this.workbook.IsEmpty; } } public void DoAction(BaseWorksheetAction action) { this.DoAction(this.currentWorksheet, action); } public void DoAction(Worksheet sheet, BaseWorksheetAction action) { action.Worksheet = sheet; this.actionManager.DoAction(action); WorksheetReusableAction worksheetReusableAction = action as WorksheetReusableAction; bool flag = worksheetReusableAction != null; if (flag) { this.lastReusableAction = worksheetReusableAction; } bool flag2 = this.currentWorksheet != sheet; if (flag2) { sheet.RequestInvalidate(); this.CurrentWorksheet = sheet; } } public void Undo() { bool flag = this.currentWorksheet != null; if (flag) { bool isEditing = this.currentWorksheet.IsEditing; if (isEditing) { this.currentWorksheet.EndEdit(EndEditReason.NormalFinish); } } IAction action = this.actionManager.Undo(); bool flag2 = action != null; if (flag2) { bool flag3 = action is WorkbookAction; if (!flag3) { BaseWorksheetAction baseWorksheetAction = action as BaseWorksheetAction; bool flag4 = baseWorksheetAction != null; if (flag4) { Worksheet worksheet = baseWorksheetAction.Worksheet; WorksheetReusableAction worksheetReusableAction = action as WorksheetReusableAction; bool flag5 = worksheetReusableAction != null; if (flag5) { bool flag6 = worksheet != null; if (flag6) { worksheet.SelectRange(worksheetReusableAction.Range); } } bool flag7 = worksheet != null; if (flag7) { worksheet.RequestInvalidate(); this.CurrentWorksheet = worksheet; } } } EventHandler undid = this.Undid; if (undid != null) { undid(this, new WorkbookActionEventArgs(action)); } } } public void Redo() { bool flag = this.currentWorksheet != null; if (flag) { bool isEditing = this.currentWorksheet.IsEditing; if (isEditing) { this.currentWorksheet.EndEdit(EndEditReason.NormalFinish); } } IAction action = this.actionManager.Redo(); bool flag2 = action != null; if (flag2) { BaseWorksheetAction baseWorksheetAction = action as BaseWorksheetAction; bool flag3 = baseWorksheetAction != null; if (flag3) { Worksheet worksheet = baseWorksheetAction.Worksheet; WorksheetReusableAction worksheetReusableAction = action as WorksheetReusableAction; bool flag4 = worksheetReusableAction != null; if (flag4) { this.lastReusableAction = worksheetReusableAction; bool flag5 = worksheet != null; if (flag5) { worksheet.SelectRange(this.lastReusableAction.Range); } } bool flag6 = worksheet != null && this.currentWorksheet != worksheet; if (flag6) { worksheet.RequestInvalidate(); this.CurrentWorksheet = worksheet; } } EventHandler redid = this.Redid; if (redid != null) { redid(this, new WorkbookActionEventArgs(action)); } } } public void RepeatLastAction(RangePosition range) { this.RepeatLastAction(this.currentWorksheet, range); } public void RepeatLastAction(Worksheet worksheet, RangePosition range) { bool flag = this.currentWorksheet != null; if (flag) { bool isEditing = this.currentWorksheet.IsEditing; if (isEditing) { this.currentWorksheet.EndEdit(EndEditReason.NormalFinish); } } bool flag2 = this.CanRedo(); if (flag2) { this.Redo(); } else { bool flag3 = this.lastReusableAction != null; if (flag3) { WorksheetReusableAction worksheetReusableAction = this.lastReusableAction.Clone(range); worksheetReusableAction.Worksheet = worksheet; this.actionManager.DoAction(worksheetReusableAction); this.currentWorksheet.RequestInvalidate(); } } } public bool CanUndo() { return this.actionManager.CanUndo(); } public bool CanRedo() { return this.actionManager.CanRedo(); } public void ClearActionHistory() { this.actionManager.Reset(); this.lastReusableAction = null; } public void ClearActionHistoryForWorksheet(Worksheet sheet) { List undoStack = this.actionManager.UndoStack; int i = 0; while (i < undoStack.Count) { IUndoableAction undoableAction = undoStack[i]; BaseWorksheetAction baseWorksheetAction = undoableAction as BaseWorksheetAction; bool flag = baseWorksheetAction != null && baseWorksheetAction.Worksheet == sheet; if (flag) { undoStack.RemoveAt(i); } else { i++; } } int num = undoStack.Count; List list = new List(this.actionManager.RedoStack); int j = 0; while (j < list.Count) { IUndoableAction undoableAction2 = list[j]; BaseWorksheetAction baseWorksheetAction2 = undoableAction2 as BaseWorksheetAction; bool flag2 = baseWorksheetAction2 != null && baseWorksheetAction2.Worksheet == sheet; if (flag2) { list.RemoveAt(j); } else { j++; } } this.actionManager.RedoStack.Clear(); for (int k = list.Count - 1; k >= 0; k--) { this.actionManager.RedoStack.Push(list[k]); } num += list.Count; bool flag3 = num <= 0; if (flag3) { this.lastReusableAction = null; } } //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler BeforeActionPerform; //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler ActionPerformed; //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler Undid; //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler Redid; public void SetSettings(WorkbookSettings settings, bool value) { this.workbook.SetSettings(settings, value); } public WorkbookSettings GetSettings() { return this.workbook.GetSettings(); } public bool HasSettings(WorkbookSettings settings) { return this.workbook.HasSettings(settings); } public void EnableSettings(WorkbookSettings settings) { this.workbook.SetSettings(settings, true); } public void DisableSettings(WorkbookSettings settings) { this.workbook.SetSettings(settings, false); } //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler SettingsChanged; //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler ExceptionHappened; private void Workbook_ErrorHappened(object sender, ExceptionHappenEventArgs e) { EventHandler exceptionHappened = this.ExceptionHappened; if (exceptionHappened != null) { exceptionHappened(this, e); } } public void NotifyExceptionHappen(Worksheet sheet, Exception ex) { bool flag = this.workbook != null; if (flag) { this.workbook.NotifyExceptionHappen(sheet, ex); } } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Cursor CellsSelectionCursor { get { return this.customCellsSelectionCursor ?? this.builtInCellsSelectionCursor; } set { this.customCellsSelectionCursor = value; this.internalCurrentCursor = value; } } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Cursor FullRowSelectionCursor { get; set; } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Cursor FullColumnSelectionCursor { get; set; } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Cursor EntireSheetSelectionCursor { get; set; } public void PickRange(Func onPicked) { this.PickRange(onPicked, this.defaultPickRangeCursor); } public void PickRange(Func onPicked, Cursor pickerCursor) { this.internalCurrentCursor = pickerCursor; this.currentWorksheet.PickRange((Worksheet sheet, RangePosition range) => onPicked(sheet, range)); } public void EndPickRange() { this.currentWorksheet.EndPickRange(); this.internalCurrentCursor = (this.customCellsSelectionCursor ?? this.builtInCellsSelectionCursor); } public ReoGridControl ControlInstance { get { return null; } } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public ControlAppearanceStyle ControlStyle { get { return this.controlStyle; } set { bool flag = value == null; if (flag) { throw new ArgumentNullException("ControlStyle", "cannot set ControlStyle to null"); } bool flag2 = this.controlStyle != value; if (flag2) { bool flag3 = this.controlStyle != null; if (flag3) { this.controlStyle.CurrentControl = null; } this.controlStyle = value; } this.ApplyControlStyle(); } } internal void ApplyControlStyle() { this.controlStyle.CurrentControl = this; this.sheetTab.Background = this.controlStyle[ControlAppearanceColors.SheetTabBackground]; ReoGridControl.ReoGridWPFControlAdapter reoGridWPFControlAdapter = this.adapter; if (reoGridWPFControlAdapter != null) { reoGridWPFControlAdapter.Invalidate(); } } private void OnWorksheetMouseDown(Point location, MouseButtons buttons, InputModifiers modifiers) { Worksheet worksheet = this.currentWorksheet; bool flag = worksheet != null; if (flag) { bool flag2 = worksheet.currentEditingCell != null; if (flag2) { IEditableControlAdapter editableControlAdapter = this.adapter; bool flag3 = editableControlAdapter != null; if (flag3) { worksheet.EndEdit(editableControlAdapter.GetEditControlText()); } } IViewportController viewportController = worksheet.ViewportController; if (viewportController != null) { viewportController.OnMouseDown(location, buttons, modifiers); } } } private void OnWorksheetMouseMove(Point location, MouseButtons buttons) { Worksheet worksheet = this.currentWorksheet; if (worksheet != null) { IViewportController viewportController = worksheet.ViewportController; if (viewportController != null) { viewportController.OnMouseMove(location, buttons); } } } private void OnWorksheetMouseUp(Point location, MouseButtons buttons, InputModifiers modifiers) { Worksheet worksheet = this.currentWorksheet; if (worksheet != null) { IViewportController viewportController = worksheet.ViewportController; if (viewportController != null) { viewportController.OnMouseUp(location, buttons, modifiers); } } } protected override void OnMouseLeave(MouseEventArgs e) { base.OnMouseLeave(e); bool flag = this.currentWorksheet != null; if (flag) { this.adapter.ChangeCursor(CursorStyle.PlatformDefault); this.currentWorksheet.HoverPos = CellPosition.Empty; } } public PrintSession CreatePrintSession() { return this.workbook.CreatePrintSession(); } public bool SheetTabVisible { get { return this.HasSettings(WorkbookSettings.View_Default); } set { if (value) { this.EnableSettings(WorkbookSettings.View_Default); } else { this.DisableSettings(WorkbookSettings.View_Default); } } } public float SheetTabWidth { get { return this.sheetTab.ControlWidth; } set { this.sheetTab.ControlWidth = value; } } public bool SheetTabNewButtonVisible { get { return this.sheetTab.NewButtonVisible; } set { this.sheetTab.NewButtonVisible = value; } } public void ScrollCurrentWorksheet(float x, float y) { Worksheet worksheet = this.currentWorksheet; IScrollableViewportController scrollableViewportController = ((worksheet != null) ? worksheet.ViewportController : null) as IScrollableViewportController; bool flag = scrollableViewportController != null; if (flag) { scrollableViewportController.ScrollViews(ScrollDirection.Both, x, y); scrollableViewportController.SynchronizeScrollBar(); } } //[DebuggerBrowsable(DebuggerBrowsableState.Never)] public event EventHandler WorksheetScrolled; public void RaiseWorksheetScrolledEvent(Worksheet worksheet, float x, float y) { EventHandler worksheetScrolled = this.WorksheetScrolled; if (worksheetScrolled != null) { worksheetScrolled(this, new WorksheetScrolledEventArgs(worksheet) { X = x, Y = y }); } } [DefaultValue(100)] [Browsable(true)] [Description("Determines whether or not show the white spacing at bottom and right of worksheet.")] public bool ShowScrollEndSpacing { get { return this.showScrollEndSpacing; } set { bool flag = this.showScrollEndSpacing != value; if (flag) { this.showScrollEndSpacing = value; this.currentWorksheet.UpdateViewportController(); } } } public ReoGridControl() { base.Focusable = true; this.sheetTab = new SheetTabControl { ControlWidth = 400f, MarginLeft = 0 }; this.horScrollbar = new ScrollBar { Orientation = Orientation.Horizontal, Height = 20, SmallChange = (double)Worksheet.InitDefaultColumnWidth, Background = "240,240,240" }; this.verScrollbar = new ScrollBar { Orientation = Orientation.Vertical, Width = 20, SmallChange = (double)Worksheet.InitDefaultRowHeight, Background = "240,240,240", MarginTop = 0 }; base.Children.Add(this.sheetTab); base.Children.Add(this.horScrollbar); Grid.ColumnIndex(this.horScrollbar, 1); base.Children.Add(this.verScrollbar); this.horScrollbar["ValueChanged"] = new CommandDescribe(delegate(CpfObject s, object e) { bool flag = this.currentWorksheet != null && this.currentWorksheet.ViewportController is IScrollableViewportController; if (flag) { ((IScrollableViewportController)this.currentWorksheet.ViewportController).HorizontalScroll((float)this.horScrollbar.Value); } }); this.verScrollbar["ValueChanged"] = new CommandDescribe(delegate(CpfObject s, object e) { bool flag = this.currentWorksheet != null && this.currentWorksheet.ViewportController is IScrollableViewportController; if (flag) { ((IScrollableViewportController)this.currentWorksheet.ViewportController).VerticalScroll((float)this.verScrollbar.Value); } }); this.sheetTab.SplitterMoving += delegate(object s, EventArgs e) { float num2 = MouseDevice.GetPosition(this).X + 3f; bool flag = num2 < 75f; if (flag) { num2 = 75f; } bool flag2 = num2 > base.ActualSize.Width - 20f; if (flag2) { num2 = base.ActualSize.Width - 20f; } this.SheetTabWidth = num2; this.UpdateSheetTabAndScrollBarsLayout(); }; this.InitControl(); ReoGridControl.InputTextBox inputTextBox = new ReoGridControl.InputTextBox(); inputTextBox.Owner = this; float num = 0f; inputTextBox.BorderThickness = new Thickness(ref num); inputTextBox.Visibility = Visibility.Hidden; inputTextBox.HScrollBarVisibility = ScrollBarVisibility.Hidden; inputTextBox.VScrollBarVisibility = ScrollBarVisibility.Hidden; this.editTextbox = inputTextBox; base.Children.Add(this.editTextbox); this.adapter = new ReoGridControl.ReoGridWPFControlAdapter(this); this.adapter.editTextbox = this.editTextbox; this.editTextbox.GotFocus += this.EditTextbox_GotFocus; this.InitWorkbook(this.adapter); this.renderer = new WPFRenderer(this); Dispatcher.MainThread.BeginInvoke(delegate() { bool flag = !string.IsNullOrEmpty(this.LoadFromFile); if (flag) { FileInfo fileInfo = new FileInfo(this.LoadFromFile); this.currentWorksheet.Load(fileInfo.FullName); } }); } [PropertyChanged("ActualSize")] private void OnActualSize(object newValue, object oldValue, PropertyMetadataAttribute attribute) { bool flag = this.Visibility == Visibility.Visible; if (flag) { Size size = (Size)oldValue; Size size2 = (Size)newValue; bool flag2 = size.Width > 0f; if (flag2) { this.SheetTabWidth += size2.Width - size.Width; bool flag3 = this.SheetTabWidth < 0f; if (flag3) { this.SheetTabWidth = 0f; } } } this.UpdateSheetTabAndScrollBarsLayout(); } private void SetHorizontalScrollBarSize() { float num = base.ActualSize.Width; bool flag = this.sheetTab.Visibility == Visibility.Visible; if (flag) { num -= this.SheetTabWidth; } bool flag2 = this.verScrollbar.Visibility == Visibility.Visible; if (flag2) { num -= 20f; } bool flag3 = num < 0f; if (flag3) { num = 0f; } this.horScrollbar.Width = num; } private void UpdateSheetTabAndScrollBarsLayout() { this.sheetTab.MarginTop = base.ActualSize.Height - 20f; this.horScrollbar.MarginTop = this.sheetTab.MarginTop; this.sheetTab.Height = 20; this.horScrollbar.Height = 20; this.verScrollbar.MarginLeft = base.ActualSize.Width - 20f; float num = base.ActualSize.Height - 20f; bool flag = num < 0f; if (flag) { num = 0f; } this.verScrollbar.Height = num; bool flag2 = this.sheetTab.Visibility == Visibility.Visible && this.horScrollbar.Visibility == Visibility.Visible; if (flag2) { this.sheetTab.Width = this.SheetTabWidth; this.horScrollbar.MarginLeft = this.SheetTabWidth; this.SetHorizontalScrollBarSize(); } else { bool flag3 = this.sheetTab.Visibility == Visibility.Visible; if (flag3) { this.sheetTab.Width = base.ActualSize.Width; } else { bool flag4 = this.horScrollbar.Visibility == Visibility.Visible; if (flag4) { this.horScrollbar.MarginLeft = 0; this.SetHorizontalScrollBarSize(); } else { this.verScrollbar.Height = base.ActualSize.Height; } } } this.currentWorksheet.UpdateViewportControllBounds(); } private void ShowSheetTabControl() { bool flag = this.sheetTab.Visibility > Visibility.Visible; if (flag) { this.sheetTab.Visibility = Visibility.Visible; this.UpdateSheetTabAndScrollBarsLayout(); } } private void HideSheetTabControl() { bool flag = this.sheetTab.Visibility != Visibility.Hidden; if (flag) { this.sheetTab.Visibility = Visibility.Hidden; this.UpdateSheetTabAndScrollBarsLayout(); } } private void ShowHorScrollBar() { bool flag = this.horScrollbar.Visibility > Visibility.Visible; if (flag) { this.horScrollbar.Visibility = Visibility.Visible; this.UpdateSheetTabAndScrollBarsLayout(); } } private void HideHorScrollBar() { bool flag = this.horScrollbar.Visibility != Visibility.Hidden; if (flag) { this.horScrollbar.Visibility = Visibility.Hidden; this.UpdateSheetTabAndScrollBarsLayout(); } } private void ShowVerScrollBar() { bool flag = this.verScrollbar.Visibility > Visibility.Visible; if (flag) { this.verScrollbar.Visibility = Visibility.Visible; this.UpdateSheetTabAndScrollBarsLayout(); } } private void HideVerScrollBar() { bool flag = this.verScrollbar.Visibility != Visibility.Hidden; if (flag) { this.verScrollbar.Visibility = Visibility.Hidden; this.UpdateSheetTabAndScrollBarsLayout(); } } protected override void OnRender(DrawingContext dc) { bool flag = true; bool flag2 = !this.isload; if (flag2) { flag = false; this.isload = true; bool flag3 = Debugger.IsAttached || base.DesignMode; if (flag3) { Class1.etxdq(); } else { Class1.grwsfd(67434242342.0); } } bool flag4 = this.currentWorksheet != null && this.currentWorksheet.workbook != null && this.currentWorksheet.controlAdapter != null; if (flag4) { Color n; bool flag5 = !this.controlStyle.TryGetColor(ControlAppearanceColors.GridBackground, out n); if (flag5) { n = Color.FromRgb(byte.MaxValue, byte.MaxValue, byte.MaxValue); } Brush fillBrush = n; float num = 0f; float num2 = 0f; float width = base.ActualSize.Width; float height = base.ActualSize.Height; dc.FillRectangle(fillBrush, new Rect(ref num, ref num2, ref width, ref height)); this.renderer.Reset(); ((WPFRenderer)this.renderer).SetPlatformGraphics(dc); CellDrawingContext dc2 = new CellDrawingContext(this.currentWorksheet, DrawMode.View, this.renderer); this.currentWorksheet.ViewportController.Draw(dc2); } bool flag6 = flag; //if (flag6) //{ // double[] array = new double[1]; // Marshal.Copy((IntPtr)((long)Class1.jfhgwf), array, 0, 1); // bool flag7 = array[0] != 335364570942556.0; // if (flag7) // { // DateTime d = DateTime.FromOADate(Class1.ghddgw); // Point point = default(Point); // Brush fillBrush2 = "#f00"; // string text = "未授权,Unauthorized,请打开开发者工具,http://cpf.cskin.net/"; // Font font = new Font("Sans-Serif", 20f, FontStyles.Regular); // TextAlignment textAlignment = TextAlignment.Left; // float num = float.MaxValue; // TextDecoration textDecoration = default(TextDecoration); // float num2 = float.MaxValue; // TextTrimming textTrimming = TextTrimming.None; // Stroke stroke = default(Stroke); // dc.DrawString(point, fillBrush2, text, font, textAlignment, num, textDecoration, num2, textTrimming, stroke, null); // bool flag8 = Debugger.IsAttached && DateTime.Now - d > new TimeSpan(0, 0, 1); // if (flag8) // { // throw new Exception("未授权,Unauthorized,请打开开发者工具,http://cpf.cskin.net/"); // } // } //} //else { bool flag9 = !flag && base.DesignMode; if (flag9) { base.BeginInvoke(new Action(base.Invalidate)); } } } protected override void OnMouseDown(MouseButtonEventArgs e) { base.OnMouseDown(e); base.Focus(); Point position = MouseDevice.GetPosition(this); float num = base.ActualSize.Width; float num2 = base.ActualSize.Height; bool flag = this.verScrollbar.Visibility == Visibility.Visible; if (flag) { num = this.verScrollbar.MarginLeft.Value; } bool flag2 = this.sheetTab.Visibility == Visibility.Visible; if (flag2) { num2 = this.sheetTab.MarginTop.Value; } else { bool flag3 = this.horScrollbar.Visibility == Visibility.Visible; if (flag3) { num2 = this.horScrollbar.MarginTop.Value; } } bool flag4 = position.X < num && position.Y < num2; if (flag4) { this.OnWorksheetMouseDown(MouseDevice.GetPosition(this), WPFUtility.ConvertToUIMouseButtons(e), this.Root.InputManager.KeyboardDevice.Modifiers); bool flag5 = base.CaptureMouse(); if (flag5) { this.mouseCaptured = true; } } } protected override void OnDoubleClick(RoutedEventArgs e) { base.OnDoubleClick(e); Point position = MouseDevice.GetPosition(this); float num = base.ActualSize.Width; float num2 = base.ActualSize.Height; bool flag = this.verScrollbar.Visibility == Visibility.Visible; if (flag) { num = this.verScrollbar.MarginLeft.Value; } bool flag2 = this.sheetTab.Visibility == Visibility.Visible; if (flag2) { num2 = this.sheetTab.MarginTop.Value; } else { bool flag3 = this.horScrollbar.Visibility == Visibility.Visible; if (flag3) { num2 = this.horScrollbar.MarginTop.Value; } } bool flag4 = position.X < num && position.Y < num2; if (flag4) { this.currentWorksheet.OnMouseDoubleClick(MouseDevice.GetPosition(this), WPFUtility.ConvertToUIMouseButtons(e as MouseEventArgs)); } } protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); this.OnWorksheetMouseMove(MouseDevice.GetPosition(this), WPFUtility.ConvertToUIMouseButtons(e)); } protected override void OnMouseUp(MouseButtonEventArgs e) { base.OnMouseUp(e); this.OnWorksheetMouseUp(MouseDevice.GetPosition(this), WPFUtility.ConvertToUIMouseButtons(e), this.Root.InputManager.KeyboardDevice.Modifiers); bool flag = this.mouseCaptured; if (flag) { base.ReleaseMouseCapture(); } } protected override void OnMouseWheel(MouseWheelEventArgs e) { base.OnMouseWheel(e); this.currentWorksheet.OnMouseWheel(MouseDevice.GetPosition(this), (int)e.Delta.Y, WPFUtility.ConvertToUIMouseButtons(e), this.Root.InputManager.KeyboardDevice.Modifiers); } protected override void OnKeyDown(KeyEventArgs e) { bool flag = !this.currentWorksheet.IsEditing; if (flag) { KeyCode keyCode = (KeyCode)e.KeyCode; bool flag2 = (e.Modifiers & InputModifiers.Control) == InputModifiers.Control; if (flag2) { keyCode |= KeyCode.Control; } else { bool flag3 = (e.Modifiers & InputModifiers.Shift) == InputModifiers.Shift; if (flag3) { keyCode |= KeyCode.Shift; } else { bool flag4 = (e.Modifiers & InputModifiers.Alt) == InputModifiers.Alt; if (flag4) { keyCode |= KeyCode.Alt; } } } bool flag5 = keyCode != KeyCode.Control && keyCode != KeyCode.Shift && keyCode != KeyCode.Alt; if (flag5) { bool flag6 = this.currentWorksheet.OnKeyDown(keyCode); if (flag6) { e.Handled = true; } } } } protected override void OnKeyUp(KeyEventArgs e) { bool flag = !this.currentWorksheet.IsEditing; if (flag) { KeyCode keyCode = (KeyCode)e.KeyCode; bool flag2 = (e.Modifiers & InputModifiers.Control) == InputModifiers.Control; if (flag2) { keyCode |= KeyCode.Control; } else { bool flag3 = (e.Modifiers & InputModifiers.Shift) == InputModifiers.Shift; if (flag3) { keyCode |= KeyCode.Shift; } else { bool flag4 = (e.Modifiers & InputModifiers.Alt) == InputModifiers.Alt; if (flag4) { keyCode |= KeyCode.Alt; } } } bool flag5 = keyCode != KeyCode.Control && keyCode != KeyCode.Shift && keyCode != KeyCode.Alt; if (flag5) { bool flag6 = this.currentWorksheet.OnKeyUp(keyCode); if (flag6) { e.Handled = true; } } } } private void EditTextbox_GotFocus(object sender, GotFocusEventArgs e) { bool flag = !this.currentWorksheet.IsEditing; if (flag) { this.currentWorksheet.StartEdit(); this.currentWorksheet.CellEditText = string.Empty; } } [NotCpfProperty] internal ContextMenu BaseContextMenu { get { return base.ContextMenu; } set { base.ContextMenu = value; } } [NotCpfProperty] public ContextMenu CellsContextMenu { get; set; } [NotCpfProperty] public ContextMenu RowHeaderContextMenu { get; set; } [NotCpfProperty] public ContextMenu ColumnHeaderContextMenu { get; set; } [NotCpfProperty] public ContextMenu LeadHeaderContextMenu { get; set; } [NotCpfProperty] public string LoadFromFile { get; set; } [UIPropertyMetadata(FontStyles.Regular, UIPropertyOptions.AffectsRender)] public FontStyles HeaderFontStyle { get { return this.GetValue("HeaderFontStyle"); } set { this.SetValue(value, "HeaderFontStyle"); } } [UIPropertyMetadata(8, UIPropertyOptions.AffectsMeasure | UIPropertyOptions.AffectsRender)] public float HeaderFontSize { get { return this.GetValue("HeaderFontSize"); } set { this.SetValue(value, "HeaderFontSize"); } } [UIPropertyMetadata("宋体", UIPropertyOptions.AffectsRender)] public string HeaderFontFamily { get { return this.GetValue("HeaderFontFamily"); } set { this.SetValue(value, "HeaderFontFamily"); } } private IRenderer renderer; private Workbook workbook; private Worksheet currentWorksheet; internal ActionManager actionManager = new ActionManager(); private WorksheetReusableAction lastReusableAction; private Cursor builtInCellsSelectionCursor = null; private Cursor builtInFullColSelectCursor = null; private Cursor builtInFullRowSelectCursor = null; private Cursor builtInEntireSheetSelectCursor = null; private Cursor builtInCrossCursor = null; private Cursor customCellsSelectionCursor = null; private Cursor defaultPickRangeCursor = null; private Cursor internalCurrentCursor = null; private ControlAppearanceStyle controlStyle = null; private bool showScrollEndSpacing = true; internal const int ScrollBarSize = 20; private ReoGridControl.ReoGridWPFControlAdapter adapter; private SheetTabControl sheetTab; private ReoGridControl.InputTextBox editTextbox; private ScrollBar horScrollbar; private ScrollBar verScrollbar; private bool isload = false; private bool mouseCaptured = false; private class ReoGridWPFControlAdapter : IControlAdapter, ICompViewAdapter, IMultisheetAdapter, IEditableControlAdapter, IScrollableControlAdapter, ITimerSupportedAdapter, IShowContextMenuAdapter { internal ReoGridWPFControlAdapter(ReoGridControl canvas) { this.canvas = canvas; } public IVisualWorkbook ControlInstance { get { return this.canvas; } } public ControlAppearanceStyle ControlStyle { get { return this.canvas.controlStyle; } } public IRenderer Renderer { get { return this.canvas.renderer; } } public void ShowContextMenuStrip(ViewTypes viewType, Point containerLocation) { switch (viewType) { default: this.canvas.BaseContextMenu = this.canvas.CellsContextMenu; break; case ViewTypes.ColumnHeader: this.canvas.BaseContextMenu = this.canvas.ColumnHeaderContextMenu; break; case ViewTypes.RowHeader: this.canvas.BaseContextMenu = this.canvas.RowHeaderContextMenu; break; case ViewTypes.LeadHeader: this.canvas.BaseContextMenu = this.canvas.LeadHeaderContextMenu; break; } } public void ChangeCursor(CursorStyle cursor) { this.oldCursor = this.canvas.Cursor; switch (cursor) { default: this.canvas.Cursor = Cursors.Arrow; break; case CursorStyle.Hand: this.canvas.Cursor = Cursors.Hand; break; case CursorStyle.Selection: this.canvas.Cursor = this.canvas.internalCurrentCursor; break; case CursorStyle.FullRowSelect: this.canvas.Cursor = this.canvas.builtInFullRowSelectCursor; break; case CursorStyle.FullColumnSelect: this.canvas.Cursor = this.canvas.builtInFullColSelectCursor; break; case CursorStyle.Move: this.canvas.Cursor = Cursors.SizeAll; break; case CursorStyle.ChangeColumnWidth: this.canvas.Cursor = Cursors.SizeWestEast; break; case CursorStyle.ChangeRowHeight: this.canvas.Cursor = Cursors.SizeNorthSouth; break; case CursorStyle.ResizeHorizontal: this.canvas.Cursor = Cursors.SizeWestEast; break; case CursorStyle.ResizeVertical: this.canvas.Cursor = Cursors.SizeNorthSouth; break; case CursorStyle.Busy: this.canvas.Cursor = Cursors.AppStarting; break; case CursorStyle.Cross: this.canvas.Cursor = this.canvas.builtInCrossCursor; break; } } public void RestoreCursor() { this.canvas.Cursor = this.oldCursor; } public void ChangeSelectionCursor(CursorStyle cursor) { if (cursor == CursorStyle.PlatformDefault || cursor != CursorStyle.Hand) { this.canvas.internalCurrentCursor = Cursors.Arrow; } else { this.canvas.internalCurrentCursor = Cursors.Hand; } } public Rect GetContainerBounds() { float num = this.canvas.ActualSize.Width; float num2 = this.canvas.ActualSize.Height + 1f; bool flag = this.canvas.verScrollbar.Visibility == Visibility.Visible; if (flag) { num -= 20f; } bool flag2 = this.canvas.sheetTab.Visibility == Visibility.Visible || this.canvas.horScrollbar.Visibility == Visibility.Visible; if (flag2) { num2 -= 20f; } bool flag3 = num < 0f; if (flag3) { num = 0f; } bool flag4 = num2 < 0f; if (flag4) { num2 = 0f; } float num3 = 0f; float num4 = 0f; return new Rect(ref num3, ref num4, ref num, ref num2); } public void Focus() { this.canvas.Focus(); } public void Invalidate() { this.canvas.Invalidate(); } public void ChangeBackColor(Color color) { this.canvas.Background = color; } public bool IsVisible { get { return this.canvas.Visibility == Visibility.Visible; } } public Point PointToScreen(Point p) { return this.canvas.PointToScreen(p); } public IGraphics PlatformGraphics { get { return null; } } public void ChangeBackgroundColor(Color color) { this.canvas.Background = color; } public void ShowTooltip(Point point, string content) { } public ISheetTabControl SheetTabControl { get { return this.canvas.sheetTab; } } public float BaseScale { get { return 0f; } } public float MinScale { get { return 0.1f; } } public float MaxScale { get { return 4f; } } public void ShowEditControl(Rect bounds, Cell cell) { Worksheet currentWorksheet = this.canvas.CurrentWorksheet; bool flag = !cell.RenderColor.IsTransparent; Color n; if (flag) { n = cell.RenderColor; } else { bool flag2 = cell.InnerStyle.HasStyle(PlainStyleFlag.TextColor); if (flag2) { n = cell.InnerStyle.TextColor; } else { n = this.canvas.controlStyle[ControlAppearanceColors.GridText]; } } this.editTextbox.MarginLeft = bounds.X; this.editTextbox.MarginTop = bounds.Y; this.editTextbox.Width = bounds.Width; this.editTextbox.Height = bounds.Height; this.editTextbox.CellSize = cell.Bounds.Size; this.editTextbox.VAlign = cell.InnerStyle.VAlign; this.editTextbox.FontFamily = cell.InnerStyle.FontName; this.editTextbox.FontSize = cell.InnerStyle.FontSize * currentWorksheet.ScaleFactor * 96f / 72f; this.editTextbox.FontStyle = PlatformUtility.ToWPFFontStyle(cell.InnerStyle.fontStyles); this.editTextbox.Foreground = n; this.editTextbox.Background = (cell.InnerStyle.HasStyle(PlainStyleFlag.BackColor) ? cell.InnerStyle.BackColor : this.canvas.controlStyle[ControlAppearanceColors.GridBackground]); this.editTextbox.TextWrap = (cell.InnerStyle.TextWrapMode > TextWrapMode.NoWrap); this.editTextbox.Visibility = Visibility.Visible; this.editTextbox.Focus(); this.SetEditControlCaretPos(this.editTextbox.Text.Length); } public void HideEditControl() { this.editTextbox.Visibility = Visibility.Hidden; } public void SetEditControlText(string text) { this.editTextbox.Text = text; } public string GetEditControlText() { return this.editTextbox.Text; } public void EditControlSelectAll() { this.editTextbox.SelectAll(); } public void SetEditControlCaretPos(int pos) { this.editTextbox.CaretIndex.Clear(); this.editTextbox.CaretIndex.Add((uint)pos); this.editTextbox.SelectionEnd.Clear(); } public int GetEditControlCaretPos() { bool flag = this.editTextbox.CaretIndex.Count > 0; int result; if (flag) { result = (int)this.editTextbox.CaretIndex[0]; } else { result = 0; } return result; } public void SetEditControlAlignment(ReoGridHorAlign align) { switch (align) { default: this.editTextbox.MarginLeft = 0; this.editTextbox.MarginRight = "auto"; break; case ReoGridHorAlign.Center: case ReoGridHorAlign.DistributedIndent: this.editTextbox.MarginLeft = "auto"; this.editTextbox.MarginRight = "auto"; break; case ReoGridHorAlign.Right: this.editTextbox.MarginLeft = "auto"; this.editTextbox.MarginRight = 0; break; } } public void EditControlApplySystemMouseDown() { this.editTextbox.Focus(); } public void EditControlCopy() { this.editTextbox.Copy(); } public void EditControlPaste() { this.editTextbox.Paste(); } public void EditControlCut() { this.editTextbox.Copy(); this.editTextbox.RemoveSelect(); } public bool ScrollBarHorizontalVisible { get { return this.canvas.horScrollbar.Visibility == Visibility.Visible; } set { this.canvas.horScrollbar.Visibility = (value ? Visibility.Visible : Visibility.Hidden); } } public bool ScrollBarVerticalVisible { get { return this.canvas.verScrollbar.Visibility == Visibility.Visible; } set { this.canvas.verScrollbar.Visibility = (value ? Visibility.Visible : Visibility.Hidden); } } public float ScrollBarHorizontalMaximum { get { return (float)this.canvas.horScrollbar.Maximum; } set { this.canvas.horScrollbar.Maximum = (double)value; } } public float ScrollBarHorizontalMinimum { get { return (float)this.canvas.horScrollbar.Minimum; } set { this.canvas.horScrollbar.Minimum = (double)value; } } public float ScrollBarHorizontalValue { get { return (float)this.canvas.horScrollbar.Value; } set { this.canvas.horScrollbar.Value = (double)value; } } public float ScrollBarHorizontalLargeChange { get { return (float)this.canvas.horScrollbar.LargeChange; } set { this.canvas.horScrollbar.LargeChange = (double)value; this.canvas.horScrollbar.ViewportSize = value; } } public float ScrollBarVerticalMaximum { get { return (float)this.canvas.verScrollbar.Maximum; } set { this.canvas.verScrollbar.Maximum = (double)value; } } public float ScrollBarVerticalMinimum { get { return (float)this.canvas.verScrollbar.Minimum; } set { this.canvas.verScrollbar.Minimum = (double)value; } } public float ScrollBarVerticalValue { get { return (float)this.canvas.verScrollbar.Value; } set { this.canvas.verScrollbar.Value = (double)value; } } public float ScrollBarVerticalLargeChange { get { return (float)this.canvas.verScrollbar.LargeChange; } set { this.canvas.verScrollbar.LargeChange = (double)value; this.canvas.verScrollbar.ViewportSize = value; } } public void StartTimer() { throw new NotImplementedException(); } public void StopTimer() { throw new NotImplementedException(); } private readonly ReoGridControl canvas; internal ReoGridControl.InputTextBox editTextbox; private Cursor oldCursor = null; } private class InputTextBox : TextBox { internal ReoGridControl Owner { get; set; } internal bool TextWrap { get; set; } internal Size CellSize { get; set; } internal ReoGridVerAlign VAlign { get; set; } internal InputTextBox() { } protected override void OnLostFocus(RoutedEventArgs e) { Worksheet currentWorksheet = this.Owner.CurrentWorksheet; bool flag = currentWorksheet.currentEditingCell != null && this.Visibility == Visibility.Visible; if (flag) { currentWorksheet.EndEdit(base.Text); this.Visibility = Visibility.Hidden; } this.Owner.CurrentWorksheet.EndEdit(base.Text, EndEditReason.NormalFinish); base.OnLostFocus(e); } protected override void OnKeyDown(KeyEventArgs e) { Worksheet sheet = this.Owner.CurrentWorksheet; bool flag = !this.TextWrap && base.Text.IndexOf('\n') == -1; if (flag) { Action action = null; bool flag2 = e.Key == Keys.Up; if (flag2) { action = delegate() { sheet.MoveSelectionUp(false); }; } else { bool flag3 = e.Key == Keys.Down; if (flag3) { action = delegate() { sheet.MoveSelectionDown(false); }; } else { bool flag4 = e.Key == Keys.Left && (base.CaretIndex.Count == 0 || base.CaretIndex[0] == 0U); if (flag4) { action = delegate() { sheet.MoveSelectionLeft(false); }; } else { bool flag5 = e.Key == Keys.Right && base.CaretIndex.Count > 0 && (ulong)base.CaretIndex[0] == (ulong)((long)base.Text.Length); if (flag5) { action = delegate() { sheet.MoveSelectionRight(false); }; } } } } bool flag6 = action != null; if (flag6) { sheet.EndEdit(base.Text); action(); e.Handled = true; } } bool flag7 = sheet.currentEditingCell != null && this.Visibility == Visibility.Visible; if (flag7) { bool flag8 = e.Modifiers.HasFlag(InputModifiers.Control) && e.Key == Keys.Return; if (flag8) { string text = base.Text; uint num = (base.CaretIndex.Count == 0) ? 0U : base.CaretIndex[0]; text = text.Insert((int)num, Environment.NewLine); base.Text = text; base.CaretIndex.Clear(); base.CaretIndex.Add((uint)((ulong)num + (ulong)((long)Environment.NewLine.Length))); base.SelectionEnd.Clear(); e.Handled = true; } else { bool flag9 = !e.Modifiers.HasFlag(InputModifiers.Control) && e.Key == Keys.Return; if (flag9) { sheet.EndEdit(base.Text); sheet.MoveSelectionForward(); e.Handled = true; } else { bool flag10 = e.Key == Keys.Return; if (!flag10) { bool flag11 = e.Modifiers.HasFlag(InputModifiers.Shift) && e.Key == Keys.Tab; if (flag11) { sheet.EndEdit(base.Text); sheet.MoveSelectionBackward(); e.Handled = true; } else { bool flag12 = e.Key == Keys.Tab; if (flag12) { sheet.EndEdit(base.Text); sheet.MoveSelectionForward(); e.Handled = true; } else { bool flag13 = e.Key == Keys.Escape; if (flag13) { sheet.EndEdit(EndEditReason.Cancel); e.Handled = true; } } } } } } } base.OnKeyDown(e); } protected override void OnTextChanged(EventArgs e) { base.OnTextChanged(e); base.Text = this.Owner.currentWorksheet.RaiseCellEditTextChanging(base.Text); } protected override void OnTextInput(TextInputEventArgs e) { bool flag = e.Text.Length > 0; if (flag) { int num = (int)e.Text[0]; bool flag2 = num != this.Owner.currentWorksheet.RaiseCellEditCharInputed(num); if (flag2) { e.Handled = true; } } base.OnTextInput(e); } protected override void OnMouseDown(MouseButtonEventArgs e) { base.OnMouseDown(e); e.Handled = true; } protected override void OnDoubleClick(RoutedEventArgs e) { e.Handled = false; base.OnDoubleClick(e); e.Handled = true; } } } }