26b04bd41bed77a4526219b94f43b131423b6f44
[roobuilder] / 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                 CODE,
16                 CODEONLY  
17         }  
18
19         public State state = State.NONE;
20         public bool children_loaded = false;
21  
22         public Project.Project project;
23         public JsRender.JsRender file;
24           
25         public Xcls_WindowLeftTree  left_tree;
26         public Xcls_PopoverAddProp   add_props;
27         public Xcls_LeftProps       left_props;
28         public Xcls_RooProjectSettings roo_projectsettings_pop;
29         public ValaProjectSettingsPopover  vala_projectsettings_pop; 
30         public Xcls_PopoverAddObject     rightpalete;
31         //public Xcls_PopoverEditor               code_editor_popover;
32         public Editor                                    code_editor_tab; 
33         public Xcls_WindowRooView   window_rooview;
34         public Xcls_GtkView         window_gladeview;
35         public Xcls_PopoverFiles popover_files;
36         
37         //public Xcls_ClutterFiles     clutterfiles;
38         //public Xcls_WindowLeftProjects left_projects; // can not see where this is initialized.. 
39          
40         public DialogTemplateSelect template_select; 
41         
42         public Xcls_PopoverFileDetails file_details;
43         public Xcls_ValaCompileResults compile_results;
44         
45         // dialogs??
46         public Xcls_DialogPluginWebkit webkit_plugin;
47         
48         
49         //public Palete.ValaSource valasource; // the spawner that runs the vala compiler.
50         public Json.Object last_compile_result;
51         
52         // ctor 
53         public WindowState(Xcls_MainWindow win)
54         {
55                 this.win = win;
56                 // initialize
57
58                 // left elements..
59                 this.leftTreeInit();
60                 this.propsListInit();
61
62                 // on clutter space...
63                 this.projectEditInit();
64                 this.codeEditInit();
65                 //this.codePopoverEditInit();
66                 //this.projectListInit();
67                 //this.fileViewInit();
68
69                 // adding stuff
70                 this.objectAddInit();
71                 this.propsAddInit();
72
73
74                 // previews...
75                 this.gtkViewInit();
76                 this.webkitViewInit();
77
78                 // dialogs
79
80                 this.fileDetailsInit();
81
82                 this.webkit_plugin = new Xcls_DialogPluginWebkit();
83                 this.template_select = new DialogTemplateSelect();
84                 this.children_loaded = true;
85                 
86                 
87                  
88                 BuilderApplication.valasource.compiled.connect(this.showCompileResult); 
89                 
90                 this.compile_results = new  Xcls_ValaCompileResults(); // the poup dialogs with results in.
91                 this.compile_results.window = this.win;
92                 BuilderApplication.valasource.compile_output.connect(this.compile_results.addLine);
93                 
94                 this.win.statusbar_compilestatus_label.el.hide();
95                 this.win.statusbar_run.el.hide();
96  
97                 
98                 this.popover_files = new Xcls_PopoverFiles();
99                 this.popover_files.setMainWindow(this.win);
100         }
101
102
103         // left tree
104
105         public void leftTreeInit()
106         {
107          
108                 this.left_tree = new Xcls_WindowLeftTree();
109                 this.left_tree.ref();
110                 this.left_tree.main_window = this.win;
111         
112                 this.win.leftpane.el.remove(this.win.editpane.el);
113         //this.win.tree.el.remove(this.left_tree.el);
114         this.win.leftpane.el.add(this.left_tree.el);
115             
116         
117                 //this.win.tree.el.pack_start(this.left_tree.el,true, true,0);
118                 this.left_tree.el.show_all();
119                    
120                 this.left_tree.before_node_change.connect(() => {
121                         // if the node change is caused by the editor (code preview)
122                         if (this.left_tree.view.lastEventSource == "editor") {
123                                 return true;
124                         }
125                         return this.leftTreeBeforeChange();
126
127                 });
128                 // node selected -- only by clicking?
129                 this.left_tree.node_selected.connect((sel, source) => {
130                         //if (source == "editor") {
131                         //      return;
132                         //}
133                         if (this.file.xtype == "Roo") { 
134                                 this.window_rooview.sourceview.nodeSelected(sel,true); // foce scroll.
135                         } else {
136                                 this.window_gladeview.sourceview.nodeSelected(sel, true);
137                         }
138                 });
139                 
140                 this.left_tree.node_selected.connect((sel, source) => {
141                         this.leftTreeNodeSelected(sel, source);
142                 });
143          
144                 this.left_tree.changed.connect(() => {
145                         GLib.debug("LEFT TREE: Changed fired\n");
146                         this.file.save();
147                         if (this.left_tree.getActiveFile().xtype == "Roo" ) {
148                                    this.window_rooview.requestRedraw();
149                         } else {
150                                   this.window_gladeview.loadFile(this.left_tree.getActiveFile());
151                         }
152                          
153                 });
154                  
155         }
156
157         public bool leftTreeBeforeChange()
158         {
159                 // in theory code editor has to hide before tree change occurs.
160                 //if (this.state != State.CODE) {
161                         this.left_props.finish_editing();
162                         
163                         if (this.state == State.CODE) {
164                                 this.code_editor_tab.saveContents();
165                                 this.switchState(State.PREVIEW);
166                         }
167                         
168                         return true;
169                 //}
170
171                 //if (!this.code_editor.saveContents()) {
172                 //      return false;
173                 //}
174                 //return false;
175         }
176         
177         int tree_width = 300;
178         int props_width = 300;
179         
180         public void leftTreeNodeSelected(JsRender.Node? sel, string source)
181         {
182                 
183                 // do we really want to flip paletes if differnt nodes are selected
184                 // showing palete should be deliberate thing..
185                  
186          
187                 print("node_selected called %s\n", (sel == null) ? "NULL" : "a value");
188
189                 this.add_props.hide(); // always hide add node/add listener if we change node.
190                 this.rightpalete.hide();
191                 
192                 this.left_props.load(this.left_tree.getActiveFile(), sel);
193                 
194                 var outerpane = this.win.mainpane.el;
195                 var innerpane = this.win.editpane.el;
196                 
197                  if (this.win.editpane.el.parent != null && sel != null) {
198                         // select another node... no change to show hide/resize
199                         return;
200                 }
201                                  
202                 if (sel == null) {
203                     // remove win.editpane from leftpane
204                     // remove lefttree from from win.tree 
205                     // add win.tree to leftpane
206                     if (this.win.editpane.el.parent != null) {
207                         this.props_width =  outerpane.get_position() - innerpane.get_position();
208                         this.tree_width = innerpane.get_position();
209                         GLib.debug("HIDE: prop_w = %d, tree_w = %d", this.props_width, this.tree_width);
210                         
211                         this.win.leftpane.el.remove(this.win.editpane.el);
212                         this.win.tree.el.remove(this.left_tree.el);
213                         this.win.leftpane.el.add(this.left_tree.el);
214                 }
215                     
216                 
217                         //GLib.debug("Hide Properties");
218                         outerpane.show_all(); // make sure it's visiable..
219                         this.left_props.el.hide();
220                         GLib.debug("set position: %d", this.tree_width);
221                         outerpane.set_position(this.tree_width);
222                         //outerpane.set_position(int.max(250,innerpane.get_position()));
223                         //this.left_props.el.width_request =  this.left_props.el.get_allocated_width();
224                         return;
225                 }
226                 
227                 // at this point we are showing the outer only,
228                 
229                 
230                 
231                 
232                 this.tree_width = outerpane.get_position();
233                 
234                 GLib.debug("SHOW: prop_w = %d, tree_w = %d", this.props_width, this.tree_width);
235                       
236                 // remove this.ldeftree from this.win.leftpane
237                 this.win.leftpane.el.remove(this.left_tree.el);
238                 this.win.tree.el.add(this.left_tree.el);
239                 this.win.leftpane.el.add(this.win.editpane.el);
240                 
241                 
242                 
243                 
244                 GLib.debug("left props is %s",  this.left_props.el.visible ? "shown" : "hidden");
245                 // at start (hidden) - outer  = 400 inner = 399
246                 // expanded out -> outer = 686, inner = 399 
247                 //this.win.props.el.pack_start(this.left_props.el,true, true,0);
248                 this.left_props.el.show_all();
249                 //if (!this.left_props.el.visible) {
250                  
251                         GLib.debug("outerpos : %d, innerpos : %d", outerpane.get_position(), innerpane.get_position());
252                         outerpane.set_position(this.tree_width + this.props_width);
253                         innerpane.set_position(this.tree_width);
254                         /* var cw = outerpane.el.get_position();
255                         var rw = int.min(this.left_props.el.width_request, 150);
256                         print("outerpos : %d, innerpos : %d", cw + rw, cw);
257                         
258                         innerpane.set_position(cw); */
259                         this.left_props.el.show();
260                 
261                 //}
262                 
263                  
264                 
265                 
266                 
267
268                 
269                 
270                 // if either of these are active.. then we should update them??
271                 
272                 
273                 
274    /**
275    
276    make outerpane = {current width of left pane} + width of props
277    make innerpane = {current width of left pane}
278    
279    
280    
281    
282    
283    var outerpane = _this.main_window.leftpane.el;
284    var pane = _this.main_window.editpane.el;
285    
286   
287    
288     var try_size = (i * 25) + 60; // est. 20px per line + 40px header
289     GLib.Timeout.add_seconds(1, () => { 
290                 // max 80%...
291                 pane.set_position( 
292                      ((try_size * 1.0f) /  (pane.max_position * 1.0f))  > 0.8f  ? 
293                     (int) (pane.max_position * 0.2f) :
294                     pane.max_position-try_size);
295             return GLib.Source.REMOVE;
296         });
297         */
298                 
299                 
300                 /*
301                 switch (this.state) {
302                  
303                         case State.CODE:
304                                  this.switchState(State.PREVIEW);
305                          
306                                 break;
307                            
308                                                         
309                 }
310                 */
311  
312                  
313
314         }
315
316
317
318
319         public void propsListInit()
320         {
321         
322                 this.left_props =new Xcls_LeftProps();
323                 this.left_props.ref();
324                 this.left_props.main_window = this.win;
325                 this.win.props.el.pack_start(this.left_props.el,true, true,0);
326                 this.left_props.el.show_all();
327         
328                 this.left_props.show_editor.connect( (file, node, prop) => {
329                         this.switchState(State.CODE);
330                         
331                         
332                         this.code_editor_tab.show(
333                                 file,
334                                 node,
335                                 prop
336                         );
337                         
338                         
339                         
340                 });
341
342                 // not sure if this is needed - as closing the popvoer should save it.
343                 this.left_props.stop_editor.connect( () => {
344                         var ret =  this.code_editor_tab.saveContents();
345                         if (!ret) {
346                                 return false;
347                         }
348                         this.switchState(State.PREVIEW);
349                          
350                         return ret;
351                 });
352         
353                 this.left_props.changed.connect(() => {
354                         if (this.left_tree.getActiveFile().xtype == "Roo" ) {
355                                    this.window_rooview.requestRedraw();
356                         } else {
357                                   this.window_gladeview.loadFile(this.left_tree.getActiveFile());
358                         }
359                         this.left_tree.model.updateSelected();
360                         this.file.save();
361                         if (this.file.xtype=="Gtk") {
362                                 BuilderApplication.valasource.checkFileSpawn(this.file);
363                         }
364                 });
365          
366
367         }
368
369         //-------------  projects edit
370
371         public void projectEditInit()
372         {
373                 this.roo_projectsettings_pop  =new Xcls_RooProjectSettings();
374                 this.roo_projectsettings_pop.ref();  /// really?
375         
376                 this.vala_projectsettings_pop  =new  ValaProjectSettingsPopover();
377                 this.vala_projectsettings_pop.ref();
378                 this.vala_projectsettings_pop.window = this.win;
379         
380                 //((Gtk.Container)(this.win.projecteditview.el.get_widget())).add(this.projectsettings.el);
381  
382  
383                 this.roo_projectsettings_pop.buttonPressed.connect((btn) => {
384                         if (btn == "save" || btn == "apply") {
385                                 this.roo_projectsettings_pop.project.save();
386                  
387                         }
388                 
389                         // in theory active file can only be rooo...
390                         var ep = this.roo_projectsettings_pop.project;
391                         foreach(var ww in BuilderApplication.windows) {
392                                 if (ww.windowstate.project.fn == ep.fn && ww.windowstate.file.xtype == "Roo") {
393                                          
394                                     ww.windowstate.window_rooview.view.renderJS(true);
395                                                  
396                                 }
397                         }
398                         
399                          
400                         
401                         if (btn == "save") {
402                                 this.roo_projectsettings_pop.el.hide();
403                         }
404                         //this.switchState (State.PREVIEW); 
405                          
406                  });
407
408         }
409         
410         public void projectPopoverShow(Gtk.Widget btn, Project.Project? pr) 
411         { 
412                 if (pr == null) {
413                     pr = this.project;
414             }
415           
416             /*
417         var active_file = this.left_tree.getActiveFile() ;
418         if (active_file != null) {
419             xtype = active_file.xtype;
420         } else {
421         
422                 return; // no active project
423             // we might be on the file brower..
424             //pr = this.left_projects.getSelectedProject();        
425             //if (pr != null) {
426             //    xtype = pr.xtype;
427             //}
428         } 
429         */
430         if (pr.xtype == "") {
431             return;
432         }
433         if (pr.xtype  == "Roo" ) {
434                         this.roo_projectsettings_pop.show(btn,pr);
435                         return;
436                 }
437
438                 // gtk..
439                 this.vala_projectsettings_pop.show(btn,(Project.Gtk)pr);
440         
441         }
442         
443         
444         // ----------- object adding
445         public void objectAddInit()
446         {
447
448                 this.rightpalete  = new Xcls_PopoverAddObject();
449                 this.rightpalete.mainwindow = this.win;
450                 this.rightpalete.ref();  /// really?
451                 /*((Gtk.Container)(this.win.objectview.el.get_widget())).add(this.rightpalete.el);
452  
453
454                 var stage = this.win.objectview.el.get_stage();
455                 stage.set_background_color(  Clutter.Color.from_string("#000"));
456                  */
457         }
458         
459         // -----------  properties adding list...
460         // listener uses the properties 
461         public void propsAddInit()
462         {
463         // Add properties
464                 this.add_props  = new Xcls_PopoverAddProp();
465                 this.add_props.mainwindow = this.win;
466                 this.add_props.ref();  /// really?
467                 // don't need to add it..
468                 //((Gtk.Container)(this.win.addpropsview.el.get_widget())).add(this.add_props.el);
469  
470
471                 //var  stage = this.win.addpropsview.el.get_stage();
472                 //stage.set_background_color(  Clutter.Color.from_string("#000"));
473
474
475                 this.add_props.select.connect( (prop) => {
476                          
477                         this.left_props.addProp(prop);
478                 });
479
480         }
481         public void propsAddShow()
482         {
483
484         }
485         public void propsAddHide()
486         {
487         
488         }
489
490  
491         // ----------- Add / Edit listener
492         // listener uses the properties 
493         //public void listenerInit()     { }
494         public void listenerShow()
495         {
496
497         }
498         public void listenerHide()
499         {
500         
501         }
502
503         // -------------- codeEditor
504
505         public void codeEditInit()
506         {
507                 this.code_editor_tab  = new  Editor();
508                 //this.code_editor.ref();  /// really?
509                 this.win.codeeditviewbox.el.add(this.code_editor_tab.el);
510                 
511                 this.win.codeeditviewbox.el.hide();
512                 this.code_editor_tab.window = this.win;
513  
514                 // editor.save...
515
516                 this.code_editor_tab.save.connect( () => {
517                         this.file.save();
518                         this.left_tree.model.updateSelected();
519                         if (this.left_tree.getActiveFile().xtype == "Roo" ) {
520                                    this.window_rooview.requestRedraw();
521                         } else {
522                                   this.window_gladeview.loadFile(this.left_tree.getActiveFile());
523                         }
524                          // we do not need to call spawn... - as it's already called by the editor?
525                          
526                 });
527                 
528         }
529         /*
530         public void codePopoverEditInit()
531         {
532                 this.code_editor_popover  = new  Xcls_PopoverEditor();
533                 //this.code_editor.ref();  /// really?
534                  
535                 this.code_editor_popover.setMainWindow( this.win);
536   
537                 this.code_editor_popover.editor.save.connect( () => {
538                         this.file.save();
539                         this.left_tree.model.updateSelected();
540                         if (this.left_tree.getActiveFile().xtype == "Roo" ) {
541                                    this.window_rooview.requestRedraw();
542                         } else {
543                                   this.window_gladeview.loadFile(this.left_tree.getActiveFile());
544                         }
545                          // we do not need to call spawn... - as it's already called by the editor?
546                          
547                 });
548                 
549         }
550         */
551         // ----------- list of projects on left
552         /*
553         public void  projectListInit() 
554         {
555
556                 this.left_projects = new Xcls_WindowLeftProjects();
557                  this.left_projects.ref();
558                  this.win.leftpane.el.pack_start(this.left_projects.el,true, true,0);
559                  this.left_projects.el.show_all();
560                  this.left_projects.project_selected.connect((proj) => {
561                         this.buttonsShowHide();
562                         proj.scanDirs();
563                         this.clutterfiles.loadProject(proj);
564                 
565                  });
566
567         }
568         */
569         
570         
571         // ----------- file view
572         public void showPopoverFiles(Gtk.Widget btn, Project.Project? project, bool new_window)
573         {
574                 this.popover_files.show(btn, project, new_window);
575         
576         }
577         
578         
579  
580         public void fileDetailsInit()
581         {
582                 this.file_details = new Xcls_PopoverFileDetails();
583                 this.file_details.mainwindow = this.win;
584                 // force it modal to the main window..
585                 
586                 this.file_details.success.connect((project,file) =>
587                 {
588                         this.fileViewOpen(file, this.file_details.new_window,  -1);
589                         // if it's comming from the file dialog -> hide it...
590                         
591                 });
592
593         }
594         
595         
596         public void gotoLine(int line)
597         {
598         
599                 if (line < 0) {
600                         return;
601                 }
602                 if (file.xtype == "PlainFile") {
603                     this.switchState (State.CODEONLY); 
604                          
605                         this.code_editor_tab.scroll_to_line(line);
606                          
607                 } else {
608                 
609                         this.switchState (State.PREVIEW); 
610                          
611                         if (file.project.xtype == "Gtk" && line> -1 ) {
612                                 // fixme - show the editing tab.
613                                 this.window_gladeview.scroll_to_line(line);
614                         } else {
615                                 this.window_rooview.scroll_to_line(line);
616                         // fixme - what about Roo?
617                         }
618                 }
619         
620         }
621         
622         public void fileViewOpen(JsRender.JsRender file, bool new_window, int line = -1)
623         {
624                 var existing = BuilderApplication.getWindow(file);
625                 
626                 if (existing != null) {
627                         existing.el.present();
628                         existing.windowstate.gotoLine(line);
629                         return;
630                 }
631                 
632                 if (new_window) {
633         
634                         this.popover_files.el.hide();
635                         BuilderApplication.newWindow(file, line);
636                         return;
637                 }
638                 
639                 
640                 this.win.project = file.project;
641                 this.project = file.project;
642                 this.file = file;
643                 BuilderApplication.updateWindows();
644                 
645                 if (file.xtype == "PlainFile") {
646                         this.win.codeeditviewbox.el.show();
647                         this.switchState (State.CODEONLY); 
648                         file.loadItems();
649                         this.code_editor_tab.show(file, null, null);
650                          
651                 } else {
652                 
653                         this.switchState (State.PREVIEW); 
654                         // this triggers loadItems..
655                         this.left_tree.model.loadFile(file);
656                          
657
658                 }
659                 this.gotoLine(line);
660         
661                 var ctr= this.win.rooviewbox.el;
662  
663         
664                 if (file.project.xtype == "Roo" ) { 
665                     // removes all the childe elemnts from rooviewbox
666                 
667                         ctr.foreach( (w) => { ctr.remove(w); });
668  
669                         ctr.add(this.window_rooview.el);
670  
671                         if (file.xtype != "PlainFile") {       
672  
673                                 this.window_rooview.loadFile(file);
674                                 this.window_rooview.el.show_all();
675                         }
676  
677                         
678
679                 } else {
680                         ctr.foreach( (w) => { ctr.remove(w); });
681
682                         ctr.add(this.window_gladeview.el);
683  
684                         if (file.xtype != "PlainFile") {    
685                                 
686                                 this.window_gladeview.loadFile(file);
687                                 this.window_gladeview.el.show_all();
688                         }
689  
690                 }
691                 print("OPEN : " + file.name);
692                 if (file.xtype != "PlainFile") { 
693                         // hide the file editor.
694                    this.win.codeeditviewbox.el.hide();
695                         //this.win.editpane.el.set_position(this.win.editpane.el.max_position);
696                 }
697                 this.win.setTitle(file.project.name + " : " + file.name);
698                          
699
700         }
701  
702  
703          /*
704         public void fileViewOpenPlain(string fname)
705         {
706                 
707                 this.switchState (State.CODEONLY); 
708                 this.code_editor.showPlainFile(fname);
709         }
710  */
711          
712         // ---------  webkit view
713         public void webkitViewInit()
714         {
715                 this.window_rooview  =new Xcls_WindowRooView();
716                 this.window_rooview.main_window = this.win;
717                 this.window_rooview.ref();
718                 this.win.rooviewbox.el.add(this.window_rooview.el);
719                 
720                 this.window_rooview.el.show_all();
721                 this.win.rooviewbox.el.hide();
722         
723         }
724
725         // ------ Gtk  - view
726
727         public void gtkViewInit()
728         {
729
730                 
731                 
732                 this.window_gladeview  =new Xcls_GtkView( );
733                 this.window_gladeview.ref();
734                 this.window_gladeview.main_window = this.win;
735  
736         }
737         
738
739         
740         
741         public void showProps(Gtk.Widget btn, JsRender.NodePropType sig_or_listen)
742         {
743                 var ae =  this.left_tree.getActiveElement();
744                 if (ae == null) {
745                                 return;
746                 }
747                 this.rightpalete.hide(); 
748                 
749                 this.add_props.el.show_all(); 
750                 this.add_props.show(
751                         this.win.project.palete, //Palete.factory(this.win.project.xtype), 
752                          sig_or_listen, //this.state == State.LISTENER ? "signals" : "props",
753                         ae.fqn(),
754                         btn
755                         
756                 );
757         }
758         
759         public void showAddObject(Gtk.Widget btn)
760         {
761          
762                  var n = this.left_tree.getActiveElement();
763                 this.add_props.hide();
764                 this.rightpalete.el.show_all();
765                 this.rightpalete.show(
766                         this.left_tree.getActiveFile().palete(), 
767                         n == null ? "*top" : n.fqn(),
768                         btn
769                 );
770         }
771          
772                  
773         
774         public void switchState(State new_state)
775         {
776                 
777                 // if the new state and the old state are the same..
778                 
779                 if (new_state == this.state) {
780                         return;
781                 }
782                 
783                 // anything to do beforehand?
784                 
785                 switch (this.state) {
786                          
787                  
788                         
789                         case State.PREVIEW:
790                                 // stop editing the editor tab.
791                                 // always save before calling switch state to preview?
792                                 
793                                 this.code_editor_tab.reset();
794                                  
795                                 if (this.left_tree.getActiveFile() != null) {
796                                          if (this.left_tree.getActiveFile().xtype == "Roo" ) {
797                                                  this.window_rooview.createThumb();
798                                          } else {
799                                                   this.window_gladeview.createThumb();
800                                           }
801                                 }
802                                 // normally we are going from preview to another state.
803                                 // and different windows hide the preview in differnt ways..
804                                 
805                                 break;
806                                 
807          }
808                          
809                 this.state = new_state;
810                 this.buttonsShowHide();
811                 
812                 switch (this.state) {
813
814                         case State.PREVIEW:  // this is the default state when working...
815                                 this.win.leftpane.el.show();
816                                 this.win.editpane.el.show(); // holder for tree and properties..
817                             this.win.rooviewbox.el.show();
818                                 this.win.codeeditviewbox.el.hide();
819                                 break;
820
821                         case State.CODE:
822                                 this.win.leftpane.el.show();
823                                 this.win.editpane.el.show();
824                                 this.win.rooviewbox.el.hide();
825                                 this.win.codeeditviewbox.el.show();
826                                 this.code_editor_tab.el.show_all();
827                                 break;
828
829                         case State.CODEONLY:
830                                 this.win.leftpane.el.hide();
831                                 this.win.codeeditviewbox.el.show();
832                                 this.win.rooviewbox.el.hide();
833                                 this.code_editor_tab.el.show_all();
834                                 break;
835
836                         case State.NONE:
837                                 break;
838
839                 }
840
841         }
842   
843
844         // -- buttons show hide.....
845
846         public void buttonsShowHide()
847         {
848                 // basically hide everything, then show the relivant..
849
850                 // top bar btns
851                 //this.win.openbtn.el.hide();
852                 //this.win.openbackbtn.el.hide();
853                 
854                 //this.win.backbutton.el.hide();
855                 
856
857                  
858          
859         
860         
861                  
862                 switch (this.state) {
863                         
864                         case State.PREVIEW:  // this is the default state when working...
865                            
866                                  
867                                  
868                                 
869                                  
870                          
871                                 
872                         //      this.win.openbtn.el.show();
873                                 
874                                 break;
875                         
876                         case State.CODEONLY: 
877                         //      this.win.openbtn.el.show();
878                                  
879                                 break;
880                  
881                          
882                  /*
883                         case State.FILES:
884                                 if (this.left_projects.getSelectedProject() != null ) {
885                                         if (this.left_tree.getActiveFile() != null) {
886                                          
887                                                 this.win.openbackbtn.el.show();
888                                         }
889                                         this.win.addfilebutton.el.show();
890                                         this.win.search_entry.el.show();
891                                         this.win.projecteditbutton.el.show(); 
892                                 } 
893                                 
894                                          
895                                 this.win.addprojectbutton.el.show();
896                                 this.win.delprojectbutton.el.show();
897                                 
898                                 
899                                 
900                                 
901                                 break;
902                                 */
903                 }
904                 
905                 
906
907         }
908         
909         
910         public void showCompileResult(Json.Object obj)
911                 {
912                         // vala has finished compiling...
913  
914                         // stop the spinner...
915                         GLib.debug("vala compiled Built Project: %s    Window Project %s",
916                                 
917                         BuilderApplication.valasource.file == null ? "No file?" : (
918                         
919                                 BuilderApplication.valasource.file.project == null  ? "No Project" : BuilderApplication.valasource.file.project.fn
920                         ),
921                         this.project != null ? this.project.fn : "No Project?"
922                         );
923                                 
924                         
925                         
926                         if (this.project != null && 
927                         BuilderApplication.valasource.file != null &&   
928                         BuilderApplication.valasource.file.project != null &&                           
929                             this.project.fn != BuilderApplication.valasource.file.project.fn) {
930                                 GLib.debug("skip update - not our project");
931                                 return;
932                         }
933                         
934                         var generator = new Json.Generator ();
935                         var n  = new Json.Node(Json.NodeType.OBJECT);
936                         n.init_object(obj);
937                         generator.set_root (n);
938                         print("result :%s", generator.to_data (null));
939                         
940                         
941                         var buf = this.code_editor_tab.buffer;
942                         buf.check_running = false;
943                         var has_errors = false;
944                                       
945                         if (obj.has_member("ERR-TOTAL")) {
946                                 if (obj.get_int_member("ERR-TOTAL")> 0) {
947                                         has_errors = true;
948                                 }
949                                  this.win.statusbar_errors.setNotices( obj.get_object_member("ERR") , (int) obj.get_int_member("ERR-TOTAL"));
950                         } else {
951                                  this.win.statusbar_errors.setNotices( new Json.Object() , 0);
952                         }    
953                         
954                         if (obj.has_member("WARN-TOTAL")) {
955
956                                  this.win.statusbar_warnings.setNotices(obj.get_object_member("WARN"), (int) obj.get_int_member("WARN-TOTAL"));
957                         } else {
958                                  this.win.statusbar_warnings.setNotices( new Json.Object() , 0);
959                                  
960                         }
961                         if (obj.has_member("DEPR-TOTAL")) {
962                                 
963                                  this.win.statusbar_depricated.setNotices( obj.get_object_member("DEPR"),  (int) obj.get_int_member("DEPR-TOTAL"));
964                                  
965                         } else {
966                                 this.win.statusbar_depricated.setNotices( new Json.Object(),0);
967                         }
968                         //if (this.state == State.CODE || this.state == State.PROJECTCODEONLY) {
969                         if ( this.state == State.CODEONLY) {
970                                 buf.highlightErrorsJson("ERR", obj); 
971                                 buf.highlightErrorsJson("WARN", obj);
972                                 buf.highlightErrorsJson("DEPR", obj);
973                         }
974                         
975                         this.win.statusbar_compilestatus_label.el.hide();
976                         this.win.statusbar_run.el.hide();
977                         if (!has_errors) { 
978                                 this.win.statusbar_compilestatus_label.el.show();
979                                 this.win.statusbar_run.el.show();
980                         }
981                         if (this.file.xtype == "Gtk") {
982                                 // not sure how this is working ok? - as highlighting is happening on the vala files at present..
983                                 var gbuf =   this.window_gladeview.sourceview;
984                                 gbuf.highlightErrorsJson("ERR", obj);
985                                 gbuf.highlightErrorsJson("WARN", obj);
986                                 gbuf.highlightErrorsJson("DEPR", obj);                  
987                                 
988                                 if (!has_errors) {
989                                         this.win.statusbar_run.el.show();
990                                 }
991                         
992                    }
993                    
994                    if (this.file.xtype == "Roo") {
995                                 // not sure how this is working ok? - as highlighting is happening on the vala files at present..
996                                 var gbuf =   this.window_rooview.sourceview;
997                                 gbuf.highlightErrorsJson("ERR", obj);
998                                 gbuf.highlightErrorsJson("WARN", obj);
999                                 gbuf.highlightErrorsJson("DEPR", obj);                  
1000                         
1001                    }
1002                     
1003                         this.last_compile_result = obj;
1004                         
1005                         
1006                 }
1007         
1008 }
1009
1010