Browse Source

Fix Matrix control crashing.

pull/19/head
Tomas Linhart 15 years ago
parent
commit
2e91b30687
  1. 3
      src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyColorizer.cs
  2. 33
      src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs

3
src/AddIns/Analysis/CodeQuality/Src/Controls/DependencyColorizer.cs

@ -38,6 +38,9 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -38,6 +38,9 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
public Color GetColor(Relationship relationship)
{
if (relationship == null)
return Colors.Transparent;
if (relationship.Relationships.Any(r => r == RelationshipType.UseThis))
return Colors.Azure;
if (relationship.Relationships.Any(r => r == RelationshipType.UsedBy))

33
src/AddIns/Analysis/CodeQuality/Src/Controls/MatrixControl.cs

@ -80,6 +80,25 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -80,6 +80,25 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
matrixHeight = matrix.HeaderRows.Count;
matrixWidth = matrix.HeaderColumns.Count;
bool changedCoords = false;
if (currentCell.X > matrixHeight) {
currentCell = new Coords(matrixHeight - 1, currentCell.Y);
changedCoords = true;
}
if (currentCell.Y > matrixWidth) {
currentCell = new Coords(currentCell.X, matrixWidth - 1);
changedCoords = true;
}
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));
}
if (matrixHeight >= 0 && matrixWidth >= 0)
InvalidateVisual();
}
@ -119,8 +138,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -119,8 +138,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
var maxHeight = ((int) viewport.Height / CellHeight) + 1;
// how many cells we will draw
var cellsHorizontally = maxWidth > matrixWidth ? matrixWidth : maxWidth;
var cellsVertically = maxHeight > matrixHeight ? matrixHeight : maxHeight;
var cellsHorizontally = maxWidth > matrixWidth ? matrixWidth : maxWidth + 1;
var cellsVertically = maxHeight > matrixHeight ? matrixHeight : maxHeight + 1;
// number of cell which will be drawn
var scaledOffsetX = (int)offset.X / CellWidth;
@ -138,8 +157,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -138,8 +157,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
// 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;
// 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;
@ -182,8 +201,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -182,8 +201,8 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
// text
for (int i = 0; i < cellsHorizontally; i++) {
for (int j = 0; j < cellsVertically; j++) { // dont draw text in unavailables places
int rowIndex = j + scaledOffsetX;
int columnIndex = i + scaledOffsetY;
int rowIndex = j;
int columnIndex = i;
var value = matrix[rowIndex, columnIndex];
if (Colorizer != null) {
@ -203,7 +222,7 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls @@ -203,7 +222,7 @@ namespace ICSharpCode.CodeQualityAnalysis.Controls
drawingContext.DrawRectangle(brush, null, rect);
}
if (!RenderZeroes && value.Text != "0") // rendering zeroes would be distracting
if (!RenderZeroes && value != null && value.Text != "0") // rendering zeroes would be distracting
drawingContext.DrawImage(
CreateText(value.Text),
new Rect(i * CellWidth - offsetDiffX, j * CellHeight - offsetDiffY, CellWidth, CellHeight));

Loading…
Cancel
Save