02fac8a5028037056943867e14dbe941dcee12d5
[app.Builder.js] / Builder / MidPropTree.js
1 //<Script type="text/javascript">
2 Gio = imports.gi.Gio;
3 Gtk = imports.gi.Gtk;
4 GLib = imports.gi.GLib;
5 GObject = imports.gi.GObject;
6 Pango = imports.gi.Pango ;
7
8
9
10 XObject = imports.XObject.XObject;
11 console = imports.console;
12
13
14 Roo             = imports.Builder.Provider.Palete.Roo.Roo;
15
16
17
18 /**
19  * 
20  * Properties and events tree - that hides and shows when you press buttons on the left....
21  * 
22  */
23  
24 MidPropTree = new XObject({
25          
26         
27         xtype: Gtk.ScrolledWindow,
28         smooth_scroll : true,
29         pack : [ 'pack_end', false, true, 0 ],
30         
31         activeElement : false, // used by left tree to set what list to show.  
32         shadow_type :  Gtk.ShadowType.IN,
33         init : function() {
34             XObject.prototype.init.call(this); 
35             this.el.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
36             this.el.set_size_request ( 150, -1 );
37             this.shown = true;
38         },
39         
40         hideWin : function() {
41             
42             if (!this.shown) {
43                 return;
44             }
45             
46             var Window          = imports.Builder.Window.Window;            
47             if (Window.get('left').el.position < 160) {
48                 return;
49             }
50             Window.get('left').el.position = Window.get('left').el.position  - 150;
51                 
52             this.el.hide();
53             this.shown = false;
54         },
55         items : [
56             {
57                    
58                 
59                 xtype : Gtk.TreeView,
60                 
61                 enable_tree_lines :  true,
62                 tooltip_column : 2,
63                 headers_visible : false,
64                 // selection  -- set by init..
65                 init : function() {
66                     XObject.prototype.init.call(this); 
67                     
68            
69                     
70                     this.selection = this.el.get_selection();
71                     this.selection.set_mode( Gtk.SelectionMode.SINGLE);
72                  
73                 
74                     
75                     var description = new Pango.FontDescription.c_new();
76                     description.set_size(8000);
77                     this.el.modify_font(description);
78                     
79                        // this.column.add_attribute(this.column.items[1], "text", 1);
80                         
81                          
82                      
83                   //  this.expand_all();
84                 },
85                 listeners : {
86                     
87                     'cursor-changed' : function () {
88                         var iter = new Gtk.TreeIter();
89                         
90                         //console.log('changed');
91                         var m = this.get('model');
92                         var s = this.selection;
93                         s.get_selected(m.el, iter);
94                         var tp = m.el.get_path(iter).to_string();
95                         
96                         
97                         // var val = "";
98                         
99                         var key = m.getValue(tp, 0);
100                         
101                         var type = m.getValue(tp, 1);
102                         var skel = m.getValue(tp, 3);
103                         var etype = m.getValue(tp, 5);
104                         
105                         
106                         MidPropTree.hideWin();
107                         var LeftPanel       = imports.Builder.LeftPanel.LeftPanel;
108                         if (type == 'function') {
109                             if (etype != 'events') {
110                                 key = '|' + key;
111                             }
112                             
113                             LeftPanel.get('model').add({
114                                 key :  key, 
115                                 type : type,
116                                 val  : skel,
117                                 etype : etype
118                             })  
119                             return;
120                         }
121                         
122                         LeftPanel.get('model').add( {
123                             key : key, 
124                             type : type,
125                             //skel  : skel,
126                             etype : etype
127                            }) //, skel);
128                         
129                         
130                     }
131                 },
132                 items : [
133                 
134                     {
135                         id : 'model',
136                         pack : [ 'set_model' ],
137                         xtype : Gtk.ListStore,
138                         currentData : false,
139                         init : function() {
140                             XObject.prototype.init.call(this); 
141                             this.el.set_column_types ( 6, [
142                                 GObject.TYPE_STRING,  // real key
143                                  GObject.TYPE_STRING, // real type
144                                  GObject.TYPE_STRING, // docs ?
145                                  GObject.TYPE_STRING, // visable desc
146                                  GObject.TYPE_STRING, // function desc
147                                  GObject.TYPE_STRING // element type (event|prop)
148                                 
149                             ] );
150                                 
151                         },
152                         getValue : function(treepath, col)
153                         {
154                             var tp = new Gtk.TreePath.from_string (treepath);
155                             var iter = new Gtk.TreeIter();
156                             this.el.get_iter (iter, tp);
157                             var value = new GObject.Value('');
158                             this.el.get_value(iter, col, value);
159                             return value.value;
160                             
161                         },
162                         /*
163                         load : function (ar)
164                         {
165                             this.el.clear();
166                             // roo specific..
167                             var LeftTree       = imports.Builder.LeftTree.LeftTree;
168                             var fullpath = LeftTree.get('model').file.guessName(ar);
169                             var palete = LeftTree.getPaleteProvider();
170                             
171                             
172                             this.currentData  = false;
173                             if (!fullpath.length) {
174                                 return;
175                             }
176                             palete.getProperties()
177                             
178                             this.currentData = Roo.proplist[fullpath];
179                             
180                              
181                              
182                             
183                         },
184                         
185                         */
186                         
187                         
188                         showData : function (type) 
189                         {
190                             this.el.clear();
191                             if (!MidPropTree.activeElement || !type) {
192                                 return; // no active element
193                             }
194                             var LeftTree       = imports.Builder.LeftTree.LeftTree;
195                             var fullpath = LeftTree.get('model').file.guessName(MidPropTree.activeElement);
196                             var palete = LeftTree.getPaleteProvider();
197                             
198                              
199                             
200                             Seed.print('Showing right?');
201                             if (!MidPropTree.shown) {
202                                 var Window          = imports.Builder.Window.Window;
203                                 Window.get('left').el.position = Window.get('left').el.position  + 150;
204                                 MidPropTree.el.show();
205                                 MidPropTree.shown = true;
206                             }
207                             
208                             var elementList = palete.getPropertiesFor(fullpath, type);
209                             print ("GOT " + elementList.length + " items for " + fullpath + "|" + type);
210                             console.dump(elementList);
211                            
212                             
213                             var iter = new Gtk.TreeIter();
214                             for(var i =0 ; i < elementList.length; i++) {
215                                 var p=elementList[i];
216                                 this.el.append(iter);
217                               //  console.log( '<b>' + p.name +'</b> ['+p.type+']');
218                                     //GObject.TYPE_STRING,  // real key
219                                     // GObject.TYPE_STRING, // real type
220                                     // GObject.TYPE_STRING, // docs ?
221                                     // GObject.TYPE_STRING // func def?
222                                     
223                                 
224                                 this.el.set_value(iter, 0, p.name);
225                                 this.el.set_value(iter, 1, p.type);
226                                 this.el.set_value(iter, 2, '<span size="small"><b>' + p.name +'</b> ['+p.type+']</span>' + "\n" + p.desc);
227                                 this.el.set_value(iter, 3, p.sig ? p.sig  : '');
228                                 this.el.set_value(iter, 4, '<span size="small"><b>' + p.name +'</b> ['+p.type+']</span>');
229                                 this.el.set_value(iter, 5, type);
230                                 
231                             }
232                              
233                           
234                             
235                         }
236                          
237                         
238                     },
239                   
240                     
241
242                     {
243                         
244                         xtype: Gtk.TreeViewColumn,
245                         pack : ['append_column'],
246                         init : function() {
247                             XObject.prototype.init.call(this); 
248                  
249                         
250                             this.el.add_attribute(this.items[0].el , 'markup', 4  );
251                         },
252                         items : [
253                             {
254                                 xtype : Gtk.CellRendererText,
255                                 pack : ['pack_start']
256                             }
257                         ]
258                     }
259                 ]   
260             }
261         ]    
262             
263     }
264
265 );
266