src/Builder4/WindowLeftProjects.bjs
[app.Builder.js] / src / Builder4 / WindowLeftProjects.vala
1 static Xcls_WindowLeftProjects  _WindowLeftProjects;
2
3 public class Xcls_WindowLeftProjects : Object
4 {
5     public Gtk.VBox el;
6     private Xcls_WindowLeftProjects  _this;
7
8     public static Xcls_WindowLeftProjects singleton()
9     {
10         if (_WindowLeftProjects == null) {
11             _WindowLeftProjects= new Xcls_WindowLeftProjects();
12         }
13         return _WindowLeftProjects;
14     }
15     public Xcls_view view;
16     public Xcls_model model;
17     public Xcls_namecol namecol;
18
19         // my vars (def)
20     public signal void project_selected (Project.Project project);
21     public bool is_loaded;
22     public bool is_loading;
23     public signal void show_new_project ();
24
25     // ctor
26     public Xcls_WindowLeftProjects()
27     {
28         _this = this;
29         this.el = new Gtk.VBox( false, 0 );
30
31         // my vars (dec)
32         this.is_loaded = false;
33         this.is_loading = false;
34
35         // set gobject values
36         var child_0 = new Xcls_ScrolledWindow2( _this );
37         child_0.ref();
38         this.el.pack_end (  child_0.el , true,true,0 );
39
40         //listeners
41         this.el.show.connect( ( ) => {
42             this.load();
43         });
44     }
45
46     // user defined functions
47     public  void load () {
48          // clear list...
49         
50          if (_this.is_loaded) {
51              return;
52          }
53          _this.is_loading = true;
54             
55          _this.is_loaded = true;
56          
57          Project.Project.loadAll();
58          var projects = Project.Project.allProjectsByName();
59          
60          Gtk.TreeIter iter;
61          var m = this.model.el;
62          m.clear();
63               
64          for (var i = 0; i < projects.size; i++) {
65             m.append(out iter);
66             m.set(iter,   0,projects.get(i).name );
67             
68             var o = new GLib.Value(typeof(Object));
69             o.set_object((Object)projects.get(i));
70                        
71             m.set_value(iter, 1, o);
72          
73          }
74          m.set_sort_column_id(0, Gtk.SortType.ASCENDING);
75          _this.is_loading = false;     
76     }
77     public  Project.Project? getSelectedProject () {    
78         Gtk.TreeIter iter;
79         Gtk.TreeModel mod;
80                 
81         var s = this.view.el.get_selection();
82         if (!s.get_selected(out mod, out iter)) {
83             return null;
84         }
85         
86         GLib.Value gval;
87     
88         mod.get_value(iter, 1 , out gval);
89         var project = (Project.Project)gval.get_object();
90         
91         return project;
92     }
93     public  void selectProject (Project.Project project) {
94         
95         var sel = _this.view.el.get_selection();
96         
97         sel.unselect_all();
98         
99         var found = false;
100         _this.model.el.foreach((mod, path, iter) => {
101             GLib.Value val;
102         
103             mod.get_value(iter, 1, out val);
104             if ( ( (Project.Project)val.get_object()).fn != project.fn) {
105                 print("SKIP %s != %s\n", ((Project.Project)val.get_object()).name , project.name);
106                 return false;//continue
107             }
108             sel.select_iter(iter);
109             this.project_selected(project);
110             found = true;
111             return true;
112             
113         
114         });
115          if (!found) {
116             print("tried to select %s, could not find it", project.name);
117         }
118     }
119     public class Xcls_ScrolledWindow2 : Object
120     {
121         public Gtk.ScrolledWindow el;
122         private Xcls_WindowLeftProjects  _this;
123
124
125             // my vars (def)
126
127         // ctor
128         public Xcls_ScrolledWindow2(Xcls_WindowLeftProjects _owner )
129         {
130             _this = _owner;
131             this.el = new Gtk.ScrolledWindow( null, null );
132
133             // my vars (dec)
134
135             // set gobject values
136             this.el.shadow_type = Gtk.ShadowType.IN;
137             var child_0 = new Xcls_view( _this );
138             child_0.ref();
139             this.el.add (  child_0.el  );
140
141             // init method
142
143             this.el.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
144         }
145
146         // user defined functions
147     }
148     public class Xcls_view : Object
149     {
150         public Gtk.TreeView el;
151         private Xcls_WindowLeftProjects  _this;
152
153
154             // my vars (def)
155
156         // ctor
157         public Xcls_view(Xcls_WindowLeftProjects _owner )
158         {
159             _this = _owner;
160             _this.view = this;
161             this.el = new Gtk.TreeView();
162
163             // my vars (dec)
164
165             // set gobject values
166             this.el.enable_tree_lines = true;
167             this.el.headers_visible = true;
168             var child_0 = new Xcls_model( _this );
169             child_0.ref();
170             this.el.set_model (  child_0.el  );
171             var child_1 = new Xcls_TreeViewColumn5( _this );
172             child_1.ref();
173             this.el.append_column (  child_1.el  );
174
175             // init method
176
177             var description = new Pango.FontDescription();
178                  description.set_size(8000);
179                 this.el.override_font(description);     
180                                 
181                 var selection = this.el.get_selection();
182                 selection.set_mode( Gtk.SelectionMode.SINGLE);
183
184             //listeners
185             this.el.cursor_changed.connect( () => {
186                 if (_this.is_loading) {
187                     return;
188                 }
189                 
190                 Gtk.TreeIter iter;
191                 Gtk.TreeModel mod;
192                         
193                 var s = this.el.get_selection();
194                 if (!s.get_selected(out mod, out iter)) {
195                     return;
196                 }
197                 
198                 GLib.Value gval;
199             
200                 mod.get_value(iter, 1 , out gval);
201                 var project = (Project.Project)gval.get_object();
202                 
203                 _this.project_selected(project);
204                 
205             });
206         }
207
208         // user defined functions
209     }
210     public class Xcls_model : Object
211     {
212         public Gtk.ListStore el;
213         private Xcls_WindowLeftProjects  _this;
214
215
216             // my vars (def)
217
218         // ctor
219         public Xcls_model(Xcls_WindowLeftProjects _owner )
220         {
221             _this = _owner;
222             _this.model = this;
223             this.el = new Gtk.ListStore( 2, typeof(string), typeof(Object) );
224
225             // my vars (dec)
226
227             // set gobject values
228
229             // init method
230
231             {
232                this.el.set_sort_func(0, (mod,a,b) => {
233                    GLib.Value ga, gb;
234                    mod.get_value(a,0, out ga);
235                    mod.get_value(b,0, out gb);
236                     
237                     if ((string)ga == (string)gb) {
238                         return 0;
239                     }
240                     return (string)ga > (string)gb ? 1 : -1;
241                }); 
242             
243             
244             }
245         }
246
247         // user defined functions
248     }
249
250     public class Xcls_TreeViewColumn5 : Object
251     {
252         public Gtk.TreeViewColumn el;
253         private Xcls_WindowLeftProjects  _this;
254
255
256             // my vars (def)
257
258         // ctor
259         public Xcls_TreeViewColumn5(Xcls_WindowLeftProjects _owner )
260         {
261             _this = _owner;
262             this.el = new Gtk.TreeViewColumn();
263
264             // my vars (dec)
265
266             // set gobject values
267             this.el.title = "Projects";
268             var child_0 = new Xcls_namecol( _this );
269             child_0.ref();
270             this.el.pack_start (  child_0.el , true );
271
272             // init method
273
274             this.el.add_attribute(_this.namecol.el , "markup", 0  );
275         }
276
277         // user defined functions
278     }
279     public class Xcls_namecol : Object
280     {
281         public Gtk.CellRendererText el;
282         private Xcls_WindowLeftProjects  _this;
283
284
285             // my vars (def)
286
287         // ctor
288         public Xcls_namecol(Xcls_WindowLeftProjects _owner )
289         {
290             _this = _owner;
291             _this.namecol = this;
292             this.el = new Gtk.CellRendererText();
293
294             // my vars (dec)
295
296             // set gobject values
297         }
298
299         // user defined functions
300     }
301
302
303
304
305 }