Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/21/20 17:14:46 (4 years ago)
Author:
dpiringe
Message:

#3026:

  • added a new way to setup the targeted result types
  • added new ui controls: NumericRangeControl, JsonItemArrayControl, JsonItemDefaultControl
  • redesigned export dialog -> now the user can navigate with a tree view
  • enhanced JsonItemVM
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs

    r17404 r17405  
    1717    private IContent content;
    1818    private static SaveFileDialog saveFileDialog;
    19 
     19    private IDictionary<int, UserControl> ctrlCollection = new Dictionary<int, UserControl>();
     20    private JsonItem root;
     21    private IOptimizer optimizer;
    2022    private IList<JsonItemVM> vms;
    2123    private JCGenerator generator = new JCGenerator();
     
    2527        content = value;
    2628
    27         IEnumerable<JsonItem> items = generator.FetchJsonItems(content as IOptimizer);
     29        //IEnumerable<JsonItem> items = generator.FetchJsonItems(content as IOptimizer);
    2830        vms = new List<JsonItemVM>();
    29         tabel.Controls.Clear();
     31        treeView.Nodes.Clear();
    3032
    31         foreach (var item in items) {
    32           if (!(item is UnsupportedJsonItem) && item.Value != null && item.Range != null) {
    33             JsonItemVM vm = new JsonItemVM(item);
    34             vms.Add(vm);
    35             UserControl control = null;
    36             if(item.Value is string) {
    37               control = new JsonItemValidValuesControl(vm);
    38             } else if (item.Value is bool) {
    39               control = new JsonItemBoolControl(vm);
    40             } else if (item.Value is int) {
    41               control = new JsonItemValueControl(vm, false);
    42             } else if (item.Value is double) {
    43               control = new JsonItemValueControl(vm, true);
    44             } else if (item.Value is Array) {
    45               if(((Array)item.Value).GetValue(0) is int)
    46                 control = new JsonItemRangeControl(vm, false);
    47               else if (((Array)item.Value).GetValue(0) is double)
    48                 control = new JsonItemRangeControl(vm, true);
    49             }
    50             if (control != null) {
    51               control.Anchor = AnchorStyles.Left | AnchorStyles.Right;
    52               tabel.Controls.Add(control);
    53             }
    54           }
    55         }
     33        optimizer = content as IOptimizer;
     34        root = JsonItemConverter.Extract(optimizer);
     35        TreeNode parent = new TreeNode(root.Name);
     36        BuildTreeNode(parent, root);
     37        treeView.Nodes.Add(parent);
    5638      }
    5739    }
     
    6244
    6345    private void exportButton_Click(object sender, EventArgs e) {
    64       IList<JsonItem> items = new List<JsonItem>();
    65 
    6646      foreach(var x in vms) {
    67         if (x.Selected)
    68           items.Add(x.Item);
     47        if (!x.Selected) {
     48          x.Item.Parent.Children.Remove(x.Item);
     49        }
    6950      }
    7051
     
    8061
    8162      if (saveFileDialog.ShowDialog() == DialogResult.OK) {
    82         File.WriteAllText(saveFileDialog.FileName, generator.GenerateTemplate(items));
     63        File.WriteAllText(saveFileDialog.FileName, generator.GenerateTemplate(root, optimizer));
    8364      }
    8465
    8566      this.Close();
    8667    }
     68
     69    private JsonItemVM BuildTreeNode(TreeNode node, JsonItem item) {
     70      JsonItemVM vm = new JsonItemVM(item);
     71
     72      vms.Add(vm);
     73      ctrlCollection.Add(node.GetHashCode(), GenerateControl(vm));
     74      if (item.Children != null) {
     75        foreach (var c in item.Children) {
     76          if (IsDrawableItem(c)) {
     77            if (c is ResultItem) {
     78
     79            } else {
     80              TreeNode childNode = new TreeNode(c.Name);
     81              node.Nodes.Add(childNode);
     82              vm.AddChild(BuildTreeNode(childNode, c));
     83            }
     84          }
     85        }
     86      }
     87     
     88      return vm;
     89    }
     90
     91    private bool IsDrawableItem(JsonItem item) {
     92      bool b = false;
     93      if (item.Children != null) {
     94        foreach (var c in item.Children) {
     95          b = b || IsDrawableItem(c);
     96        }
     97      }
     98     
     99      return b || (item.Value != null || item.Range != null || item.ActualName != null);
     100    }
     101   
     102    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
     103      if(ctrlCollection.TryGetValue(treeView.SelectedNode.GetHashCode(), out UserControl ctrl)) {
     104        panel.Controls.Clear();
     105        if (ctrl != null) {
     106          panel.Controls.Add(ctrl);
     107        }
     108        panel.Refresh();
     109      }
     110    }
     111
     112    private UserControl GenerateControl(JsonItemVM vm) {
     113      JsonItem item = vm.Item;
     114      UserControl control = null;
     115      if (!(item is UnsupportedJsonItem)) {
     116        if (item.Value is string && item.Range != null) {
     117          control = new JsonItemValidValuesControl(vm);
     118        } else if (item.Value is bool && item.Range != null) {
     119          control = new JsonItemBoolControl(vm);
     120        } else if (item.Value is int && item.Range != null) {
     121          control = new JsonItemValueControl(vm, false);
     122        } else if (item.Value is double && item.Range != null) {
     123          control = new JsonItemValueControl(vm, true);
     124        } else if (item.Value is Array) {
     125          Array arr = (Array)item.Value;
     126          if (arr.Length == 2 && arr.GetValue(0) is int && item.Range != null)
     127            control = new JsonItemRangeControl(vm, false);
     128          else if (arr.Length == 2 && arr.GetValue(0) is double && item.Range != null)
     129            control = new JsonItemRangeControl(vm, true);
     130          else if (arr.Rank == 1 && arr.GetValue(0) is double) {
     131            control = new JsonItemArrayControl(vm);
     132          }
     133        } else {
     134          control = new JsonItemBaseControl(vm);
     135        }
     136        if (control != null) {
     137          control.Dock = DockStyle.Fill;
     138          control.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
     139        }
     140      }
     141      return control;
     142    }
    87143  }
    88144}
Note: See TracChangeset for help on using the changeset viewer.