Clone.bjs
[gitlive] / Clones.vala
index c6db92d..c1a8a2b 100644 (file)
@@ -75,9 +75,9 @@ public class Clones : Object
         
         this.el.set_default_size(
                        int.min(1024,Gdk.Screen.width()),
-                       int.max(500,Gdk.Screen.width() - 300)
+                       int.max(500,Gdk.Screen.height() - 300)
        );
-        
+         
         this.el.show_all();
         _this.reposStore.load();
         this.el.set_keep_above(true);
@@ -142,6 +142,7 @@ public class Clones : Object
             // my vars (dec)
 
             // set gobject values
+            this.el.homogeneous = true;
             var child_0 = new Xcls_Button4( _this );
             child_0.ref();
             this.el.add (  child_0.el  );
@@ -178,7 +179,7 @@ public class Clones : Object
             // my vars (dec)
 
             // set gobject values
-            this.el.label = "Remotes / Clones";
+            this.el.label = "Add Repository";
 
             //listeners
             this.el.clicked.connect( () => {
@@ -247,6 +248,7 @@ public class Clones : Object
 
             // set gobject values
             this.el.label = "Branches";
+            this.el.visible = false;
 
             //listeners
             this.el.clicked.connect( () => {
@@ -373,6 +375,7 @@ public class Clones : Object
 
             // set gobject values
             this.el.label = "Switch Branch";
+            this.el.visible = false;
 
             //listeners
             this.el.clicked.connect( () => {
@@ -408,12 +411,29 @@ public class Clones : Object
             this.el.label = "Pull";
 
             //listeners
-            this.el.clicked.connect( () => {
-                
+            this.el.clicked.connect( () =>  {
+            
+               var rv = _this.reposView;
+               var rs = _this.reposStore;
+               var s =rv.el.get_selection();
+               if (s.count_selected_rows() != 1) {
+                       return;
+               }
+               Gtk.TreeIter iter;
+               Gtk.TreeModel tm;
+               s.get_selected(out tm, out iter);
+               GLib.Value val;
+                tm.get_value(iter, 6, out val);
+                var git_working_dir = (string)val;
                 
+                var repo = GitRepo.singleton().get(git_working_dir);
+                GitMonitor.gitmonitor.pause();    
+                repo.pull();
+                repo.loadStatus();
+                _this.reposStore.load();
+                GitMonitor.gitmonitor.start(); 
+            
              
-                   
-                
                 
             });
         }
@@ -475,6 +495,7 @@ public class Clones : Object
 
             // set gobject values
             this.el.search_column = 0;
+            this.el.activate_on_single_click = true;
             this.el.enable_grid_lines = Gtk.TreeViewGridLines.HORIZONTAL;
             var child_0 = new Xcls_reposStore( _this );
             child_0.ref();
@@ -518,6 +539,29 @@ public class Clones : Object
             }
 
             //listeners
+            this.el.row_activated.connect( (path, col)  =>  {
+            
+               if (col.title != "Current Branch") {
+                       return;
+               }
+               
+               //
+               
+               Gtk.TreeIter iter;
+               _this.reposStore.el.get_iter(out iter, path);
+               GLib.Value val;
+                _this.reposStore.el.get_value(iter, 6, out val);
+                var git_working_dir = (string)val;
+                
+                var repo = GitRepo.singleton().get(git_working_dir);
+                
+                Gdk.Rectangle rect;
+                _this.reposView.el.get_cell_area(path, col, out rect);
+                RepoStatusPopover.singleton().show(this.el, rect, repo);
+                
+                 
+                
+            });
             this.el.cursor_changed.connect( ()  => {
               // SEE SELECTION.CHANGED
               /*
@@ -594,12 +638,13 @@ public class Clones : Object
             
             for(var i =0 ; i < tr.length; i++) {
                    var repo = tr.index(i);
-                   repo.loadBranches();
+                   // this is done before we display stuff...
+                   //repo.loadBranches();
+                   //repo.loadStatus();
                    
                    Gtk.TreeIter iter;
                    this.el.append(out iter);
              
-                
                 //print(JSON.stringify(ret,null,4));
                  //tr[i].getBranches();
                  //tr[i].getStatus();
@@ -625,17 +670,25 @@ public class Clones : Object
                 var cb = repo.currentBranch;
                 //print(JSON.stringify(cb,null,4));
                 var col = "#ffffff";
-                /*
+                
                 if (cb.lastrev != cb.remoterev) {
-                    col =  '#ff0000';
+                    col =  "#f2dede";
+                    this.el.set_value( iter, 1, repo.currentBranch.name +"\n" +
+                       (repo.ahead_or_behind == "B" ? "Local is BEHIND remote" : "Local is AHEAD of remote")
+                    
+                       );
                 }
-                if (tr[i].hasLocalChanges) {
-                    col =  '#0000ff';
+                if (repo.has_local_changes) {
+                    col =  "#d9edf7";
+                    this.el.set_value( iter, 1, repo.currentBranch.name +"\nHas uncommitted changes"   );
                 }
-                if  ((cb.lastrev != cb.remoterev) && (tr[i].hasLocalChanges)) {
-                    col =  '#ff00ff';
+                if  ((cb.lastrev != cb.remoterev) && (repo.has_local_changes)) {
+                    col =  "#fcf8e3";
+                    this.el.set_value( iter, 1, repo.currentBranch.name +"\n" + 
+                    (repo.ahead_or_behind == "B" ? "Local is BEHIND remote" : "Local is AHEAD of remote") +
+                    "\nHas uncommitted changes"   );            
                 }
-                */
+                
                 this.el.set_value(iter, 7, col  );      
                 var ticket = repo.activeTicket;