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());
74 pubic StatusIconA statusicon;
76 class StatusIconA : StatusIcon {
80 public StatusIconA() {
86 this.stock = Gtk.STOCK_REFRESH;
87 this.tooltip_text = "GitLive";
88 this.title = "gitlive";
90 this.set_name("gitlive");
93 var menu = new MenuA();
96 this.popup_menu.connect( (button,event_time) =>{
98 //print(Array.prototype.slice.call(arguments).join(','));
100 //var menu = this.get('menu');
102 this.menu.show_all();
112 //Gtk.get_current_event_device ()
123 //var a = new Gdk.Rectangle();
124 // needs direction=inout setting in gir to work (in bugzilla @present)
125 //this.el.get_geometry(g,a,null);
127 // should check to see if @ top or bottom I guess..
128 //menu.el.get_toplevel().move(a.x, a.y +a.height);
129 //menu.el.get_toplevel().move(10,10);
137 public ImageMenuItem pause;
138 public ImageMenuItem resume;
142 this.pause = new ImageMenuItemA();
143 this.append(this.pause);
144 this.resume = new ImageMenuItemB();
145 this.append(this.resume);
149 class ImageMenuItemA : ImageMenuItem {
151 public ImageMenuItemA()
153 this.set_from_stock( Gtk.STOCK_MEDIA_PAUSE );
154 this.label= "Pause Commits";
155 this.always_show_image = true;
156 this.accel_group = null;
158 this.activate.connect( () => {
159 statusicon.paused = true;
161 //GitMonitor.GitMonitor.stop();
162 // this.el.label = status ? 'Resume' : 'Pause';
163 statusicon.el.set_from_stock( Gtk.STOCK_MEDIA_PAUSE );
172 class ImageMenuItemB : ImageMenuItem {
174 public ImageMenuItemB()
176 this.set_from_stock( Gtk.STOCK_MEDIA_PLAY );
177 this.label= "Start Commits";
178 this.always_show_image = true;
179 this.accel_group = null;
181 this.activate.connect( () => {
182 //GitMonitor.GitMonitor.start();
183 statusicon.paused = false;
186 // this.el.label = status ? 'Resume' : 'Pause';
187 statusicon.el.set_from_stock( Gtk.STOCK_MEDIA_PAUSE );
210 activate : function () {
211 this.parent.parent.paused = true;
212 imports.GitMonitor.GitMonitor.stop();
213 // this.el.label = status ? 'Resume' : 'Pause';
214 this.parent.parent.el.set_from_stock( Gtk.STOCK_MEDIA_PAUSE );
222 this.el = XObject.isSeed ?
223 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_MEDIA_PLAY)
224 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_MEDIA_PLAY, null);
225 XObject.prototype.init.call(this);
227 label: 'Resume Commits',
228 always_show_image : true,
234 activate : function () {
235 this.parent.parent.paused = false;
236 imports.GitMonitor.GitMonitor.start();
237 //var status = this.el.label == 'Pause' ? 1 : 0
238 // this.el.label = status ? 'Resume' : 'Pause';
247 this.el = XObject.isSeed ?
248 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_FULLSCREEN)
249 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_FULLSCREEN, null);
251 XObject.prototype.init.call(this);
253 label: 'Pull (Refresh) All',
254 always_show_image : true,
259 activate : function () {
260 imports.GitMonitor.GitMonitor.stop();
263 var tr = imports.Scm.Repo.Repo.list();
264 for (var i= 0; i< tr.length;i++) {
265 this.parent.parent.el.set_from_stock( i%2 ? Gtk.STOCK_FULLSCREEN : Gtk.STOCK_LEAVE_FULLSCREEN );
268 if (!repo.autocommit()) {
269 //??? should we ignore ones not on autocommit..
273 this.parent.parent.el.set_tooltip_text("pull: " + repo.name);
275 var str = repo.pull();
276 // do not care if it's already in sycn..
277 if (str.match(/Already up-to-date/)) {
280 var notification = new Notify.Notification({
281 summary: "Updated " + repo.name,
284 notification.set_timeout(20);
288 this.parent.parent.el.set_from_stock( Gtk.STOCK_MEDIA_RECORD );
289 print(JSON.stringify(e));
290 print("notification or push errror- probably to many in queue..");
291 imports.gitlive.errorDialog(e.message);
295 this.parent.parent.el.set_tooltip_text(this.parent.parent.tooltip_text);
300 imports.GitMonitor.GitMonitor.start();
306 this.el = XObject.isSeed ?
307 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_SAVE)
308 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_SAVE, null);
310 XObject.prototype.init.call(this);
312 label: 'Update Timesheet',
313 always_show_image : true,
319 activate : function () {
320 var ret = imports.FixBug.FixBug.show();
329 this.el = XObject.isSeed ?
330 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_FULLSCREEN)
331 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_FULLSCREEN, null);
332 XObject.prototype.init.call(this);
334 label: 'Manage Clones',
335 always_show_image : true,
341 activate : function () {
342 var ret = imports.Clones.Clones.show();
353 this.el = XObject.isSeed ?
354 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_ABOUT)
355 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_ABOUT, null);
357 XObject.prototype.init.call(this);
359 label: 'About GitLive',
362 activate : function () {
363 var msg = new Gtk.AboutDialog({
364 program_name : "Git Live",
366 website: 'http://www.roojs.org/index.php/projects/gitlive.html',
367 website_label: 'RooJS Consulting',
370 msg.set_authors([ "Alan Knowles <alan@roojs.com>" ]);
380 this.el = XObject.isSeed ?
381 new Gtk.ImageMenuItem.from_stock(Gtk.STOCK_QUIT)
382 : new Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_QUIT, null);
384 XObject.prototype.init.call(this);
389 activate : function () {