Example #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();
        }
        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);
        }
Example #4
0
 void VisualElement_Loaded(object sender, RoutedEventArgs e)
 {
     HexView.VisualElement.Loaded -= VisualElement_Loaded;
     if (cachedHexViewUIState == null)
     {
         return;
     }
     InitializeState(cachedHexViewUIState);
     cachedHexViewUIState = null;
 }
Example #5
0
        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);
        }
Example #6
0
 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);
 }
Example #7
0
		void VisualElement_Loaded(object sender, RoutedEventArgs e) {
			HexView.VisualElement.Loaded -= VisualElement_Loaded;
			if (cachedHexViewUIState == null)
				return;
			InitializeState(cachedHexViewUIState);
			cachedHexViewUIState = null;
		}
Example #8
0
		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;
		}
Example #9
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();
		}
Example #10
0
		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;
		}