X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=StatusIcon.vala;h=64199105d1f39596354e6e65a5de5c91c5b25bb4;hb=48b3d2b4281bfa78ae11b4dfb5f91d5475aefd90;hp=80ad0d9c09d4be1a607b28b85d6662e6bb958084;hpb=246e96c40305db5d4c20461e2d979ba7bf34f658;p=gitlive diff --git a/StatusIcon.vala b/StatusIcon.vala index 80ad0d9c..64199105 100644 --- a/StatusIcon.vala +++ b/StatusIcon.vala @@ -39,7 +39,8 @@ public class StatusIconA : StatusIcon { public bool paused = false; public static StatusIconA statusicon; - + + public StatusIconA() { statusicon = this; @@ -47,18 +48,44 @@ public class StatusIconA : StatusIcon { //title : 'gitlive', this.stock = Gtk.Stock.REFRESH; this.tooltip_text = "GitLive"; - this.title = "vgitlive"; + this.title = "gitlive"; - this.set_name("vgitlive"); + this.set_name("gitlive"); this.set_visible(true); var menu = new MenuA(); - - - this.activate.connect( () =>{ + menu.ref(); + this.button_press_event.connect( ( ev ) =>{ + print("button press event called\n"); + + menu.show_all(); + if (this.paused) { + menu.resume.show(); + menu.pause.hide(); + } else { + menu.resume.hide(); + menu.pause.show(); + } + // public void popup (Gtk.Widget? parent_menu_shell, Gtk.Widget? parent_menu_item, + // [CCode (scope = "async")] Gtk.MenuPositionFunc? func, uint button, uint32 activate_time); + //Gtk.get_current_event_device () + menu.popup( + + null, null, + this.position_menu, + + ev.button, ev.time // time + ); + + return true; + + }); + this.popup_menu.connect( ( button, time) =>{ + //this.button_press_event.connect( ( ) =>{ + //print(Array.prototype.slice.call(arguments).join(',')); - + print("menu activiate called\n"); //var menu = this.get('menu'); menu.show_all(); @@ -70,17 +97,18 @@ public class StatusIconA : StatusIcon { menu.resume.hide(); menu.pause.show(); } - + // public void popup (Gtk.Widget? parent_menu_shell, Gtk.Widget? parent_menu_item, + // [CCode (scope = "async")] Gtk.MenuPositionFunc? func, uint button, uint32 activate_time); //Gtk.get_current_event_device () menu.popup( - + null, null, - this.position_menu, 0, - Gtk.get_current_event_time() + this.position_menu, + + button, time // time ); - //var g = { }; //var a = new Gdk.Rectangle(); // needs direction=inout setting in gir to work (in bugzilla @present) @@ -89,11 +117,46 @@ public class StatusIconA : StatusIcon { // 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(10,10); + //return false; }); } + public void pause() + { + this.set_from_stock( Gtk.Stock.MEDIA_PAUSE ); + this.paused = true; + } + + public void resume() + { + this.set_from_stock( Gtk.Stock.MEDIA_PLAY ); + this.paused = false; + } + + public void refreshing() + { + this.set_from_stock( Gtk.Stock.REFRESH ); + } + + public void pauseError() + { + this.paused = true; + var flag = true; + Timeout.add_full(Priority.LOW, 500, () => { + + if (!this.paused) { + return false; + } + this.set_from_stock( flag == true ? Gtk.Stock.MEDIA_RECORD + : Gtk.Stock.MEDIA_PAUSE); + flag = !flag; + return true; + }); + + } + class MenuA : Gtk.Menu { public ImageMenuItem pause; @@ -151,7 +214,7 @@ public class StatusIconA : StatusIcon { var image = new Gtk.Image(); image.set_from_stock(Gtk.Stock.MEDIA_PLAY,Gtk.IconSize.MENU ); - this.set_image (image); + this.set_image (image); this.label= "Start Commits"; this.always_show_image = true; this.accel_group = null; @@ -171,6 +234,7 @@ public class StatusIconA : StatusIcon { } + class ImageMenuItemC : ImageMenuItem { public ImageMenuItemC() @@ -184,12 +248,19 @@ public class StatusIconA : StatusIcon { this.accel_group = null; this.activate.connect( () => { - GitMonitor.gitmonitor.start(); + + this.pullAll(); + /* + GitMonitor.gitmonitor.stop(); var tr = GitRepo.list(); + + + for (var i= 0; i< tr.length;i++) { - statusicon.set_from_stock( i%2 == 0 ? Gtk.Stock.FULLSCREEN : Gtk.Stock.LEAVE_FULLSCREEN ); + statusicon.set_from_stock( + i%2 == 0 ? Gtk.Stock.FULLSCREEN : Gtk.Stock.LEAVE_FULLSCREEN ); - var repo = tr[i]; + var repo = tr.index(i); //if (!repo.autocommit()) { //??? should we ignore ones not on autocommit.. // continue; @@ -198,12 +269,13 @@ public class StatusIconA : StatusIcon { statusicon.set_tooltip_text("pull: " + repo.name); var str = repo.pull(); // do not care if it's already in sycn.. - if (Regex.match_simple ("Already up-to-date", str); + if (Regex.match_simple ("Already up-to-date", str) ) { continue; } var notification = new Notify.Notification( "Updated " + repo.name, - body : str + str, + "dialog-information" ); @@ -212,20 +284,89 @@ public class StatusIconA : StatusIcon { } catch(Error e) { print("notification or push errror- probably to many in queue.."); - statusicon.set_from_stock( Gtk.Stock.RECORD ); + statusicon.set_from_stock( Gtk.Stock.MEDIA_RECORD ); print(e.message); } } - statusicon.set_tooltip_text("Gitlive"); - - - GitMonitor.gitmonitor.start(); + */ + }); } - + void pullAll() + { + var tr = GitRepo.list(); + + GitMonitor.gitmonitor.stop(); + + + this.total = tr.length; + this.has_error = 0; + this.pull_all_error_message = ""; + for (var i= 0; i< tr.length;i++) { + statusicon.set_from_stock( + i%2 == 0 ? Gtk.Stock.FULLSCREEN : Gtk.Stock.LEAVE_FULLSCREEN ); + + var repo = tr.index(i); + //repo.ref(); + //this.ref(); + + statusicon.set_tooltip_text("pull: " + repo.name); + + repo.pull_async(this.pullAllCallback); + // do not care if it's already in sycn.. + + + + } + + + + + } + uint total = 0; + uint has_error = 0; + string pull_all_error_message = ""; + + void pullAllCallback(GitRepo repo, int err, string res) + { + this.total--; + + if (err > 0) { + this.has_error = 1; + this.pull_all_error_message += this.pull_all_error_message.length > 0 ? "\n" : ""; + this.pull_all_error_message += "Error Pulling " + repo.name +"\n" + res; + } + + if (!Regex.match_simple ("Already up-to-date", res) ) { + var notification = new Notify.Notification( + "Pull completed ", + "Updated: " +repo.name + "\n" + res +"\n", + "dialog-information" + ); + notification.set_timeout(20); + notification.show(); + + + + } + if (this.total < 1) { + if (this.has_error > 0) { + GitMonitor.gitmonitor.pauseError(this.pull_all_error_message); + return; + } + + statusicon.set_tooltip_text("Gitlive"); + + GitMonitor.gitmonitor.start(); + //this.unref(); + //repo.unref(); + } + + } + } @@ -263,7 +404,7 @@ public class StatusIconA : StatusIcon { this.accel_group = null; this.activate.connect( () => { - //var ret = imports.Clones.Clones.show(); + Clones.singleton().show(); }); } @@ -326,4 +467,4 @@ public class StatusIconA : StatusIcon { } - + \ No newline at end of file