Fix #7379 - filter file tree using search as well
authorAlan <alan@roojs.com>
Fri, 2 Sep 2022 06:00:10 +0000 (14:00 +0800)
committerAlan <alan@roojs.com>
Fri, 2 Sep 2022 06:00:10 +0000 (14:00 +0800)
src/Builder4/PopoverFiles.bjs
src/Builder4/PopoverFiles.vala

index 8cde049..a56c5f9 100644 (file)
                "\t",
                "\tif (this.el.text.down() != _this.lastfilter) {",
                "\t\t_this.loadIconView();",
+               "\t\t_this.loadTreeView();",
                "\t}",
                "}",
                ""
     "    }",
     "}"
    ],
-   "| void onProjectSelected" : [
-    "(Project.Project project) ",
-    "{",
-    "\tif (this.in_onprojectselected) { ",
-    "\t\treturn;",
-    "\t}",
-    "\tthis.in_onprojectselected = true;",
-    "\t",
-    "\t",
-    "\tthis.selectedProject = project;",
-    "\tproject.scanDirs();",
-    "\t//this.clutterfiles.loadProject(proj);",
-    "\t",
-    "\t",
-    "\t",
-    "\t_this.iconsearch.el.text = \"\";",
-    "\t",
-    "\t ",
-    "\t",
-    "    ",
-    "    ",
-    "    //this.project_title_name.el.text = pr.name;",
-    "    //this.project_title_path.el.text = pr.firstPath();",
-    "    ",
-    "    // file items contains a reference until we reload ...",
-    "  \t this.loadIconView();",
-    "  \t ",
-    "  \t ",
-    "  \t GLib.Timeout.add(500, () => {",
-    "\t     _this.iconsearch.el.grab_focus();",
-    "\t     return false;",
-    "     });",
-    "    ",
-    "     this.filemodel.el.clear();",
+   "| void loadTreeView" : [
+    "() {",
+    "  var project =  this.selectedProject;",
+    "  ",
+    "  this.filemodel.el.clear();",
     "    ",
     "    // folders...",
     "    ",
     "    if (!(project is Project.Gtk)) {",
-    "        print (\"not gtk... skipping files\");",
+    "        //print (\"not gtk... skipping files\");",
     "        this.file_container.el.hide();",
-    "    \tthis.in_onprojectselected = false;",
     "        return;",
     "    }",
+    "    ",
+    "    ",
+    "    ",
+    "    var filter = _this.iconsearch.el.text.down();",
+    "    ",
     "    this.file_container.el.show();",
     "    var gpr = (Project.Gtk)project;",
     "     var def = gpr.compilegroups.get(\"_default_\");",
     "\t Gtk.TreeIter citer;  // folder iter",
     "\t  Gtk.TreeIter fxiter;  // file iter",
     "\tfor(var i =0 ; i < items.size; i++) {",
-    "\t     print (\"cheking folder %s\\n\", items.get(i));",
+    "\t    // print (\"cheking folder %s\\n\", items.get(i));",
     "\t     var files = gpr.filesForOpen(items.get(i));",
+    "\t     ",
+    "\t     ",
+    "\t     ",
+    "\t     ",
+    "\t     ",
     "\t     if (files.size < 1) {",
     "\t        continue;",
     "\t     }",
+    "\t     var nf = 0;",
+    "\t     for(var j =0 ; j < files.size; j++) {",
+    "\t    ",
+    "\t    \tif (filter != \"\") {",
+    "\t    \t\tvar ff = GLib.Path.get_basename(files.get(j)).down();",
+    "\t    \t\tvar dp = ff.last_index_of(\".\");",
+    "\t\t    \tif (!ff.substring(0,dp  < 0 ? ff.length :dp ).contains(filter)) {",
+    "\t\t    \t\tcontinue;",
+    "\t\t\t\t}",
+    "\t\t    ",
+    "\t\t    }  ",
+    "\t\t    nf++;",
+    "\t    }",
+    "\t    if (nf < 1) {",
+    "\t    \tcontinue;",
+    "    \t} ",
+    "\t     ",
     "\t\t this.filemodel.el.append(out citer,null);",
     "\t\t this.filemodel.el.set(citer, 0, GLib.Path.get_basename(items.get(i)));",
     "\t\t this.filemodel.el.set(citer, 1, null); // parent (empty as it's a folder)",
     "\t    ",
     "\t    for(var j =0 ; j < files.size; j++) {",
     "\t    ",
+    "\t    \tif (filter != \"\") {",
+    "\t    \t\tvar ff = GLib.Path.get_basename(files.get(j)).down();",
+    "\t    \t\tvar dp = ff.last_index_of(\".\");",
+    "\t\t    \tif (!ff.substring(0,dp  < 0 ? ff.length :dp ).contains(filter)) {",
+    "\t\t    \t\tcontinue;",
+    "\t\t\t\t}",
+    "\t\t    ",
+    "\t\t    }  ",
+    "\t    ",
     "\t\t    this.filemodel.el.insert(out fxiter,citer, -1);",
     "\t     \tthis.filemodel.el.set(fxiter, 0,  GLib.Path.get_basename(files.get(j))); // filename",
     "\t\t \tthis.filemodel.el.set(fxiter, 1, files.get(j)); // Folder?",
     "\t    //this.el.set_value(citer, 1,   items.get(i) );",
     "\t}",
     "    _this.fileview.el.expand_all();",
-    "    \tthis.in_onprojectselected = false;",
+    "}"
+   ],
+   "| void onProjectSelected" : [
+    "(Project.Project project) ",
+    "{",
+    "\tif (this.in_onprojectselected) { ",
+    "\t\treturn;",
+    "\t}",
+    "\tthis.in_onprojectselected = true;",
+    "\t",
+    "\t",
+    "\tthis.selectedProject = project;",
+    "\tproject.scanDirs();",
+    "\t//this.clutterfiles.loadProject(proj);",
+    "\t",
     "\t",
+    "\t",
+    "\t_this.iconsearch.el.text = \"\";",
+    "\t",
+    "\t ",
+    "\t",
+    "    ",
+    "    ",
+    "    //this.project_title_name.el.text = pr.name;",
+    "    //this.project_title_path.el.text = pr.firstPath();",
+    "    ",
+    "    // file items contains a reference until we reload ...",
+    "  \t this.loadIconView();",
+    "  \t ",
+    "  \t ",
+    "  \t GLib.Timeout.add(500, () => {",
+    "\t     _this.iconsearch.el.grab_focus();",
+    "\t     return false;",
+    "     });",
+    "    ",
+    "    ",
+    "",
+    "\tthis.loadTreeView();",
+    "\tthis.in_onprojectselected = false;\t",
     "}",
     ""
    ],
index abe9d90..a551890 100644 (file)
@@ -107,60 +107,10 @@ public class Xcls_PopoverFiles : Object
             return false;
          });
         
-         this.filemodel.el.clear();
         
-        // folders...
-        
-        if (!(project is Project.Gtk)) {
-            print ("not gtk... skipping files");
-            this.file_container.el.hide();
-               this.in_onprojectselected = false;
-            return;
-        }
-        this.file_container.el.show();
-        var gpr = (Project.Gtk)project;
-         var def = gpr.compilegroups.get("_default_");
-         // not sure why the above is returng null!??
-         if (def == null) {
-               def = new Project.GtkValaSettings("_default_"); 
-               gpr.compilegroups.set("_default_", def);
-         }
-        var items  = def.sources;
-                
-        Gtk.TreeIter citer;  // folder iter
-         Gtk.TreeIter fxiter;  // file iter
-       for(var i =0 ; i < items.size; i++) {
-            print ("cheking folder %s\n", items.get(i));
-            var files = gpr.filesForOpen(items.get(i));
-            if (files.size < 1) {
-               continue;
-            }
-                this.filemodel.el.append(out citer,null);
-                this.filemodel.el.set(citer, 0, GLib.Path.get_basename(items.get(i)));
-                this.filemodel.el.set(citer, 1, null); // parent (empty as it's a folder)
-               
-               
-           // add the directory... items.get(i);
-           //var x = new Xcls_folderitem(this,items.get(i));
-           //this.fileitems.add(x);
-           //this.filelayout.el.add_child(x.el);
-           
-           
-           for(var j =0 ; j < files.size; j++) {
-           
-                   this.filemodel.el.insert(out fxiter,citer, -1);
-               this.filemodel.el.set(fxiter, 0,  GLib.Path.get_basename(files.get(j))); // filename
-                       this.filemodel.el.set(fxiter, 1, files.get(j)); // Folder?
-                
-               
-           }
-           
-           
-           //this.el.set_value(citer, 1,   items.get(i) );
-       }
-        _this.fileview.el.expand_all();
-               this.in_onprojectselected = false;
-       
+    
+       this.loadTreeView();
+       this.in_onprojectselected = false;      
     }
     public void selectProject (Project.Project project) {
         
@@ -253,9 +203,96 @@ public class Xcls_PopoverFiles : Object
          m.set_sort_column_id(0, Gtk.SortType.ASCENDING);
          _this.is_loading = false;      
     }
-    public void setMainWindow (Xcls_MainWindow win) {
-       this.win = win;
-        
+    public void loadTreeView () {
+      var project =  this.selectedProject;
+      
+      this.filemodel.el.clear();
+        
+        // folders...
+        
+        if (!(project is Project.Gtk)) {
+            //print ("not gtk... skipping files");
+            this.file_container.el.hide();
+            return;
+        }
+        
+        
+        
+        var filter = _this.iconsearch.el.text.down();
+        
+        this.file_container.el.show();
+        var gpr = (Project.Gtk)project;
+         var def = gpr.compilegroups.get("_default_");
+         // not sure why the above is returng null!??
+         if (def == null) {
+               def = new Project.GtkValaSettings("_default_"); 
+               gpr.compilegroups.set("_default_", def);
+         }
+        var items  = def.sources;
+                
+        Gtk.TreeIter citer;  // folder iter
+         Gtk.TreeIter fxiter;  // file iter
+       for(var i =0 ; i < items.size; i++) {
+           // print ("cheking folder %s\n", items.get(i));
+            var files = gpr.filesForOpen(items.get(i));
+            
+            
+            
+            
+            
+            if (files.size < 1) {
+               continue;
+            }
+            var nf = 0;
+            for(var j =0 ; j < files.size; j++) {
+           
+               if (filter != "") {
+                       var ff = GLib.Path.get_basename(files.get(j)).down();
+                       var dp = ff.last_index_of(".");
+                       if (!ff.substring(0,dp  < 0 ? ff.length :dp ).contains(filter)) {
+                               continue;
+                               }
+                   
+                   }  
+                   nf++;
+           }
+           if (nf < 1) {
+               continue;
+               } 
+            
+                this.filemodel.el.append(out citer,null);
+                this.filemodel.el.set(citer, 0, GLib.Path.get_basename(items.get(i)));
+                this.filemodel.el.set(citer, 1, null); // parent (empty as it's a folder)
+               
+               
+           // add the directory... items.get(i);
+           //var x = new Xcls_folderitem(this,items.get(i));
+           //this.fileitems.add(x);
+           //this.filelayout.el.add_child(x.el);
+           
+           
+           for(var j =0 ; j < files.size; j++) {
+           
+               if (filter != "") {
+                       var ff = GLib.Path.get_basename(files.get(j)).down();
+                       var dp = ff.last_index_of(".");
+                       if (!ff.substring(0,dp  < 0 ? ff.length :dp ).contains(filter)) {
+                               continue;
+                               }
+                   
+                   }  
+           
+                   this.filemodel.el.insert(out fxiter,citer, -1);
+               this.filemodel.el.set(fxiter, 0,  GLib.Path.get_basename(files.get(j))); // filename
+                       this.filemodel.el.set(fxiter, 1, files.get(j)); // Folder?
+                
+               
+           }
+           
+           
+           //this.el.set_value(citer, 1,   items.get(i) );
+       }
+        _this.fileview.el.expand_all();
     }
     public void loadIconView () {
        
@@ -342,6 +379,10 @@ public class Xcls_PopoverFiles : Object
             //this.filelayout.el.add_child(a.el);
         }
     }
+    public void setMainWindow (Xcls_MainWindow win) {
+       this.win = win;
+        
+    }
     public class Xcls_Box2 : Object
     {
         public Gtk.Box el;
@@ -906,6 +947,7 @@ public class Xcls_PopoverFiles : Object
                
                if (this.el.text.down() != _this.lastfilter) {
                        _this.loadIconView();
+                       _this.loadTreeView();
                }
             });
         }