Browse Source

fixed some bugs in the HexEditor

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3716 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Siegfried Pammer 18 years ago
parent
commit
5e40d123b8
  1. 55
      src/AddIns/DisplayBindings/HexEditor/Project/Src/Editor.cs
  2. 2
      src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs

55
src/AddIns/DisplayBindings/HexEditor/Project/Src/Editor.cs

@ -5,16 +5,19 @@
// <version>$Revision$</version> // <version>$Revision$</version>
// </file> // </file>
using ICSharpCode.Core;
using System; using System;
using System.Collections; using System.Collections;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml; using System.Xml;
using HexEditor.Util; using HexEditor.Util;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
//using HexEditor.Commands; //using HexEditor.Commands;
@ -855,16 +858,6 @@ namespace HexEditor
} else { } else {
TextRenderer.DrawText(hexView, GetHex(buffer.GetBytes(start, this.BytesPerLine)), Settings.DataFont, (Rectangle)selregion[0], Color.White, SystemColors.Highlight, TextFormatFlags.Left & TextFormatFlags.SingleLine); TextRenderer.DrawText(hexView, GetHex(buffer.GetBytes(start, this.BytesPerLine)), Settings.DataFont, (Rectangle)selregion[0], Color.White, SystemColors.Highlight, TextFormatFlags.Left & TextFormatFlags.SingleLine);
} }
if (!paintMarker) return;
if ((selregion.Length > 1) && ((int)(Math.Abs(end - start)) <= this.BytesPerLine)) {
if (selpoints.Length < 8) return;
textView.DrawPolygon(Pens.Black, new Point[] {selpoints[0], selpoints[1], selpoints[6], selpoints[7]});
textView.DrawPolygon(Pens.Black, new Point[] {selpoints[4], selpoints[5], selpoints[2], selpoints[3]});
} else {
textView.DrawPolygon(Pens.Black, selpoints);
}
} else { } else {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
@ -882,15 +875,41 @@ namespace HexEditor
} else { } else {
TextRenderer.DrawText(textView, GetText(buffer.GetBytes(start, this.BytesPerLine)), Settings.DataFont, (Rectangle)selregion[0], Color.White, SystemColors.Highlight, TextFormatFlags.Left & TextFormatFlags.SingleLine); TextRenderer.DrawText(textView, GetText(buffer.GetBytes(start, this.BytesPerLine)), Settings.DataFont, (Rectangle)selregion[0], Color.White, SystemColors.Highlight, TextFormatFlags.Left & TextFormatFlags.SingleLine);
} }
}
if (!paintMarker) return; if (!paintMarker) return;
if ((selregion.Length > 1) && ((int)(Math.Abs(end - start)) <= this.BytesPerLine)) {
hexView.DrawPolygon(Pens.Black, new Point[] {selpoints[0], selpoints[1], selpoints[6], selpoints[7]}); GraphicsPath path = new GraphicsPath(FillMode.Winding);
hexView.DrawPolygon(Pens.Black, new Point[] {selpoints[4], selpoints[5], selpoints[2], selpoints[3]});
if (GetLineForOffset(start) == GetLineForOffset(end) || ((start % this.bytesPerLine) == 0 && GetLineForOffset(start) + 1 == GetLineForOffset(end))) {
if (this.selpoints.Length == 8) {
path.AddLine(this.selpoints[0], this.selpoints[1]);
path.AddLine(this.selpoints[3], this.selpoints[4]);
path.AddLine(this.selpoints[4], this.selpoints[5]);
path.AddLine(this.selpoints[5], this.selpoints[0]);
} else
path.AddPolygon(this.selpoints);
} else {
if ((GetLineForOffset(start) == GetLineForOffset(end) - 1) && (start % this.bytesPerLine >= end % this.bytesPerLine)) {
if (this.selpoints.Length < 8) {
path.AddPolygon(this.selpoints);
} else { } else {
hexView.DrawPolygon(Pens.Black, selpoints); path.AddLine(this.selpoints[0], this.selpoints[1]);
path.AddLine(this.selpoints[6], this.selpoints[7]);
path.CloseFigure();
path.AddLine(this.selpoints[2], this.selpoints[3]);
path.AddLine(this.selpoints[4], this.selpoints[5]);
path.CloseFigure();
} }
} else
path.AddPolygon(this.selpoints);
} }
if (this.activeView == this.hexView)
textView.DrawPath(Pens.Black, path);
else
hexView.DrawPath(Pens.Black, path);
} }
#endregion #endregion
@ -1903,9 +1922,9 @@ namespace HexEditor
/// <remarks>returns 0 for first line ...</remarks> /// <remarks>returns 0 for first line ...</remarks>
internal int GetLineForOffset(int offset) internal int GetLineForOffset(int offset)
{ {
int line = (int)(offset / this.BytesPerLine); if (offset == 0)
if ((offset != 0) && ((offset % this.BytesPerLine) == 0)) line--; return 0;
return line; return (int)Math.Ceiling((double)offset / (double)this.BytesPerLine) - 1;
} }
/// <summary> /// <summary>

2
src/Main/Base/Project/Src/Services/DisplayBinding/DisplayBindingDescriptor.cs

@ -104,7 +104,7 @@ namespace ICSharpCode.SharpDevelop
/// </remarks> /// </remarks>
public bool CanOpenFile(string fileName) public bool CanOpenFile(string fileName)
{ {
string fileNameRegex = this.FileNameRegex; string fileNameRegex = StringParser.Parse(this.FileNameRegex);
if (fileNameRegex == null || fileNameRegex.Length == 0) // no regex specified if (fileNameRegex == null || fileNameRegex.Length == 0) // no regex specified
return true; return true;
if (fileName == null) // regex specified but file has no name if (fileName == null) // regex specified but file has no name

Loading…
Cancel
Save