EDA/gui; extras/gui/genericEditor: Performance improvements
[sdk] / extras / gui / genericEditor.ec
1 import "EDA"
2
3 class GenericEditor : Window
4 {
5    text = " ";
6    tabCycle = true;
7    size = { 800, 600 };
8    fullRender = true;
9
10    Array<FieldDataBox> dataBoxes { };
11    Array<Label> labels { };
12
13    void Clear()
14    {
15       for(l : labels)
16          delete l;
17       labels.Free();
18
19       for(d : dataBoxes)
20          delete d;
21       dataBoxes.Free();
22    }
23
24    public property Table table
25    {
26       set
27       {
28          Field f;
29          int y = 8;
30
31          Clear();
32
33          editor.table = value;
34          if(!list.fldName && value)
35             list.fldName = value.FindField("Name");
36          list.table = value;
37          for(f = value ? value.firstField : null; f; f = f.next)
38          {
39             if(strcmpi(f.name, "ID"))
40             {
41                int h = 20;
42                FieldDataBox box { editor = editor, field = f, text = f.name, size = { h = h }, anchor = { left = 20, top = y + 16, right = 20 } };
43                Label label { editor.editArea, position = { 20, y }, labeledWindow = box };
44                if(eClass_IsDerived(f.type, class(DataList)) || eClass_IsDerived(f.type, class(IdList)) || eClass_IsDerived(f.type, class(MultiLineString)))
45                {
46                   h = 70;
47                   box.size.h = h;
48                }
49                incref box;
50                incref label;
51                dataBoxes.Add(box);
52                labels.Add(label);
53                y += 20 + h;
54             }
55          }
56       }
57    }
58
59    ~GenericEditor()
60    {
61       Clear();
62    }
63
64    ListSection list
65    {
66       this, editor = editor,
67       anchor = { left = 0, top = 0, bottom = 0, right = 0.5 }
68    };
69    EditSection editor
70    {
71       this,
72       anchor = { left = 0.5, top = 0, bottom = 0, right = 0 }
73    };
74 }