Partial Fix #5560 - Gitlive - branching wip
[gitlive] / Clone.vala
1 static Clone  _Clone;
2
3 public class Clone : Object
4 {
5     public Gtk.Popover el;
6     private Clone  _this;
7
8     public static Clone singleton()
9     {
10         if (_Clone == null) {
11             _Clone= new Clone();
12         }
13         return _Clone;
14     }
15     public Xcls_reposel reposel;
16     public Xcls_prcellrenderer prcellrenderer;
17     public Xcls_repomodel repomodel;
18
19         // my vars (def)
20
21     // ctor
22     public Clone()
23     {
24         _this = this;
25         this.el = new Gtk.Popover( null );
26
27         // my vars (dec)
28
29         // set gobject values
30         this.el.border_width = 0;
31         this.el.modal = true;
32         this.el.position = Gtk.PositionType.RIGHT;
33         var child_0 = new Xcls_Box2( _this );
34         child_0.ref();
35         this.el.add (  child_0.el  );
36     }
37
38     // user defined functions
39     public void show (Gtk.Widget btn) {
40      
41                 //console.log('show all');
42         this.el.set_modal(true);
43         this.el.set_relative_to(btn);
44         this.repomodel.loadRepos();
45         //this.el.set_position(Gtk.PositionType.RIGHT);
46     
47         // window + header?
48          GLib.debug("SHOWALL - POPIP\n");
49         this.el.show_all();
50     ;
51     }
52     public class Xcls_Box2 : Object
53     {
54         public Gtk.Box el;
55         private Clone  _this;
56
57
58             // my vars (def)
59
60         // ctor
61         public Xcls_Box2(Clone _owner )
62         {
63             _this = _owner;
64             this.el = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
65
66             // my vars (dec)
67
68             // set gobject values
69             this.el.expand = false;
70             this.el.vexpand = false;
71             var child_0 = new Xcls_reposel( _this );
72             child_0.ref();
73             this.el.add (  child_0.el  );
74             var child_1 = new Xcls_Button6( _this );
75             child_1.ref();
76             this.el.add (  child_1.el  );
77         }
78
79         // user defined functions
80     }
81     public class Xcls_reposel : Object
82     {
83         public Gtk.ComboBox el;
84         private Clone  _this;
85
86
87             // my vars (def)
88         public bool loading;
89
90         // ctor
91         public Xcls_reposel(Clone _owner )
92         {
93             _this = _owner;
94             _this.reposel = this;
95             this.el = new Gtk.ComboBox.with_entry();
96
97             // my vars (dec)
98             this.loading = false;
99
100             // set gobject values
101             this.el.hexpand = true;
102             var child_0 = new Xcls_prcellrenderer( _this );
103             child_0.ref();
104             this.el.pack_start (  child_0.el , true );
105             var child_1 = new Xcls_repomodel( _this );
106             child_1.ref();
107             this.el.set_model (  child_1.el  );
108
109             // init method
110
111             this.el.set_entry_text_column(1);
112         }
113
114         // user defined functions
115         public string selectedRepo () {
116                 Gtk.TreeIter iter;
117                 Value val1;
118          
119          
120                 this.el.get_active_iter (out iter);
121                 _this.repomodel.el.get_value (iter, 0, out val1);
122          
123         
124                 return  (string) val1;
125                 
126                 
127                 
128                 
129         }
130     }
131     public class Xcls_prcellrenderer : Object
132     {
133         public Gtk.CellRendererText el;
134         private Clone  _this;
135
136
137             // my vars (def)
138
139         // ctor
140         public Xcls_prcellrenderer(Clone _owner )
141         {
142             _this = _owner;
143             _this.prcellrenderer = this;
144             this.el = new Gtk.CellRendererText();
145
146             // my vars (dec)
147
148             // set gobject values
149         }
150
151         // user defined functions
152     }
153
154     public class Xcls_repomodel : Object
155     {
156         public Gtk.ListStore el;
157         private Clone  _this;
158
159
160             // my vars (def)
161
162         // ctor
163         public Xcls_repomodel(Clone _owner )
164         {
165             _this = _owner;
166             _this.repomodel = this;
167             this.el = new Gtk.ListStore( 2, typeof(string),typeof(string) );
168
169             // my vars (dec)
170
171             // set gobject values
172         }
173
174         // user defined functions
175         public void loadRepos () {
176         
177             var rt = RooTicket.singleton();
178             var gr = GitRepo.singleton();
179             _this.reposel.loading = true;
180         
181             this.el.clear();                                    
182             Gtk.TreeIter iter;
183             var el = this.el;
184             
185             el.append(out iter);
186         
187             
188             el.set_value(iter, 0, "");
189             el.set_value(iter, 1, "-- select a repo --");
190          
191                 _this.reposel.el.set_active_iter(iter);
192             
193             var projects = rt.projects;
194             foreach(var newrepo in rt.repos) {
195                 var has_repo = false;
196                 foreach(var repo in gr.cache.values) {
197                         if (newrepo.shortname == repo.name) {
198                                 has_repo = true;
199                         }
200                 }
201                 if (has_repo) {
202                         continue;
203                         }
204                 el.append(out iter);
205                 
206                 el.set_value(iter, 0, newrepo.shortname);
207                 el.set_value(iter, 1, newrepo.shortname); // "%s : %s".printf(newrepo.shortname, newrepo.description) );
208                
209                 
210             }
211             
212             _this.reposel.loading = false;
213              //this.el.set_sort_column_id(0, Gtk.SortType.ASCENDING);          
214                                              
215         }
216     }
217
218
219     public class Xcls_Button6 : Object
220     {
221         public Gtk.Button el;
222         private Clone  _this;
223
224
225             // my vars (def)
226
227         // ctor
228         public Xcls_Button6(Clone _owner )
229         {
230             _this = _owner;
231             this.el = new Gtk.Button();
232
233             // my vars (dec)
234
235             // set gobject values
236             this.el.label = "Checkout";
237
238             //listeners
239             this.el.button_press_event.connect( () => {
240                   _this.el.hide();
241                   Clones.singleton().el.hide();
242                  var repo = _this.reposel.selectedRepo();
243                     GitMonitor.gitmonitor.stop();
244                     
245                 
246                     string[]  args = { "git" , "--no-pager" , "clone" };
247                 
248                     args +=  ("http://git.roojs.com/" + repo );
249              
250                 
251             
252                     string[]   env = {};
253                     string  home = "HOME=" + Environment.get_home_dir() ;
254                     env +=  home ;
255                         //v.push("GITPATH=" + this.repo );
256                     //}
257                       
258                     var cfg = new SpawnConfig(Environment.get_home_dir() + "/gitlive" , args , env);
259                     //cfg.debug = true;
260             
261                    // may throw error...
262                     var sp = new Spawn(cfg);
263                   
264                          GLib.debug("Spawn: %s", sp.output);
265                 
266                     
267                     
268                     
269                     
270                     
271                     GitMonitor.gitmonitor.start();
272             
273                      GitRepo.updateAll("show_clones");
274                   
275                     return false;
276             });
277         }
278
279         // user defined functions
280     }
281
282
283 }