resources/Editors/Editor.Roo.grid.Grid.bjs
[app.Builder.js] / src / Builder4 / WindowState.vala
index 3e9fb82..359677b 100644 (file)
@@ -10,6 +10,7 @@ public class WindowState : Object
     public Xcls_MainWindow win;
 
     public enum State {
+       NONE,
         PREVIEW,
         OBJECT,
         PROP,
@@ -19,7 +20,7 @@ public class WindowState : Object
         PROJECT // project settings..
     }
 
-    public State state;
+    public State state = State.NONE;
 
     public bool children_loaded = false;
 
@@ -33,39 +34,48 @@ public class WindowState : Object
     public Editor               code_editor;    
     public Xcls_WindowRooView   window_rooview;
     public Xcls_GtkView         window_gladeview;
-    public Xcls_DialogNewComponent new_file_dialog;     
+    public Xcls_DialogNewComponent new_file_dialog;
+    public Xcls_ClutterFiles     clutterfiles;
 
     public Xcls_WindowLeftProjects left_projects; // can not see where this is initialized.. 
+    
+    public DialogTemplateSelect template_select; 
+    
+    // dialogs??
+    public Xcls_DialogPluginWebkit webkit_plugin;
+    
     // ctor 
     public WindowState(Xcls_MainWindow win)
     {
-        this.win = win;
-        // initialize
-
-        // left elements..
-        this.leftTreeInit();
-        this.propsListInit();
-
-        // on clutter space...
-        this.projectEditInit();
-        this.codeEditInit();
-        this.projectListInit();
-        this.fileViewInit();
-        
-        // adding stuff
-        this.objectAddInit();
-        this.propsAddInit();
-     
-        
-        // previews...
-        this.gtkViewInit();
-        this.webkitViewInit();
+               this.win = win;
+               // initialize
+
+               // left elements..
+               this.leftTreeInit();
+               this.propsListInit();
 
-        // dialogs
+               // on clutter space...
+               this.projectEditInit();
+               this.codeEditInit();
+               this.projectListInit();
+               this.fileViewInit();
 
-        this.fileNewInit();
+               // adding stuff
+               this.objectAddInit();
+               this.propsAddInit();
 
-        this.children_loaded = true;
+
+               // previews...
+               this.gtkViewInit();
+               this.webkitViewInit();
+
+               // dialogs
+
+               this.fileNewInit();
+
+               this.webkit_plugin = new Xcls_DialogPluginWebkit();
+               this.template_select = new DialogTemplateSelect();
+               this.children_loaded = true;
     }
 
 
@@ -97,7 +107,7 @@ public class WindowState : Object
          
     }
 
-    public bool leftTreeBeforeChange(JsRender.Node? sel)
+    public bool leftTreeBeforeChange()
     {
         if (this.state != State.CODE) {
             this.left_props.finish_editing();
@@ -145,14 +155,13 @@ public class WindowState : Object
                     this.add_props.clear();
                     break;
                 }
-                this.add_props.show(_this.left_tree.getActiveFile().palete(), "signals", sel.fqn());
+                this.add_props.show(this.left_tree.getActiveFile().palete(), "signals", sel.fqn());
                 break;
                 
             case State.CODE:
-            // SAVE FIRST???
-                this.switchState(State.PREVIEW);
-                this.codeEditHide();
-            break;
+                 this.switchState(State.PREVIEW);
+             
+                break;
                
                             
         }
@@ -168,17 +177,25 @@ public class WindowState : Object
     
         this.left_props =new Xcls_LeftProps();
         this.left_props.ref();
-        this.left_props.main_window = _this;
+        this.left_props.main_window = this.win;
         this.win.props.el.pack_start(this.left_props.el,true, true,0);
         this.left_props.el.show_all();
     
         this.left_props.show_editor.connect( (file, node, type,  key) => {
-            this.codeEditShow(file, node, type,  key);
+            this.switchState(State.CODE);
+            this.code_editor.show(
+                file,
+                node,
+                type,
+                key
+            );
+            
+            
         });
 
-    
+   
         this.left_props.stop_editor.connect( () => {
-            if (this.state != "codeedit") {
+            if (this.state != State.CODE) {
                 return true;
             }
     
@@ -186,7 +203,7 @@ public class WindowState : Object
             if (!ret) {
                 return false;
             }
-            this.codeEditHide();
+            this.switchState(State.PREVIEW);
             return ret;
         });
     
@@ -214,7 +231,7 @@ public class WindowState : Object
     
         this.vala_projectsettings  =new ValaProjectSettings();
         this.vala_projectsettings.ref();
-        this.vala_projectsettings.window = this;
+        this.vala_projectsettings.window = this.win;
     
         ((Gtk.Container)(this.win.projecteditview.el.get_widget())).add(this.projectsettings.el);
         //this.projectsettings.el.show_all();
@@ -238,8 +255,7 @@ public class WindowState : Object
                 this.win.project.save();
          
             }
-            
-            this.projectEditHide();
+            this.switchState (State.PREVIEW); 
              
          });
 
@@ -253,7 +269,7 @@ public class WindowState : Object
         ((Gtk.Container)(this.win.objectview.el.get_widget())).add(this.rightpalete.el);
         //this.projectsettings.el.show_all();
 
-        stage = _this.win.objectview.el.get_stage();
+        var stage = this.win.objectview.el.get_stage();
         stage.set_background_color(  Clutter.Color.from_string("#000"));
            
     }
@@ -268,7 +284,7 @@ public class WindowState : Object
         ((Gtk.Container)(this.win.addpropsview.el.get_widget())).add(this.add_props.el);
         //this.projectsettings.el.show_all();
 
-        var  stage = _this.win.addpropsview.el.get_stage();
+        var  stage = this.win.addpropsview.el.get_stage();
         stage.set_background_color(  Clutter.Color.from_string("#000"));
 
 
@@ -310,7 +326,7 @@ public class WindowState : Object
         ((Gtk.Container)(this.win.codeeditview.el.get_widget())).add(this.code_editor.el);
         //this.projectsettings.el.show_all();
 
-        stage = _this.win.codeeditview.el.get_stage();
+        var stage = this.win.codeeditview.el.get_stage();
         stage.set_background_color(  Clutter.Color.from_string("#000"));
         // editor.save...
 
@@ -350,13 +366,22 @@ public class WindowState : Object
         this.clutterfiles.open.connect((file) => { 
             this.fileViewOpen(file);
         });
+        this.clutterfiles.el.transitions_completed.connect(() => {
+            if (this.state == State.FILES) {
+                this.win.rooview.el.hide();
+            } else {
+                this.clutterfiles.el.hide();
+            }
+            
+            
+        });
 
     }
     public void fileNewInit()
     {
         this.new_file_dialog = new Xcls_DialogNewComponent();
         // force it modal to the main window..
-        this.new_file_dialog.el.set_transient_for(this.el);
+        this.new_file_dialog.el.set_transient_for(this.win.el);
         this.new_file_dialog.el.set_modal(true);
     
         this.new_file_dialog.success.connect((project,file) =>
@@ -370,8 +395,9 @@ public class WindowState : Object
     public void fileViewOpen(JsRender.JsRender file)
     {
         this.win.project = file.project;
-        this.previewShow();
-            this.left_tree.model.loadFile(file);
+       this.switchState (State.PREVIEW); 
+       
+        this.left_tree.model.loadFile(file);
     
         var ctr= ((Gtk.Container)(this.win.rooview.el.get_widget()));
         var ctr_p= ((Gtk.Container)(this.win.projecteditview.el.get_widget()));
@@ -395,7 +421,7 @@ public class WindowState : Object
             this.vala_projectsettings.el.show_all();
         }
         print("OPEN : " + file.name);
-        this.editpane.el.set_position(_this.editpane.el.max_position);
+        this.win.editpane.el.set_position(this.win.editpane.el.max_position);
         this.win.setTitle(file.project.name + " : " +file.name);
              
 
@@ -410,7 +436,7 @@ public class WindowState : Object
         ((Gtk.Container)(this.win.rooview.el.get_widget())).add(this.window_rooview.el);
         this.window_rooview.el.show_all();
 
-        stage = this.win.rooview.el.get_stage();
+        var stage = this.win.rooview.el.get_stage();
         stage.set_background_color(  Clutter.Color.from_string("#000"));
     }
 
@@ -421,11 +447,32 @@ public class WindowState : Object
         this.window_gladeview  =new Xcls_GtkView();
         this.window_gladeview.ref();
     }
-
+    
+    public void easingSaveAll()
+    {
+        this.win.addpropsview.el.save_easing_state();
+        this.win.codeeditview.el.save_easing_state();
+        this.win.objectview.el.save_easing_state();
+        this.win.projecteditview.el.save_easing_state();
+        this.win.rooview.el.save_easing_state();
+        this.clutterfiles.el.save_easing_state();
+         
+    }
+    public void easingRestoreAll()
+    {
+        this.win.addpropsview.el.restore_easing_state();
+        this.win.codeeditview.el.restore_easing_state();
+        this.win.objectview.el.restore_easing_state();
+        this.win.projecteditview.el.restore_easing_state();
+        this.win.rooview.el.restore_easing_state();
+        this.clutterfiles.el.restore_easing_state();
+        
+    }
     public void switchState(State new_state)
     {
         
-
+        // save the easing state of everything..
+        this.easingSaveAll();
         
         switch (this.state) {
 
@@ -444,67 +491,92 @@ public class WindowState : Object
             
            case State.LISTENER:
            case State.PROP:
-                this.win.addpropsview.el.save_easing_state();
+                
                 this.win.addpropsview.el.set_scale(0.0f,0.0f);
-                this.win.addpropsview.el.restore_easing_state();   
-                break;
+                 break;
                 
             case State.CODE:
 
 
                 this.code_editor.saveContents();
-                this.win.codeeditview.el.save_easing_state();
+              
                 this.win.codeeditview.el.set_scale(0.0f,0.0f);
-                this.win.codeeditview.el.restore_easing_state();    
-                break;
+                 break;
 
 
              case State.OBJECT:
-                this.win.objectview.el.save_easing_state();
+               
                 this.win.objectview.el.set_scale(0.0f,0.0f);
-                this.win.objectview.el.restore_easing_state();    
-                break;
+                 break;
 
            case State.PROJECT:
-                this.win.projecteditview.el.save_easing_state();
+                if (this.win.project.xtype == "Gtk") {
+                    this.vala_projectsettings.save();
+                } 
+                
                 this.win.projecteditview.el.set_scale(0.0f,0.0f);
-                this.win.projecteditview.el.restore_easing_state();    
-                break;
+                 break;
 
-          case State.FILES:       
-                this.win.rooview.el.save_easing_state();
+          case State.FILES:
+                // hide files...
+                
+                this.win.rooview.el.show_all();
+                this.win.rooview.el.set_easing_duration(1000);
                 this.win.rooview.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 0.0f);
                 this.win.rooview.el.set_scale(1.0f,1.0f);
-                this.win.rooview.el.restore_easing_state();  
+                this.win.rooview.el.set_pivot_point(0.5f,0.5f);
+                this.win.rooview.el.set_opacity(0xff);
+               
+                
+               
+                 this.clutterfiles.el.set_easing_duration(1000);
+                this.clutterfiles.el.set_pivot_point(0.5f,0.5f);
+                this.clutterfiles.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, -180.0f);
+                this.clutterfiles.el.set_opacity(0);
+                //this.clutterfiles.el.hide();
+                 
 
-                 this.win.clutterfiles.el.hide();
                 break;
 
                 
         }
-        
+       
         var oldstate  =this.state;
         this.state = new_state;
-
+        
+        
                 
-        this.buttonShowHide();
+        this.buttonsShowHide();
+        
         
         switch (this.state) {
             
             case State.PREVIEW:  // this is the default state when working...
-                 this.win.rooview.el.save_easing_state();
-                 this.win.rooview.el.set_scale(1.0f,1.0f);
-                 this.win.rooview.el.restore_easing_state();
+                 this.win.editpane.el.show(); // holder for tree and properties..
+                 
+             
+                 this.left_projects.el.hide(); 
+                 if (oldstate != State.FILES) {
+                    // it's handled above..
+                    print ("changing state to preview from NOT files..");
+                     
+                    this.win.rooview.el.set_scale(1.0f,1.0f);
+                 }
                
                 break;
 
 
             case State.LISTENER:
+               // same as prop?
             case State.PROP:
                 var ae =      this.left_tree.getActiveElement();
                 if (ae == null) {
-                    this.state = this.oldstate;
-                    this.buttonShowHide();
+                    this.state = oldstate;
+                    this.buttonsShowHide();
+                    this.resizeCanvasElements();
+                    this.easingRestoreAll();
                     return;
                 }
                 this.add_props.el.show_all();
@@ -516,78 +588,71 @@ public class WindowState : Object
  
                     
  
-                this.win.rooview.el.save_easing_state();
-                // -- FIXME? this needs to be State aware?
-                this.resizeCanvasElementsA();
-                this.win.rooview.el.restore_easing_state();
                 
-              
-                this.win.addpropsview.el.save_easing_state();
+                // -- FIXME? this needs to be State aware?
+         
+                this.win.rooview.el.set_pivot_point(1.0f,0.5f);
+                  
                 this.win.addpropsview.el.set_scale(1.0f,1.0f);
-                this.win.addpropsview.el.restore_easing_state();
-                 
-                
-            case State.CODE:
-
-                this.code_editor.el.show_all();
-                
-                // caller needs to call editor - show....
-                this.win.rooview.el.save_easing_state();
-                this.resizeCanvasElementsA();
-                this.win.rooview.el.restore_easing_state();
-                
-                this.win.codeeditview.el.save_easing_state();
-                this.win.codeeditview.el.set_scale(1.0f,1.0f);
-                this.win.codeeditview.el.restore_easing_state();    
-                break;
-
-
-             case State.OBJECT:
-                 var n = _this.left_tree.getActiveElement();
+                 break;
+           
+            case State.OBJECT:
+                 var n = this.left_tree.getActiveElement();
 
-                if (_this.left_tree.model.file == null) {
-                    this.state = this.oldstate;
-                    this.buttonShowHide();
+                if (this.left_tree.model.file == null) {
+                    this.state =oldstate;
+                    this.buttonsShowHide();
+                    this.resizeCanvasElements();
+                    this.easingRestoreAll();
                     return;
                 }
                 
-                if (n == null && _this.left_tree.model.file.tree != null) {
-                    this.state = this.oldstate;
-                    this.buttonShowHide();
+                if (n == null && this.left_tree.model.file.tree != null) {
+                    this.state = oldstate;
+                    this.buttonsShowHide();
+                    this.resizeCanvasElements();
+                    this.easingRestoreAll();
                     return;
                 }
 
                 this.rightpalete.el.show_all();
-                this.rightpalete.load(_this.left_tree.getActiveFile().palete(), n == null ? "*top" : n.fqn());
-
-                this.win.rooview.el.save_easing_state();
-                this.resizeCanvasElementsA();
-                this.win.rooview.el.restore_easing_state();
+                this.rightpalete.load(this.left_tree.getActiveFile().palete(), n == null ? "*top" : n.fqn());
 
                 
-                this.win.objectview.el.save_easing_state();
-                this.win.objectview.el.sset_scale(1.0f,1.0f);
-                this.win.objectview.el.restore_easing_state();    
+              
+            
+                this.win.objectview.el.set_scale(1.0f,1.0f);
+                 
                 break;
+              
+              
+            case State.CODE:
+
+                this.code_editor.el.show_all();
+                
+                // caller needs to call editor - show....
+                  
+                 this.win.codeeditview.el.set_scale(1.0f,1.0f);
+                 break;
+
+
 
            case State.PROJECT:
 
-             if (this.win.project.xtype == "Roo") {
+               if (this.win.project.xtype == "Roo") {
                     this.projectsettings.el.show_all();
-                    this.projectsettings.show(this.project);
+                    this.projectsettings.show(this.win.project);
                 } else {
                     this.vala_projectsettings.el.show_all();
-                    this.vala_projectsettings.show((Project.Gtk)this.project);
+                    this.vala_projectsettings.show((Project.Gtk)this.win.project);
                 }
 
-                 this.win.rooview.el.save_easing_state();
-                this.resizeCanvasElementsA();
-                this.win.rooview.el.restore_easing_state();
-
-                this.win.projecteditview.el.save_easing_state();
-                this.win.projecteditview.el.set_scale(0.0f,0.0f);
-                this.win.projecteditview.el.restore_easing_state();    
+                this.win.rooview.el.set_pivot_point(1.0f,1.0f); // bottom right..
+                
+                this.win.projecteditview.el.set_scale(1.0f,1.0f);
+                
+               
                 break;
                 
            case State.FILES:  // can only get here from PREVIEW state.. in theory..
@@ -597,28 +662,137 @@ public class WindowState : Object
              
                 this.left_projects.el.show(); 
             
-                var el = this.win.rooview.el;
-                el.save_easing_state();
-                el.set_easing_duration(1000);
-
-                el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 360.0f);
-                el.set_scale(0.0f,0.0f);
+                 this.win.rooview.el.set_easing_duration(1000);
+                this.win.rooview.el.set_pivot_point(0.5f,0.5f);
+                this.win.rooview.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 180.0f);
+                this.win.rooview.el.set_opacity(0);
+                //el.set_scale(0.0f,0.0f);
 
  
                 if (this.win.project != null) {
-                    this.left_projects.selectProject(_this.project);
+                    this.left_projects.selectProject(this.win.project);
                 }
              
-                el.restore_easing_state();
+                
+                this.clutterfiles.el.show_all();
+                 
+                this.clutterfiles.el.set_easing_duration(1000);
+                this.clutterfiles.el.set_pivot_point(0.5f,0.5f);
+                this.clutterfiles.el.set_rotation_angle(Clutter.RotateAxis.Y_AXIS, 0.0f);
+                this.clutterfiles.el.set_opacity(0xff);
+                
+                
                 
                 break;
 
 
         }
-
+        this.resizeCanvasElements();
+        this.easingRestoreAll();
+        
             
     }
     
+    public int redraw_count = 0;
+    public void resizeCanvas() // called by window resize .. delays redraw
+    {
+        var rc = this.redraw_count;        
+        this.redraw_count = 2;
+        if (rc == 0) {
+            GLib.Timeout.add(100,  ()  =>{
+                 return this.resizeCanvasQueue();
+            });
+        }
+    }
+    public bool  resizeCanvasQueue()
+    {
+        //print("WindowState.resizeCanvasQueue %d\n", this.redraw_count);        
+
+        if (this.redraw_count < 1) {
+            return false; // should not really happen...
+        }
+
+
+        this.redraw_count--;
+
+        if (this.redraw_count > 0) {
+            return true; // do it again in 1 second...
+        }
+        // got down to 0 or -1....
+        this.redraw_count = 0;
+        this.resizeCanvasElements();
+        return false;
+
+    }
+    public void resizeCanvasElements()
+    {
+        Gtk.Allocation alloc;
+        this.win.clutterembed.el.get_allocation(out alloc);
+
+          // print("WindowState.resizeCanvasElements\n");
+           if (!this.children_loaded || this.win.clutterembed == null) {
+               print("WindowState.resizeCanvasElements = ingnore not loaded or no clutterfiles\n");
+            return; 
+        }
+           
+        var avail = alloc.width < 50.0f ? 0 :  alloc.width - 50.0f;
+        var palsize = avail < 300.0f ? avail : 300.0f;
+           
+        // -------- code edit min 600
+        
+        var codesize = avail < 800.0f ? avail : 800.0f;
+        
+        
+        //print("set code size %f\n", codesize);
+
+            
+        
+        switch ( this.state) {
+            case State.PREVIEW:
+                this.win.rooview.el.set_size(alloc.width-50, alloc.height);
+                break;
+    
+            case State.FILES: 
+                this.clutterfiles.set_size(alloc.width-50, alloc.height);
+                break;
+
+            case State.PROJECT:
+            
+                this.win.projecteditview.el.set_size(alloc.width-50, alloc.height / 2.0f);
+               
+               // this.win.rooview.el.save_easing_state();
+                //this.win.rooview.el.set_size(alloc.width / 2.0f, alloc.height / 2.0f);
+                this.win.rooview.el.set_scale(0.5f, 0.5f);
+                //this.win.rooview.el.restore_easing_state();
+                break;
+
+            case State.CODE: 
+                this.win.codeeditview.el.set_size(codesize, alloc.height);
+                var scale = avail > 0.0f ? (avail - codesize -10 ) / avail : 0.0f;
+                   //this.win.rooview.el.save_easing_state();
+                 
+                this.win.rooview.el.set_scale(scale,scale);
+               // this.win.rooview.el.restore_easing_state();
+                break;
+                
+            case State.PROP:
+            case State.LISTENER:
+                 this.win.addpropsview.el.set_size(palsize, alloc.height);
+                var scale = avail > 0.0f ? (avail - palsize -10 ) / avail : 0.0f;
+                this.win.rooview.el.set_scale(scale,scale);
+                break;
+                
+            case State.OBJECT:  
+                this.win.objectview.el.set_size(palsize, alloc.height);    
+                var scale = avail > 0.0f ? (avail - palsize -10 ) / avail : 0.0f;
+                //this.win.rooview.el.save_easing_state();
+                this.win.rooview.el.set_scale(scale,scale);
+               // this.win.rooview.el.restore_easing_state();
+                break;
+        }
+    }
+
     // -- buttons show hide.....
 
     public void buttonsShowHide()
@@ -642,7 +816,7 @@ public class WindowState : Object
         this.win.addfilebutton.el.hide();
         this.win.delprojectbutton.el.hide();
         this.win.new_window.el.hide();
-
+        this.win.reload_resources.el.hide();
         
         switch (this.state) {
             
@@ -669,7 +843,13 @@ public class WindowState : Object
                 this.win.addpropbutton.el.show();  
                 this.win.addlistenerbutton.el.show(); 
                 break;
-                
+            
+            case State.PROJECT: 
+                // anything else?
+                this.win.backbutton.el.show();
+                break;
+            
+    
             case State.FILES:
                 this.win.backbutton.el.show();
                      
@@ -677,65 +857,13 @@ public class WindowState : Object
                 this.win.addfilebutton.el.show();
                 this.win.delprojectbutton.el.show();
                 this.win.new_window.el.show();
+                this.win.reload_resources.el.show();
                 break;
         }
 
     }
-    public void resizeCanvasElementsA()
-    {
-        Gtk.Allocation alloc;
-        this.win.cluttermebed.get_allocation(out alloc);
-        this.resizeCanvasElements(alloc);
-    }
-    public void resizeCanvasElements(Gtk.Allocation alloc)
-    {
-        if (!_this.children_loaded) { 
-            return; 
-        }
-     
-        this.win.clutterfiles.set_size(alloc.width-50, alloc.height);
-        
-        // ------- project view appears at top...
-        this.win.projecteditview.el.set_size(alloc.width-50, alloc.height / 2.0f);
-               
-        // ------- add property/object left - max 300px, min 50... (or disapear..)     
-        
-        var avail = alloc.width < 50.0f ? 0 :  alloc.width - 50.0f;
-        var palsize = avail < 300.0f ? avail : 300.0f;
-        //print("set palsize size %f\n", palsize);
-        // palate / props : fixed 300 pix
-                
-        this.win.objectview.el.set_size(palsize, alloc.height);    
-        this.win.addpropsview.el.set_size(palsize, alloc.height);
-        
-         
-        
-        // -------- code edit min 600
-        
-        var codesize = avail < 800.0f ? avail : 800.0f;
-        //print("set code size %f\n", codesize);
-
-        this.win.codeeditview.el.set_size(codesize, alloc.height);
-        this.win.rooview.el.set_size(alloc.width-50, alloc.height);    
-
-
-        
-        switch ( this.state) {
-            case State.CODE: 
-                var scale = avail > 0.0f ? (avail - codesize -10 ) / avail : 0.0f;
-                   this.win.rooview.el.set_scale(scale,scale);
-                break;
-                
-            case State.PROP:
-            case State.LISTENER:        
-            case State.OBJECT:   
-                   var scale = avail > 0.0f ? (avail - palsize -10 ) / avail : 0.0f;
-                this.win.rooview.el.set_scale(scale,scale);
-                break;
-        }
-    }
 
     
 }
 
-    
\ No newline at end of file
+