gtkhotkey-0.2.1-patched.tgz
[gitlive] / StatusIcon.js
index 5f363a1..56dc102 100644 (file)
@@ -1,6 +1,3 @@
-//<script type="text/javascript">
-
-
 /**
  * Status icon and menu for component of gitlive.
  * 
@@ -20,7 +17,6 @@ var Gio      = imports.gi.Gio;
 var GLib     = imports.gi.GLib;
 var Notify   = imports.gi.Notify;
 
-var Git = imports.Git;
 var XObject = imports.XObject.XObject;
 
 //var gitlive = imports.gitlive;
@@ -30,32 +26,53 @@ var StatusIcon  = new XObject({
     
     paused : false, // on!
     xtype : Gtk.StatusIcon,
-    stock : Gtk.STOCK_MEDIA_PLAY,
+    title : 'gitlive',
+    stock : Gtk.STOCK_REFRESH,
     tooltip_text : 'GitLive',
+        init : function() {
+        XObject.prototype.init.call(this);
+        this.el.set_name('gitlive');
+    },
     listeners : {
         //'popup-menu' : function( w, event, event_time) {
         'activate' : function( w, event, event_time) {
             print(Array.prototype.slice.call(arguments).join(','));
             
-            menu = this.get('menu');
+            var menu = this.get('menu');
             
             menu.el.show_all();
             
             this.get(!this.paused ? 'resume' : 'pause' ).el.hide();
+            print("MENU EL: "  + menu.el);
+            print("POPUP: " + typeof(menu.el.popup));
             
-            menu.el.popup(null, null,Gtk.StatusIcon.position_menu , this.el , 1, Gtk.get_current_event_time());
+            var isSeed = typeof(Seed) != 'undefined';
+           /* if (isSeed) {
+                
+                //print(JSON.stringify([null, null, Gtk.StatusIcon.position_menu , this.el , 1, Gtk.get_current_event_time()]));
+                print(  Gtk.get_current_event_time());
+                menu.el.popup(null, null, Gtk.StatusIcon.position_menu , this.el , 1, Gtk.get_current_event_time());
             //menu.el.popup(null, null,null, null, 1, Gtk.get_current_event_time());
             
-            return;
+                return;
+            }
+            */
+            Gtk.get_current_event_device ()
+            menu.el.popup_for_device(
+                    Gtk.get_current_event_device (),
+                        null, null,null, null, null,
+                         1, Gtk.get_current_event_time());
+           
             
-            var g = { };
-            var a = new Gdk.Rectangle();
+            //var g = { };
+            //var a = new Gdk.Rectangle();
             //  needs direction=inout setting in gir to work (in bugzilla @present)
-            this.el.get_geometry(g,a,null);
+            //this.el.get_geometry(g,a,null);
              
             // should check to see if @ top or bottom I guess..
-            menu.el.get_toplevel().move(a.x, a.y +a.height);
-             
+            //menu.el.get_toplevel().move(a.x, a.y +a.height);
+            menu.el.get_toplevel().move(10,10);
+              
         }
     },
     items : [
@@ -66,7 +83,10 @@ var StatusIcon  = new XObject({
             items : [
                 {
                     init : function() {
-                        this.el = new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_MEDIA_PAUSE);
+                        
+                        this.el = XObject.isSeed ?
+                            new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_MEDIA_PAUSE)
+                            : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_MEDIA_PAUSE, null);
                         XObject.prototype.init.call(this);
                     },
                     label: 'Pause Commits',
@@ -79,7 +99,7 @@ var StatusIcon  = new XObject({
                     listeners : {
                         activate : function () {
                             this.parent.parent.paused = true;
-                            imports.gitlive.monitor.stop();
+                            imports.GitMonitor.GitMonitor.stop();
                            // this.el.label  = status ? 'Resume' : 'Pause';
                             this.parent.parent.el.set_from_stock( Gtk.STOCK_MEDIA_PAUSE );
                             
@@ -89,7 +109,9 @@ var StatusIcon  = new XObject({
                 
                 {
                     init : function() {
-                        this.el = new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_MEDIA_PLAY);
+                        this.el = XObject.isSeed ?
+                            new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_MEDIA_PLAY)
+                            : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_MEDIA_PLAY, null);
                         XObject.prototype.init.call(this);
                     },
                     label: 'Resume Commits',
@@ -101,10 +123,10 @@ var StatusIcon  = new XObject({
                     listeners : {
                         activate : function () {
                             this.parent.parent.paused = false;
-                            imports.gitlive.monitor.start();
+                             imports.GitMonitor.GitMonitor.start();
                             //var status = this.el.label == 'Pause' ? 1 : 0
                            // this.el.label  = status ? 'Resume' : 'Pause';
-                            this.parent.parent.el.set_from_stock(   Gtk.STOCK_MEDIA_PLAY);
+                               
                             
                         }
                     }
@@ -112,7 +134,10 @@ var StatusIcon  = new XObject({
                 
                 {
                     init : function() {
-                        this.el = new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_RELOAD);
+                        this.el = XObject.isSeed ?
+                            new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_FULLSCREEN)
+                            : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_FULLSCREEN, null);
+                      
                         XObject.prototype.init.call(this);
                     },
                     label: 'Pull (Refresh) All',
@@ -122,51 +147,79 @@ var StatusIcon  = new XObject({
                     pack:  'append',
                     listeners : {
                         activate : function () {
-                            imports.gitlive.monitor.stop();
+                            imports.GitMonitor.GitMonitor.stop();
+                           
                             
-                            var f = Gio.file_new_for_path(imports.gitlive.gitlive);
-                            var file_enum = f.enumerate_children(
-                                Gio.FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME, Gio.FileQueryInfoFlags.NONE, null);
-
-                            var next_file = null;
-                            
-                            while ((next_file = file_enum.next_file(null)) != null) {
+                            var tr = imports.Scm.Repo.Repo.list();
+                            for (var i= 0; i< tr.length;i++) {
+                                this.parent.parent.el.set_from_stock( i%2 ?  Gtk.STOCK_FULLSCREEN : Gtk.STOCK_LEAVE_FULLSCREEN );
                                 
-                                var fn = imports.gitlive.gitlive + '/' + next_file.get_display_name();
-                                if (! GLib.file_test(fn + '/.git', GLib.FileTest.IS_DIR)) {
+                                var repo = tr[i];
+                                if (!repo.autocommit()) {
+                                    //??? should we ignore ones not on autocommit..
                                     continue;
                                 }
-                                
-                                
-                                var res = Git.run(fn,  'pull' );
-                                if (res.result * 1  == 0) {
-                                        
+                                try {
+                                    this.parent.parent.el.set_tooltip_text("pull: " + repo.name);
+                               
+                                    var str = repo.pull();
+                                    // do not care if it's already in sycn..
+                                    if (str.match(/Already up-to-date/)) {
+                                        continue;
+                                    }
                                     var notification = new Notify.Notification({
-                                        summary: "Updated " + fn,
-                                        body : res.output
-                                    });
-                                    notification.set_timeout(1000);
-                                    notification.show();
-                                    continue;
+                                       summary: "Updated " + repo.name,
+                                       body : str
+                                   });
+                                   notification.set_timeout(20);
+                                   notification.show();
+                                   
+                                } catch(e) {
+                                    this.parent.parent.el.set_from_stock( Gtk.STOCK_MEDIA_RECORD );
+                                    print(JSON.stringify(e));
+                                    print("notification or push errror- probably to many in queue..");
+                                    imports.gitlive.errorDialog(e.message);
+
                                 }
-                                imports.gitlive.errorDialog(res.stderr);
-                                    // should also update modules ideally.
-                                
                             }
+                            this.parent.parent.el.set_tooltip_text(this.parent.parent.tooltip_text);
+                               
                             
-                                
-                            file_enum.close(null);
-
-                            
-                            imports.gitlive.monitor.start();
+                             
+                          
+                            imports.GitMonitor.GitMonitor.start();
+                        }   
+                    }
+                },
+                {
+                    init : function() {
+                        this.el = XObject.isSeed ?
+                            new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_SAVE)
+                            : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_SAVE, null);
+                         
+                        XObject.prototype.init.call(this);
+                    },
+                    label: 'Update Timesheet',
+                    always_show_image : true,
+                    accel_group : null,
+                    
+                    //label: 'Pause',
+                    pack:  'append',
+                    listeners : {
+                        activate : function () {
+                            var ret = imports.FixBug.FixBug.show();
                             
                         }
                     }
                 },
+                
+                
                 {
                     init : function() {
-                        this.el = new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_RELOAD);
-                        XObject.prototype.init.call(this);
+                        this.el = XObject.isSeed ?
+                            new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_FULLSCREEN)
+                            : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_FULLSCREEN, null);
+                         XObject.prototype.init.call(this);
                     },
                     label: 'Manage Clones',
                     always_show_image : true,
@@ -176,7 +229,7 @@ var StatusIcon  = new XObject({
                     pack:  'append',
                     listeners : {
                         activate : function () {
-                             
+                             var ret = imports.Clones.Clones.show();
                             
                         }
                     }
@@ -187,7 +240,10 @@ var StatusIcon  = new XObject({
             
                 {
                     init : function() {
-                        this.el = new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_ABOUT);
+                        this.el = XObject.isSeed ?
+                            new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_ABOUT)
+                            : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_ABOUT, null);
+                   
                         XObject.prototype.init.call(this);
                     },
                     label: 'About GitLive',
@@ -196,12 +252,12 @@ var StatusIcon  = new XObject({
                         activate : function () {
                             var msg = new Gtk.AboutDialog({
                                 program_name : "Git Live",
-                                version: '0.1',
-                                website: 'http://git.akbkhome.com',
-                                website_label: 'AK BK Consulting (git repo)',
+                                version: '0.3',
+                                website: 'http://www.roojs.org/index.php/projects/gitlive.html',
+                                website_label: 'RooJS Consulting',
                                 license : 'LGPL'
                             });
-                            msg.set_authors([ "Alan Knowles <alan@akbkhome.com>" ]);
+                            msg.set_authors([ "Alan Knowles <alan@roojs.com>" ]);
                             msg.run();
                             msg.destroy();
                         }
@@ -210,7 +266,11 @@ var StatusIcon  = new XObject({
                 
                 {
                     init : function() {
-                        this.el = new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_QUIT);
+                        
+                        this.el = XObject.isSeed ?
+                            new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_QUIT)
+                            : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_QUIT, null);
+                     
                         XObject.prototype.init.call(this);
                     },
                     label: 'Quit',