MergeBranch.bjs
[gitlive] / NewBranch.vala
1 static NewBranch  _NewBranch;
2
3 public class NewBranch : Object
4 {
5     public Gtk.Dialog el;
6     private NewBranch  _this;
7
8     public static NewBranch singleton()
9     {
10         if (_NewBranch == null) {
11             _NewBranch= new NewBranch();
12         }
13         return _NewBranch;
14     }
15     public Xcls_projectsel projectsel;
16     public Xcls_prcellrenderer prcellrenderer;
17     public Xcls_prmodel prmodel;
18     public Xcls_ticketsel ticketsel;
19     public Xcls_dbcellrenderer dbcellrenderer;
20     public Xcls_dbmodel dbmodel;
21     public Xcls_name name;
22     public Xcls_btn_not_me btn_not_me;
23     public Xcls_btn_closed btn_closed;
24     public Xcls_scrolled_window scrolled_window;
25     public Xcls_view view;
26
27         // my vars (def)
28     public GitRepo? repo;
29     public bool running;
30     public Gee.ArrayList<GitMonitorQueue> queue;
31
32     // ctor
33     public NewBranch()
34     {
35         _this = this;
36         this.el = new Gtk.Dialog();
37
38         // my vars (dec)
39         this.repo = null;
40         this.running = false;
41         this.queue = null;
42
43         // set gobject values
44         this.el.title = "Create a working branch ";
45         this.el.default_height = 500;
46         this.el.default_width = 500;
47         this.el.deletable = true;
48         this.el.modal = true;
49         var child_0 = new Xcls_Box2( _this );
50         child_0.ref();
51         this.el.get_content_area().add (  child_0.el  );
52
53         //listeners
54         this.el.delete_event.connect( (self, event) => {
55             this.el.hide();
56             return true; 
57             //test  
58         });
59         this.el.response.connect( (self, response_id) =>  { 
60           
61                 GLib.debug("got %d", (int) response_id);
62                 if (response_id < 1) {
63                     _this.el.hide();    
64                     this.running = false; 
65                         return;
66                 }
67                  
68                 // have they selected a ticket..
69                 // make that the current active ticket?
70                 // we really need to store locally what ticket is being worked on..
71                 // in theory we could be working on multiple project and not merging..
72                 // -- each repo would have their active ticket (only one per repo)
73                 // -- so we could just store that in there
74                 // -- initial load can check the contents of the ticket files on first scan.
75                 var ticket_id = _this.ticketsel.selectedTicketId();
76                 
77             if (this.repo != null) {
78                 var bn = _this.name.el.get_text();
79         
80                         var res = this.repo.setActiveTicket(                    
81                                  RooTicket.singleton().getById(ticket_id != "" ? ticket_id : "-1"), bn
82                          );
83                          if (res) {
84                                 // start the monitoring..
85                                  GitMonitor.gitmonitor.start();
86                                  
87                          }
88             }
89             
90         
91             this.running = false; 
92         
93                 this.el.hide();
94                  
95                  
96         
97                  
98         });
99     }
100
101     // user defined functions
102     public   void show ( GitRepo repo, Gee.ArrayList<GitMonitorQueue> queue, string tid = "" ) 
103     {
104          // this.el.set_gravity(Gdk.Gravity.NORTH);
105         if (this.running) { // should not happen!!
106                 GLib.error("new branch show called, when already being displayed?");
107         }
108         this.queue = queue;
109         
110         this.running  = true;
111         GitMonitor.gitmonitor.stop();
112         
113         this.repo = repo;
114         
115          
116         
117         this.el.move((Gdk.Screen.width() / 2)- 250 ,0);
118         this.el.set_default_size( 500,200); // not sure why it grows..
119         GLib.debug("Loading tickets"); 
120          
121     
122         this.el.show_all();
123         this.el.set_keep_above(true);
124        
125         
126         var curproj = RooProject.getProjectByRepo(this.repo);
127          _this.prmodel.loadProjects(curproj == null ? "" : curproj.id);
128         
129         _this.dbmodel.loadTickets(curproj == null ? "": curproj.id, tid);
130     
131         if (tid != "") {
132                 var name = RooTicket.singleton().usernameLocal();
133                 var ticket = RooTicket.singleton().getById(tid);
134                 _this.name.el.set_text("wip_%s_T%s_%s".printf(name,ticket.id, ticket.summaryToBranchName()));
135     
136     
137         }
138         _this.view.loadTicket(tid);
139         this.el.run();
140     
141     }
142     public class Xcls_Box2 : Object
143     {
144         public Gtk.Box el;
145         private NewBranch  _this;
146
147
148             // my vars (def)
149
150         // ctor
151         public Xcls_Box2(NewBranch _owner )
152         {
153             _this = _owner;
154             this.el = new Gtk.Box( Gtk.Orientation.VERTICAL, 0 );
155
156             // my vars (dec)
157
158             // set gobject values
159             var child_0 = new Xcls_Table3( _this );
160             child_0.ref();
161             this.el.pack_start (  child_0.el , false,false,0 );
162             var child_1 = new Xcls_scrolled_window( _this );
163             child_1.ref();
164             this.el.add (  child_1.el  );
165         }
166
167         // user defined functions
168     }
169     public class Xcls_Table3 : Object
170     {
171         public Gtk.Table el;
172         private NewBranch  _this;
173
174
175             // my vars (def)
176
177         // ctor
178         public Xcls_Table3(NewBranch _owner )
179         {
180             _this = _owner;
181             this.el = new Gtk.Table( 5, 5, true );
182
183             // my vars (dec)
184
185             // set gobject values
186             this.el.expand = false;
187             this.el.margin = 2;
188             this.el.column_spacing = 4;
189             this.el.vexpand = false;
190             var child_0 = new Xcls_Label4( _this );
191             child_0.ref();
192             this.el.attach_defaults (  child_0.el , 0,1,0,1 );
193             var child_1 = new Xcls_Label5( _this );
194             child_1.ref();
195             this.el.attach_defaults (  child_1.el , 1,2,0,1 );
196             var child_2 = new Xcls_projectsel( _this );
197             child_2.ref();
198             this.el.attach_defaults (  child_2.el , 0,1,1,2 );
199             var child_3 = new Xcls_ticketsel( _this );
200             child_3.ref();
201             this.el.attach_defaults (  child_3.el , 1,4,1,2 );
202             var child_4 = new Xcls_Button12( _this );
203             child_4.ref();
204             this.el.attach_defaults (  child_4.el , 4,5,1,2 );
205             var child_5 = new Xcls_Label13( _this );
206             child_5.ref();
207             this.el.attach_defaults (  child_5.el , 0,1,3,4 );
208             var child_6 = new Xcls_name( _this );
209             child_6.ref();
210             this.el.attach_defaults (  child_6.el , 0,4,4,5 );
211             var child_7 = new Xcls_Button15( _this );
212             child_7.ref();
213             this.el.attach_defaults (  child_7.el , 4,5,4,5 );
214             var child_8 = new Xcls_Box16( _this );
215             child_8.ref();
216             this.el.attach_defaults (  child_8.el , 0,5,2,3 );
217         }
218
219         // user defined functions
220     }
221     public class Xcls_Label4 : Object
222     {
223         public Gtk.Label el;
224         private NewBranch  _this;
225
226
227             // my vars (def)
228
229         // ctor
230         public Xcls_Label4(NewBranch _owner )
231         {
232             _this = _owner;
233             this.el = new Gtk.Label( "Project" );
234
235             // my vars (dec)
236
237             // set gobject values
238             this.el.halign = Gtk.Align.START;
239             this.el.justify = Gtk.Justification.RIGHT;
240             this.el.visible = true;
241         }
242
243         // user defined functions
244     }
245
246     public class Xcls_Label5 : Object
247     {
248         public Gtk.Label el;
249         private NewBranch  _this;
250
251
252             // my vars (def)
253
254         // ctor
255         public Xcls_Label5(NewBranch _owner )
256         {
257             _this = _owner;
258             this.el = new Gtk.Label( "Ticket" );
259
260             // my vars (dec)
261
262             // set gobject values
263             this.el.halign = Gtk.Align.START;
264             this.el.visible = true;
265         }
266
267         // user defined functions
268     }
269
270     public class Xcls_projectsel : Object
271     {
272         public Gtk.ComboBox el;
273         private NewBranch  _this;
274
275
276             // my vars (def)
277         public bool loading;
278
279         // ctor
280         public Xcls_projectsel(NewBranch _owner )
281         {
282             _this = _owner;
283             _this.projectsel = this;
284             this.el = new Gtk.ComboBox.with_entry();
285
286             // my vars (dec)
287             this.loading = false;
288
289             // set gobject values
290             var child_0 = new Xcls_prcellrenderer( _this );
291             child_0.ref();
292             this.el.pack_start (  child_0.el , true );
293             var child_1 = new Xcls_prmodel( _this );
294             child_1.ref();
295             this.el.set_model (  child_1.el  );
296
297             // init method
298
299             this.el.set_entry_text_column(1);
300
301             //listeners
302             this.el.changed.connect( () => {
303                 if (this.loading) {
304                         return;
305                 }
306                 var project_id = this.selectedProjectId();
307                 _this.dbmodel.loadTickets(project_id);
308                 
309                 
310                 /*if (this.loading) {
311                         return;
312                 }
313                 var ticket_id = this.selectedTicketId();
314                 
315                 var name = RooTicket.singleton().usernameLocal();
316                 
317                 if (ticket_id == "" || ticket_id == null) {
318                 
319                         var dt = new  DateTime.now_local();
320                         _this.name.el.set_text("wip_%s_%s".printf(name,dt.format("%Y_%b_%d")));
321                         return;
322                 }
323                 
324                 
325                 var ticket = RooTicket.singleton().getById(ticket_id);
326                
327                 _this.name.el.set_text("wip_%s_T%s_%s".printf(name,ticket.id, ticket.summaryToBranchName()));
328                 
329                 //GLib.debug (//"Selection: %s, %s\n", (string) val1, (string) val2);
330                 */
331             });
332         }
333
334         // user defined functions
335         public string selectedProjectId () {
336                 Gtk.TreeIter iter;
337                 Value val1;
338          
339          
340                 this.el.get_active_iter (out iter);
341                 _this.prmodel.el.get_value (iter, 0, out val1);
342          
343         
344                 return  (string) val1;
345                 
346                 
347                 
348                 
349         }
350     }
351     public class Xcls_prcellrenderer : Object
352     {
353         public Gtk.CellRendererText el;
354         private NewBranch  _this;
355
356
357             // my vars (def)
358
359         // ctor
360         public Xcls_prcellrenderer(NewBranch _owner )
361         {
362             _this = _owner;
363             _this.prcellrenderer = this;
364             this.el = new Gtk.CellRendererText();
365
366             // my vars (dec)
367
368             // set gobject values
369         }
370
371         // user defined functions
372     }
373
374     public class Xcls_prmodel : Object
375     {
376         public Gtk.ListStore el;
377         private NewBranch  _this;
378
379
380             // my vars (def)
381
382         // ctor
383         public Xcls_prmodel(NewBranch _owner )
384         {
385             _this = _owner;
386             _this.prmodel = this;
387             this.el = new Gtk.ListStore( 2, typeof(string),typeof(string) );
388
389             // my vars (dec)
390
391             // set gobject values
392         }
393
394         // user defined functions
395         public void loadProjects (string id) {
396         
397         
398             
399             _this.projectsel.loading = true;
400         
401             this.el.clear();                                    
402             Gtk.TreeIter iter;
403             var el = this.el;
404             
405             el.append(out iter);
406         
407             
408             el.set_value(iter, 0, "");
409             el.set_value(iter, 1, "-- select a project --");
410             if (id == "") {
411                     _this.projectsel.el.set_active_iter(iter);
412             }
413           
414             foreach(var project in RooProject.projects()) {
415             
416                 el.append(out iter);
417                 
418                 el.set_value(iter, 0, project.id);
419                 el.set_value(iter, 1,  project.name );
420                 if (id == project.id) {
421                            _this.projectsel.el.set_active_iter(iter);
422                     }   
423                 
424             }
425             
426             _this.projectsel.loading = false;
427              //this.el.set_sort_column_id(0, Gtk.SortType.ASCENDING);          
428                                              
429         }
430     }
431
432
433     public class Xcls_ticketsel : Object
434     {
435         public Gtk.ComboBox el;
436         private NewBranch  _this;
437
438
439             // my vars (def)
440         public bool loading;
441
442         // ctor
443         public Xcls_ticketsel(NewBranch _owner )
444         {
445             _this = _owner;
446             _this.ticketsel = this;
447             this.el = new Gtk.ComboBox.with_entry();
448
449             // my vars (dec)
450             this.loading = false;
451
452             // set gobject values
453             var child_0 = new Xcls_dbcellrenderer( _this );
454             child_0.ref();
455             this.el.pack_start (  child_0.el , true );
456             var child_1 = new Xcls_dbmodel( _this );
457             child_1.ref();
458             this.el.set_model (  child_1.el  );
459
460             // init method
461
462             //this.el.add_attribute(_this.dbcellrenderer.el , "markup", 1 );
463             this.el.set_entry_text_column(1);
464
465             //listeners
466             this.el.changed.connect( () => {
467                 if (this.loading) {
468                         return;
469                 }
470                 var ticket_id = this.selectedTicketId();
471                 
472                 var name = RooTicket.singleton().usernameLocal();
473                 
474                 if (ticket_id == "" || ticket_id == null) {
475                 
476                         var dt = new  DateTime.now_local();
477                         _this.name.el.set_text("wip_%s_%s".printf(name,dt.format("%Y_%b_%d")));
478                         _this.view.loadTicket("");              
479                         return;
480                 }
481                 
482                 
483                 var ticket = RooTicket.singleton().getById(ticket_id);
484                
485                 _this.name.el.set_text("wip_%s_T%s_%s".printf(name,ticket.id, ticket.summaryToBranchName()));
486                 _this.scrolled_window.el.show();
487                  
488                 _this.view.loadTicket(ticket.id);
489                 //GLib.debug (//"Selection: %s, %s\n", (string) val1, (string) val2);
490             });
491         }
492
493         // user defined functions
494         public string selectedTicketId () {
495         Gtk.TreeIter iter;
496                 Value val1;
497          
498          
499                 this.el.get_active_iter (out iter);
500                 _this.dbmodel.el.get_value (iter, 0, out val1);
501          
502         
503                 return  (string) val1;
504                 
505                 
506                 
507                 
508         }
509     }
510     public class Xcls_dbcellrenderer : Object
511     {
512         public Gtk.CellRendererText el;
513         private NewBranch  _this;
514
515
516             // my vars (def)
517
518         // ctor
519         public Xcls_dbcellrenderer(NewBranch _owner )
520         {
521             _this = _owner;
522             _this.dbcellrenderer = this;
523             this.el = new Gtk.CellRendererText();
524
525             // my vars (dec)
526
527             // set gobject values
528         }
529
530         // user defined functions
531     }
532
533     public class Xcls_dbmodel : Object
534     {
535         public Gtk.ListStore el;
536         private NewBranch  _this;
537
538
539             // my vars (def)
540
541         // ctor
542         public Xcls_dbmodel(NewBranch _owner )
543         {
544             _this = _owner;
545             _this.dbmodel = this;
546             this.el = new Gtk.ListStore( 2, typeof(string),typeof(string) );
547
548             // my vars (dec)
549
550             // set gobject values
551         }
552
553         // user defined functions
554         public void loadTickets (string project_id , string tid = "") {
555         
556         
557             
558             // fixme .. get project id from selection..
559             
560              RooTicket.singleton().loadTickets(
561                                 project_id,
562                                 _this.btn_not_me.el.active ? RooTicket.Who.ANYBODY :  RooTicket.Who.ME,
563                                  _this.btn_closed.el.active ? RooTicket.Status.ALL :  RooTicket.Status.ACTIVE
564                          );
565                 
566             _this.ticketsel.loading = true;
567         
568             this.el.clear();                                    
569             Gtk.TreeIter iter;
570             var el = this.el;
571             
572             el.append(out iter);
573         
574             
575             el.set_value(iter, 0, "");
576             el.set_value(iter, 1, "-- select a ticket --");
577             
578             _this.ticketsel.el.set_active_iter(iter);
579             var tickets = RooTicket.singleton().tickets;
580             foreach(var ticket in tickets) {
581             
582                 el.append(out iter);
583                 
584                 el.set_value(iter, 0, ticket.id);
585                 el.set_value(iter, 1, "#%s [%s] %s".printf( ticket.id, ticket.project_id_name , ticket.summary));
586                 
587                 if (ticket.id == tid) {
588                             _this.ticketsel.el.set_active_iter(iter);
589                 }
590                 
591             }
592             
593             _this.ticketsel.loading = false;
594              //this.el.set_sort_column_id(0, Gtk.SortType.ASCENDING);          
595                                              
596         }
597     }
598
599
600     public class Xcls_Button12 : Object
601     {
602         public Gtk.Button el;
603         private NewBranch  _this;
604
605
606             // my vars (def)
607
608         // ctor
609         public Xcls_Button12(NewBranch _owner )
610         {
611             _this = _owner;
612             this.el = new Gtk.Button();
613
614             // my vars (dec)
615
616             // set gobject values
617             this.el.expand = false;
618             this.el.label = "New Ticket";
619
620             //listeners
621             this.el.clicked.connect( () => {
622                 _this.el.response(-1);
623                 Ticket.singleton().show(_this.repo);
624             
625             });
626         }
627
628         // user defined functions
629     }
630
631     public class Xcls_Label13 : Object
632     {
633         public Gtk.Label el;
634         private NewBranch  _this;
635
636
637             // my vars (def)
638
639         // ctor
640         public Xcls_Label13(NewBranch _owner )
641         {
642             _this = _owner;
643             this.el = new Gtk.Label( "Use this as branch name" );
644
645             // my vars (dec)
646
647             // set gobject values
648             this.el.halign = Gtk.Align.START;
649             this.el.justify = Gtk.Justification.RIGHT;
650             this.el.xalign = 0.900000f;
651         }
652
653         // user defined functions
654     }
655
656     public class Xcls_name : Object
657     {
658         public Gtk.Entry el;
659         private NewBranch  _this;
660
661
662             // my vars (def)
663
664         // ctor
665         public Xcls_name(NewBranch _owner )
666         {
667             _this = _owner;
668             _this.name = this;
669             this.el = new Gtk.Entry();
670
671             // my vars (dec)
672
673             // set gobject values
674             this.el.visible = true;
675         }
676
677         // user defined functions
678     }
679
680     public class Xcls_Button15 : Object
681     {
682         public Gtk.Button el;
683         private NewBranch  _this;
684
685
686             // my vars (def)
687
688         // ctor
689         public Xcls_Button15(NewBranch _owner )
690         {
691             _this = _owner;
692             this.el = new Gtk.Button();
693
694             // my vars (dec)
695
696             // set gobject values
697             this.el.label = "Create Branch";
698
699             // init method
700
701             {
702                this.el.get_style_context().add_class("suggested-action");
703             }
704
705             //listeners
706             this.el.clicked.connect( () => {
707                 GLib.debug("fire response = 1");
708                 _this.el.response(1);
709             });
710         }
711
712         // user defined functions
713     }
714
715     public class Xcls_Box16 : Object
716     {
717         public Gtk.Box el;
718         private NewBranch  _this;
719
720
721             // my vars (def)
722
723         // ctor
724         public Xcls_Box16(NewBranch _owner )
725         {
726             _this = _owner;
727             this.el = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
728
729             // my vars (dec)
730
731             // set gobject values
732             var child_0 = new Xcls_btn_not_me( _this );
733             child_0.ref();
734             this.el.add (  child_0.el  );
735             var child_1 = new Xcls_btn_closed( _this );
736             child_1.ref();
737             this.el.add (  child_1.el  );
738             var child_2 = new Xcls_Label19( _this );
739             child_2.ref();
740             this.el.add (  child_2.el  );
741         }
742
743         // user defined functions
744     }
745     public class Xcls_btn_not_me : Object
746     {
747         public Gtk.CheckButton el;
748         private NewBranch  _this;
749
750
751             // my vars (def)
752
753         // ctor
754         public Xcls_btn_not_me(NewBranch _owner )
755         {
756             _this = _owner;
757             _this.btn_not_me = this;
758             this.el = new Gtk.CheckButton();
759
760             // my vars (dec)
761
762             // set gobject values
763             this.el.label = "Show tickets not assigned to me";
764
765             //listeners
766             this.el.toggled.connect( () => {
767                 var project_id = _this.projectsel.selectedProjectId();
768                 _this.dbmodel.loadTickets(project_id);  
769             });
770         }
771
772         // user defined functions
773     }
774
775     public class Xcls_btn_closed : Object
776     {
777         public Gtk.CheckButton el;
778         private NewBranch  _this;
779
780
781             // my vars (def)
782
783         // ctor
784         public Xcls_btn_closed(NewBranch _owner )
785         {
786             _this = _owner;
787             _this.btn_closed = this;
788             this.el = new Gtk.CheckButton();
789
790             // my vars (dec)
791
792             // set gobject values
793             this.el.label = "Show closed Tickets";
794
795             //listeners
796             this.el.toggled.connect( () => {
797                 var project_id = _this.projectsel.selectedProjectId();
798                 _this.dbmodel.loadTickets(project_id);  
799                  
800             });
801         }
802
803         // user defined functions
804     }
805
806     public class Xcls_Label19 : Object
807     {
808         public Gtk.Label el;
809         private NewBranch  _this;
810
811
812             // my vars (def)
813
814         // ctor
815         public Xcls_Label19(NewBranch _owner )
816         {
817             _this = _owner;
818             this.el = new Gtk.Label( "<a href=\"refresh\">Refresh Ticket list</a>" );
819
820             // my vars (dec)
821
822             // set gobject values
823             this.el.halign = Gtk.Align.END;
824             this.el.hexpand = true;
825             this.el.use_markup = true;
826
827             //listeners
828             this.el.activate_link.connect( (uri) => {
829                 if (uri == "refresh") {
830                         RooProject.reload();
831                         var curproj = RooProject.getProjectByRepo(_this.repo);
832                          _this.prmodel.loadProjects(curproj == null ? "": curproj.id);
833             
834                         _this.dbmodel.loadTickets(curproj == null ? "": curproj.id);            
835                 }
836                 return true;
837             });
838         }
839
840         // user defined functions
841     }
842
843
844
845     public class Xcls_scrolled_window : Object
846     {
847         public Gtk.ScrolledWindow el;
848         private NewBranch  _this;
849
850
851             // my vars (def)
852
853         // ctor
854         public Xcls_scrolled_window(NewBranch _owner )
855         {
856             _this = _owner;
857             _this.scrolled_window = this;
858             this.el = new Gtk.ScrolledWindow( null, null );
859
860             // my vars (dec)
861
862             // set gobject values
863             this.el.height_request = 500;
864             this.el.vexpand = true;
865             var child_0 = new Xcls_view( _this );
866             child_0.ref();
867             this.el.add (  child_0.el  );
868
869             // init method
870
871             {
872                 this.el.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
873             }
874         }
875
876         // user defined functions
877     }
878     public class Xcls_view : Object
879     {
880         public WebKit.WebView el;
881         private NewBranch  _this;
882
883
884             // my vars (def)
885
886         // ctor
887         public Xcls_view(NewBranch _owner )
888         {
889             _this = _owner;
890             _this.view = this;
891             this.el = new WebKit.WebView();
892
893             // my vars (dec)
894
895             // set gobject values
896         }
897
898         // user defined functions
899         public void loadTicket (string tid) {
900                 int h,w;
901                 _this.el.get_size(out w, out h);
902                 
903                 if (tid == "") {
904                         _this.scrolled_window.el.hide();
905                         _this.el.resize(w, 150);
906                 } else {
907                         _this.scrolled_window.el.show();
908                         _this.el.resize(w, 800);
909                 }
910                 
911                 var rs =  RooTicket.singleton();                
912                 var uri = new WebKit.URIRequest("https://roojs.com/admin.php/MTrack/View/" + tid);
913                 var hd = uri.get_http_headers();
914                 var authCode = Base64.encode ("%s:%s".printf(rs.username, rs.password).data);
915                 hd.append("Authorization", "Basic %s".printf(authCode));
916                 
917                  this.el.load_request(uri);
918         }
919     }
920
921
922
923 }