Uncommited changes synced
[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 = RooTicket.singleton().getProjectByRepo(this.repo);
127          _this.prmodel.loadProjects(curproj == null ? "" : curproj.id);
128         
129         _this.dbmodel.loadTickets(curproj == null ? "": curproj.id, tid);
130         _this.scrolled_window.el.hide();
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                 _this.scrolled_window.el.show();
136                 _this.view.loadTicket(tid);
137         }
138     
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             var rt = RooTicket.singleton();
398             rt.loadProjects();
399             
400             _this.projectsel.loading = true;
401         
402             this.el.clear();                                    
403             Gtk.TreeIter iter;
404             var el = this.el;
405             
406             el.append(out iter);
407         
408             
409             el.set_value(iter, 0, "");
410             el.set_value(iter, 1, "-- select a project --");
411             if (id == "") {
412                     _this.projectsel.el.set_active_iter(iter);
413             }
414             var projects = rt.projects;
415             foreach(var project in projects) {
416             
417                 el.append(out iter);
418                 
419                 el.set_value(iter, 0, project.id);
420                 el.set_value(iter, 1,  project.name );
421                 if (id == project.id) {
422                            _this.projectsel.el.set_active_iter(iter);
423                     }   
424                 
425             }
426             
427             _this.projectsel.loading = false;
428              //this.el.set_sort_column_id(0, Gtk.SortType.ASCENDING);          
429                                              
430         }
431     }
432
433
434     public class Xcls_ticketsel : Object
435     {
436         public Gtk.ComboBox el;
437         private NewBranch  _this;
438
439
440             // my vars (def)
441         public bool loading;
442
443         // ctor
444         public Xcls_ticketsel(NewBranch _owner )
445         {
446             _this = _owner;
447             _this.ticketsel = this;
448             this.el = new Gtk.ComboBox.with_entry();
449
450             // my vars (dec)
451             this.loading = false;
452
453             // set gobject values
454             var child_0 = new Xcls_dbcellrenderer( _this );
455             child_0.ref();
456             this.el.pack_start (  child_0.el , true );
457             var child_1 = new Xcls_dbmodel( _this );
458             child_1.ref();
459             this.el.set_model (  child_1.el  );
460
461             // init method
462
463             //this.el.add_attribute(_this.dbcellrenderer.el , "markup", 1 );
464             this.el.set_entry_text_column(1);
465
466             //listeners
467             this.el.changed.connect( () => {
468                 if (this.loading) {
469                         return;
470                 }
471                 var ticket_id = this.selectedTicketId();
472                 
473                 var name = RooTicket.singleton().usernameLocal();
474                 
475                 if (ticket_id == "" || ticket_id == null) {
476                 
477                         var dt = new  DateTime.now_local();
478                         _this.name.el.set_text("wip_%s_%s".printf(name,dt.format("%Y_%b_%d")));
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.view.loadTicket(ticket.id);
487                 //GLib.debug (//"Selection: %s, %s\n", (string) val1, (string) val2);
488             });
489         }
490
491         // user defined functions
492         public string selectedTicketId () {
493         Gtk.TreeIter iter;
494                 Value val1;
495          
496          
497                 this.el.get_active_iter (out iter);
498                 _this.dbmodel.el.get_value (iter, 0, out val1);
499          
500         
501                 return  (string) val1;
502                 
503                 
504                 
505                 
506         }
507     }
508     public class Xcls_dbcellrenderer : Object
509     {
510         public Gtk.CellRendererText el;
511         private NewBranch  _this;
512
513
514             // my vars (def)
515
516         // ctor
517         public Xcls_dbcellrenderer(NewBranch _owner )
518         {
519             _this = _owner;
520             _this.dbcellrenderer = this;
521             this.el = new Gtk.CellRendererText();
522
523             // my vars (dec)
524
525             // set gobject values
526         }
527
528         // user defined functions
529     }
530
531     public class Xcls_dbmodel : Object
532     {
533         public Gtk.ListStore el;
534         private NewBranch  _this;
535
536
537             // my vars (def)
538
539         // ctor
540         public Xcls_dbmodel(NewBranch _owner )
541         {
542             _this = _owner;
543             _this.dbmodel = this;
544             this.el = new Gtk.ListStore( 2, typeof(string),typeof(string) );
545
546             // my vars (dec)
547
548             // set gobject values
549         }
550
551         // user defined functions
552         public void loadTickets (string project_id , string tid = "") {
553         
554         
555             
556             // fixme .. get project id from selection..
557             
558              RooTicket.singleton().loadTickets(
559                                 project_id,
560                                 _this.btn_not_me.el.active ? RooTicket.Who.ANYBODY :  RooTicket.Who.ME,
561                                  _this.btn_closed.el.active ? RooTicket.Status.ALL :  RooTicket.Status.ACTIVE
562                          );
563                 
564             _this.ticketsel.loading = true;
565         
566             this.el.clear();                                    
567             Gtk.TreeIter iter;
568             var el = this.el;
569             
570             el.append(out iter);
571         
572             
573             el.set_value(iter, 0, "");
574             el.set_value(iter, 1, "-- select a ticket --");
575             
576             _this.ticketsel.el.set_active_iter(iter);
577             var tickets = RooTicket.singleton().tickets;
578             foreach(var ticket in tickets) {
579             
580                 el.append(out iter);
581                 
582                 el.set_value(iter, 0, ticket.id);
583                 el.set_value(iter, 1, "#%s [%s] %s".printf( ticket.id, ticket.project_id_name , ticket.summary));
584                 
585                 if (ticket.id == tid) {
586                             _this.ticketsel.el.set_active_iter(iter);
587                 }
588                 
589             }
590             
591             _this.ticketsel.loading = false;
592              //this.el.set_sort_column_id(0, Gtk.SortType.ASCENDING);          
593                                              
594         }
595     }
596
597
598     public class Xcls_Button12 : Object
599     {
600         public Gtk.Button el;
601         private NewBranch  _this;
602
603
604             // my vars (def)
605
606         // ctor
607         public Xcls_Button12(NewBranch _owner )
608         {
609             _this = _owner;
610             this.el = new Gtk.Button();
611
612             // my vars (dec)
613
614             // set gobject values
615             this.el.expand = false;
616             this.el.label = "New Ticket";
617
618             //listeners
619             this.el.clicked.connect( () => {
620                 _this.el.response(-1);
621                 Ticket.singleton().show(_this.repo);
622             
623             });
624         }
625
626         // user defined functions
627     }
628
629     public class Xcls_Label13 : Object
630     {
631         public Gtk.Label el;
632         private NewBranch  _this;
633
634
635             // my vars (def)
636
637         // ctor
638         public Xcls_Label13(NewBranch _owner )
639         {
640             _this = _owner;
641             this.el = new Gtk.Label( "Use this as branch name" );
642
643             // my vars (dec)
644
645             // set gobject values
646             this.el.halign = Gtk.Align.START;
647             this.el.justify = Gtk.Justification.RIGHT;
648             this.el.xalign = 0.900000f;
649         }
650
651         // user defined functions
652     }
653
654     public class Xcls_name : Object
655     {
656         public Gtk.Entry el;
657         private NewBranch  _this;
658
659
660             // my vars (def)
661
662         // ctor
663         public Xcls_name(NewBranch _owner )
664         {
665             _this = _owner;
666             _this.name = this;
667             this.el = new Gtk.Entry();
668
669             // my vars (dec)
670
671             // set gobject values
672             this.el.visible = true;
673         }
674
675         // user defined functions
676     }
677
678     public class Xcls_Button15 : Object
679     {
680         public Gtk.Button el;
681         private NewBranch  _this;
682
683
684             // my vars (def)
685
686         // ctor
687         public Xcls_Button15(NewBranch _owner )
688         {
689             _this = _owner;
690             this.el = new Gtk.Button();
691
692             // my vars (dec)
693
694             // set gobject values
695             this.el.label = "Create Branch";
696
697             // init method
698
699             {
700                this.el.get_style_context().add_class("suggested-action");
701             }
702
703             //listeners
704             this.el.clicked.connect( () => {
705                 GLib.debug("fire response = 1");
706                 _this.el.response(1);
707             });
708         }
709
710         // user defined functions
711     }
712
713     public class Xcls_Box16 : Object
714     {
715         public Gtk.Box el;
716         private NewBranch  _this;
717
718
719             // my vars (def)
720
721         // ctor
722         public Xcls_Box16(NewBranch _owner )
723         {
724             _this = _owner;
725             this.el = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
726
727             // my vars (dec)
728
729             // set gobject values
730             var child_0 = new Xcls_btn_not_me( _this );
731             child_0.ref();
732             this.el.add (  child_0.el  );
733             var child_1 = new Xcls_btn_closed( _this );
734             child_1.ref();
735             this.el.add (  child_1.el  );
736             var child_2 = new Xcls_Label19( _this );
737             child_2.ref();
738             this.el.add (  child_2.el  );
739         }
740
741         // user defined functions
742     }
743     public class Xcls_btn_not_me : Object
744     {
745         public Gtk.CheckButton el;
746         private NewBranch  _this;
747
748
749             // my vars (def)
750
751         // ctor
752         public Xcls_btn_not_me(NewBranch _owner )
753         {
754             _this = _owner;
755             _this.btn_not_me = this;
756             this.el = new Gtk.CheckButton();
757
758             // my vars (dec)
759
760             // set gobject values
761             this.el.label = "Show tickets not assigned to me";
762
763             //listeners
764             this.el.toggled.connect( () => {
765                 var project_id = _this.projectsel.selectedProjectId();
766                 _this.dbmodel.loadTickets(project_id);  
767             });
768         }
769
770         // user defined functions
771     }
772
773     public class Xcls_btn_closed : Object
774     {
775         public Gtk.CheckButton el;
776         private NewBranch  _this;
777
778
779             // my vars (def)
780
781         // ctor
782         public Xcls_btn_closed(NewBranch _owner )
783         {
784             _this = _owner;
785             _this.btn_closed = this;
786             this.el = new Gtk.CheckButton();
787
788             // my vars (dec)
789
790             // set gobject values
791             this.el.label = "Show closed Tickets";
792
793             //listeners
794             this.el.toggled.connect( () => {
795                 var project_id = _this.projectsel.selectedProjectId();
796                 _this.dbmodel.loadTickets(project_id);  
797                  
798             });
799         }
800
801         // user defined functions
802     }
803
804     public class Xcls_Label19 : Object
805     {
806         public Gtk.Label el;
807         private NewBranch  _this;
808
809
810             // my vars (def)
811
812         // ctor
813         public Xcls_Label19(NewBranch _owner )
814         {
815             _this = _owner;
816             this.el = new Gtk.Label( "<a href=\"refresh\">Refresh Ticket list</a>" );
817
818             // my vars (dec)
819
820             // set gobject values
821             this.el.halign = Gtk.Align.END;
822             this.el.hexpand = true;
823             this.el.use_markup = true;
824
825             //listeners
826             this.el.activate_link.connect( (uri) => {
827                 if (uri == "refresh") {
828                         var curproj = RooTicket.singleton().getProjectByRepo(_this.repo);
829                          _this.prmodel.loadProjects(curproj == null ? "": curproj.id);
830             
831                         _this.dbmodel.loadTickets(curproj == null ? "": curproj.id);            
832                 }
833                 return true;
834             });
835         }
836
837         // user defined functions
838     }
839
840
841
842     public class Xcls_scrolled_window : Object
843     {
844         public Gtk.ScrolledWindow el;
845         private NewBranch  _this;
846
847
848             // my vars (def)
849
850         // ctor
851         public Xcls_scrolled_window(NewBranch _owner )
852         {
853             _this = _owner;
854             _this.scrolled_window = this;
855             this.el = new Gtk.ScrolledWindow( null, null );
856
857             // my vars (dec)
858
859             // set gobject values
860             this.el.vexpand = true;
861             var child_0 = new Xcls_view( _this );
862             child_0.ref();
863             this.el.add (  child_0.el  );
864
865             // init method
866
867             {
868                 this.el.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
869             }
870         }
871
872         // user defined functions
873     }
874     public class Xcls_view : Object
875     {
876         public WebKit.WebView el;
877         private NewBranch  _this;
878
879
880             // my vars (def)
881
882         // ctor
883         public Xcls_view(NewBranch _owner )
884         {
885             _this = _owner;
886             _this.view = this;
887             this.el = new WebKit.WebView();
888
889             // my vars (dec)
890
891             // set gobject values
892         }
893
894         // user defined functions
895         public void loadTicket (string tid) {
896                  this.el.load_uri("http://www.google.com");
897         }
898     }
899
900
901
902 }