|
|
|
@ -11,6 +11,8 @@ using System.Windows.Controls;
@@ -11,6 +11,8 @@ using System.Windows.Controls;
|
|
|
|
|
using System.Windows.Controls.Primitives; |
|
|
|
|
using System.Windows.Media; |
|
|
|
|
using System.Windows.Media.Imaging; |
|
|
|
|
using System.Windows.Interop; |
|
|
|
|
using PointF = System.Drawing.PointF; |
|
|
|
|
|
|
|
|
|
namespace ICSharpCode.CodeQualityAnalysis.Controls |
|
|
|
|
{ |
|
|
|
@ -73,9 +75,9 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
@@ -73,9 +75,9 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
|
|
|
|
|
HoveredCell = new HoveredCell<TValue>(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void SetVisibleItems(HeaderType tree, ICollection<TItem> visibleItems) |
|
|
|
|
public void SetVisibleItems(HeaderType type, ICollection<TItem> visibleItems) |
|
|
|
|
{ |
|
|
|
|
matrix.SetVisibleItems(tree, visibleItems); |
|
|
|
|
matrix.SetVisibleItems(type, visibleItems); |
|
|
|
|
|
|
|
|
|
matrixHeight = matrix.HeaderRows.Count; |
|
|
|
|
matrixWidth = matrix.HeaderColumns.Count; |
|
|
|
@ -92,17 +94,27 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
@@ -92,17 +94,27 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (changedCoords) { |
|
|
|
|
HoveredCell.RowIndex = currentCell.Y; |
|
|
|
|
HoveredCell.ColumnIndex = currentCell.X; |
|
|
|
|
HoveredCell.Value = matrix[HoveredCell.RowIndex, HoveredCell.ColumnIndex]; |
|
|
|
|
if (HoveredCellChanged != null) |
|
|
|
|
HoveredCellChanged(this, new HoveredCellEventArgs<TValue>(HoveredCell)); |
|
|
|
|
SetHoveredCell(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (matrixHeight >= 0 && matrixWidth >= 0) |
|
|
|
|
InvalidateVisual(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void HighlightLine(HeaderType type, INode node) |
|
|
|
|
{ |
|
|
|
|
var items = type == HeaderType.Columns ? matrix.HeaderColumns : matrix.HeaderRows; |
|
|
|
|
for (int i = 0; i < items.Count; i++) { |
|
|
|
|
if (node.Equals(items[i])) { |
|
|
|
|
currentCell = type == HeaderType.Columns ? |
|
|
|
|
new Coords(i, currentCell.Y) : |
|
|
|
|
new Coords(currentCell.X, i); |
|
|
|
|
|
|
|
|
|
SetHoveredCell(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e) |
|
|
|
|
{ |
|
|
|
|
base.OnMouseMove(e); |
|
|
|
@ -120,14 +132,18 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
@@ -120,14 +132,18 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
|
|
|
|
|
currentCell.Y != HoveredCell.ColumnIndex) |
|
|
|
|
{ |
|
|
|
|
InvalidateVisual(); |
|
|
|
|
SetHoveredCell(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected void SetHoveredCell() |
|
|
|
|
{ |
|
|
|
|
HoveredCell.RowIndex = currentCell.Y; |
|
|
|
|
HoveredCell.ColumnIndex = currentCell.X; |
|
|
|
|
HoveredCell.Value = matrix[HoveredCell.RowIndex, HoveredCell.ColumnIndex]; |
|
|
|
|
if (HoveredCellChanged != null) |
|
|
|
|
HoveredCellChanged(this, new HoveredCellEventArgs<TValue>(HoveredCell)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected override void OnRender(DrawingContext drawingContext) |
|
|
|
|
{ |
|
|
|
@ -138,6 +154,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
@@ -138,6 +154,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
|
|
|
|
|
var maxHeight = ((int) viewport.Height / CellHeight) + 1; |
|
|
|
|
|
|
|
|
|
// how many cells we will draw
|
|
|
|
|
// sometimes happens when half of cell is hidden in scroll so text isnt drawn
|
|
|
|
|
// so lets drawn one more cell
|
|
|
|
|
var cellsHorizontally = maxWidth > matrixWidth ? matrixWidth : maxWidth + 1; |
|
|
|
|
var cellsVertically = maxHeight > matrixHeight ? matrixHeight : maxHeight + 1; |
|
|
|
|
|
|
|
|
@ -155,11 +173,6 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
@@ -155,11 +173,6 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
|
|
|
|
|
backgroundColor.Freeze(); |
|
|
|
|
drawingContext.DrawRectangle(backgroundColor, null, background); |
|
|
|
|
|
|
|
|
|
// sometimes happens when half of cell is hidden in scroll so text isnt drawn
|
|
|
|
|
// so lets drawn one more cell
|
|
|
|
|
// cellsHorizontally = maxWidth > matrixWidth ? matrixWidth : maxWidth + 1;
|
|
|
|
|
// cellsVertically = maxHeight > matrixHeight ? matrixHeight : maxHeight + 1;
|
|
|
|
|
|
|
|
|
|
var currentXLine = (currentCell.X - scaledOffsetX) * CellWidth - offsetDiffX; |
|
|
|
|
var currentYLine = (currentCell.Y - scaledOffsetY) * CellHeight - offsetDiffY; |
|
|
|
|
|
|
|
|
@ -264,16 +277,19 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
@@ -264,16 +277,19 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
|
|
|
|
|
var spanWidth = (CellWidth - size.Width) / 2; |
|
|
|
|
var spanHeight = (CellHeight - size.Height) / 2; |
|
|
|
|
|
|
|
|
|
g.DrawString(text, fontOjb, System.Drawing.Brushes.Black, new System.Drawing.PointF(spanWidth, spanHeight)); |
|
|
|
|
g.DrawString(text, fontOjb, System.Drawing.Brushes.Black, new PointF(spanWidth, spanHeight)); |
|
|
|
|
g.Dispose(); |
|
|
|
|
|
|
|
|
|
var img = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), |
|
|
|
|
var bitmap = bmp.GetHbitmap(); |
|
|
|
|
var img = Imaging.CreateBitmapSourceFromHBitmap(bitmap, |
|
|
|
|
IntPtr.Zero, |
|
|
|
|
Int32Rect.Empty, |
|
|
|
|
BitmapSizeOptions.FromWidthAndHeight(bmp.Width, bmp.Height)); |
|
|
|
|
img.Freeze(); |
|
|
|
|
imgs.Add(text, img); |
|
|
|
|
|
|
|
|
|
Helper.DeleteObject(bitmap); |
|
|
|
|
|
|
|
|
|
return img; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|