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  * 
6  */
7 public class WindowState : Object 
8 {
9     public MainWindow win;
10
11     public enum State {
12         OBJECT,
13         PROP,
14         LISTENER,
15         CODEEDIT
16     };
17
18     public State state;
19         
20     public Xcls_WindowLeftTree left_tree;
21
22     left_props
23     code_editor
24     rightpalete
25         
26         // my vars (def)
27
28     // ctor 
29     public About(MainWindow win)
30     {
31         this.win = win;
32         // initialize
33         this.propsInit();
34         this.listenerInit();
35     }
36
37
38     // left tree
39
40     public void leftTreeInit()
41     {
42          
43         this.left_tree = new Xcls_WindowLeftTree();
44         this.left_tree.ref();
45         this.left_tree.main_window = _this.win;
46         
47         this.win.tree.el.pack_start(this.left_tree.el,true, true,0);
48         this.left_tree.el.show_all();
49        
50         this.left_tree.before_node_change.connect(() => {
51             return this.leftTreeBeforeChange();
52
53         });
54
55         this.left_tree.node_selected.connect((sel) => {
56         
57               
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     public void leftTreeNodeSelected(JsRender.Node? sel)
74     {
75
76         print("node_selected called %s\n", (sel == null) ? "NULL" : "a value");
77
78         if (sel == null) {
79             this.left_props.el.hide();
80         } 
81         this.left_props.el.show();
82         this.left_props.load(this.left_tree.getActiveFile(), sel);
83         switch (this.state) {
84             case State.OBJECT: 
85                   
86                  if (sel == null) {
87                     this.rightpalete.clear();
88                     break;
89                 }
90                 this.rightpalete.load(this.left_tree.getActiveFile().palete(), sel.fqn());
91                 break;
92                  
93                 
94            case State.PROP:
95                 if (sel == null) {
96                     this.add_props.clear();
97                     break;
98                 }
99                 this.add_props.show(this.left_tree.getActiveFile().palete(), "props", sel.fqn());
100                 break;
101
102             case State.LISTENER:
103            
104                 if (sel == null) {
105                     this.add_props.clear();
106                     break;
107                 }
108                 this.add_props.show(_this.left_tree.getActiveFile().palete(), "signals", sel.fqn());
109                 break;
110             case State.CODEEDIT:
111            case "codeedit":
112                
113                 this.hideCodeEdit();
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     }