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(); }
public static HexViewUIState Read(ISettingsSection section, HexViewUIState s) { bool failed = false; s.ShowOffsetColumn = GetValue <bool>(section, "ShowOffsetColumn", ref failed); s.ShowValuesColumn = GetValue <bool>(section, "ShowValuesColumn", ref failed); s.ShowAsciiColumn = GetValue <bool>(section, "ShowAsciiColumn", ref failed); s.StartPosition = GetValue <HexPosition>(section, "StartPosition", ref failed); s.EndPosition = GetValue <HexPosition>(section, "EndPosition", ref failed); s.BasePosition = GetValue <HexPosition>(section, "BasePosition", ref failed); s.UseRelativePositions = GetValue <bool>(section, "UseRelativePositions", ref failed); s.OffsetBitSize = GetValue <int>(section, "OffsetBitSize", ref failed); s.HexValuesDisplayFormat = GetValue <HexValuesDisplayFormat>(section, "HexValuesDisplayFormat", ref failed); s.BytesPerLine = GetValue <int>(section, "BytesPerLine", ref failed); s.ActiveColumn = GetValue <HexColumnType>(section, "ActiveColumn", ref failed); s.ValuesPosition = GetValue <HexPosition>(section, "ValuesPosition", ref failed); s.ValuesCellPosition = GetValue <int>(section, "ValuesCellPosition", ref failed); s.AsciiPosition = GetValue <HexPosition>(section, "AsciiPosition", ref failed); s.ViewportLeft = GetValue <double>(section, "ViewportLeft", ref failed); s.TopLinePosition = GetValue <HexPosition>(section, "TopLinePosition", ref failed); s.TopLineVerticalDistance = GetValue <double>(section, "TopLineVerticalDistance", ref failed); s.AnchorPoint = GetValue <HexPosition>(section, "AnchorPoint", ref failed); s.ActivePoint = GetValue <HexPosition>(section, "ActivePoint", ref failed); if (failed) { return(null); } return(s); }
public static HexViewUIState Write(ISettingsSection section, HexViewUIState s) { section.Attribute("ShowOffsetColumn", s.ShowOffsetColumn); section.Attribute("ShowValuesColumn", s.ShowValuesColumn); section.Attribute("ShowAsciiColumn", s.ShowAsciiColumn); section.Attribute("StartPosition", s.StartPosition); section.Attribute("EndPosition", s.EndPosition); section.Attribute("BasePosition", s.BasePosition); section.Attribute("UseRelativePositions", s.UseRelativePositions); section.Attribute("OffsetBitSize", s.OffsetBitSize); section.Attribute("HexValuesDisplayFormat", s.HexValuesDisplayFormat); section.Attribute("BytesPerLine", s.BytesPerLine); section.Attribute("ActiveColumn", s.ActiveColumn); section.Attribute("ValuesPosition", s.ValuesPosition); section.Attribute("ValuesCellPosition", s.ValuesCellPosition); section.Attribute("AsciiPosition", s.AsciiPosition); section.Attribute("ViewportLeft", s.ViewportLeft); section.Attribute("TopLinePosition", s.TopLinePosition); section.Attribute("TopLineVerticalDistance", s.TopLineVerticalDistance); section.Attribute("AnchorPoint", s.AnchorPoint); section.Attribute("ActivePoint", s.ActivePoint); return(s); }
void VisualElement_Loaded(object sender, RoutedEventArgs e) { HexView.VisualElement.Loaded -= VisualElement_Loaded; if (cachedHexViewUIState == null) { return; } InitializeState(cachedHexViewUIState); cachedHexViewUIState = null; }
public override object CreateUIState() { if (cachedHexViewUIState != null) { return(cachedHexViewUIState); } var state = new HexViewUIState(HexView); state.ShowOffsetColumn = HexView.Options.ShowOffsetColumn(); state.ShowValuesColumn = HexView.Options.ShowValuesColumn(); state.ShowAsciiColumn = HexView.Options.ShowAsciiColumn(); state.StartPosition = HexView.Options.GetStartPosition(); state.EndPosition = HexView.Options.GetEndPosition(); state.BasePosition = HexView.Options.GetBasePosition(); state.UseRelativePositions = HexView.Options.UseRelativePositions(); state.OffsetBitSize = HexView.Options.GetOffsetBitSize(); state.HexValuesDisplayFormat = HexView.Options.GetValuesDisplayFormat(); state.BytesPerLine = HexView.Options.GetBytesPerLine(); return(state); }
bool IsValid(HexViewUIState state) { if (state.ActiveColumn != HexColumnType.Values && state.ActiveColumn != HexColumnType.Ascii) { return(false); } if (state.StartPosition >= HexPosition.MaxEndPosition) { return(false); } if (state.EndPosition > HexPosition.MaxEndPosition) { return(false); } if (state.BasePosition >= HexPosition.MaxEndPosition) { return(false); } if (state.EndPosition < state.StartPosition) { return(false); } if (state.OffsetBitSize < HexBufferLineFormatterOptions.MinOffsetBitSize || state.OffsetBitSize > HexBufferLineFormatterOptions.MaxOffsetBitSize) { return(false); } if (state.HexValuesDisplayFormat < HexBufferLineFormatterOptions.HexValuesDisplayFormat_First || state.HexValuesDisplayFormat > HexBufferLineFormatterOptions.HexValuesDisplayFormat_Last) { return(false); } if (state.BytesPerLine < HexBufferLineFormatterOptions.MinBytesPerLine || state.BytesPerLine > HexBufferLineFormatterOptions.MaxBytesPerLine) { return(false); } if (state.ValuesPosition >= HexPosition.MaxEndPosition) { return(false); } if (state.AsciiPosition >= HexPosition.MaxEndPosition) { return(false); } if (state.TopLinePosition >= HexPosition.MaxEndPosition) { return(false); } if (state.ValuesPosition < state.StartPosition || state.ValuesPosition > state.EndPosition) { return(false); } if (state.AsciiPosition < state.StartPosition || state.AsciiPosition > state.EndPosition) { return(false); } if (state.ValuesCellPosition < 0 || state.ValuesCellPosition > 1000) { return(false); } if (state.TopLinePosition < state.StartPosition || state.TopLinePosition > state.EndPosition) { return(false); } if (double.IsNaN(state.ViewportLeft) || state.ViewportLeft < 0 || state.ViewportLeft > 100000) { return(false); } if (double.IsNaN(state.TopLineVerticalDistance) || Math.Abs(state.TopLineVerticalDistance) > 10000) { return(false); } return(true); }
void VisualElement_Loaded(object sender, RoutedEventArgs e) { HexView.VisualElement.Loaded -= VisualElement_Loaded; if (cachedHexViewUIState == null) return; InitializeState(cachedHexViewUIState); cachedHexViewUIState = null; }
bool IsValid(HexViewUIState state) { if (state.ActiveColumn != HexColumnType.Values && state.ActiveColumn != HexColumnType.Ascii) return false; if (state.StartPosition >= HexPosition.MaxEndPosition) return false; if (state.EndPosition > HexPosition.MaxEndPosition) return false; if (state.BasePosition >= HexPosition.MaxEndPosition) return false; if (state.EndPosition < state.StartPosition) return false; if (state.OffsetBitSize < HexBufferLineFormatterOptions.MinOffsetBitSize || state.OffsetBitSize > HexBufferLineFormatterOptions.MaxOffsetBitSize) return false; if (state.HexValuesDisplayFormat < HexBufferLineFormatterOptions.HexValuesDisplayFormat_First || state.HexValuesDisplayFormat > HexBufferLineFormatterOptions.HexValuesDisplayFormat_Last) return false; if (state.BytesPerLine < HexBufferLineFormatterOptions.MinBytesPerLine || state.BytesPerLine > HexBufferLineFormatterOptions.MaxBytesPerLine) return false; if (state.ValuesPosition >= HexPosition.MaxEndPosition) return false; if (state.AsciiPosition >= HexPosition.MaxEndPosition) return false; if (state.TopLinePosition >= HexPosition.MaxEndPosition) return false; if (state.ValuesPosition < state.StartPosition || state.ValuesPosition > state.EndPosition) return false; if (state.AsciiPosition < state.StartPosition || state.AsciiPosition > state.EndPosition) return false; if (state.ValuesCellPosition < 0 || state.ValuesCellPosition > 1000) return false; if (state.TopLinePosition < state.StartPosition || state.TopLinePosition > state.EndPosition) return false; if (double.IsNaN(state.ViewportLeft) || state.ViewportLeft < 0 || state.ViewportLeft > 100000) return false; if (double.IsNaN(state.TopLineVerticalDistance) || Math.Abs(state.TopLineVerticalDistance) > 10000) return false; return true; }
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(); }
public override object CreateUIState() { if (cachedHexViewUIState != null) return cachedHexViewUIState; var state = new HexViewUIState(HexView); state.ShowOffsetColumn = HexView.Options.ShowOffsetColumn(); state.ShowValuesColumn = HexView.Options.ShowValuesColumn(); state.ShowAsciiColumn = HexView.Options.ShowAsciiColumn(); state.StartPosition = HexView.Options.GetStartPosition(); state.EndPosition = HexView.Options.GetEndPosition(); state.BasePosition = HexView.Options.GetBasePosition(); state.UseRelativePositions = HexView.Options.UseRelativePositions(); state.OffsetBitSize = HexView.Options.GetOffsetBitSize(); state.HexValuesDisplayFormat = HexView.Options.GetValuesDisplayFormat(); state.BytesPerLine = HexView.Options.GetBytesPerLine(); return state; }