コード例 #1
0
ファイル: DataFormatter.cs プロジェクト: gsong2014/dnSpy
 public CSharpArrayFormatter(HexBox hexBox, ulong start, ulong end, bool lowerHex)
     : base(hexBox, start, end)
 {
     allocStringStart = "new byte[] {";
     allocStringEnd = "};";
     unknownHex = "0x??";
     hexFormat = lowerHex ? "0x{0:x2}" : "0x{0:X2}";
 }
コード例 #2
0
ファイル: HexBoxUndoCommand.cs プロジェクト: arkanoid1/dnSpy
		public HexBoxUndoCommand(HexBox hexBox, HexBoxPosition origCaretPos, ulong offset, byte[] origData, string descr) {
			this.doc = hexBox.Document;
			this.hexBoxWeakRef = new WeakReference(hexBox);
			this.origCaretPos = origCaretPos;
			this.newCaretPos = hexBox.CaretPosition;
			this.offset = offset;
			this.origData = origData;
			this.newData = doc.ReadBytes(offset, origData.Length);
			this.descr = descr;
			this.canExecute = false;
		}
コード例 #3
0
ファイル: DataFormatter.cs プロジェクト: arkanoid1/dnSpy
		protected DataFormatter(HexBox hexBox, ulong start, ulong end) {
			if (start < hexBox.StartOffset)
				start = hexBox.StartOffset;
			else if (start > hexBox.EndOffset)
				start = hexBox.EndOffset;
			if (end < hexBox.StartOffset)
				end = hexBox.StartOffset;
			else if (end > hexBox.EndOffset)
				end = hexBox.EndOffset;
			if (end < start)
				end = start;

			if (end - start >= MAX_BYTES - 1)
				end = start + MAX_BYTES - 1;

			this.hexBox = hexBox;
			this.start = start;
			this.end = end;
		}
コード例 #4
0
ファイル: HexBoxUndoCommand.cs プロジェクト: arkanoid1/dnSpy
		public bool TryAppend(HexBox hexBox, HexBoxPosition posBeforeWrite, ulong startOffset, byte[] originalData) {
			if (canNotAppend)
				return false;
			if (hexBoxWeakRef.Target != hexBox)
				return false;
			if (hexBox.Document == null)
				return false;
			if (originalData.Length == 0)
				return false;
			if (newCaretPos != posBeforeWrite)
				return false;
			if (newCaretPos.Offset > hexBox.CaretPosition.Offset)
				return false;
			if (newCaretPos.Kind != hexBox.CaretPosition.Kind)
				return false;

			if (newCaretPos.Offset == posBeforeWrite.Offset && newCaretPos.Kind == HexBoxPositionKind.HexByte && newCaretPos.KindPosition == HexBoxPosition.INDEX_HEXBYTE_LAST) {
				if (posBeforeWrite.Kind != HexBoxPositionKind.HexByte || posBeforeWrite.KindPosition != HexBoxPosition.INDEX_HEXBYTE_LAST)
					return false;
				if (originalData.Length != 1)
					return false;
				newData[newData.Length - 1] = (byte)hexBox.Document.ReadByte(posBeforeWrite.Offset);
			}
			else {
				if (newCaretPos.Offset != posBeforeWrite.Offset)
					return false;
				ulong c = hexBox.CaretPosition.Kind == HexBoxPositionKind.HexByte && hexBox.CaretPosition.KindPosition == HexBoxPosition.INDEX_HEXBYTE_LAST ? 1UL : 0;
				if (hexBox.CaretPosition.Offset - newCaretPos.Offset + c != (ulong)originalData.Length)
					return false;
				int origLen = newData.Length;
				Array.Resize(ref newData, origLen + originalData.Length);
				Array.Resize(ref origData, origLen + originalData.Length);

				for (int i = 0; i < originalData.Length; i++) {
					newData[origLen + i] = (byte)hexBox.Document.ReadByte(posBeforeWrite.Offset + (ulong)i);
					origData[origLen + i] = originalData[i];
				}
			}

			newCaretPos = hexBox.CaretPosition;
			return true;
		}
コード例 #5
0
ファイル: HexTabState.cs プロジェクト: nakijun/dnSpy
		public HexTabState() {
			this.HexBox = new HexBox();
			this.HexBox.Tag = this;
			var scroller = new ScrollViewer();
			scroller.Content = HexBox;
			scroller.CanContentScroll = true;
			scroller.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
			scroller.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
			this.TabItem.Content = scroller;

			this.HexBox.SetBinding(Control.FontFamilyProperty, new Binding("FontFamily") { Source = HexSettings.Instance });
			this.HexBox.SetBinding(Control.FontSizeProperty, new Binding("FontSize") { Source = HexSettings.Instance });
			this.HexBox.SetResourceReference(Control.BackgroundProperty, GetBackgroundResourceKey(ColorType.HexText));
			this.HexBox.SetResourceReference(Control.ForegroundProperty, GetForegroundResourceKey(ColorType.HexText));
			this.HexBox.SetResourceReference(HexBox.OffsetForegroundProperty, GetForegroundResourceKey(ColorType.HexOffset));
			this.HexBox.SetResourceReference(HexBox.Byte0ForegroundProperty, GetForegroundResourceKey(ColorType.HexByte0));
			this.HexBox.SetResourceReference(HexBox.Byte1ForegroundProperty, GetForegroundResourceKey(ColorType.HexByte1));
			this.HexBox.SetResourceReference(HexBox.ByteErrorForegroundProperty, GetForegroundResourceKey(ColorType.HexByteError));
			this.HexBox.SetResourceReference(HexBox.AsciiForegroundProperty, GetForegroundResourceKey(ColorType.HexAscii));
			this.HexBox.SetResourceReference(HexBox.CaretForegroundProperty, GetBackgroundResourceKey(ColorType.HexCaret));
			this.HexBox.SetResourceReference(HexBox.InactiveCaretForegroundProperty, GetBackgroundResourceKey(ColorType.HexInactiveCaret));
			this.HexBox.SetResourceReference(HexBox.SelectionBackgroundProperty, GetBackgroundResourceKey(ColorType.HexSelection));
			this.HexBox.SetResourceReference(Control.FontStyleProperty, GetFontStyleResourceKey(ColorType.HexText));
			this.HexBox.SetResourceReference(Control.FontWeightProperty, GetFontWeightResourceKey(ColorType.HexText));

			ContextMenuProvider.Add(this.HexBox);

			InstallMouseWheelZoomHandler(HexBox);

			BytesGroupCount = null;
			BytesPerLine = null;
			UseHexPrefix = null;
			ShowAscii = null;
			LowerCaseHex = null;
			AsciiEncoding = null;
		}
コード例 #6
0
ファイル: TabState.cs プロジェクト: gsong2014/dnSpy
 public StateRestorer(HexBox hexBox, HexBoxState state)
 {
     this.hexBox = hexBox;
     this.state = state;
     this.hexBox.Loaded += HexBox_Loaded;
 }
コード例 #7
0
ファイル: HexBoxUndo.cs プロジェクト: gsong2014/dnSpy
        bool TryUpdateOldTextInputCommand(HexWriteType type, HexBox hexBox, HexBoxPosition posBeforeWrite, ulong startOffset, byte[] originalData)
        {
            if (type != HexWriteType.ByteInput && type != HexWriteType.AsciiInput)
                return false;

            var cmd = (HexBoxUndoCommand)prevTextInputCmd.Target;
            if (cmd == null)
                return false;

            return cmd.TryAppend(hexBox, posBeforeWrite, startOffset, originalData);
        }
コード例 #8
0
ファイル: DataFormatter.cs プロジェクト: arkanoid1/dnSpy
		public HexStringFormatter(HexBox hexBox, ulong start, ulong end, bool lowerHex) : base(hexBox, start, end) {
			this.hexByteFormatString = lowerHex ? "{0:x2}" : "{0:X2}";
		}
コード例 #9
0
ファイル: DataFormatter.cs プロジェクト: arkanoid1/dnSpy
		public UILayoutFormatter(HexBox hexBox, ulong start, ulong end) : base(hexBox, start, end) {
		}
コード例 #10
0
ファイル: DataFormatter.cs プロジェクト: arkanoid1/dnSpy
		public VBArrayFormatter(HexBox hexBox, ulong start, ulong end, bool lowerHex) : base(hexBox, start, end) {
			allocStringStart = "New Byte() {";
			allocStringEnd = "}";
			unknownHex = "&H??";
			hexFormat = lowerHex ? "&H{0:x2}" : "&H{0:X2}";
			eol = " _" + Environment.NewLine;
		}
コード例 #11
0
ファイル: DataFormatter.cs プロジェクト: arkanoid1/dnSpy
		protected LanguageArrayFormatter(HexBox hexBox, ulong start, ulong end) : base(hexBox, start, end) {
		}
コード例 #12
0
ファイル: DataFormatter.cs プロジェクト: arkanoid1/dnSpy
		public UnicodeStringFormatter(HexBox hexBox, ulong start, ulong end) : base(hexBox, start, end) {
		}
コード例 #13
0
ファイル: SelectionLayer.cs プロジェクト: arkanoid1/dnSpy
		public SelectionLayer(HexBox hexBox) {
			this.hexBox = hexBox;
		}