CPF/CPF.ReoGrid/ReoGridControl.cs
2024-06-24 10:15:59 +08:00

2210 lines
54 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<WorksheetCreatedEventArgs> worksheetCreated = this.WorksheetCreated;
if (worksheetCreated != null)
{
worksheetCreated(this, e);
}
};
this.workbook.WorksheetInserted += delegate(object s, WorksheetInsertedEventArgs e)
{
EventHandler<WorksheetInsertedEventArgs> 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<WorksheetRemovedEventArgs> worksheetRemoved = this.WorksheetRemoved;
if (worksheetRemoved != null)
{
worksheetRemoved(this, e);
}
};
this.workbook.WorksheetNameChanged += delegate(object s, WorksheetNameChangingEventArgs e)
{
EventHandler<WorksheetNameChangingEventArgs> 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<WorkbookActionEventArgs> 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<WorksheetCreatedEventArgs> WorksheetCreated;
//[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event EventHandler<WorksheetInsertedEventArgs> WorksheetInserted;
//[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event EventHandler<WorksheetRemovedEventArgs> WorksheetRemoved;
//[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event EventHandler<WorksheetNameChangingEventArgs> 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<WorkbookActionEventArgs> 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<WorkbookActionEventArgs> 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<IUndoableAction> 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<IUndoableAction> list = new List<IUndoableAction>(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<WorkbookActionEventArgs> BeforeActionPerform;
//[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event EventHandler<WorkbookActionEventArgs> ActionPerformed;
//[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event EventHandler<WorkbookActionEventArgs> Undid;
//[DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event EventHandler<WorkbookActionEventArgs> 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<ExceptionHappenEventArgs> ExceptionHappened;
private void Workbook_ErrorHappened(object sender, ExceptionHappenEventArgs e)
{
EventHandler<ExceptionHappenEventArgs> 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<Worksheet, RangePosition, bool> onPicked)
{
this.PickRange(onPicked, this.defaultPickRangeCursor);
}
public void PickRange(Func<Worksheet, RangePosition, bool> 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<WorksheetScrolledEventArgs> WorksheetScrolled;
public void RaiseWorksheetScrolledEvent(Worksheet worksheet, float x, float y)
{
EventHandler<WorksheetScrolledEventArgs> 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<SheetTabControl>(this.sheetTab);
base.Children.Add<ScrollBar>(this.horScrollbar);
Grid.ColumnIndex(this.horScrollbar, 1);
base.Children.Add<ScrollBar>(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<ReoGridControl.InputTextBox>(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<FontStyles>("HeaderFontStyle");
}
set
{
this.SetValue<FontStyles>(value, "HeaderFontStyle");
}
}
[UIPropertyMetadata(8, UIPropertyOptions.AffectsMeasure | UIPropertyOptions.AffectsRender)]
public float HeaderFontSize
{
get
{
return this.GetValue<float>("HeaderFontSize");
}
set
{
this.SetValue<float>(value, "HeaderFontSize");
}
}
[UIPropertyMetadata("宋体", UIPropertyOptions.AffectsRender)]
public string HeaderFontFamily
{
get
{
return this.GetValue<string>("HeaderFontFamily");
}
set
{
this.SetValue<string>(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;
}
}
}
}