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 Xcls_MainWindow win;
11
12     public enum State {
13         NONE,
14         PREVIEW,
15         OBJECT,
16         PROP,
17         LISTENER,
18         CODE,
19         FILES,
20         PROJECT // project settings..
21     }
22
23     public State state = State.NONE;
24
25     public bool children_loaded = false;
26
27     
28     public Xcls_WindowLeftTree  left_tree;
29     public Xcls_WindowAddProp   add_props;
30     public Xcls_LeftProps       left_props;
31     public Xcls_ProjectSettings projectsettings;
32     public ValaProjectSettings  vala_projectsettings;
33     public Xcls_RightPalete     rightpalete;
34     public Editor               code_editor;    
35     public Xcls_WindowRooView   window_rooview;
36     public Xcls_GtkView         window_gladeview;
37     public Xcls_DialogNewComponent new_file_dialog;
38     public Xcls_ClutterFiles     clutterfiles;
39
40     public Xcls_WindowLeftProjects left_projects; // can not see where this is initialized.. 
41     // ctor 
42     public WindowState(Xcls_MainWindow win)
43     {
44         this.win = win;
45         // initialize
46
47         // left elements..
48         this.leftTreeInit();
49         this.propsListInit();
50
51         // on clutter space...
52         this.projectEditInit();
53         this.codeEditInit();
54         this.projectListInit();
55         this.fileViewInit();
56         
57         // adding stuff
58         this.objectAddInit();
59         this.propsAddInit();
60      
61         
62         // previews...
63         this.gtkViewInit();
64         this.webkitViewInit();
65
66         // dialogs
67
68         this.fileNewInit();
69
70         this.children_loaded = true;
71     }
72
73
74     // left tree
75
76     public void leftTreeInit()
77     {
78      
79         this.left_tree = new Xcls_WindowLeftTree();
80         this.left_tree.ref();
81         this.left_tree.main_window = this.win;
82     
83         this.win.tree.el.pack_start(this.left_tree.el,true, true,0);
84         this.left_tree.el.show_all();
85            
86         this.left_tree.before_node_change.connect(() => {
87             return this.leftTreeBeforeChange();
88
89         });
90
91         this.left_tree.node_selected.connect((sel) => {
92             this.leftTreeNodeSelected(sel);
93         });
94      
95         this.left_tree.changed.connect(() => {
96             this.window_rooview.requestRedraw();
97             this.left_tree.model.file.save();
98         });
99          
100     }
101
102     public bool leftTreeBeforeChange()
103     {
104         if (this.state != State.CODE) {
105             this.left_props.finish_editing();
106             return true;
107         }
108         if (!this.code_editor.saveContents()) {
109             return false;
110         }
111         return false;
112     }
113     
114     public void leftTreeNodeSelected(JsRender.Node? sel)
115     {
116
117         print("node_selected called %s\n", (sel == null) ? "NULL" : "a value");
118
119         if (sel == null) {
120             this.left_props.el.hide();
121         } 
122         this.left_props.el.show();
123         this.left_props.load(this.left_tree.getActiveFile(), sel);
124         switch (this.state) {
125             
126             case State.OBJECT: 
127                   
128                  if (sel == null) {
129                     this.rightpalete.clear();
130                     break;
131                 }
132                 this.rightpalete.load(this.left_tree.getActiveFile().palete(), sel.fqn());
133                 break;
134                  
135         
136            case State.PROP:
137                 if (sel == null) {
138                     this.add_props.clear();
139                     break;
140                 }
141                 this.add_props.show(this.left_tree.getActiveFile().palete(), "props", sel.fqn());
142                 break;
143
144             case State.LISTENER:
145                
146                 if (sel == null) {
147                     this.add_props.clear();
148                     break;
149                 }
150                 this.add_props.show(this.left_tree.getActiveFile().palete(), "signals", sel.fqn());
151                 break;
152                 
153             case State.CODE:
154                  this.switchState(State.PREVIEW);
155              
156                 break;
157                
158                             
159         }
160          
161
162     }
163
164
165
166
167     public void propsListInit()
168     {
169     
170         this.left_props =new Xcls_LeftProps();
171         this.left_props.ref();
172         this.left_props.main_window = this.win;
173         this.win.props.el.pack_start(this.left_props.el,true, true,0);
174         this.left_props.el.show_all();
175     
176         this.left_props.show_editor.connect( (file, node, type,  key) => {
177             this.switchState(State.CODE);
178             this.code_editor.show(
179                 file,
180                 node,
181                 type,
182                 key
183             );
184             
185             
186         });
187
188    
189         this.left_props.stop_editor.connect( () => {
190             if (this.state != State.CODE) {
191                 return true;
192             }
193     
194             var ret =  this.code_editor.saveContents();
195             if (!ret) {
196                 return false;
197             }
198             this.switchState(State.PREVIEW);
199             return ret;
200         });
201     
202         this.left_props.changed.connect(() => {
203               if (this.left_tree.getActiveFile().xtype == "Roo" ) {
204                    this.window_rooview.requestRedraw();
205                    
206                } else {
207                   this.window_gladeview.loadFile(this.left_tree.getActiveFile());
208               }
209               this.left_tree.model.updateSelected();
210               this.left_tree.model.file.save();
211         });
212     
213
214
215     }
216
217     //-------------  projects edit
218
219     public void projectEditInit()
220     {
221         this.projectsettings  =new Xcls_ProjectSettings();
222         this.projectsettings.ref();  /// really?
223     
224         this.vala_projectsettings  =new ValaProjectSettings();
225         this.vala_projectsettings.ref();
226         this.vala_projectsettings.window = this.win;
227     
228         ((Gtk.Container)(this.win.projecteditview.el.get_widget())).add(this.projectsettings.el);
229         //this.projectsettings.el.show_all();
230
231         var stage = this.win.projecteditview.el.get_stage();
232         stage.set_background_color(  Clutter.Color.from_string("#000"));
233     
234         this.projectsettings.buttonPressed.connect((btn) => {
235              if (this.left_tree.getActiveFile().xtype == "Roo" ) {
236                 if (btn == "save") {
237                     this.window_rooview.view.renderJS(true);
238                 }
239                 if (btn == "apply") {
240                     this.window_rooview.view.renderJS(true);
241                     return;
242                 }
243             } else {
244                 // do nothing for gtk..
245             }
246             if (btn == "save" || btn == "apply") {
247                 this.win.project.save();
248          
249             }
250             this.switchState (State.PREVIEW); 
251              
252          });
253
254     }
255     // ----------- object adding
256     public void objectAddInit()
257     {
258
259         this.rightpalete  = new Xcls_RightPalete();
260         this.rightpalete.ref();  /// really?
261         ((Gtk.Container)(this.win.objectview.el.get_widget())).add(this.rightpalete.el);
262         //this.projectsettings.el.show_all();
263
264         var stage = this.win.objectview.el.get_stage();
265         stage.set_background_color(  Clutter.Color.from_string("#000"));
266            
267     }
268     
269     // -----------  properties adding list...
270     // listener uses the properties 
271     public void propsAddInit()
272     {
273     // Add properties
274         this.add_props  = new Xcls_WindowAddProp();
275         this.add_props.ref();  /// really?
276         ((Gtk.Container)(this.win.addpropsview.el.get_widget())).add(this.add_props.el);
277         //this.projectsettings.el.show_all();
278
279         var  stage = this.win.addpropsview.el.get_stage();
280         stage.set_background_color(  Clutter.Color.from_string("#000"));
281
282
283         this.add_props.select.connect( (key,type,skel, etype) => {
284             this.left_props.addProp(etype, key, skel, type);
285         });
286
287     }
288     public void propsAddShow()
289     {
290
291     }
292     public void propsAddHide()
293     {
294     
295     }
296
297
298
299     
300     // ----------- Add / Edit listener
301     // listener uses the properties 
302     //public void listenerInit()     { }
303     public void listenerShow()
304     {
305
306     }
307     public void listenerHide()
308     {
309     
310     }
311
312     // -------------- codeEditor
313
314     public void codeEditInit()
315     {
316         this.code_editor  = new  Editor();
317         this.code_editor.ref();  /// really?
318         ((Gtk.Container)(this.win.codeeditview.el.get_widget())).add(this.code_editor.el);
319         //this.projectsettings.el.show_all();
320
321         var stage = this.win.codeeditview.el.get_stage();
322         stage.set_background_color(  Clutter.Color.from_string("#000"));
323         // editor.save...
324
325         this.code_editor.save.connect( () => {
326              this.left_tree.model.file.save();
327              this.left_tree.model.updateSelected();
328         });
329         
330     }
331
332     // ----------- list of projects on left
333     public void  projectListInit() 
334     {
335
336         this.left_projects = new Xcls_WindowLeftProjects();
337          this.left_projects.ref();
338          this.win.leftpane.el.pack_start(this.left_projects.el,true, true,0);
339          this.left_projects.el.show_all();
340          this.left_projects.project_selected.connect((proj) => {
341             proj.scanDirs();
342             this.clutterfiles.loadProject(proj);
343         
344          });
345
346     }
347     // ----------- file view
348
349     public void fileViewInit()
350     {
351         var stage = this.win.rooview.el.get_stage(); // seems odd... 
352         this.clutterfiles = new Xcls_ClutterFiles();
353         this.clutterfiles.ref();
354         stage.add_child(this.clutterfiles.el);
355         this.clutterfiles.el.show_all();
356
357
358         this.clutterfiles.open.connect((file) => { 
359             this.fileViewOpen(file);
360         });
361         this.clutterfiles.el.transitions_completed.connect(() => {
362             if (this.state == State.FILES) {
363                 this.win.rooview.el.hide();
364             } else {
365                 this.clutterfiles.el.hide();
366             }
367             
368             
369         });
370
371     }
372     public void fileNewInit()
373     {
374         this.new_file_dialog = new Xcls_DialogNewComponent();
375         // force it modal to the main window..
376         this.new_file_dialog.el.set_transient_for(this.win.el);
377         this.new_file_dialog.el.set_modal(true);
378     
379         this.new_file_dialog.success.connect((project,file) =>
380         {
381             this.fileViewOpen(file);
382         });
383
384     }
385
386     
387     public void fileViewOpen(JsRender.JsRender file)
388     {
389         this.win.project = file.project;
390         this.switchState (State.PREVIEW); 
391         
392         this.left_tree.model.loadFile(file);
393     
394         var ctr= ((Gtk.Container)(this.win.rooview.el.get_widget()));
395         var ctr_p= ((Gtk.Container)(this.win.projecteditview.el.get_widget()));
396     
397         if (file.xtype == "Roo" ) { 
398             ctr.foreach( (w) => { ctr.remove(w); });
399             ctr_p.foreach( (w) => { ctr_p.remove(w); });
400             ctr.add(this.window_rooview.el);
401             ctr_p.add(this.projectsettings.el);            
402             this.window_rooview.loadFile(file);
403             this.window_rooview.el.show_all();
404             this.projectsettings.el.show_all();            
405
406         } else {
407             ctr.foreach( (w) => { ctr.remove(w); });
408             ctr_p.foreach( (w) => { ctr_p.remove(w); });            
409             ctr.add(this.window_gladeview.el);
410             ctr_p.add(this.vala_projectsettings.el);
411             this.window_gladeview.loadFile(file);
412             this.window_gladeview.el.show_all();
413             this.vala_projectsettings.el.show_all();
414         }
415         print("OPEN : " + file.name);
416         this.win.editpane.el.set_position(this.win.editpane.el.max_position);
417         this.win.setTitle(file.project.name + " : " +file.name);
418              
419
420         }
421
422     
423     // ---------  webkit view
424     public void webkitViewInit()
425     {
426         this.window_rooview  =new Xcls_WindowRooView();
427         this.window_rooview.ref();
428         ((Gtk.Container)(this.win.rooview.el.get_widget())).add(this.window_rooview.el);
429         this.window_rooview.el.show_all();
430
431         var stage = this.win.rooview.el.get_stage();
432         stage.set_background_color(  Clutter.Color.from_string("#000"));
433     }
434
435     // ------ Gtk  - view
436
437     public void gtkViewInit()
438     {
439         this.window_gladeview  =new Xcls_GtkView();
440         this.window_gladeview.ref();
441     }
442
443     public void switchState(State new_state)
444     {
445         
446
447         
448         switch (this.state) {
449
450             case State.PREVIEW:
451                 if (this.left_tree.getActiveFile() != null) {
452                      if (this.left_tree.getActiveFile().xtype == "Roo" ) {
453                          this.window_rooview.createThumb();
454                      } else {
455                           this.window_gladeview.createThumb();
456                       }
457                 }
458                 // normally we are going from preview to another state.
459                 // and different windows hide the preview in differnt ways..
460                 
461                 break;
462             
463            case State.LISTENER:
464            case State.PROP:
465                 this.win.addpropsview.el.save_easing_state();
466                 this.win.addpropsview.el.set_scale(0.0f,0.0f);
467                 this.win.addpropsview.el.restore_easing_state();   
468                 break;
469                 
470             case State.CODE:
471
472
473                 this.code_editor.saveContents();
474                 this.win.codeeditview.el.save_easing_state();
475                 this.win.codeeditview.el.set_scale(0.0f,0.0f);
476                 this.win.codeeditview.el.restore_easing_state();    
477                 break;
478
479
480              case State.OBJECT:
481                 this.win.objectview.el.save_easing_state();
482                 this.win.objectview.el.set_scale(0.0f,0.0f);
483                 this.win.objectview.el.restore_easing_state();    
484                 break;
485
486            case State.PROJECT:
487                 this.win.projecteditview.el.save_easing_state();
488                 this.win.projecteditview.el.set_scale(0.0f,0.0f);
489                 this.win.projecteditview.el.restore_easing_state();    
490                 break;
491
492           case State.FILES:
493                 // hide files...
494                 this.win.rooview.el.save_easing_state();
495                 this.win.rooview.el.show_all();
496                 this.win.rooview.el.set_easing_duration(1000);
497                 this.win.rooview.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 0.0f);
498                 this.win.rooview.el.set_scale(1.0f,1.0f);
499                 this.win.rooview.el.set_pivot_point(0.5f,0.5f);
500                 this.win.rooview.el.set_opacity(0xff);
501                 this.win.rooview.el.restore_easing_state();  
502                 
503                
504                 this.clutterfiles.el.save_easing_state();
505                 this.clutterfiles.el.set_easing_duration(1000);
506                 this.clutterfiles.el.set_pivot_point(0.5f,0.5f);
507                 this.clutterfiles.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, -180.0f);
508                 this.clutterfiles.el.set_opacity(0);
509                 this.clutterfiles.el.restore_easing_state();  
510
511                 //this.clutterfiles.el.hide();
512                  
513
514                 break;
515
516                 
517         }
518         this.resizeCanvasElements();
519         var oldstate  =this.state;
520         this.state = new_state;
521
522                 
523         this.buttonsShowHide();
524         
525         switch (this.state) {
526             
527             case State.PREVIEW:  // this is the default state when working...
528                  this.win.editpane.el.show(); // holder for tree and properties..
529                  
530              
531                  this.left_projects.el.hide(); 
532                  if (oldstate != State.FILES) {
533                     // it's handled above..
534                     print ("changing state to preview from NOT files..");
535                     this.win.rooview.el.save_easing_state();
536                     this.resizeCanvasElements();
537
538                     this.win.rooview.el.set_scale(1.0f,1.0f);
539                     this.win.rooview.el.restore_easing_state();
540                  }
541                
542                 break;
543
544
545             case State.LISTENER:
546                 // same as prop?
547             case State.PROP:
548                 var ae =      this.left_tree.getActiveElement();
549                 if (ae == null) {
550                     this.state = oldstate;
551                     this.buttonsShowHide();
552                     return;
553                 }
554                 this.add_props.el.show_all();
555                 this.add_props.show(
556                     Palete.factory(this.win.project.xtype), 
557                     this.state == State.LISTENER ? "signals" : "props",
558                     ae.fqn()
559                 );
560  
561                     
562  
563                 this.win.rooview.el.save_easing_state();
564                 // -- FIXME? this needs to be State aware?
565                 this.resizeCanvasElements();
566         
567                 this.win.rooview.el.set_pivot_point(1.0f,0.5f);
568                 this.win.rooview.el.restore_easing_state();
569                 
570               
571                 this.win.addpropsview.el.save_easing_state();
572                 this.win.addpropsview.el.set_scale(1.0f,1.0f);
573                 this.win.addpropsview.el.restore_easing_state();
574                 break;
575            
576             case State.OBJECT:
577                  var n = this.left_tree.getActiveElement();
578
579                 if (this.left_tree.model.file == null) {
580                     this.state =oldstate;
581                     this.buttonsShowHide();
582                     return;
583                 }
584                 
585                 if (n == null && this.left_tree.model.file.tree != null) {
586                     this.state = oldstate;
587                     this.buttonsShowHide();
588                     return;
589                 }
590
591                 this.rightpalete.el.show_all();
592                 this.rightpalete.load(this.left_tree.getActiveFile().palete(), n == null ? "*top" : n.fqn());
593
594                 this.win.rooview.el.save_easing_state();
595                // this.resizeCanvasElements();
596                 this.win.rooview.el.restore_easing_state();
597
598                 
599                 this.win.objectview.el.save_easing_state();
600                 this.win.objectview.el.set_scale(1.0f,1.0f);
601                 this.win.objectview.el.restore_easing_state();    
602                 break;
603                
604                
605             case State.CODE:
606
607                 this.code_editor.el.show_all();
608                 
609                 // caller needs to call editor - show....
610                 this.win.rooview.el.save_easing_state();
611                 //this.resizeCanvasElements();
612                 this.win.rooview.el.restore_easing_state();
613                 
614  
615                 this.win.codeeditview.el.save_easing_state();
616                 this.win.codeeditview.el.set_scale(1.0f,1.0f);
617                 this.win.codeeditview.el.restore_easing_state();    
618                 break;
619
620
621
622            case State.PROJECT:
623
624              if (this.win.project.xtype == "Roo") {
625                     this.projectsettings.el.show_all();
626                     this.projectsettings.show(this.win.project);
627                 } else {
628                     this.vala_projectsettings.el.show_all();
629                     this.vala_projectsettings.show((Project.Gtk)this.win.project);
630                 }
631
632                 this.win.rooview.el.save_easing_state();
633                // this.resizeCanvasElements();
634                 this.win.rooview.el.restore_easing_state();
635
636                 this.win.projecteditview.el.save_easing_state();
637                 this.win.projecteditview.el.set_scale(1.0f,1.0f);
638                 this.win.projecteditview.el.restore_easing_state();    
639                 break;
640                 
641            case State.FILES:  // can only get here from PREVIEW state.. in theory..
642                 
643    
644                 this.win.editpane.el.hide(); // holder for tree and properties..
645              
646                 this.left_projects.el.show(); 
647             
648                 this.win.rooview.el.save_easing_state();
649                 this.win.rooview.el.set_easing_duration(1000);
650                 this.win.rooview.el.set_pivot_point(0.5f,0.5f);
651                 this.win.rooview.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 180.0f);
652                 this.win.rooview.el.set_opacity(0);
653                 //el.set_scale(0.0f,0.0f);
654
655  
656                 if (this.win.project != null) {
657                     this.left_projects.selectProject(this.win.project);
658                 }
659              
660                 this.win.rooview.el.restore_easing_state();
661                 
662                 this.clutterfiles.el.show_all();
663                 this.clutterfiles.el.save_easing_state();
664                 this.clutterfiles.el.set_easing_duration(1000);
665                 this.clutterfiles.el.set_pivot_point(0.5f,0.5f);
666                 this.clutterfiles.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 0.0f);
667                 this.clutterfiles.el.set_opacity(0xff);
668                 this.clutterfiles.el.restore_easing_state();  
669                 
670                 
671                 break;
672
673
674         }
675
676             
677     }
678     
679     public int redraw_count = 0;
680     public void resizeCanvas() // called by window resize .. delays redraw
681     {
682         var rc = this.redraw_count;        
683         this.redraw_count = 2;
684         if (rc == 0) {
685             GLib.Timeout.add(100,  ()  =>{
686                  return this.resizeCanvasQueue();
687             });
688         }
689     }
690     public bool  resizeCanvasQueue()
691     {
692         //print("WindowState.resizeCanvasQueue %d\n", this.redraw_count);        
693
694         if (this.redraw_count < 1) {
695             return false; // should not really happen...
696         }
697
698
699         this.redraw_count--;
700
701         if (this.redraw_count > 0) {
702             return true; // do it again in 1 second...
703         }
704         // got down to 0 or -1....
705         this.redraw_count = 0;
706         this.resizeCanvasElements();
707         return false;
708
709     }
710     public void resizeCanvasElements()
711     {
712         Gtk.Allocation alloc;
713         this.win.clutterembed.el.get_allocation(out alloc);
714
715            // print("WindowState.resizeCanvasElements\n");
716             if (!this.children_loaded || this.win.clutterembed == null) {
717                 print("WindowState.resizeCanvasElements = ingnore not loaded or no clutterfiles\n");
718             return; 
719         }
720             //print("WindowState.resizeCanvasElements = running");
721
722         
723         // ------- project view appears at top...
724
725                
726         // ------- add property/object left - max 300px, min 50... (or disapear..)     
727         
728         var avail = alloc.width < 50.0f ? 0 :  alloc.width - 50.0f;
729         var palsize = avail < 300.0f ? avail : 300.0f;
730         //print("set palsize size %f\n", palsize);
731         // palate / props : fixed 300 pix
732                 
733  
734         // -------- code edit min 600
735         
736         var codesize = avail < 800.0f ? avail : 800.0f;
737         //print("set code size %f\n", codesize);
738
739
740             
741
742
743         
744         switch ( this.state) {
745             case State.PREVIEW:
746                 this.win.rooview.el.set_size(alloc.width-50, alloc.height);
747                 break;
748     
749             case State.FILES: 
750                 this.clutterfiles.set_size(alloc.width-50, alloc.height);
751                 break;
752
753             case State.PROJECT:
754              
755                 this.win.projecteditview.el.set_size(alloc.width-50, alloc.height / 2.0f);
756                 
757                 this.win.rooview.el.save_easing_state();
758                 this.win.rooview.el.set_size(alloc.width / 2.0f, alloc.height / 2.0f);
759                 this.win.rooview.el.restore_easing_state();
760                 break;
761
762             case State.CODE: 
763                 this.win.codeeditview.el.set_size(codesize, alloc.height);
764                 var scale = avail > 0.0f ? (avail - codesize -10 ) / avail : 0.0f;
765                     this.win.rooview.el.set_scale(scale,scale);
766                 break;
767                 
768             case State.PROP:
769             case State.LISTENER:        
770             case State.OBJECT:  
771                 this.win.objectview.el.set_size(palsize, alloc.height);    
772                 this.win.addpropsview.el.set_size(palsize, alloc.height);
773                 var scale = avail > 0.0f ? (avail - palsize -10 ) / avail : 0.0f;
774                 this.win.rooview.el.set_scale(scale,scale);
775                 break;
776         }
777     }
778
779     // -- buttons show hide.....
780
781     public void buttonsShowHide()
782     {
783         // basically hide everything, then show the relivant..
784
785          this.win.backbutton.el.hide();
786     
787         this.win.projectbutton.el.hide(); // show file nav...
788         this.win.editfilebutton.el.hide();
789         this.win.projecteditbutton.el.hide();
790          
791         
792         this.win.objectshowbutton.el.hide(); // add objects
793         this.win.addpropbutton.el.hide();  
794         this.win.addlistenerbutton.el.hide(); 
795
796     
797     
798         this.win.addprojectbutton.el.hide();
799         this.win.addfilebutton.el.hide();
800         this.win.delprojectbutton.el.hide();
801         this.win.new_window.el.hide();
802
803         
804         switch (this.state) {
805             
806             case State.PREVIEW:  // this is the default state when working...
807                
808                 this.win.projectbutton.el.show(); // show file nav...
809                 this.win.editfilebutton.el.show();
810                 this.win.projecteditbutton.el.show();
811                  
812                 
813                 this.win.objectshowbutton.el.show(); // add objects
814                 this.win.addpropbutton.el.show();  
815                 this.win.addlistenerbutton.el.show(); 
816                 break;
817             
818            
819             case State.CODE: 
820             case State.PROP:
821             case State.LISTENER:
822             case State.OBJECT:
823                 
824                 this.win.backbutton.el.show();
825                 this.win.objectshowbutton.el.show(); // add objects
826                 this.win.addpropbutton.el.show();  
827                 this.win.addlistenerbutton.el.show(); 
828                 break;
829             
830             case State.PROJECT: 
831                 // anything else?
832                 this.win.backbutton.el.show();
833                 break;
834             
835     
836             case State.FILES:
837                 this.win.backbutton.el.show();
838                      
839                 this.win.addprojectbutton.el.show();
840                 this.win.addfilebutton.el.show();
841                 this.win.delprojectbutton.el.show();
842                 this.win.new_window.el.show();
843                 break;
844         }
845
846     }
847
848     
849 }
850
851