Fix #7353 - context on next/back on searching
[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                         // in theory active file can only be rooo...
385                          if (this.left_tree.getActiveFile().xtype == "Roo" ) {
386                                 if (btn == "save") {
387                                         this.window_rooview.view.renderJS(true);
388                                         this.roo_projectsettings_pop.el.hide();
389                                 }
390                                 if (btn == "apply") {
391                                         this.window_rooview.view.renderJS(true);
392                                         return;
393                                 }
394                         } else {
395                                 // do nothing for gtk..
396                         }
397                         if (btn == "save" || btn == "apply") {
398                                 this.win.project.save();
399                  
400                         }
401                         //this.switchState (State.PREVIEW); 
402                          
403                  });
404
405         }
406         
407         public void projectPopoverShow(Gtk.Widget btn, Project.Project? pr) 
408         { 
409                 if (pr == null) {
410                     pr = this.project;
411             }
412           
413             /*
414         var active_file = this.left_tree.getActiveFile() ;
415         if (active_file != null) {
416             xtype = active_file.xtype;
417         } else {
418         
419                 return; // no active project
420             // we might be on the file brower..
421             //pr = this.left_projects.getSelectedProject();        
422             //if (pr != null) {
423             //    xtype = pr.xtype;
424             //}
425         } 
426         */
427         if (pr.xtype == "") {
428             return;
429         }
430         if (pr.xtype  == "Roo" ) {
431                         this.roo_projectsettings_pop.show(btn,pr);
432                         return;
433                 }
434
435                 // gtk..
436                 this.vala_projectsettings_pop.show(btn,(Project.Gtk)pr);
437         
438         }
439         
440         
441         // ----------- object adding
442         public void objectAddInit()
443         {
444
445                 this.rightpalete  = new Xcls_PopoverAddObject();
446                 this.rightpalete.mainwindow = this.win;
447                 this.rightpalete.ref();  /// really?
448                 /*((Gtk.Container)(this.win.objectview.el.get_widget())).add(this.rightpalete.el);
449  
450
451                 var stage = this.win.objectview.el.get_stage();
452                 stage.set_background_color(  Clutter.Color.from_string("#000"));
453                  */
454         }
455         
456         // -----------  properties adding list...
457         // listener uses the properties 
458         public void propsAddInit()
459         {
460         // Add properties
461                 this.add_props  = new Xcls_PopoverAddProp();
462                 this.add_props.mainwindow = this.win;
463                 this.add_props.ref();  /// really?
464                 // don't need to add it..
465                 //((Gtk.Container)(this.win.addpropsview.el.get_widget())).add(this.add_props.el);
466  
467
468                 //var  stage = this.win.addpropsview.el.get_stage();
469                 //stage.set_background_color(  Clutter.Color.from_string("#000"));
470
471
472                 this.add_props.select.connect( (prop) => {
473                          
474                         this.left_props.addProp(prop);
475                 });
476
477         }
478         public void propsAddShow()
479         {
480
481         }
482         public void propsAddHide()
483         {
484         
485         }
486
487  
488         // ----------- Add / Edit listener
489         // listener uses the properties 
490         //public void listenerInit()     { }
491         public void listenerShow()
492         {
493
494         }
495         public void listenerHide()
496         {
497         
498         }
499
500         // -------------- codeEditor
501
502         public void codeEditInit()
503         {
504                 this.code_editor_tab  = new  Editor();
505                 //this.code_editor.ref();  /// really?
506                 this.win.codeeditviewbox.el.add(this.code_editor_tab.el);
507                 
508                 this.win.codeeditviewbox.el.hide();
509                 this.code_editor_tab.window = this.win;
510  
511                 // editor.save...
512
513                 this.code_editor_tab.save.connect( () => {
514                         this.file.save();
515                         this.left_tree.model.updateSelected();
516                         if (this.left_tree.getActiveFile().xtype == "Roo" ) {
517                                    this.window_rooview.requestRedraw();
518                         } else {
519                                   this.window_gladeview.loadFile(this.left_tree.getActiveFile());
520                         }
521                          // we do not need to call spawn... - as it's already called by the editor?
522                          
523                 });
524                 
525         }
526         /*
527         public void codePopoverEditInit()
528         {
529                 this.code_editor_popover  = new  Xcls_PopoverEditor();
530                 //this.code_editor.ref();  /// really?
531                  
532                 this.code_editor_popover.setMainWindow( this.win);
533   
534                 this.code_editor_popover.editor.save.connect( () => {
535                         this.file.save();
536                         this.left_tree.model.updateSelected();
537                         if (this.left_tree.getActiveFile().xtype == "Roo" ) {
538                                    this.window_rooview.requestRedraw();
539                         } else {
540                                   this.window_gladeview.loadFile(this.left_tree.getActiveFile());
541                         }
542                          // we do not need to call spawn... - as it's already called by the editor?
543                          
544                 });
545                 
546         }
547         */
548         // ----------- list of projects on left
549         /*
550         public void  projectListInit() 
551         {
552
553                 this.left_projects = new Xcls_WindowLeftProjects();
554                  this.left_projects.ref();
555                  this.win.leftpane.el.pack_start(this.left_projects.el,true, true,0);
556                  this.left_projects.el.show_all();
557                  this.left_projects.project_selected.connect((proj) => {
558                         this.buttonsShowHide();
559                         proj.scanDirs();
560                         this.clutterfiles.loadProject(proj);
561                 
562                  });
563
564         }
565         */
566         
567         
568         // ----------- file view
569         public void showPopoverFiles(Gtk.Widget btn, Project.Project? project, bool new_window)
570         {
571                 this.popover_files.show(btn, project, new_window);
572         
573         }
574         
575         
576  
577         public void fileDetailsInit()
578         {
579                 this.file_details = new Xcls_PopoverFileDetails();
580                 this.file_details.mainwindow = this.win;
581                 // force it modal to the main window..
582                 
583                 this.file_details.success.connect((project,file) =>
584                 {
585                         this.fileViewOpen(file, this.file_details.new_window,  -1);
586                         // if it's comming from the file dialog -> hide it...
587                         
588                 });
589
590         }
591         
592         
593         public void gotoLine(int line)
594         {
595         
596                 if (file.xtype == "PlainFile") {
597                     this.switchState (State.CODEONLY); 
598                         if (line> -1) {
599                                 this.code_editor_tab.scroll_to_line(line);
600                         }
601                 } else {
602                 
603                         this.switchState (State.PREVIEW); 
604                          
605                         if (file.project.xtype == "Gtk" && line> -1 ) {
606                                 // fixme - show the editing tab.
607                                 this.window_gladeview.scroll_to_line(line);
608                         } 
609                         // fixme - what about Roo?
610
611                 }
612         
613         }
614         
615         public void fileViewOpen(JsRender.JsRender file, bool new_window, int line = -1)
616         {
617                 var existing = BuilderApplication.getWindow(file);
618                 
619                 if (existing != null) {
620                         existing.el.present();
621                         existing.windowstate.gotoLine(line);
622                         return;
623                 }
624                 
625                 if (new_window) {
626         
627                         this.popover_files.el.hide();
628                         BuilderApplication.newWindow(file, line);
629                         return;
630                 }
631                 
632                 
633                 this.win.project = file.project;
634                 this.project = file.project;
635                 this.file = file;
636                 BuilderApplication.updateWindows();
637                 
638                 if (file.xtype == "PlainFile") {
639                         this.win.codeeditviewbox.el.show();
640                         this.switchState (State.CODEONLY); 
641                         file.loadItems();
642                         this.code_editor_tab.show(file, null, null);
643                          
644                 } else {
645                 
646                         this.switchState (State.PREVIEW); 
647                         // this triggers loadItems..
648                         this.left_tree.model.loadFile(file);
649                          
650
651                 }
652                 this.gotoLine(line);
653         
654                 var ctr= this.win.rooviewbox.el;
655  
656         
657                 if (file.project.xtype == "Roo" ) { 
658                     // removes all the childe elemnts from rooviewbox
659                 
660                         ctr.foreach( (w) => { ctr.remove(w); });
661  
662                         ctr.add(this.window_rooview.el);
663  
664                         if (file.xtype != "PlainFile") {       
665  
666                                 this.window_rooview.loadFile(file);
667                                 this.window_rooview.el.show_all();
668                         }
669  
670                         
671
672                 } else {
673                         ctr.foreach( (w) => { ctr.remove(w); });
674
675                         ctr.add(this.window_gladeview.el);
676  
677                         if (file.xtype != "PlainFile") {    
678                                 
679                                 this.window_gladeview.loadFile(file);
680                                 this.window_gladeview.el.show_all();
681                         }
682  
683                 }
684                 print("OPEN : " + file.name);
685                 if (file.xtype != "PlainFile") { 
686                         // hide the file editor.
687                    this.win.codeeditviewbox.el.hide();
688                         //this.win.editpane.el.set_position(this.win.editpane.el.max_position);
689                 }
690                 this.win.setTitle(file.project.name + " : " + file.name);
691                          
692
693         }
694  
695  
696          /*
697         public void fileViewOpenPlain(string fname)
698         {
699                 
700                 this.switchState (State.CODEONLY); 
701                 this.code_editor.showPlainFile(fname);
702         }
703  */
704          
705         // ---------  webkit view
706         public void webkitViewInit()
707         {
708                 this.window_rooview  =new Xcls_WindowRooView();
709                 this.window_rooview.main_window = this.win;
710                 this.window_rooview.ref();
711                 this.win.rooviewbox.el.add(this.window_rooview.el);
712                 
713                 this.window_rooview.el.show_all();
714                 this.win.rooviewbox.el.hide();
715         
716         }
717
718         // ------ Gtk  - view
719
720         public void gtkViewInit()
721         {
722
723                 
724                 
725                 this.window_gladeview  =new Xcls_GtkView( );
726                 this.window_gladeview.ref();
727                 this.window_gladeview.main_window = this.win;
728  
729         }
730         
731
732         
733         
734         public void showProps(Gtk.Widget btn, JsRender.NodePropType sig_or_listen)
735         {
736                 var ae =  this.left_tree.getActiveElement();
737                 if (ae == null) {
738                                 return;
739                 }
740                 this.rightpalete.hide(); 
741                 
742                 this.add_props.el.show_all(); 
743                 this.add_props.show(
744                         this.win.project.palete, //Palete.factory(this.win.project.xtype), 
745                          sig_or_listen, //this.state == State.LISTENER ? "signals" : "props",
746                         ae.fqn(),
747                         btn
748                         
749                 );
750         }
751         
752         public void showAddObject(Gtk.Widget btn)
753         {
754          
755                  var n = this.left_tree.getActiveElement();
756                 this.add_props.hide();
757                 this.rightpalete.el.show_all();
758                 this.rightpalete.show(
759                         this.left_tree.getActiveFile().palete(), 
760                         n == null ? "*top" : n.fqn(),
761                         btn
762                 );
763         }
764          
765                  
766         
767         public void switchState(State new_state)
768         {
769                 
770                 // if the new state and the old state are the same..
771                 
772                 if (new_state == this.state) {
773                         return;
774                 }
775                 
776                 // anything to do beforehand?
777                 
778                 switch (this.state) {
779                          
780                  
781                         
782                         case State.PREVIEW:
783                                 // stop editing the editor tab.
784                                 // always save before calling switch state to preview?
785                                 
786                                 this.code_editor_tab.reset();
787                                  
788                                 if (this.left_tree.getActiveFile() != null) {
789                                          if (this.left_tree.getActiveFile().xtype == "Roo" ) {
790                                                  this.window_rooview.createThumb();
791                                          } else {
792                                                   this.window_gladeview.createThumb();
793                                           }
794                                 }
795                                 // normally we are going from preview to another state.
796                                 // and different windows hide the preview in differnt ways..
797                                 
798                                 break;
799                                 
800          }
801                          
802                 this.state = new_state;
803                 this.buttonsShowHide();
804                 
805                 switch (this.state) {
806
807                         case State.PREVIEW:  // this is the default state when working...
808                                 this.win.leftpane.el.show();
809                                 this.win.editpane.el.show(); // holder for tree and properties..
810                             this.win.rooviewbox.el.show();
811                                 this.win.codeeditviewbox.el.hide();
812                                 break;
813
814                         case State.CODE:
815                                 this.win.leftpane.el.show();
816                                 this.win.editpane.el.show();
817                                 this.win.rooviewbox.el.hide();
818                                 this.win.codeeditviewbox.el.show();
819                                 this.code_editor_tab.el.show_all();
820                                 break;
821
822                         case State.CODEONLY:
823                                 this.win.leftpane.el.hide();
824                                 this.win.codeeditviewbox.el.show();
825                                 this.win.rooviewbox.el.hide();
826                                 this.code_editor_tab.el.show_all();
827                                 break;
828
829                         case State.NONE:
830                                 break;
831
832                 }
833
834         }
835   
836
837         // -- buttons show hide.....
838
839         public void buttonsShowHide()
840         {
841                 // basically hide everything, then show the relivant..
842
843                 // top bar btns
844                 //this.win.openbtn.el.hide();
845                 //this.win.openbackbtn.el.hide();
846                 
847                 //this.win.backbutton.el.hide();
848                 
849
850                  
851          
852         
853         
854                  
855                 switch (this.state) {
856                         
857                         case State.PREVIEW:  // this is the default state when working...
858                            
859                                  
860                                  
861                                 
862                                  
863                          
864                                 
865                         //      this.win.openbtn.el.show();
866                                 
867                                 break;
868                         
869                         case State.CODEONLY: 
870                         //      this.win.openbtn.el.show();
871                                  
872                                 break;
873                  
874                          
875                  /*
876                         case State.FILES:
877                                 if (this.left_projects.getSelectedProject() != null ) {
878                                         if (this.left_tree.getActiveFile() != null) {
879                                          
880                                                 this.win.openbackbtn.el.show();
881                                         }
882                                         this.win.addfilebutton.el.show();
883                                         this.win.search_entry.el.show();
884                                         this.win.projecteditbutton.el.show(); 
885                                 } 
886                                 
887                                          
888                                 this.win.addprojectbutton.el.show();
889                                 this.win.delprojectbutton.el.show();
890                                 
891                                 
892                                 
893                                 
894                                 break;
895                                 */
896                 }
897                 
898                 
899
900         }
901         
902         
903         public void showCompileResult(Json.Object obj)
904                 {
905                         // vala has finished compiling...
906  
907                         // stop the spinner...
908                         GLib.debug("vala compiled Built Project: %s    Window Project %s",
909                                 
910                         BuilderApplication.valasource.file == null ? "No file?" : (
911                         
912                                 BuilderApplication.valasource.file.project == null  ? "No Project" : BuilderApplication.valasource.file.project.fn
913                         ),
914                         this.project != null ? this.project.fn : "No Project?"
915                         );
916                                 
917                         
918                         
919                         if (this.project != null && 
920                         BuilderApplication.valasource.file != null &&   
921                         BuilderApplication.valasource.file.project != null &&                           
922                             this.project.fn != BuilderApplication.valasource.file.project.fn) {
923                                 GLib.debug("skip update - not our project");
924                                 return;
925                         }
926                         
927                         var generator = new Json.Generator ();
928                         var n  = new Json.Node(Json.NodeType.OBJECT);
929                         n.init_object(obj);
930                         generator.set_root (n);
931                         print("result :%s", generator.to_data (null));
932                         
933                         
934                         var buf = this.code_editor_tab.buffer;
935                         buf.check_running = false;
936                         var has_errors = false;
937                                       
938                         if (obj.has_member("ERR-TOTAL")) {
939                                 if (obj.get_int_member("ERR-TOTAL")> 0) {
940                                         has_errors = true;
941                                 }
942                                  this.win.statusbar_errors.setNotices( obj.get_object_member("ERR") , (int) obj.get_int_member("ERR-TOTAL"));
943                         } else {
944                                  this.win.statusbar_errors.setNotices( new Json.Object() , 0);
945                         }    
946                         
947                         if (obj.has_member("WARN-TOTAL")) {
948
949                                  this.win.statusbar_warnings.setNotices(obj.get_object_member("WARN"), (int) obj.get_int_member("WARN-TOTAL"));
950                         } else {
951                                  this.win.statusbar_warnings.setNotices( new Json.Object() , 0);
952                                  
953                         }
954                         if (obj.has_member("DEPR-TOTAL")) {
955                                 
956                                  this.win.statusbar_depricated.setNotices( obj.get_object_member("DEPR"),  (int) obj.get_int_member("DEPR-TOTAL"));
957                                  
958                         } else {
959                                 this.win.statusbar_depricated.setNotices( new Json.Object(),0);
960                         }
961                         //if (this.state == State.CODE || this.state == State.PROJECTCODEONLY) {
962                         if ( this.state == State.CODEONLY) {
963                                 buf.highlightErrorsJson("ERR", obj); 
964                                 buf.highlightErrorsJson("WARN", obj);
965                                 buf.highlightErrorsJson("DEPR", obj);
966                         }
967                         
968                         this.win.statusbar_compilestatus_label.el.hide();
969                         this.win.statusbar_run.el.hide();
970                         if (!has_errors) { 
971                                 this.win.statusbar_compilestatus_label.el.show();
972                                 this.win.statusbar_run.el.show();
973                         }
974                         if (this.file.xtype == "Gtk") {
975                                 // not sure how this is working ok? - as highlighting is happening on the vala files at present..
976                                 var gbuf =   this.window_gladeview.sourceview;
977                                 gbuf.highlightErrorsJson("ERR", obj);
978                                 gbuf.highlightErrorsJson("WARN", obj);
979                                 gbuf.highlightErrorsJson("DEPR", obj);                  
980                                 
981                                 if (!has_errors) {
982                                         this.win.statusbar_run.el.show();
983                                 }
984                         
985                    }
986                    
987                    if (this.file.xtype == "Roo") {
988                                 // not sure how this is working ok? - as highlighting is happening on the vala files at present..
989                                 var gbuf =   this.window_rooview.sourceview;
990                                 gbuf.highlightErrorsJson("ERR", obj);
991                                 gbuf.highlightErrorsJson("WARN", obj);
992                                 gbuf.highlightErrorsJson("DEPR", obj);                  
993                         
994                    }
995                     
996                         this.last_compile_result = obj;
997                         
998                         
999                 }
1000         
1001 }
1002
1003