From 6574ee32e447083edc34e8a02f4b2c930c38c4eb Mon Sep 17 00:00:00 2001 From: Alan Knowles Date: Tue, 6 May 2014 21:34:04 +0800 Subject: [PATCH] StatusIcon.vala --- StatusIcon.vala | 355 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 355 insertions(+) create mode 100644 StatusIcon.vala diff --git a/StatusIcon.vala b/StatusIcon.vala new file mode 100644 index 00000000..98806dcf --- /dev/null +++ b/StatusIcon.vala @@ -0,0 +1,355 @@ +/** + * Status icon and menu for component of gitlive. + * + * Implements XObject - however we want to control initialization. + * + * + * + * Currently only does a few things + * a) Quit + * + * b) Pause!??! + */ + +// Compile:: +// valac --pkg gtk+-3.0 StatusIcon.vala -o /tmp/StatusIcon + +//var gitlive = imports.gitlive; + + +using Gtk; + + +static int main (string[] args) { + // A reference to our file + Gtk.init (ref args); + + var window = new TestWindow(); + + window.show_all (); + + Gtk.main (); + return 0; + + +} + +public class TestButton : Button { + public TestButton() + { + this.set_label("Click me"); + + + this.clicked.connect (() => { + this.label = "Thank you"; + }); + + } + + +} + +public class TestWindow : Window { + + public TestWindow() { + this.title = "First GTK+ Program"; + this.border_width = 10; + this.window_position = WindowPosition.CENTER; + this.set_default_size (350, 70); + + // -- connect all + this.destroy.connect (Gtk.main_quit); + + // add children.. + this.add(new TestButton()); + + } + + + + +} + + + + +class StatusIconA : StatusIcon { + + bool paused = false; + + MenuA menu = null; + + public StatusIconA() { + //title : 'gitlive', + this.stock = Gtk.STOCK_REFRESH; + this.tooltip_text = "GitLive"; + this.title = "gitlive"; + + this.set_name("gitlive"); + + this.popup_menu.connect( (button,event_time) =>{ + + //print(Array.prototype.slice.call(arguments).join(',')); + + //var menu = this.get('menu'); + + this.menu.show_all(); + + if (this.paused) { + this.menu.resume.show(); + this.menu.pause.hide(); + } else { + this.menu.resume.hide(); + this.menu.pause.show(); + } + + //Gtk.get_current_event_device () + this.menu.popup( + + null, null, + null, button, + event_time, null + ); + + + + this.menu = new MenuA(); + + //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); + + // 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); + + }); + + } + + class MenuA : ImageMenuItem + { + public MenuA() + { + new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_MEDIA_PAUSE) + } + } + + + items : [ + { + xtype: Gtk.Menu, + id : 'menu', + pack: false, + items : [ + { + init : function() { + + 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', + + always_show_image : true, + accel_group : null, + id : 'pause', + //label: 'Pause', + pack: 'append', + listeners : { + activate : function () { + this.parent.parent.paused = true; + imports.GitMonitor.GitMonitor.stop(); + // this.el.label = status ? 'Resume' : 'Pause'; + this.parent.parent.el.set_from_stock( Gtk.STOCK_MEDIA_PAUSE ); + + } + } + }, + + { + init : function() { + 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', + always_show_image : true, + accel_group : null, + id : 'resume', + //label: 'Pause', + pack: 'append', + listeners : { + activate : function () { + this.parent.parent.paused = false; + imports.GitMonitor.GitMonitor.start(); + //var status = this.el.label == 'Pause' ? 1 : 0 + // this.el.label = status ? 'Resume' : 'Pause'; + + + } + } + }, + + { + init : function() { + 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', + always_show_image : true, + accel_group : null, + //label: 'Pause', + pack: 'append', + listeners : { + activate : function () { + imports.GitMonitor.GitMonitor.stop(); + + + 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 repo = tr[i]; + if (!repo.autocommit()) { + //??? should we ignore ones not on autocommit.. + continue; + } + 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 " + 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); + + } + } + this.parent.parent.el.set_tooltip_text(this.parent.parent.tooltip_text); + + + + + 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 = 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, + accel_group : null, + + //label: 'Pause', + pack: 'append', + listeners : { + activate : function () { + var ret = imports.Clones.Clones.show(); + + } + } + }, + + + + + { + init : function() { + 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', + pack: 'append', + listeners : { + activate : function () { + var msg = new Gtk.AboutDialog({ + program_name : "Git Live", + version: '0.3', + website: 'http://www.roojs.org/index.php/projects/gitlive.html', + website_label: 'RooJS Consulting', + license : 'LGPL' + }); + msg.set_authors([ "Alan Knowles " ]); + msg.run(); + msg.destroy(); + } + } + }, + + { + init : function() { + + 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', + pack: 'append', + listeners : { + activate : function () { + Seed.quit(); + } + } + } + + + ] + } + ] + +}); +*/ + + -- 2.39.2