Changeset 1388
- Timestamp:
- 03/21/09 13:28:46 (16 years ago)
- Location:
- trunk/sources/HeuristicLab.Visualization
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Visualization/Legend/LegendShape.cs
r1346 r1388 17 17 private bool top; 18 18 19 20 19 private Color color = Color.Blue; 21 20 private Font font = new Font("Arial", 8); … … 35 34 } 36 35 36 private bool ExistsLegendItems() { 37 return legendItems.Count > 0; 38 } 39 40 /// <summary> 41 /// paints the legend on the canvas 42 /// </summary> 37 43 public void CreateLegend() { 38 ClearShapes(); 39 double x = ClippingArea.X1; 40 double y = ClippingArea.Y2; 41 int numberOfItemsPerRow = 0; 42 int rowCounter = 0; 44 if (ExistsLegendItems()) { 45 ClearShapes(); 46 double x = ClippingArea.X1; 47 double y = ClippingArea.Y2; 48 49 int numberOfItemsPerRow = 1; 50 if (row) { 51 numberOfItemsPerRow = GetNrOfItemsPerRow(); 52 if (!top) { 53 y = GetHeight4Rows(); 54 } 55 } 56 int rowCounter = 0; 57 foreach (LegendItem item in legendItems) { 58 if (!row) { 59 CreateColumn(item, y); 60 y -= 15; 61 } else { 62 if (rowCounter >= numberOfItemsPerRow) { 63 x = ClippingArea.X1; 64 y -= 25; 65 rowCounter = 0; 66 } 67 CreateRow(item, x, y); 68 x += GetLabelLengthInPixel(item); 69 rowCounter++; 70 } 71 } 72 } 73 } 74 75 /// <summary> 76 /// returns die optimal height for the top or bottom legend 77 /// </summary> 78 /// <returns></returns> 79 private int GetHeight4Rows() { 80 int numberOfItemsPerRow = GetNrOfItemsPerRow(); 81 int nrOfItems = legendItems.Count; 43 82 int rowsToDraw = 1; 44 if ( row) {45 numberOfItemsPerRow = (int)ClippingArea.Width/LegendItem.WIDTH;46 int nrOfItems = legendItems.Count;47 if ( nrOfItems > numberOfItemsPerRow) {48 intrest;49 int value = Math.DivRem(nrOfItems, numberOfItemsPerRow, out rest);83 if (nrOfItems > numberOfItemsPerRow) { 84 int rest; 85 int value = Math.DivRem(nrOfItems, numberOfItemsPerRow, out rest); 86 if (rest > 1) { 87 rowsToDraw = rest; 88 } else { 50 89 rowsToDraw = value + rest; 51 90 } 52 if (!top) 53 y = 25*rowsToDraw; 54 } 55 foreach (LegendItem item in legendItems) { 56 if (!row) { 57 CreateColumn(item, y); 58 y -= 15; 59 } else { 60 if (rowCounter >= numberOfItemsPerRow) { 61 x = ClippingArea.X1; 62 y -= 25; 63 } 64 CreateRow(item, x, y); 65 x += LegendItem.WIDTH; 66 rowCounter++; 67 } 68 } 91 } 92 return 25*rowsToDraw; 93 } 94 95 /// <summary> 96 /// returns the maximum number of items per row to paint 97 /// </summary> 98 /// <returns></returns> 99 private int GetNrOfItemsPerRow() { 100 int numberOfItemsPerRow = (int)ClippingArea.Width / GetMaxLabelLength(); 101 // if the width of the clippingarea < maxLabelLength 102 if (numberOfItemsPerRow == 0) numberOfItemsPerRow = 1; 103 return numberOfItemsPerRow; 104 } 105 106 /// <summary> 107 /// returns the length of the current legenditem in pixel 108 /// </summary> 109 /// <param name="item"></param> 110 /// <returns></returns> 111 private static int GetLabelLengthInPixel(LegendItem item) { 112 int dummy = item.Label.Length*6 + 20; 113 if (dummy < LegendItem.WIDTH) { 114 return LegendItem.WIDTH; 115 } 116 return dummy; 69 117 } 70 118 … … 76 124 /// <param name="y">y axis to draw the item</param> 77 125 private void CreateRow(LegendItem item, double x, double y) { 78 AddShape(new LineShape(x, y - 10, x + 20, y - 10, item.Color, item.Thickness, DrawingStyle.Solid));126 AddShape(new LineShape(x, y - 5, x + 20, y - 5, item.Color, item.Thickness, DrawingStyle.Solid)); 79 127 AddShape(new TextShape(x + 25, y, item.Label, Font, Color)); 80 128 } … … 99 147 100 148 /// <summary> 149 /// searches the longest label and returns it with the factor 6 150 /// useful to set the width of the legend 151 /// </summary> 152 /// <returns>max label length with factor 6</returns> 153 public int GetMaxLabelLength() { 154 int maxLabelLength = 0; 155 if (ExistsLegendItems()) { 156 maxLabelLength = legendItems[0].Label.Length; 157 foreach (var item in legendItems) { 158 if (item.Label.Length > maxLabelLength) { 159 maxLabelLength = item.Label.Length; 160 } 161 } 162 maxLabelLength = maxLabelLength*6; 163 } 164 return maxLabelLength < LegendItem.WIDTH ? LegendItem.WIDTH : maxLabelLength; 165 } 166 167 /// <summary> 101 168 /// removes a legenditem from the items list 102 169 /// </summary> -
trunk/sources/HeuristicLab.Visualization/LineChart.cs
r1351 r1388 186 186 public void setLegendRight() { 187 187 // legend right 188 legendShape.BoundingBox = new RectangleD(canvasUI.Width - 110, 10, canvasUI.Width, canvasUI.Height - 50);188 legendShape.BoundingBox = new RectangleD(canvasUI.Width - legendShape.GetMaxLabelLength(), 10, canvasUI.Width, canvasUI.Height - 50); 189 189 legendShape.ClippingArea = new RectangleD(0, 0, legendShape.BoundingBox.Width, legendShape.BoundingBox.Height); 190 190 legendShape.Row = false; … … 194 194 public void setLegendLeft() { 195 195 // legend left 196 legendShape.BoundingBox = new RectangleD(10, 10, 110, canvasUI.Height - 50);196 legendShape.BoundingBox = new RectangleD(10, 10, canvasUI.Width, canvasUI.Height - 50); 197 197 legendShape.ClippingArea = new RectangleD(0, 0, legendShape.BoundingBox.Width, legendShape.BoundingBox.Height); 198 198 legendShape.Row = false; … … 213 213 public void setLegendBottom() { 214 214 // legend bottom 215 legendShape.BoundingBox = new RectangleD(100, 10, canvasUI.Width, 200);215 legendShape.BoundingBox = new RectangleD(100, 10, canvasUI.Width, canvasUI.Height/*legendShape.GetHeight4Rows()*/); 216 216 legendShape.ClippingArea = new RectangleD(0, 0, legendShape.BoundingBox.Width, legendShape.BoundingBox.Height); 217 217 legendShape.Row = true; -
trunk/sources/HeuristicLab.Visualization/Options/OptionsDialog.cs
r1350 r1388 95 95 ((IDataRow)LineSelectCB.SelectedValue).Style = (DrawingStyle)LinestyleCB.SelectedItem; 96 96 } 97 viewSettings.UpdateView(); 97 98 } 98 99 99 100 private void cbLegendPosition_SelectedIndexChanged(object sender, EventArgs e) { 100 101 viewSettings.LegendPosition = (LegendPosition)cbLegendPosition.SelectedItem; 101 viewSettings.UpdateView();102 102 } 103 103 -
trunk/sources/HeuristicLab.Visualization/Options/ViewSettings.cs
r1342 r1388 24 24 xAxisColor = Color.Blue; 25 25 26 legendPosition = LegendPosition. Left;26 legendPosition = LegendPosition.Bottom; 27 27 } 28 28
Note: See TracChangeset
for help on using the changeset viewer.