void InitializeState(HexViewUIState state) { if (IsValid(state)) { HexView.Options.SetOptionValue(DefaultHexViewOptions.ShowOffsetColumnId, state.ShowOffsetColumn); HexView.Options.SetOptionValue(DefaultHexViewOptions.ShowValuesColumnId, state.ShowValuesColumn); HexView.Options.SetOptionValue(DefaultHexViewOptions.ShowAsciiColumnId, state.ShowAsciiColumn); HexView.Options.SetOptionValue(DefaultHexViewOptions.StartPositionId, state.StartPosition); HexView.Options.SetOptionValue(DefaultHexViewOptions.EndPositionId, state.EndPosition); HexView.Options.SetOptionValue(DefaultHexViewOptions.BasePositionId, state.BasePosition); HexView.Options.SetOptionValue(DefaultHexViewOptions.UseRelativePositionsId, state.UseRelativePositions); HexView.Options.SetOptionValue(DefaultHexViewOptions.OffsetBitSizeId, state.OffsetBitSize); HexView.Options.SetOptionValue(DefaultHexViewOptions.HexValuesDisplayFormatId, state.HexValuesDisplayFormat); HexView.Options.SetOptionValue(DefaultHexViewOptions.BytesPerLineId, state.BytesPerLine); HexView.ViewportLeft = state.ViewportLeft; HexView.DisplayHexLineContainingBufferPosition(new HexBufferPoint(HexView.Buffer, state.TopLinePosition), state.TopLineVerticalDistance, VSTE.ViewRelativePosition.Top, null, null, DisplayHexLineOptions.CanRecreateBufferLines); var valuesPos = new HexCellPosition(HexColumnType.Values, new HexBufferPoint(HexView.Buffer, state.ValuesPosition), state.ValuesCellPosition); var asciiPos = new HexCellPosition(HexColumnType.Ascii, new HexBufferPoint(HexView.Buffer, state.AsciiPosition), 0); var newPos = new HexColumnPosition(state.ActiveColumn, valuesPos, asciiPos); // BufferLines could've been recreated, re-verify the new position if (HexView.BufferLines.IsValidPosition(newPos.ValuePosition.BufferPosition) && HexView.BufferLines.IsValidPosition(newPos.AsciiPosition.BufferPosition)) { HexView.Caret.MoveTo(newPos); } } else { HexView.Caret.MoveTo(HexView.BufferLines.BufferStart); } HexView.Selection.Clear(); }
void SetExplicitPosition(HexColumnPosition position) { var oldPos = Position; SetPositionCore(position); var newPos = Position; if (oldPos != newPos) { PositionChanged?.Invoke(this, new HexCaretPositionChangedEventArgs(hexView, oldPos, newPos)); } }
void SetPositionCore(HexColumnPosition position) { position = Filter(position); if (currentPosition != position) { currentPosition = position; hexCaretLayer.ActiveColumn = currentPosition.ActiveColumn; hexCaretLayer.CaretPositionChanged(); if (imeState.CompositionStarted) { MoveImeCompositionWindow(); } } }
static int?GetLinePosition(HexBufferLine line, HexColumnPosition position) { HexCell cell; switch (position.ActiveColumn) { case HexColumnType.Values: cell = line.ValueCells.GetCell(position.ActivePosition.BufferPosition); return(cell?.CellSpan.Start + position.ActivePosition.CellPosition); case HexColumnType.Ascii: cell = line.AsciiCells.GetCell(position.ActivePosition.BufferPosition); return(cell?.CellSpan.Start + position.ActivePosition.CellPosition); case HexColumnType.Offset: default: throw new InvalidOperationException(); } }
public override HexCaretPosition MoveTo(HexColumnPosition position, HexMoveToFlags flags) { if (position.IsDefault) { throw new ArgumentException(); } if (!hexView.BufferLines.IsValidPosition(position.ValuePosition.BufferPosition)) { throw new ArgumentOutOfRangeException(nameof(position)); } if (!hexView.BufferLines.IsValidPosition(position.AsciiPosition.BufferPosition)) { throw new ArgumentOutOfRangeException(nameof(position)); } SetExplicitPosition(position); if ((flags & HexMoveToFlags.CaptureHorizontalPosition) != 0) { SavePreferredXCoordinate(); } SavePreferredYCoordinate(); return(Position); }
HexColumnPosition Filter(HexColumnPosition position) => new HexColumnPosition(position.ActiveColumn, Filter(position.ValuePosition), Filter(position.AsciiPosition));
HexViewLine GetLine(HexColumnPosition position) => hexView.GetHexViewLineContainingBufferPosition(position.ActivePosition.BufferPosition);
void InitializeState(HexViewUIState state) { if (IsValid(state)) { HexView.Options.SetOptionValue(DefaultHexViewOptions.ShowOffsetColumnId, state.ShowOffsetColumn); HexView.Options.SetOptionValue(DefaultHexViewOptions.ShowValuesColumnId, state.ShowValuesColumn); HexView.Options.SetOptionValue(DefaultHexViewOptions.ShowAsciiColumnId, state.ShowAsciiColumn); HexView.Options.SetOptionValue(DefaultHexViewOptions.StartPositionId, state.StartPosition); HexView.Options.SetOptionValue(DefaultHexViewOptions.EndPositionId, state.EndPosition); HexView.Options.SetOptionValue(DefaultHexViewOptions.BasePositionId, state.BasePosition); HexView.Options.SetOptionValue(DefaultHexViewOptions.UseRelativePositionsId, state.UseRelativePositions); HexView.Options.SetOptionValue(DefaultHexViewOptions.OffsetBitSizeId, state.OffsetBitSize); HexView.Options.SetOptionValue(DefaultHexViewOptions.HexValuesDisplayFormatId, state.HexValuesDisplayFormat); HexView.Options.SetOptionValue(DefaultHexViewOptions.BytesPerLineId, state.BytesPerLine); HexView.ViewportLeft = state.ViewportLeft; HexView.DisplayHexLineContainingBufferPosition(new HexBufferPoint(HexView.Buffer, state.TopLinePosition), state.TopLineVerticalDistance, VSTE.ViewRelativePosition.Top, null, null, DisplayHexLineOptions.CanRecreateBufferLines); var valuesPos = new HexCellPosition(HexColumnType.Values, new HexBufferPoint(HexView.Buffer, state.ValuesPosition), state.ValuesCellPosition); var asciiPos = new HexCellPosition(HexColumnType.Ascii, new HexBufferPoint(HexView.Buffer, state.AsciiPosition), 0); var newPos = new HexColumnPosition(state.ActiveColumn, valuesPos, asciiPos); // BufferLines could've been recreated, re-verify the new position if (HexView.BufferLines.IsValidPosition(newPos.ValuePosition.BufferPosition) && HexView.BufferLines.IsValidPosition(newPos.AsciiPosition.BufferPosition)) HexView.Caret.MoveTo(newPos); } else HexView.Caret.MoveTo(HexView.BufferLines.BufferStart); HexView.Selection.Clear(); }
/// <summary> /// Constructor /// </summary> /// <param name="position">Position</param> public HexCaretPosition(HexColumnPosition position) { // Don't throw if position is the default value. Could happen if none of values and ASCII columns are shown. Position = position; }
/// <summary> /// Moves the caret to a new position /// </summary> /// <param name="position">Position</param> /// <param name="flags">Flags</param> /// <returns></returns> public abstract HexCaretPosition MoveTo(HexColumnPosition position, HexMoveToFlags flags);
/// <summary> /// Moves the caret to a new position /// </summary> /// <param name="position">Position</param> /// <returns></returns> public HexCaretPosition MoveTo(HexColumnPosition position) => MoveTo(position, HexMoveToFlags.CaptureHorizontalPosition);
/// <summary> /// Constructor /// </summary> /// <param name="position">Position</param> public HexCaretPosition(HexColumnPosition position) =>