Fix #7250 - better handling of adding properties
[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 Xcls_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 Xcls_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)
575         {
576                 this.popover_files.show(btn, project);
577         
578         }
579         
580         
581 /*
582         public void fileViewInit()
583         {
584                 var stage = this.win.rooview.el.get_stage(); // seems odd... 
585                 this.clutterfiles = new Xcls_ClutterFiles();
586                 this.clutterfiles.ref();
587                 stage.add_child(this.clutterfiles.el);
588                 this.clutterfiles.el.show();
589
590
591                 this.clutterfiles.open.connect((file) => { 
592                         this.fileViewOpen(file);
593                 });
594                 this.clutterfiles.el.transitions_completed.connect(() => {
595                         if (this.state == State.FILES) {
596                                 this.win.rooview.el.hide();
597                         } else {
598                                 this.clutterfiles.el.hide();
599                         }
600                         
601                         
602                 });
603
604         }
605         */
606  
607         public void fileDetailsInit()
608         {
609                 this.file_details = new Xcls_PopoverFileDetails();
610                 this.file_details.mainwindow = this.win;
611                 // force it modal to the main window..
612                 
613                 this.file_details.success.connect((project,file) =>
614                 {
615                         this.fileViewOpen(file);
616                 });
617
618         }
619         
620         public void fileViewOpen(JsRender.JsRender file, int line = -1)
621         {
622                 this.win.project = file.project;
623                 this.project = file.project;
624                 this.file = file;
625                 
626                 
627                 if (file.xtype == "PlainFile") {
628                         this.win.codeeditviewbox.el.show();
629                         this.switchState (State.CODEONLY); 
630                         file.loadItems();
631                         this.code_editor_tab.show(file, null, null);
632                         if (line> -1) {
633                                 this.code_editor_tab.scroll_to_line(line);
634                         }
635                 } else {
636                 
637                         this.switchState (State.PREVIEW); 
638                         // this triggers loadItems..
639                         this.left_tree.model.loadFile(file);
640                         if (file.project.xtype == "Gtk" && line> -1 ) {
641                                 this.window_gladeview.scroll_to_line(line);
642                         }
643
644                 }
645         
646         
647                 var ctr= this.win.rooviewbox.el;
648  
649         
650                 if (file.project.xtype == "Roo" ) { 
651                     // removes all the childe elemnts from rooviewbox
652                 
653                         ctr.foreach( (w) => { ctr.remove(w); });
654  
655                         ctr.add(this.window_rooview.el);
656  
657                         if (file.xtype != "PlainFile") {       
658  
659                                 this.window_rooview.loadFile(file);
660                                 this.window_rooview.el.show_all();
661                         }
662  
663                         
664
665                 } else {
666                         ctr.foreach( (w) => { ctr.remove(w); });
667
668                         ctr.add(this.window_gladeview.el);
669  
670                         if (file.xtype != "PlainFile") {    
671                                 
672                                 this.window_gladeview.loadFile(file);
673                                 this.window_gladeview.el.show_all();
674                         }
675  
676                 }
677                 print("OPEN : " + file.name);
678                 if (file.xtype != "PlainFile") { 
679                         // hide the file editor.
680                    this.win.codeeditviewbox.el.hide();
681                         //this.win.editpane.el.set_position(this.win.editpane.el.max_position);
682                 }
683                 this.win.setTitle(file.project.name + " : " + file.name);
684                          
685
686         }
687  
688  
689          /*
690         public void fileViewOpenPlain(string fname)
691         {
692                 
693                 this.switchState (State.CODEONLY); 
694                 this.code_editor.showPlainFile(fname);
695         }
696  */
697          
698         // ---------  webkit view
699         public void webkitViewInit()
700         {
701                 this.window_rooview  =new Xcls_WindowRooView();
702                 this.window_rooview.main_window = this.win;
703                 this.window_rooview.ref();
704                 this.win.rooviewbox.el.add(this.window_rooview.el);
705                 
706                 this.window_rooview.el.show_all();
707                 this.win.rooviewbox.el.hide();
708         
709         }
710
711         // ------ Gtk  - view
712
713         public void gtkViewInit()
714         {
715
716                 
717                 
718                 this.window_gladeview  =new Xcls_GtkView( );
719                 this.window_gladeview.ref();
720                 this.window_gladeview.main_window = this.win;
721  
722         }
723         
724
725         
726         
727         public void showProps(Gtk.Widget btn, JsRender.NodePropType sig_or_listen)
728         {
729                 var ae =  this.left_tree.getActiveElement();
730                 if (ae == null) {
731                                 return;
732                 }
733                 this.rightpalete.hide(); 
734                 
735                 this.add_props.el.show_all(); 
736                 this.add_props.show(
737                         this.win.project.palete, //Palete.factory(this.win.project.xtype), 
738                          sig_or_listen, //this.state == State.LISTENER ? "signals" : "props",
739                         ae.fqn(),
740                         btn
741                         
742                 );
743         }
744         
745         public void showAddObject(Gtk.Widget btn)
746         {
747          
748                  var n = this.left_tree.getActiveElement();
749                 this.add_props.hide();
750                 this.rightpalete.el.show_all();
751                 this.rightpalete.show(
752                         this.left_tree.getActiveFile().palete(), 
753                         n == null ? "*top" : n.fqn(),
754                         btn
755                 );
756         }
757         public void showFilesPopover(Gtk.Widget btn)
758         {
759                 this.popover_files.el.show_all();
760                 this.popover_files.show(btn, this.win.project);
761
762         }
763                  
764         
765         public void switchState(State new_state)
766         {
767                 
768                 // if the new state and the old state are the same..
769                 
770                 if (new_state == this.state) {
771                         return;
772                 }
773                 
774                 // anything to do beforehand?
775                 
776                 switch (this.state) {
777                          
778                  
779                         
780                         case State.PREVIEW:
781                                 // stop editing the editor tab.
782                                 // always save before calling switch state to preview?
783                                 
784                                 this.code_editor_tab.reset();
785                                  
786                                 if (this.left_tree.getActiveFile() != null) {
787                                          if (this.left_tree.getActiveFile().xtype == "Roo" ) {
788                                                  this.window_rooview.createThumb();
789                                          } else {
790                                                   this.window_gladeview.createThumb();
791                                           }
792                                 }
793                                 // normally we are going from preview to another state.
794                                 // and different windows hide the preview in differnt ways..
795                                 
796                                 break;
797                                 
798          }
799                          
800                          
801                  
802                                 
803                  
804                 this.state = new_state;
805                 
806                 
807                                 
808                 this.buttonsShowHide();
809                 
810                 
811                 switch (this.state) {
812                         
813                         case State.PREVIEW:  // this is the default state when working...
814                                 this.win.leftpane.el.show();
815                                 this.win.editpane.el.show(); // holder for tree and properties..
816                             this.win.rooviewbox.el.show();
817                                 this.win.codeeditviewbox.el.hide();
818                                 break;
819                                 
820                         case State.CODE:
821                                 this.win.leftpane.el.show();
822                                 this.win.editpane.el.show();
823
824                             this.win.rooviewbox.el.hide();
825                                 this.win.codeeditviewbox.el.show();
826                                 this.code_editor_tab.el.show_all();
827                                 break;
828                    
829                    
830                         case State.CODEONLY:
831                                 
832                                 this.win.leftpane.el.hide();
833                                 this.win.codeeditviewbox.el.show();
834                                 this.win.rooviewbox.el.hide();
835                                 this.code_editor_tab.el.show_all();
836                             break;
837                         
838
839                 }
840
841                 
842         
843                         
844         }
845         
846   
847
848         // -- buttons show hide.....
849
850         public void buttonsShowHide()
851         {
852                 // basically hide everything, then show the relivant..
853
854                 // top bar btns
855                 //this.win.openbtn.el.hide();
856                 //this.win.openbackbtn.el.hide();
857                 
858                 //this.win.backbutton.el.hide();
859                 
860
861                  
862          
863         
864         
865                 this.win.search_entry.el.hide();
866                 this.win.search_results.el.hide();
867                 switch (this.state) {
868                         
869                         case State.PREVIEW:  // this is the default state when working...
870                            
871                                  
872                                  
873                                 
874                                  
875                                 this.win.search_entry.el.show();
876                                 
877                         //      this.win.openbtn.el.show();
878                                 
879                                 break;
880                         
881                         case State.CODEONLY: 
882                         //      this.win.openbtn.el.show();
883                                 this.win.search_entry.el.show();
884                                 break;
885                  
886                          
887                  /*
888                         case State.FILES:
889                                 if (this.left_projects.getSelectedProject() != null ) {
890                                         if (this.left_tree.getActiveFile() != null) {
891                                          
892                                                 this.win.openbackbtn.el.show();
893                                         }
894                                         this.win.addfilebutton.el.show();
895                                         this.win.search_entry.el.show();
896                                         this.win.projecteditbutton.el.show(); 
897                                 } 
898                                 
899                                          
900                                 this.win.addprojectbutton.el.show();
901                                 this.win.delprojectbutton.el.show();
902                                 
903                                 
904                                 
905                                 
906                                 break;
907                                 */
908                 }
909                 
910                 
911
912         }
913         
914         
915         public void showCompileResult(Json.Object obj)
916                 {
917                         // vala has finished compiling...
918                         print("vala compiled");
919                         // stop the spinner...
920  
921                         
922                         var generator = new Json.Generator ();
923                         var n  = new Json.Node(Json.NodeType.OBJECT);
924                         n.init_object(obj);
925                         generator.set_root (n);
926                         print("result :%s", generator.to_data (null));
927                         
928                         
929                         var buf = this.code_editor_tab.buffer;
930                         buf.check_running = false;
931                         var has_errors = false;
932                                       
933                         if (obj.has_member("ERR-TOTAL")) {
934                                 if (obj.get_int_member("ERR-TOTAL")> 0) {
935                                         has_errors = true;
936                                 }
937                                  this.win.statusbar_errors.setNotices( obj.get_object_member("ERR") , (int) obj.get_int_member("ERR-TOTAL"));
938                         } else {
939                                  this.win.statusbar_errors.setNotices( new Json.Object() , 0);
940                         }    
941                         
942                         if (obj.has_member("WARN-TOTAL")) {
943
944                                  this.win.statusbar_warnings.setNotices(obj.get_object_member("WARN"), (int) obj.get_int_member("WARN-TOTAL"));
945                         } else {
946                                  this.win.statusbar_warnings.setNotices( new Json.Object() , 0);
947                                  
948                         }
949                         if (obj.has_member("DEPR-TOTAL")) {
950                                 
951                                  this.win.statusbar_depricated.setNotices( obj.get_object_member("DEPR"),  (int) obj.get_int_member("DEPR-TOTAL"));
952                                  
953                         } else {
954                                 this.win.statusbar_depricated.setNotices( new Json.Object(),0);
955                         }
956                         //if (this.state == State.CODE || this.state == State.PROJECTCODEONLY) {
957                         if ( this.state == State.CODEONLY) {
958                                 buf.highlightErrorsJson("ERR", obj); 
959                                 buf.highlightErrorsJson("WARN", obj);
960                                 buf.highlightErrorsJson("DEPR", obj);
961                         }
962                         
963                         this.win.statusbar_compilestatus_label.el.hide();
964                         this.win.statusbar_run.el.hide();
965                         if (!has_errors) { 
966                                 this.win.statusbar_compilestatus_label.el.show();
967                                 this.win.statusbar_run.el.show();
968                         }
969                         if (this.file.xtype == "Gtk") {
970                                 // not sure how this is working ok? - as highlighting is happening on the vala files at present..
971                                 var gbuf =   this.window_gladeview.sourceview;
972                                 gbuf.highlightErrorsJson("ERR", obj);
973                                 gbuf.highlightErrorsJson("WARN", obj);
974                                 gbuf.highlightErrorsJson("DEPR", obj);                  
975                                 
976                                 if (!has_errors) {
977                                         this.win.statusbar_run.el.show();
978                                 }
979                         
980                    }
981                    
982                    if (this.file.xtype == "Roo") {
983                                 // not sure how this is working ok? - as highlighting is happening on the vala files at present..
984                                 var gbuf =   this.window_rooview.sourceview;
985                                 gbuf.highlightErrorsJson("ERR", obj);
986                                 gbuf.highlightErrorsJson("WARN", obj);
987                                 gbuf.highlightErrorsJson("DEPR", obj);                  
988                         
989                    }
990                     
991                         this.last_compile_result = obj;
992                         
993                         
994                 }
995         
996 }
997
998