resources/RooUsage.txt
[app.Builder.js] / src / Builder4 / PopoverFileDetails.vala
index 94a651b..9bfab0a 100644 (file)
@@ -12,6 +12,7 @@ public class Xcls_PopoverFileDetails : Object
         }
         return _PopoverFileDetails;
     }
+    public Xcls_grid grid;
     public Xcls_filetypelbl filetypelbl;
     public Xcls_filetype filetype;
     public Xcls_ftdbcellrenderer ftdbcellrenderer;
@@ -25,6 +26,9 @@ public class Xcls_PopoverFileDetails : Object
     public Xcls_build_module build_module;
     public Xcls_dbcellrenderer dbcellrenderer;
     public Xcls_dbmodel dbmodel;
+    public Xcls_dir dir;
+    public Xcls_dircellrenderer dircellrenderer;
+    public Xcls_dirmodel dirmodel;
     public Xcls_save_btn save_btn;
 
         // my vars (def)
@@ -109,18 +113,10 @@ public class Xcls_PopoverFileDetails : Object
         
         
         
-        _this.ftdbmodel.loadData("bjs"); // fixme - need to determine type..
-        _this.filetype.el.hide();
-        _this.filetypelbl.el.hide();
         
         
-        if (c.path.length > 0) {
-           this.save_btn.el.set_label("Save");
-        } else {
-            this.save_btn.el.set_label("Create");
-           _this.filetype.el.show();
-           _this.filetypelbl.el.show();
-        }
+        
+        
         
          var ar = new Gee.ArrayList<string>();
          _this.dbmodel.loadData(ar,"");
@@ -154,6 +150,21 @@ public class Xcls_PopoverFileDetails : Object
         this.el.show_all();
         this.name.el.grab_focus();
         
+        
+        
+        if (c.path.length > 0) {
+           this.save_btn.el.set_label("Save");
+               _this.filetype.el.hide();
+               _this.filetypelbl.el.hide();
+               _this.filetype.showhide(true); // as we only work on bjs files currently
+        } else {
+            this.save_btn.el.set_label("Create");
+            _this.ftdbmodel.loadData("bjs"); // fixme - need to determine type..
+           _this.filetype.el.show();
+           _this.filetypelbl.el.show();
+        }
+        
+        
         //this.success = c.success;
         
         
@@ -179,10 +190,10 @@ public class Xcls_PopoverFileDetails : Object
             var child_0 = new Xcls_HeaderBar3( _this );
             child_0.ref();
             this.el.pack_start (  child_0.el , false,true,0 );
-            var child_1 = new Xcls_Grid4( _this );
+            var child_1 = new Xcls_grid( _this );
             child_1.ref();
             this.el.pack_start (  child_1.el , false,false,4 );
-            var child_2 = new Xcls_HButtonBox25( _this );
+            var child_2 = new Xcls_HButtonBox29( _this );
             child_2.ref();
             this.el.pack_end (  child_2.el , false,true,0 );
         }
@@ -212,7 +223,7 @@ public class Xcls_PopoverFileDetails : Object
         // user defined functions
     }
 
-    public class Xcls_Grid4 : Object
+    public class Xcls_grid : Object
     {
         public Gtk.Grid el;
         private Xcls_PopoverFileDetails  _this;
@@ -221,9 +232,10 @@ public class Xcls_PopoverFileDetails : Object
             // my vars (def)
 
         // ctor
-        public Xcls_Grid4(Xcls_PopoverFileDetails _owner )
+        public Xcls_grid(Xcls_PopoverFileDetails _owner )
         {
             _this = _owner;
+            _this.grid = this;
             this.el = new Gtk.Grid();
 
             // my vars (dec)
@@ -246,40 +258,46 @@ public class Xcls_PopoverFileDetails : Object
             this.el.attach (  child_3.el , 1,1,1,1 );
             var child_4 = new Xcls_Label11( _this );
             child_4.ref();
-            this.el.attach (  child_4.el , 0,0,1,1 );
+            this.el.attach (  child_4.el , 0,2,1,1 );
             var child_5 = new Xcls_title( _this );
             child_5.ref();
-            this.el.attach (  child_5.el , 1,2,2,3 );
+            this.el.attach (  child_5.el , 1,2,1,1 );
             var child_6 = new Xcls_Label13( _this );
             child_6.ref();
-            this.el.attach (  child_6.el , 0,1,3,4 );
+            this.el.attach (  child_6.el , 0,3,1,1 );
             var child_7 = new Xcls_region( _this );
             child_7.ref();
-            this.el.attach (  child_7.el , 1,2,3,4 );
+            this.el.attach (  child_7.el , 1,3,1,1 );
             var child_8 = new Xcls_Label15( _this );
             child_8.ref();
-            this.el.attach (  child_8.el , 0,1,4,5 );
+            this.el.attach (  child_8.el , 0,4,1,1 );
             var child_9 = new Xcls_parent( _this );
             child_9.ref();
-            this.el.attach (  child_9.el , 1,2,4,5 );
+            this.el.attach (  child_9.el , 1,4,1,1 );
             var child_10 = new Xcls_Label17( _this );
             child_10.ref();
-            this.el.attach (  child_10.el , 0,1,5,6 );
+            this.el.attach (  child_10.el , 0,5,1,1 );
             var child_11 = new Xcls_permname( _this );
             child_11.ref();
-            this.el.attach_defaults (  child_11.el , 1,2,5,6 );
+            this.el.attach (  child_11.el , 1,5,1,1 );
             var child_12 = new Xcls_Label19( _this );
             child_12.ref();
-            this.el.attach_defaults (  child_12.el , 0,1,6,7 );
+            this.el.attach (  child_12.el , 0,6,1,1 );
             var child_13 = new Xcls_modOrder( _this );
             child_13.ref();
-            this.el.attach_defaults (  child_13.el , 1,2,6,7 );
+            this.el.attach (  child_13.el , 1,6,1,1 );
             var child_14 = new Xcls_Label21( _this );
             child_14.ref();
-            this.el.attach_defaults (  child_14.el , 0,1,7,8 );
+            this.el.attach (  child_14.el , 0,7,1,1 );
             var child_15 = new Xcls_build_module( _this );
             child_15.ref();
-            this.el.attach_defaults (  child_15.el , 1,2,7,8 );
+            this.el.attach (  child_15.el , 1,7,1,1 );
+            var child_16 = new Xcls_Label25( _this );
+            child_16.ref();
+            this.el.attach (  child_16.el , 0,8 );
+            var child_17 = new Xcls_dir( _this );
+            child_17.ref();
+            this.el.attach (  child_17.el , 1,8 );
         }
 
         // user defined functions
@@ -337,9 +355,57 @@ public class Xcls_PopoverFileDetails : Object
             // init method
 
             this.el.add_attribute(_this.ftdbcellrenderer.el , "markup", 1 );
+
+            //listeners
+            this.el.changed.connect( () => {
+               Gtk.TreeIter iter;
+               bool is_bjs = true;
+               if (this.el.get_active_iter(out iter)) {
+                       Value vfname;
+                       _this.ftdbmodel.el.get_value (iter, 0, out vfname);
+                        is_bjs = ((string)vfname) == "bjs";
+               }
+                
+              
+                // directory is only available for non-bjs 
+                this.showhide(is_bjs);
+            
+            
+            });
         }
 
         // user defined functions
+        public void showhide (bool is_bjs) {
+               for (var i = 2; i < 9;i++) {
+                       var el = _this.grid.el.get_child_at(0,i);
+                       
+                       var showhide= is_bjs;
+                       if (i> 7) {
+                               showhide = !showhide;
+                       }
+                       
+                       if (showhide) {
+                          el.show();
+                       } else {
+                               el.hide();
+                       }
+                        el = _this.grid.el.get_child_at(1,i);
+                       if (showhide) {
+                          el.show();
+                       } else {
+                               el.hide();
+                       }     
+            }
+            // load up the directories
+            //??? why can we not create bjs files in other directories??
+               if (!is_bjs && _this.file.path.length < 1) {
+                       _this.dirmodel.loadData();
+                       
+                       
+               }
+           
+            
+        }
     }
     public class Xcls_ftdbcellrenderer : Object
     {
@@ -867,8 +933,155 @@ public class Xcls_PopoverFileDetails : Object
     }
 
 
+    public class Xcls_Label25 : Object
+    {
+        public Gtk.Label el;
+        private Xcls_PopoverFileDetails  _this;
+
+
+            // my vars (def)
+
+        // ctor
+        public Xcls_Label25(Xcls_PopoverFileDetails _owner )
+        {
+            _this = _owner;
+            this.el = new Gtk.Label( "Directory" );
+
+            // my vars (dec)
+
+            // set gobject values
+            this.el.justify = Gtk.Justification.RIGHT;
+            this.el.xalign = 0.900000f;
+            this.el.visible = true;
+        }
+
+        // user defined functions
+    }
+
+    public class Xcls_dir : Object
+    {
+        public Gtk.ComboBox el;
+        private Xcls_PopoverFileDetails  _this;
+
+
+            // my vars (def)
+
+        // ctor
+        public Xcls_dir(Xcls_PopoverFileDetails _owner )
+        {
+            _this = _owner;
+            _this.dir = this;
+            this.el = new Gtk.ComboBox();
+
+            // my vars (dec)
+
+            // set gobject values
+            var child_0 = new Xcls_dircellrenderer( _this );
+            child_0.ref();
+            this.el.pack_start (  child_0.el , true );
+            var child_1 = new Xcls_dirmodel( _this );
+            child_1.ref();
+            this.el.set_model (  child_1.el  );
+
+            // init method
+
+            this.el.add_attribute(_this.dircellrenderer.el , "markup", 1 );
+        }
+
+        // user defined functions
+    }
+    public class Xcls_dircellrenderer : Object
+    {
+        public Gtk.CellRendererText el;
+        private Xcls_PopoverFileDetails  _this;
+
+
+            // my vars (def)
+
+        // ctor
+        public Xcls_dircellrenderer(Xcls_PopoverFileDetails _owner )
+        {
+            _this = _owner;
+            _this.dircellrenderer = this;
+            this.el = new Gtk.CellRendererText();
+
+            // my vars (dec)
+
+            // set gobject values
+        }
+
+        // user defined functions
+    }
+
+    public class Xcls_dirmodel : Object
+    {
+        public Gtk.ListStore el;
+        private Xcls_PopoverFileDetails  _this;
+
+
+            // my vars (def)
+
+        // ctor
+        public Xcls_dirmodel(Xcls_PopoverFileDetails _owner )
+        {
+            _this = _owner;
+            _this.dirmodel = this;
+            this.el = new Gtk.ListStore( 2, typeof(string),typeof(string) );
+
+            // my vars (dec)
+
+            // set gobject values
+        }
+
+        // user defined functions
+        public void loadData () {
+               
+               
+          
+            this.el.clear();                                    
+            
+            if (!(_this.project is Project.Gtk)) {
+                       return;
+               }
+            var sd = ((Project.Gtk)_this.project).sourcedirs();
+            
+            Gtk.TreeIter iter;
+            var el = this.el;
+            
+           /// el.append(out iter);
+            
+             
+           // el.set_value(iter, 0, "");
+           // el.set_value(iter, 1, "aaa  - Just add Element - aaa");
+        
+        //    el.append(out iter);
+        
+            
+        //    el.set_value(iter, 0, "");
+          //  el.set_value(iter, 1, "-- select a directoyr --");
+            //_this.build_module.el.set_active_iter(iter);
+            
+            for (var i = 0; i < sd.length;i++) {
+            
+        
+                el.append(out iter);
+                
+                el.set_value(iter, 0, sd[i]);
+                el.set_value(iter, 1, sd[i]);
+                
+                //if (data.get(i) == cur) {
+                //    _this.build_module.el.set_active_iter(iter);
+               // }
+                
+            }
+          //  this.el.set_sort_column_id(0, Gtk.SortType.ASCENDING);          
+                                             
+        }
+    }
+
+
 
-    public class Xcls_HButtonBox25 : Object
+    public class Xcls_HButtonBox29 : Object
     {
         public Gtk.HButtonBox el;
         private Xcls_PopoverFileDetails  _this;
@@ -877,7 +1090,7 @@ public class Xcls_PopoverFileDetails : Object
             // my vars (def)
 
         // ctor
-        public Xcls_HButtonBox25(Xcls_PopoverFileDetails _owner )
+        public Xcls_HButtonBox29(Xcls_PopoverFileDetails _owner )
         {
             _this = _owner;
             this.el = new Gtk.HButtonBox();
@@ -888,7 +1101,7 @@ public class Xcls_PopoverFileDetails : Object
             this.el.margin_right = 4;
             this.el.margin_left = 4;
             this.el.margin_bottom = 4;
-            var child_0 = new Xcls_Button26( _this );
+            var child_0 = new Xcls_Button30( _this );
             child_0.ref();
             this.el.add (  child_0.el  );
             var child_1 = new Xcls_save_btn( _this );
@@ -898,7 +1111,7 @@ public class Xcls_PopoverFileDetails : Object
 
         // user defined functions
     }
-    public class Xcls_Button26 : Object
+    public class Xcls_Button30 : Object
     {
         public Gtk.Button el;
         private Xcls_PopoverFileDetails  _this;
@@ -907,7 +1120,7 @@ public class Xcls_PopoverFileDetails : Object
             // my vars (def)
 
         // ctor
-        public Xcls_Button26(Xcls_PopoverFileDetails _owner )
+        public Xcls_Button30(Xcls_PopoverFileDetails _owner )
         {
             _this = _owner;
             this.el = new Gtk.Button();
@@ -1000,10 +1213,53 @@ public class Xcls_PopoverFileDetails : Object
                    _this.el.hide();
                    return;
                }
+               
+               // ---------------- NEW FILES...
+               Gtk.TreeIter iter;
+            
+               if (!_this.filetype.el.get_active_iter(out iter)) {
+                       // should not happen...
+                       // so we are jut going to return without 
+                       StandardErrorDialog.show(
+                       _this.mainwindow.el,
+                       "You must select a file type. "
+                   );
+                   return;
+                        
+               }
+               
+               
                var fn = _this.name.el.get_text();
-               var dir = _this.project.firstPath();
+               
+               Value ftypename;
+               _this.ftdbmodel.el.get_value (iter, 0, out ftypename);
+               var ext = ((string)ftypename);
+               var dir = _this.project.firstPath(); 
+               if (ext != "bjs") {
+                
+                       if (!_this.dir.el.get_active_iter(out iter)) {
+                               // should not happen...
+                               // so we are jut going to return without 
+                               StandardErrorDialog.show(
+                                   _this.mainwindow.el,
+                                   "You must select a directory "
+                               );
+                               return;
+                       }
+                       Value vdir;
+                       _this.dirmodel.el.get_value (iter, 0, out vdir);
+                       dir = (string)vdir;
+               }
+               
+               var targetfile = dir + "/" + fn;
+               
+               // strip the file type off the end..
+               
+               
+                var rx = new GLib.Regex("\\." + ext + "$",GLib.RegexCompileFlags.CASELESS);
+                targetfile = rx.replace(targetfile, targetfile.length, 0, ""); 
                
-               if (GLib.FileUtils.test(dir + "/" + fn + ".bjs", GLib.FileTest.EXISTS)) {
+               if (GLib.FileUtils.test(targetfile + "." + ext, GLib.FileTest.EXISTS)) {
                    Xcls_StandardErrorDialog.singleton().show(
                        _this.mainwindow.el,
                        "That file already exists"
@@ -1012,9 +1268,9 @@ public class Xcls_PopoverFileDetails : Object
                }
                
                var f =  JsRender.JsRender.factory(
-                       _this.file.project.xtype,  
+                       ext == "bjs" ? _this.file.project.xtype : "PlainFile",  
                        _this.file.project, 
-                       dir + "/" + fn + ".bjs");
+                       targetfile + "." + ext);
             
                _this.file = f;
                
@@ -1023,14 +1279,16 @@ public class Xcls_PopoverFileDetails : Object
                _this.updateFileFromEntry();
                _this.file.loaded = true;
                _this.file.save();
-               _this.file.project.addFile(_this.file);
+               if (ext == "bjs") {
+                       _this.file.project.addFile(_this.file);
+               }
                
              
                // what about .js ?
                _this.done = true;
                _this.el.hide();
             
-               
+            // hopefull this will work with bjs files..
                
                _this.success(_this.project, _this.file);