Changeset 12459 for branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs
- Timestamp:
- 06/16/15 16:30:05 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/BubbleChart/HeuristicLab.Optimization.BubbleChart/3.3/BubbleChartView.cs
r12389 r12459 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Drawing; 24 25 using System.Linq; 25 26 using System.Windows.Forms; … … 30 31 using HeuristicLab.Data; 31 32 using HeuristicLab.MainForm; 33 using HeuristicLab.MainForm.WindowsForms; 32 34 33 35 namespace HeuristicLab.Optimization.BubbleChart { … … 59 61 60 62 UpdateTreeView(); 63 UpdateLevelControl(); 64 61 65 UpdateComboBoxes(); 62 66 UpdateDataPoints(); 63 67 //UpdateCaption(); 64 68 } 69 protected override void SetEnabledStateOfControls() { 70 base.SetEnabledStateOfControls(); 71 levelNumericUpDown.Enabled = Content != null; 72 // ToDo 73 } 65 74 66 75 #region Tree Queries 76 77 private IEnumerable<RecursiveDataItem> GetAvailableItems() { 78 return IterateCheckedNodes() 79 .Select(n => (RecursiveDataItem)n.Tag); 80 } 67 81 private IEnumerable<string> GetAvailableKeys() { 68 var collector = new List<string>(); 69 foreach (TreeNode node in treeView.Nodes) 70 GetAvailableKeys(node, collector); 71 return collector.Distinct(); 72 } 73 private void GetAvailableKeys(TreeNode node, List<string> collector) { 74 var item = (RecursiveDataItem)node.Tag; 75 if (node.Checked) 76 collector.AddRange(item.Data.Keys); 77 foreach (TreeNode child in node.Nodes) 78 GetAvailableKeys(child, collector); 79 } 80 81 private IEnumerable<RecursiveDataItem> GetAvailableItems() { 82 var collector = new List<RecursiveDataItem>(); 83 foreach (TreeNode child in treeView.Nodes) 84 GetAvailableItems(child, collector); 85 return collector; 86 } 87 88 private void GetAvailableItems(TreeNode node, List<RecursiveDataItem> collector) { 89 var item = (RecursiveDataItem)node.Tag; 90 if (node.Checked) 91 collector.Add(item); 92 foreach (TreeNode child in node.Nodes) 93 GetAvailableItems(child, collector); 82 return GetAvailableItems() 83 .SelectMany(n => n.Data.Keys) 84 .Distinct(); 94 85 } 95 86 #endregion 96 87 97 88 #region Update Controls 89 private void UpdateLevelControl() { 90 if (Content == null) return; 91 if (treeView.Nodes.Count > 0) 92 levelNumericUpDown.Maximum = IterateAllNodes().Max(t => t.Level); 93 else 94 levelNumericUpDown.Maximum = 0; 95 } 96 98 97 private void UpdateTreeView() { 99 98 treeView.Nodes.Clear(); 100 101 if (Content != null) { 99 if (Content != null) 102 100 treeView.Nodes.Add(CreateTreeNode(Content)); 103 }104 105 101 treeView.ExpandAll(); 106 102 splitContainer.Panel1Collapsed = treeView.Nodes.Count == 0; 103 if (treeView.Nodes.Count > 0) 104 treeView.SelectedNode = treeView.Nodes[0]; 107 105 } 108 106 private TreeNode CreateTreeNode(RecursiveDataItem item) { … … 114 112 node.Nodes.Add(CreateTreeNode(child)); 115 113 return node; 114 } 115 116 private void UpdateTreeViewCheckBoxes() { 117 int level = (int)levelNumericUpDown.Value; 118 bool includeChildren = includeChildrenCheckBox.Checked; 119 //treeView.BeginUpdate(); 120 foreach (var node in IterateAllNodes()) 121 node.Checked = includeChildren ? node.Level >= level : node.Level == level; 122 //treeView.EndUpdate(); 116 123 } 117 124 … … 240 247 switch (sizeDimension) { 241 248 case SizeDimension.Constant: 242 value = 2;249 value = 5; 243 250 break; 244 251 default: … … 258 265 } 259 266 } 267 268 private void UpdateAxisLabels() { 269 return; 270 Axis xAxis = chart.ChartAreas[0].AxisX; 271 Axis yAxis = chart.ChartAreas[0].AxisY; 272 //mkommend: combobox.SelectedIndex could not be used as this changes during hovering over possible values 273 var xSAxisSelected = xAxisValue == null ? null : (string)xAxisComboBox.SelectedItem; 274 var ySAxisSelected = yAxisValue == null ? null : (string)yAxisComboBox.SelectedItem; 275 SetCustomAxisLabels(xAxis, xSAxisSelected); 276 SetCustomAxisLabels(yAxis, ySAxisSelected); 277 if (xAxisValue != null) 278 xAxis.Title = xAxisValue; 279 if (yAxisValue != null) 280 yAxis.Title = yAxisValue; 281 } 282 private void chart_AxisViewChanged(object sender, System.Windows.Forms.DataVisualization.Charting.ViewEventArgs e) { 283 this.UpdateAxisLabels(); 284 } 285 private void SetCustomAxisLabels(Axis axis, string key) { 286 axis.CustomLabels.Clear(); 287 if (categoricalMapping.ContainsKey(key)) { 288 foreach (var pair in categoricalMapping[key]) { 289 string labelText = pair.Key.ToString(); 290 CustomLabel label = new CustomLabel(); 291 label.ToolTip = labelText; 292 if (labelText.Length > 25) 293 labelText = labelText.Substring(0, 25) + " ... "; 294 label.Text = labelText; 295 label.GridTicks = GridTickTypes.TickMark; 296 label.FromPosition = pair.Value - 0.5; 297 label.ToPosition = pair.Value + 0.5; 298 axis.CustomLabels.Add(label); 299 } 300 } else if (key != null && Content.Data[key] is TimeSpanValue) { 301 chart.ChartAreas[0].RecalculateAxesScale(); 302 for (double i = axis.Minimum; i <= axis.Maximum; i += axis.LabelStyle.Interval) { 303 TimeSpan time = TimeSpan.FromSeconds(i); 304 string x = string.Format("{0:00}:{1:00}:{2:00}", time.Hours, time.Minutes, time.Seconds); 305 axis.CustomLabels.Add(i - axis.LabelStyle.Interval / 2, i + axis.LabelStyle.Interval / 2, x); 306 } 307 } 308 } 309 310 private void UpdateNodeColors() { 311 var selectedDepth = treeView.SelectedNode != null ? treeView.SelectedNode.Level : (int?)null; 312 var selectedIndex = treeView.SelectedNode != null ? treeView.SelectedNode.Index : (int?)null; 313 foreach (TreeNode node in treeView.Nodes) { 314 UpdateNodeColor(node, selectedDepth, selectedIndex); 315 } 316 } 317 private void UpdateNodeColor(TreeNode node, int? depth, int? index) { 318 if (depth.HasValue && index.HasValue && node.Level == depth /*&& node.Index == index*/) 319 node.BackColor = Color.Yellow; 320 else 321 node.BackColor = Color.White; 322 foreach (TreeNode child in node.Nodes) 323 UpdateNodeColor(child, depth, index); 324 } 260 325 #endregion 261 326 … … 263 328 private void treeView_AfterCheck(object sender, TreeViewEventArgs e) { 264 329 UpdateComboBoxes(); 265 UpdateDataPoints(); 330 //UpdateDataPoints(); 331 } 332 private void treeView_AfterSelect(object sender, TreeViewEventArgs e) { 333 //UpdateNodeColors(); 334 //UpdateComboBoxes(); 335 //UpdateDataPoints(); 266 336 } 267 337 … … 274 344 275 345 UpdateDataPoints(); 276 //UpdateAxisLabels(); 346 UpdateAxisLabels(); 347 } 348 349 private void includeChildrenCheckBox_CheckedChanged(object sender, EventArgs e) { 350 UpdateTreeViewCheckBoxes(); 351 UpdateComboBoxes(); 352 } 353 354 private void levelNumericUpDown_ValueChanged(object sender, EventArgs e) { 355 UpdateTreeViewCheckBoxes(); 356 UpdateComboBoxes(); 357 } 358 #endregion 359 360 #region Helpers 361 362 private IEnumerable<TreeNode> IterateAllNodes() { 363 return Collect(treeView.Nodes); 364 } 365 private IEnumerable<TreeNode> IterateCheckedNodes() { 366 return IterateAllNodes().Where(t => t.Checked); 367 } 368 private IEnumerable<TreeNode> Collect(TreeNodeCollection nodes) { 369 foreach (TreeNode node in nodes) { 370 yield return node; 371 foreach (var child in Collect(node.Nodes)) 372 yield return child; 373 } 277 374 } 278 375 #endregion
Note: See TracChangeset
for help on using the changeset viewer.