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            case "codeedit":
113                
114                 this.hideCodeEdit();
115                 break;
116                
117                                 
118         }
119         return  ;
120
121     }
122     // -----------  properties
123     // listener uses the properties 
124     public void propsInit()
125     {
126         // Add properties
127             this.win.add_props  = new Xcls_WindowAddProp();
128             this.add_props.ref();  /// really?
129             ((Gtk.Container)(this.win.addpropsview.el.get_widget())).add(this.win.add_props.el);
130             //this.projectsettings.el.show_all();
131
132             var  stage = _this.win.addpropsview.el.get_stage();
133             stage.set_background_color(  Clutter.Color.from_string("#000"));
134         
135         
136             _this.win.add_props.select.connect( (key,type,skel, etype) => {
137                 this.win.left_props.addProp(etype, key, skel, type);
138             });
139         
140     }
141     public void propsShow()
142     {
143
144     }
145     public propsHide()
146     {
147         
148     }
149     
150     // ----------- Add / Edit listener
151     // listener uses the properties 
152     public listenerInit()
153     {
154
155     }
156     public listenerShow()
157     {
158
159     }
160     public listenerHide()
161     {
162         
163     }