2 * Status icon and menu for component of gitlive.
4 * Implements XObject - however we want to control initialization.
8 * Currently only does a few things
15 // valac --pkg gtk+-3.0 StatusIcon.vala -o /tmp/StatusIcon
17 //var gitlive = imports.gitlive;
23 static int main (string[] args) {
24 // A reference to our file
27 var window = new TestWindow();
37 public class TestButton : Button {
40 this.set_label("Click me");
43 this.clicked.connect (() => {
44 this.label = "Thank you";
52 public class TestWindow : Window {
55 this.title = "First GTK+ Program";
56 this.border_width = 10;
57 this.window_position = WindowPosition.CENTER;
58 this.set_default_size (350, 70);
61 this.destroy.connect (Gtk.main_quit);
64 this.add(new TestButton());
76 class StatusIconA : StatusIcon {
82 public StatusIconA() {
84 this.stock = Gtk.STOCK_REFRESH;
85 this.tooltip_text = "GitLive";
86 this.title = "gitlive";
88 this.set_name("gitlive");
90 this.popup_menu.connect( (button,event_time) =>{
92 //print(Array.prototype.slice.call(arguments).join(','));
94 //var menu = this.get('menu');
99 this.menu.resume.show();
100 this.menu.pause.hide();
102 this.menu.resume.hide();
103 this.menu.pause.show();
106 //Gtk.get_current_event_device ()
116 this.menu = new MenuA();
119 //var a = new Gdk.Rectangle();
120 // needs direction=inout setting in gir to work (in bugzilla @present)
121 //this.el.get_geometry(g,a,null);
123 // should check to see if @ top or bottom I guess..
124 //menu.el.get_toplevel().move(a.x, a.y +a.height);
125 //menu.el.get_toplevel().move(10,10);
133 public ImageMenuItem pause;
134 public ImageMenuItem resume;
138 this.pause = new ImageMenuItemA();
139 this.add(this.pause);
140 this.resume = new ImageMenuItemB();
141 this.add(this.resume);
145 class ImageMenuItemA : ImageMenuItem {
147 public ImageMenuItemA()
149 this.set_from_stock( Gtk.STOCK_MEDIA_PAUSE );
167 this.el = XObject.isSeed ?
168 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_MEDIA_PAUSE)
169 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_MEDIA_PAUSE, null);
170 XObject.prototype.init.call(this);
172 label: 'Pause Commits',
174 always_show_image : true,
180 activate : function () {
181 this.parent.parent.paused = true;
182 imports.GitMonitor.GitMonitor.stop();
183 // this.el.label = status ? 'Resume' : 'Pause';
184 this.parent.parent.el.set_from_stock( Gtk.STOCK_MEDIA_PAUSE );
192 this.el = XObject.isSeed ?
193 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_MEDIA_PLAY)
194 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_MEDIA_PLAY, null);
195 XObject.prototype.init.call(this);
197 label: 'Resume Commits',
198 always_show_image : true,
204 activate : function () {
205 this.parent.parent.paused = false;
206 imports.GitMonitor.GitMonitor.start();
207 //var status = this.el.label == 'Pause' ? 1 : 0
208 // this.el.label = status ? 'Resume' : 'Pause';
217 this.el = XObject.isSeed ?
218 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_FULLSCREEN)
219 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_FULLSCREEN, null);
221 XObject.prototype.init.call(this);
223 label: 'Pull (Refresh) All',
224 always_show_image : true,
229 activate : function () {
230 imports.GitMonitor.GitMonitor.stop();
233 var tr = imports.Scm.Repo.Repo.list();
234 for (var i= 0; i< tr.length;i++) {
235 this.parent.parent.el.set_from_stock( i%2 ? Gtk.STOCK_FULLSCREEN : Gtk.STOCK_LEAVE_FULLSCREEN );
238 if (!repo.autocommit()) {
239 //??? should we ignore ones not on autocommit..
243 this.parent.parent.el.set_tooltip_text("pull: " + repo.name);
245 var str = repo.pull();
246 // do not care if it's already in sycn..
247 if (str.match(/Already up-to-date/)) {
250 var notification = new Notify.Notification({
251 summary: "Updated " + repo.name,
254 notification.set_timeout(20);
258 this.parent.parent.el.set_from_stock( Gtk.STOCK_MEDIA_RECORD );
259 print(JSON.stringify(e));
260 print("notification or push errror- probably to many in queue..");
261 imports.gitlive.errorDialog(e.message);
265 this.parent.parent.el.set_tooltip_text(this.parent.parent.tooltip_text);
270 imports.GitMonitor.GitMonitor.start();
276 this.el = XObject.isSeed ?
277 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_SAVE)
278 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_SAVE, null);
280 XObject.prototype.init.call(this);
282 label: 'Update Timesheet',
283 always_show_image : true,
289 activate : function () {
290 var ret = imports.FixBug.FixBug.show();
299 this.el = XObject.isSeed ?
300 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_FULLSCREEN)
301 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_FULLSCREEN, null);
302 XObject.prototype.init.call(this);
304 label: 'Manage Clones',
305 always_show_image : true,
311 activate : function () {
312 var ret = imports.Clones.Clones.show();
323 this.el = XObject.isSeed ?
324 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_ABOUT)
325 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_ABOUT, null);
327 XObject.prototype.init.call(this);
329 label: 'About GitLive',
332 activate : function () {
333 var msg = new Gtk.AboutDialog({
334 program_name : "Git Live",
336 website: 'http://www.roojs.org/index.php/projects/gitlive.html',
337 website_label: 'RooJS Consulting',
340 msg.set_authors([ "Alan Knowles <alan@roojs.com>" ]);
350 this.el = XObject.isSeed ?
351 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_QUIT)
352 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_QUIT, null);
354 XObject.prototype.init.call(this);
359 activate : function () {