CPF/CPF.ReoGrid/ReoGridControl.cs

2210 lines
54 KiB
C#
Raw Normal View History

2024-06-24 10:15:59 +08:00
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;
}
}
}
}