src/Builder4/WindowState.vala
[app.Builder.js] / src / Builder4 / WindowState.vala
1 /**
2  * as state management is a bit too complicated inside the builder
3  * it's better to seperate this into this class
4  * 
5  * This class has references to all the Class instances that make up the window..
6  * 
7  */
8 public class WindowState : Object 
9 {
10     public MainWindow win;
11
12     public enum State {
13         OBJECT,
14         PROP,
15         LISTENER,
16         CODEEDIT
17     };
18
19     public State state;
20         
21     public Xcls_WindowLeftTree left_tree;
22
23     left_props
24     code_editor
25     rightpalete
26         
27         // my vars (def)
28
29     // ctor 
30     public About(MainWindow win)
31     {
32         this.win = win;
33         // initialize
34         this.propsInit();
35         this.listenerInit();
36     }
37
38
39     // left tree
40
41     public void leftTreeInit()
42     {
43          
44         this.left_tree = new Xcls_WindowLeftTree();
45         this.left_tree.ref();
46         this.left_tree.main_window = _this.win;
47         
48         this.win.tree.el.pack_start(this.left_tree.el,true, true,0);
49         this.left_tree.el.show_all();
50        
51         this.left_tree.before_node_change.connect(() => {
52             return this.leftTreeBeforeChange();
53
54         });
55
56         this.left_tree.node_selected.connect((sel) => {
57             this.leftTreeNodeSelected(sel);
58         });
59
60     }
61
62     public bool leftTreeBeforeChange(JsRender.Node? sel)
63     {
64         if (this.state != "codeedit") {
65             this.left_props.finish_editing();
66             return true;
67         }
68         if (!this.code_editor.saveContents()) {
69             return false;
70         }
71         return false;
72     }
73     
74     public void leftTreeNodeSelected(JsRender.Node? sel)
75     {
76
77         print("node_selected called %s\n", (sel == null) ? "NULL" : "a value");
78
79         if (sel == null) {
80             this.left_props.el.hide();
81         } 
82         this.left_props.el.show();
83         this.left_props.load(this.left_tree.getActiveFile(), sel);
84         switch (this.state) {
85             case State.OBJECT: 
86                   
87                  if (sel == null) {
88                     this.rightpalete.clear();
89                     break;
90                 }
91                 this.rightpalete.load(this.left_tree.getActiveFile().palete(), sel.fqn());
92                 break;
93                  
94                 
95            case State.PROP:
96                 if (sel == null) {
97                     this.add_props.clear();
98                     break;
99                 }
100                 this.add_props.show(this.left_tree.getActiveFile().palete(), "props", sel.fqn());
101                 break;
102
103             case State.LISTENER:
104            
105                 if (sel == null) {
106                     this.add_props.clear();
107                     break;
108                 }
109                 this.add_props.show(_this.left_tree.getActiveFile().palete(), "signals", sel.fqn());
110                 break;
111             case State.CODEEDIT:
112             
113                 this.codeEditHide();
114                 break;
115                
116                                 
117         }
118         return  ;
119
120     }
121     // -----------  properties
122     // listener uses the properties 
123     public void propsInit()
124     {
125         // Add properties
126             this.win.add_props  = new Xcls_WindowAddProp();
127             this.add_props.ref();  /// really?
128             ((Gtk.Container)(this.win.addpropsview.el.get_widget())).add(this.win.add_props.el);
129             //this.projectsettings.el.show_all();
130
131             var  stage = _this.win.addpropsview.el.get_stage();
132             stage.set_background_color(  Clutter.Color.from_string("#000"));
133         
134         
135             _this.win.add_props.select.connect( (key,type,skel, etype) => {
136                 this.win.left_props.addProp(etype, key, skel, type);
137             });
138         
139     }
140     public void propsShow()
141     {
142
143     }
144     public propsHide()
145     {
146         
147     }
148     
149     // ----------- Add / Edit listener
150     // listener uses the properties 
151     public listenerInit()
152     {
153
154     }
155     public listenerShow()
156     {
157
158     }
159     public listenerHide()
160     {
161         
162     }