d677c5f3a62a07a499306070845c9c7ce57faf8b
[roobuilder] / src / Palete / Palete.vala
1
2 using Gtk;
3 namespace Palete 
4 {
5
6
7         public errordomain Error {
8                 INVALID_TYPE,
9                 NEED_IMPLEMENTING,
10                 MISSING_FILE,
11                 INVALID_VALUE
12         }
13  
14     public abstract class Palete : Object 
15     {
16         
17        
18         public string name;
19
20                 //public Gee.ArrayList<Usage> map;
21
22                 public Gee.HashMap<string,GirObject> classes; // used in roo.. 
23                 public Gee.HashMap<string,Gee.ArrayList<string>> dropCache;
24                 public Project.Project project;
25         
26         public void aconstruct(Project.Project project)
27         {
28                                 // nothing?
29                         this.project = project;
30                         //this.map = null;
31                         this.classes = null;
32                         this.dropCache = new Gee.HashMap<string,Gee.ArrayList<string>>() ;
33         }
34         
35          
36         public void saveTemplate (string name, JsRender.Node data)
37         {
38
39                         var gn = data.fqn();
40             // store it in user's directory..
41             var appdir =  GLib.Environment.get_home_dir() + "/.Builder"; 
42
43                         try {
44                         if (!GLib.FileUtils.test(appdir+ "/" + gn, GLib.FileTest.IS_DIR)) {
45                                         GLib.File.new_for_path (appdir+ "/" + gn).make_directory ();
46                                         
47                         }
48                         GLib.FileUtils.set_contents(appdir+ "/" + gn + "/" +  name + ".json", data.toJsonString());
49                 } catch (GLib.Error e) {
50                         GLib.debug("Error : %s", e.message);
51                 }    
52         }
53         
54         /**
55          * list templates - in home directory (and app dir in future...)
56          * @param {String} name  - eg. Gtk.Window..
57          * @return {Array} list of templates available..
58          */
59           
60         public  GLib.List<string> listTemplates (JsRender.Node node)
61         {
62             
63                         var gn = node.fqn();
64                                 
65                         var ret = new GLib.List<string>();
66                         var dir= GLib.Environment.get_home_dir() + "/.Builder/" + gn;
67                         if (!GLib.FileUtils.test(dir, GLib.FileTest.IS_DIR)) {
68                                 return ret;
69                         }
70                         
71
72
73                                     
74                         var f = File.new_for_path(dir);
75                         try {
76                                 var file_enum = f.enumerate_children(GLib.FileAttribute.STANDARD_DISPLAY_NAME, GLib.FileQueryInfoFlags.NONE, null);
77                                  
78                                 FileInfo next_file; 
79                                 while ((next_file = file_enum.next_file(null)) != null) {
80                                         var n = next_file.get_display_name();
81                                         if (!Regex.match_simple ("\\.json$", n)) {
82                                                 continue;
83                                         }
84                                         ret.append( dir + "/" + n);
85                                 }
86                         } catch (GLib.Error e) {
87                                 GLib.debug("Error : %s", e.message);
88                 }   
89                                 return ret;
90             
91                 }
92  
93         public JsRender.Node? loadTemplate(string path)
94         {
95
96                         var pa = new Json.Parser();
97                         try {
98                                 pa.load_from_file(path);
99                         } catch(GLib.Error e) {
100                                                         GLib.debug("Error : %s", e.message);
101                                 return null;
102                         }
103                         var node = pa.get_root();
104
105                         if (node.get_node_type () != Json.NodeType.OBJECT) {
106                                 return null;
107                         }
108                         var obj = node.get_object ();
109
110                         var ret = new JsRender.Node();
111
112
113                         ret.loadFromJson(obj, 1);
114                         ret.ref(); // not sure if needed -- but we had a case where ret became uninitialized?
115                 
116                         return ret;
117                 }
118
119  
120                  
121                 
122                 
123                       
124                 //public abstract void on_child_added(JsRender.Node? parent,JsRender.Node child);
125                 public abstract void load();
126                 public abstract Gee.HashMap<string,GirObject> getPropertiesFor(string ename, JsRender.NodePropType ptype);
127                 public abstract GirObject? getClass(string ename);
128         
129                 public abstract bool typeOptions(string fqn, string key, string type, out string[] opts);
130                 public abstract  Gee.ArrayList<CompletionProposal> suggestComplete(
131                                 JsRender.JsRender file,
132                                 JsRender.Node? node,
133                                 JsRender.NodeProp? prop,
134                                 string complete_string
135                 );
136                 public abstract Gee.ArrayList<string> getChildList(string in_rval, bool with_prop);
137                 public abstract Gee.ArrayList<string> getDropList(string rval);         
138                 public abstract JsRender.Node fqnToNode(string fqn);
139                 
140         }
141
142
143 }
144
145
146