コード例 #1
0
        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();
        }
コード例 #2
0
ファイル: HexCaretImpl.cs プロジェクト: pashav15/pashav
        void SetExplicitPosition(HexColumnPosition position)
        {
            var oldPos = Position;

            SetPositionCore(position);
            var newPos = Position;

            if (oldPos != newPos)
            {
                PositionChanged?.Invoke(this, new HexCaretPositionChangedEventArgs(hexView, oldPos, newPos));
            }
        }
コード例 #3
0
ファイル: HexCaretImpl.cs プロジェクト: pashav15/pashav
 void SetPositionCore(HexColumnPosition position)
 {
     position = Filter(position);
     if (currentPosition != position)
     {
         currentPosition            = position;
         hexCaretLayer.ActiveColumn = currentPosition.ActiveColumn;
         hexCaretLayer.CaretPositionChanged();
         if (imeState.CompositionStarted)
         {
             MoveImeCompositionWindow();
         }
     }
 }
コード例 #4
0
ファイル: HexCaretImpl.cs プロジェクト: pashav15/pashav
        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();
            }
        }
コード例 #5
0
ファイル: HexCaretImpl.cs プロジェクト: pashav15/pashav
        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);
        }
コード例 #6
0
ファイル: HexCaretImpl.cs プロジェクト: pashav15/pashav
 HexColumnPosition Filter(HexColumnPosition position) =>
 new HexColumnPosition(position.ActiveColumn, Filter(position.ValuePosition), Filter(position.AsciiPosition));
コード例 #7
0
ファイル: HexCaretImpl.cs プロジェクト: pashav15/pashav
 HexViewLine GetLine(HexColumnPosition position) =>
 hexView.GetHexViewLineContainingBufferPosition(position.ActivePosition.BufferPosition);
コード例 #8
0
		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();
		}
コード例 #9
0
 /// <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;
 }
コード例 #10
0
ファイル: HexCaret.cs プロジェクト: zquans/dnSpy
 /// <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);
コード例 #11
0
ファイル: HexCaret.cs プロジェクト: zquans/dnSpy
 /// <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);
コード例 #12
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="position">Position</param>
 public HexCaretPosition(HexColumnPosition position) =>
コード例 #13
0
ファイル: HexCaret.cs プロジェクト: manojdjoshi/dnSpy
		/// <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);
コード例 #14
0
ファイル: HexCaret.cs プロジェクト: manojdjoshi/dnSpy
		/// <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);