*
*
*/
+namespace Project {
+ public errordomain Error {
+ INVALID_TYPE,
+ NEED_IMPLEMENTING,
+ MISSING_FILE,
+ INVALID_VALUE
+ }
-
-public class Project.Project : Object {
-
- public signal void on_changed ();
+ public class Project : Object {
+
+ public signal void on_changed ();
- public string id;
- public string fn = "";
- public string name = "";
- public Gee.HashMap<string,string> paths;
- public Gee.HashMap<string,JsRender.JsRender> files ;
- //tree : false,
- public string xtype;
-
-
-
- public Project (string path) {
-
- //this.name = name;
-
-
- this.paths = new Gee.HashMap<string,string>();
- this.files = new Gee.HashMap<string,JsRender.JsRender>();
- //XObject.extend(this, cfg);
- //this.files = { };
- this.paths.set(path, "dir");
-
-
- }
-
- /*
- public load
-
-
- load : function (o) // is this used??
- {
- if (!this.fetchTree) {
- console.log("Project.getTree tree called on base object?!?!");
- return false;
- }
-
- if (this.files) {
- return o.success.apply(o.scope || this, [this]);
- }
- return this.fetchTree(o);
-
- },
- */
- // public Palete getPalete ()
- //{
- //print("Project.Base: GET PROVIDER FOR " + this.xtype);
- // return ProjectManager.getPalete(this.xtype);
- // }
-
- public string toJSON(bool show_all)
- {
-
- var builder = new Json.Builder ();
-
- builder.begin_object ();
-
- builder.set_member_name ("name");
- builder.add_string_value (this.name);
+ public string id;
+ public string fn = "";
+ public string name = "";
+ public string runhtml = "";
+ public Gee.HashMap<string,string> paths;
+ public Gee.HashMap<string,JsRender.JsRender> files ;
+ //tree : false,
+ public string xtype;
+
+
+
+
+ public Project (string path) {
+
+ //this.name = name;
+
+
+ this.paths = new Gee.HashMap<string,string>();
+ this.files = new Gee.HashMap<string,JsRender.JsRender>();
+ //XObject.extend(this, cfg);
+ //this.files = { };
+ this.paths.set(path, "dir");
+
+
+ }
-
- builder.set_member_name ("fn");
- builder.add_string_value (this.fn);
+ public static Project factory(string xtype, string path)
+ {
+ switch(xtype) {
+ case "Gtk":
+ return new Gtk(path);
+ case "Roo":
+ return new Roo(path);
+ }
+ throw new Error.INVALID_TYPE("invalid project type");
+
+ }
+
+ /*
+ public load
+
+
+ load : function (o) // is this used??
+ {
+ if (!this.fetchTree) {
+ console.log("Project.getTree tree called on base object?!?!");
+ return false;
+ }
+
+ if (this.files) {
+ return o.success.apply(o.scope || this, [this]);
+ }
+ return this.fetchTree(o);
+
+ },
+ */
+ // public Palete getPalete ()
+ //{
+ //print("Project.Base: GET PROVIDER FOR " + this.xtype);
+ // return ProjectManager.getPalete(this.xtype);
+ // }
- builder.set_member_name ("xtype");
- builder.add_string_value (this.xtype);
-
- // file ??? try/false?
- builder.set_member_name ("paths");
-
-
- builder.begin_array ();
-
-
- var iter = this.paths.map_iterator();
- while (iter.next()) {
- builder.add_string_value (iter.get_key());
- }
- builder.end_array ();
- if (show_all) {
- builder.set_member_name ("files");
- builder.begin_array ();
- var fiter = this.files.map_iterator();
- while (fiter.next()) {
- builder.add_string_value (fiter.get_key());
- }
+ public void save()
+ {
+ // fixme..
+ }
+
+
+ public string toJSON(bool show_all)
+ {
+ var builder = new Json.Builder ();
+ builder.begin_object ();
+
+ builder.set_member_name ("name");
+ builder.add_string_value (this.name);
+
+
+ builder.set_member_name ("fn");
+ builder.add_string_value (this.fn);
+
+ builder.set_member_name ("xtype");
+ builder.add_string_value (this.xtype);
+
+ // file ??? try/false?
+ builder.set_member_name ("paths");
+
+
+ builder.begin_array ();
+
+
+ var iter = this.paths.map_iterator();
+ while (iter.next()) {
+ builder.add_string_value (iter.get_key());
+ }
builder.end_array ();
- }
+ if (show_all) {
+ builder.set_member_name ("files");
+ builder.begin_array ();
+ var fiter = this.files.map_iterator();
+ while (fiter.next()) {
+ builder.add_string_value (fiter.get_key());
+ }
+
+
+ builder.end_array ();
+ }
- builder.end_object ();
+ builder.end_object ();
- var generator = new Json.Generator ();
- var root = builder.get_root ();
- generator.set_root (root);
- if (show_all) {
- generator.pretty = true;
- generator.indent = 4;
- }
+ var generator = new Json.Generator ();
+ var root = builder.get_root ();
+ generator.set_root (root);
+ if (show_all) {
+ generator.pretty = true;
+ generator.indent = 4;
+ }
- return generator.to_data (null);
-
-
- }
- public string firstPath()
- {
- var iter = this.paths.map_iterator();
- while (iter.next()) {
- return iter.get_key();
- }
-
- return "";
- }
-
- // returns the first path
- public string getName()
- {
- var iter = this.paths.map_iterator();
- while (iter.next()) {
- return GLib.Path.get_basename(iter.get_key());
- }
-
- return "";
- }
- /**
- *
- * to tree - > should
- */
-
- public GLib.List<JsRender.JsRender> toTree ()
- {
-
-
-
- var files = new Gee.HashMap<string,JsRender.JsRender>();
+ return generator.to_data (null);
+
+
+ }
+ public string firstPath()
+ {
+ var iter = this.paths.map_iterator();
+ while (iter.next()) {
+ return iter.get_key();
+ }
+
+ return "";
+ }
+
+ // returns the first path
+ public string getName()
+ {
+ var iter = this.paths.map_iterator();
+ while (iter.next()) {
+ return GLib.Path.get_basename(iter.get_key());
+ }
+
+ return "";
+ }
+ /**
+ *
+ * to tree - > should
+ */
+
+ public GLib.List<JsRender.JsRender> toTree ()
+ {
+
+
+
+ var files = new Gee.HashMap<string,JsRender.JsRender>();
- var fiter = files.map_iterator();
- while(fiter.next()) {
- var fo = fiter.get_value();
-
- fo.hasParent = false;
- fo.cn = new GLib.List<JsRender.JsRender>();
-
- if (fo.fullname.length > 0) {
- files.set(fo.fullname, fo);
- }
- }
-
- var iter = files.map_iterator();
- while (iter.next()) {
- var f = iter.get_value();
-
- var par = f.parent;
- if (par.length < 1) {
- continue;
- }
- if (!files.has_key(par)) {
- continue;
- }
- files.get(par).cn.append(f);
- f.hasParent = true;
-
- };
-
- var ret = new GLib.List<JsRender.JsRender>();
- iter = files.map_iterator();
- while (iter.next()) {
- var f = iter.get_value();
-
- // f.sortCn();
- if (f.hasParent) {
- continue;
- }
- if (files.has_key(f.fullname)) {
-
- ret.append(f);
- }
- }
- ret.sort( (a,b) => {
- return a.path > b.path ? 1 : -1;
- });
-
-
- //print(JSON.stringify(ret,null,4));
-
- return ret;
-
-
- }
-
-
-
- public JsRender.JsRender? getById(string id)
- {
-
- var fiter = files.map_iterator();
- while(fiter.next()) {
-
- var f = fiter.get_value();
-
-
- //console.log(f.id + '?=' + id);
- if (f.id == id) {
- return f;
- }
- };
- return null;
- }
-
- public JsRender.JsRender loadFileOnly (string path)
- {
- var xt = this.xtype;
- return JsRender.JsRender.factory(xt, this, path);
-
- }
-
- public JsRender.JsRender create(string filename)
- {
- var ret = this.loadFileOnly(filename);
- ret.save();
- this.addFile(ret);
- return ret;
-
- }
-
-
- public void addFile(JsRender.JsRender pfile) { // add a single file, and trigger changed.
+ var fiter = this.files.map_iterator();
+ while(fiter.next()) {
+ var fo = fiter.get_value();
+
+ fo.hasParent = false;
+ fo.cn = new GLib.List<JsRender.JsRender>();
+
+ if (fo.fullname.length > 0) {
+ files.set(fo.fullname, fo);
+ }
+ }
+
+ var iter = files.map_iterator();
+ while (iter.next()) {
+ var f = iter.get_value();
+
+ var par = f.parent;
+ if (par.length < 1) {
+ continue;
+ }
+ if (!files.has_key(par)) {
+ continue;
+ }
+ files.get(par).cn.append(f);
+ f.hasParent = true;
+
+ };
+
+ var ret = new GLib.List<JsRender.JsRender>();
+ iter = files.map_iterator();
+ while (iter.next()) {
+ var f = iter.get_value();
+
+ // f.sortCn();
+ if (f.hasParent) {
+ continue;
+ }
+ if (files.has_key(f.fullname)) {
+
+ ret.append(f);
+ }
+ }
+ ret.sort( (a,b) => {
+ return a.path > b.path ? 1 : -1;
+ });
+
+
+ //print(JSON.stringify(ret,null,4));
+
+ return ret;
+
+
+ }
+
+
+
+ public JsRender.JsRender? getById(string id)
+ {
+
+ var fiter = files.map_iterator();
+ while(fiter.next()) {
+
+ var f = fiter.get_value();
+
+
+ //console.log(f.id + '?=' + id);
+ if (f.id == id) {
+ return f;
+ }
+ };
+ return null;
+ }
+
+ public JsRender.JsRender loadFileOnly (string path)
+ {
+ var xt = this.xtype;
+ return JsRender.JsRender.factory(xt, this, path);
+
+ }
+
+ public JsRender.JsRender create(string filename)
+ {
+ var ret = this.loadFileOnly(filename);
+ ret.save();
+ this.addFile(ret);
+ return ret;
+
+ }
+
+
+ public void addFile(JsRender.JsRender pfile) { // add a single file, and trigger changed.
- this.files.set(pfile.path, pfile); // duplicate check?
- this.on_changed();
- }
-
- public void add(string path, string type)
- {
- this.paths.set(path,type);
- //Seed.print(" type is '" + type + "'");
- if (type == "dir") {
- this.scanDir(path);
- // console.dump(this.files);
- }
- if (type == "file" ) {
+ this.files.set(pfile.path, pfile); // duplicate check?
+ this.on_changed();
+ }
+
+ public void add(string path, string type)
+ {
+ this.paths.set(path,type);
+ //Seed.print(" type is '" + type + "'");
+ if (type == "dir") {
+ this.scanDir(path);
+ // console.dump(this.files);
+ }
+ if (type == "file" ) {
- this.files.set(path,this.loadFileOnly( path ));
- }
- this.on_changed();
-
- }
- public void scanDirs()
- {
- var iter = this.paths.map_iterator();
- while (iter.next()) {
- //print("path: " + iter.get_key() + " : " + iter.get_value() +"\n");
- if (iter.get_value() != "dir") {
- continue;
- }
- this.scanDir(iter.get_key());
- }
- //console.dump(this.files);
-
- }
- // list files.
- public void scanDir(string dir, int dp =0 )
- {
- //dp = dp || 0;
- //print("Project.Base: Running scandir on " + dir +"\n");
- if (dp > 5) { // no more than 5 deep?
- return;
- }
- // this should be done async -- but since we are getting the proto up ...
-
- var subs = new GLib.List<string>();;
- var f = File.new_for_path(dir);
- try {
- var file_enum = f.enumerate_children(GLib.FileAttribute.STANDARD_DISPLAY_NAME, GLib.FileQueryInfoFlags.NONE, null);
-
-
- FileInfo next_file;
- while ((next_file = file_enum.next_file(null)) != null) {
- var fn = next_file.get_display_name();
-
-
- //print("trying" + dir + "/" + fn +"\n");
-
- if (fn[0] == '.') { // skip hidden
- continue;
- }
-
- if (FileUtils.test(dir + "/" + fn, GLib.FileTest.IS_DIR)) {
- subs.append(dir + "/" + fn);
- continue;
- }
-
- if (!Regex.match_simple("\\.bjs$", fn)) {
- //print("no a bjs\n");
- continue;
- }
- /*
- var parent = "";
- //if (dp > 0 ) {
-
- var sp = dir.split("/");
- var parent = "";
- for (var i = 0; i < sp.length; i++) {
-
- }
-
- /*
- sp = sp.splice(sp.length - (dp +1), (dp +1));
- parent = sp.join('.');
-
-
- if (typeof(_this.files[dir + '/' + fn]) != 'undefined') {
- // we already have it..
- _this.files[dir + '/' + fn].parent = parent;
- return;
- }
- */
- var xt = this.xtype;
- var el = JsRender.JsRender.factory(xt,this, dir + "/" + fn);
- this.files.set( dir + "/" + fn, el);
- // parent ??
-
-
- }
- } catch (Error e) {
- print("Project::scanDirs failed : " + e.message + "\n");
- }
- for (var i = 0; i < subs.length(); i++) {
-
- this.scanDir(subs.nth_data(i), dp+1);
- }
-
- }
-
+ this.files.set(path,this.loadFileOnly( path ));
+ }
+ this.on_changed();
+
+ }
+ public void scanDirs()
+ {
+ var iter = this.paths.map_iterator();
+ while (iter.next()) {
+ //print("path: " + iter.get_key() + " : " + iter.get_value() +"\n");
+ if (iter.get_value() != "dir") {
+ continue;
+ }
+ this.scanDir(iter.get_key());
+ }
+ //console.dump(this.files);
+
+ }
+ // list files.
+ public void scanDir(string dir, int dp =0 )
+ {
+ //dp = dp || 0;
+ //print("Project.Base: Running scandir on " + dir +"\n");
+ if (dp > 5) { // no more than 5 deep?
+ return;
+ }
+ // this should be done async -- but since we are getting the proto up ...
+
+ var subs = new GLib.List<string>();;
+ var f = File.new_for_path(dir);
+ try {
+ var file_enum = f.enumerate_children(GLib.FileAttribute.STANDARD_DISPLAY_NAME, GLib.FileQueryInfoFlags.NONE, null);
+
+
+ FileInfo next_file;
+ while ((next_file = file_enum.next_file(null)) != null) {
+ var fn = next_file.get_display_name();
+
+
+ //print("trying" + dir + "/" + fn +"\n");
+
+ if (fn[0] == '.') { // skip hidden
+ continue;
+ }
+
+ if (FileUtils.test(dir + "/" + fn, GLib.FileTest.IS_DIR)) {
+ subs.append(dir + "/" + fn);
+ continue;
+ }
+
+ if (!Regex.match_simple("\\.bjs$", fn)) {
+ //print("no a bjs\n");
+ continue;
+ }
+ /*
+ var parent = "";
+ //if (dp > 0 ) {
+
+ var sp = dir.split("/");
+ var parent = "";
+ for (var i = 0; i < sp.length; i++) {
+
+ }
+
+ /*
+ sp = sp.splice(sp.length - (dp +1), (dp +1));
+ parent = sp.join('.');
+
+
+ if (typeof(_this.files[dir + '/' + fn]) != 'undefined') {
+ // we already have it..
+ _this.files[dir + '/' + fn].parent = parent;
+ return;
+ }
+ */
+ var xt = this.xtype;
+ var el = JsRender.JsRender.factory(xt,this, dir + "/" + fn);
+ this.files.set( dir + "/" + fn, el);
+ // parent ??
+
+
+ }
+ } catch (Error e) {
+ print("Project::scanDirs failed : " + e.message + "\n");
+ }
+ for (var i = 0; i < subs.length(); i++) {
+
+ this.scanDir(subs.nth_data(i), dp+1);
+ }
+
+ }
+
+ }
}
-
\ No newline at end of file