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