Mercurial > MadButterfly
view inkscape/firefox/content/inkscape.js @ 1535:9aff42a7e2b9 tip
Fix issue of add/remove a frame at a scene before all key frames of a layer.
When you added or removed a frame at a scene before all key frames of
a layer, frameline was not updated correctly. It seems nothing
happened, but domview is updated. This changeset fix this issue by
correcting logic for boundary case.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Fri, 30 Sep 2011 22:07:28 +0800 |
parents | ebf83a50e1e1 |
children |
line wrap: on
line source
var isInProgress=0; var MAX_DUMP_DEPTH = 10; var inkscape; function endsWith(str, s){ var reg = new RegExp (s + "$"); return reg.test(str); } function dumpXML(xml) { return (new XMLSerializer()).serializeToString(xml); } function showInWindow(content) { $('#debug').append("<pre>"+content+"</pre>"); } function dumpObj(obj, name, indent, depth) { if (depth > MAX_DUMP_DEPTH) { return indent + name + ": <Maximum Depth Reached>\n"; } if (typeof obj == "object") { var child = null; var output = indent + name + "\n"; indent += "\t"; for (var item in obj) { try { child = obj[item]; } catch (e) { child = "<Unable to Evaluate>"; } if (typeof child == "object") { output += dumpObj(child, item, indent, depth + 1); } else { output += indent + item + ": " + child + "\n"; } } return output; } else { return obj; } } function dumpObjItem(obj, name, indent, depth) { if (depth > MAX_DUMP_DEPTH) { return indent + name + ": <Maximum Depth Reached>\n"; } if (typeof obj == "object") { var child = null; var output = indent + name + "\n"; indent += "\t"; for (var item in obj) { try { child = obj[item]; } catch (e) { child = "<Unable to Evaluate>"; } if (typeof child == "object") { output += dumpObjItem(child, item, indent, depth + 1); } else { output += indent + item + ":\n"; } } return output; } else { return obj; } } /** * TextEditor class * */ function TextEditor(file) { var editor = document.getElementById('inkscape'); editor.innerHTML = "<embed src="+file+" width=900 height=700 />"; this.isInProgress = 0; } /** * Inkscape class * */ function Inkscape(file) { var ink = document.getElementById('inkscape'); ink.innerHTML = "<embed src="+file+" width=900 height=700 />"; this.isInProgress = 0; this.callback = null; this.animation = new MadSwatter(this); setTimeout("inkscape.fetchDocument()",3000); } Inkscape.prototype.gotoScene = function (n) { nextScene = n; var soapBody = new SOAPObject("START"); var sr = new SOAPRequest("START", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.gotoScene1(resp);},this); this.isInProgress++; } Inkscape.prototype.gotoScene1 = function (resp,n) { var soapBody = new SOAPObject("SCENE"); var v1 = new SOAPObject("v1"); v1.val(nextScene); soapBody.appendChild(v1); var sr = new SOAPRequest("SCENE", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.gotoScene2(resp);},this); } Inkscape.prototype.gotoScene2 = function (resp) { var soapBody = new SOAPObject("PUBLISH"); var sr = new SOAPRequest("PUBLISH", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.gotoScene3(resp);},this); } Inkscape.prototype.gotoScene3 = function (resp) { this.isInProgress--; } Inkscape.prototype.publishDocument= function(resp) { mbsvg = new MBSVGString(resp.Body[0].GETDOCResponse[0].Result[0].Text); mbsvg.renderUI(); this.mbsvg = mbsvg; if (this.callback) this.callback(mbsvg); var soapBody = new SOAPObject("PUBLISH"); var sr = new SOAPRequest("PUBLISH", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function(resp,arg) {arg.operationDone(resp);},this); } Inkscape.prototype.refreshDocument = function(resp) { var soapBody = new SOAPObject("GETDOC"); var sr = new SOAPRequest("GETDOC", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function(resp,arg) { arg.publishDocument(resp);},this); } Inkscape.prototype.operationDone = function (res) { this.isInProgress--; } Inkscape.prototype.insertKey= function(n) { nextScene = n; var soapBody = new SOAPObject("START"); var sr = new SOAPRequest("START", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.insertKey1(resp);},this); this.isInProgress++; } Inkscape.prototype.insertKey1 = function(resp) { var soapBody = new SOAPObject("INSERTKEY"); var v1 = new SOAPObject("v1"); v1.attr('type','string'); v1.val(currentLayer); soapBody.appendChild(v1); var v2 = new SOAPObject("v2"); v2.val(nextScene); soapBody.appendChild(v2); var sr = new SOAPRequest("INSERTKEY", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.refreshDocument(resp);},this); } Inkscape.prototype.extendScene=function() { var soapBody = new SOAPObject("START"); var sr = new SOAPRequest("START", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.extendScene1(resp);},this); this.isInProgress++; } Inkscape.prototype.extendScene1 = function(resp) { var soapBody = new SOAPObject("EXTENDSCENE"); var v1 = new SOAPObject("v1"); v1.attr('type','string'); v1.val(currentLayer); soapBody.appendChild(v1); var v2 = new SOAPObject("v2"); v2.val(currentScene); soapBody.appendChild(v2); var sr = new SOAPRequest("EXTENDSCENE", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.refreshDocument(resp);},this); } Inkscape.prototype.deleteScene=function() { var soapBody = new SOAPObject("START"); var sr = new SOAPRequest("START", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.deleteScene1(resp);},this); this.isInProgress++; } Inkscape.prototype.deleteScene1=function(resp) { var soapBody = new SOAPObject("DELETESCENE"); var v1 = new SOAPObject("v1"); v1.attr('type','string'); v1.val(currentLayer); soapBody.appendChild(v1); var v2 = new SOAPObject("v2"); v2.val(currentScene); soapBody.appendChild(v2); var sr = new SOAPRequest("EXTENDSCENE", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.refreshDocument(resp);},this); } Inkscape.prototype.fetchDocument = function(callback) { var soapBody = new SOAPObject("START"); this.callback = callback var sr = new SOAPRequest("START", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr,function(resp,arg) {arg.refreshDocument(resp);},this); this.isInProgress++; } Inkscape.prototype.changeSymbolName_cb = function(callback) { var soapBody = new SOAPObject("CHANGESYMBOL"); var v1 = new SOAPObject("v1"); v1.attr('type','string'); v1.val(this.v1); soapBody.appendChild(v1); var v2 = new SOAPObject("v2"); v2.val(this.v2); soapBody.appendChild(v2); var sr = new SOAPRequest("CHANGESYMBOL", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; SOAPClient.SendRequest(sr, function (resp,arg) {arg.refreshDocument(resp);},this); this.inProgress--; } Inkscape.prototype.changeSymbolName = function(id,newname,callback) { var soapBody = new SOAPObject("START"); this.callback = callback var sr = new SOAPRequest("START", soapBody); SOAPClient.Proxy = "http://localhost:19192/"; this.v1 = id; this.v2 = newname; SOAPClient.SendRequest(sr,function(resp,arg) {arg.changeSymbolName_cb(resp);},this); this.isInProgress++; } /* * This module is used to define a symbol for the MadButterfly. This function will search for symbol which is defined in the current select object. We will list all SVG elements * in the left side, multiple variables can be defined at one time. When any element is selected, the defined symbol will be listed in the right side. * */ Inkscape.prototype.MakeSymbol=function() { function callback(mbsvg) { inkscape.loadSymbolScreen(mbsvg); } inkscape.fetchDocument(callback); } Inkscape.prototype.onChangeSymbolName=function() { inkscape.changeSymbolName(inkscape.current_symbol, $('#newsymbolname').val()); symboldialog.dialog('close') } Inkscape.prototype.refreshSymbolPanel=function(node) { var reg = new RegExp('(.*)\\((.*)\\)'); var m = reg.exec(node.textContent); var val = m[2]; inkscape.current_symbol = node.textContent; $('#newsymbolname').val(val); } Inkscape.prototype.editAnimation=function () { inkscape.fetchDocument(inkscape.editAnimationCallback); } Inkscape.prototype.editAnimationCallback=function(mbsvg) { inkscape.animation.edit(mbsvg); return; var sodi = mbsvg.getElementsByTag('sodipodi:namedview')[0]; var layer=sodi.getAttribute('inkscape:current-layer'); var animation = mbsvg.getElementsByTag('animationlist')[0]; var alist = animation.getElementsByTag('animation'); var len = alist.length; var dialog = $('animation'); dialog.dialog('open'); var html = new Array(); html.append('<ul>'); for(i=0;i<alist.len;i++) { html.append('<li><a href="#" onClick="">'+alist[i].getAttribute('name')+"</a></li>"); } html.append('</ul>'); $('animation_list').html(html.join("\n")); dialog.show(); } Inkscape.prototype.loadSymbolScreen=function (mbsvg) { // Swap the left side to be the SVG element tree. var i,l; symboldialog.dialog('open'); this.mbsvg = mbsvg; l = mbsvg.selected_objects.length; var jsonobj = [] for(i=0;i<l;i++) { // Add symbol into the tree var name = mbsvg.findSymbolName(mbsvg.selected_objects[i]); var title=mbsvg.selected_objects[i]+"("+name+")"; var obj = { attributes: {id: 'sym'+i}, data : title}; if (i == 0) { this.current_symbol = mbsvg.selected_objects[i]; $('#newsymbolname').val(name); } jsonobj.push(obj); } this.symboltree = $.tree_create(); this.symboltree.init($("#symbollist"), { data: { type: "json", json : jsonobj }, callback : { ondblclk : function(NODE,TREE_OBJ) { inkscape.refreshSymbolPanel(NODE);} } }); var s = $('#changename'); s.click(this.onChangeSymbolName); // Swap the right side to be the symbol editor screen. symboldialog.show(); } jQuery(document).ready(function() { symboldialog = jQuery('#symboldialog'); symboldialog.dialog({width:500, modal: true, autoOpen:false, title:'Please select a file'}); symboldialog.hide(); symboldialog.append("<div id='symbollist'/>"); symboldialog.append("<div id='symbol'><input type='text' id='newsymbolname'> <input type='submit' value='change' id='changename'></div> "); }); function MBSVG(file) { var xmlDoc=document.implementation.createDocument("http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd","",null); xmlDoc.async=false; xmlDoc.load(file); MBSVG_loadFromDoc(this,xmlDoc); } function MBSVGString(xml) { var xmlParser = new DOMParser(); var xmlDoc = xmlParser.parseFromString( xml, 'text/xml'); MBSVG_loadFromDoc(this,xmlDoc); } function MBSVG_loadFromDoc(self,xmlDoc) { var top = xmlDoc.getElementsByTagNameNS("http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd","scenes")[0]; self.current = top.getAttribute("current"); var scenesNode = xmlDoc.getElementsByTagNameNS("http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd","scene"); if (scenesNode == null) { alert('This is not a valid scene file'); } var len = scenesNode.length; var i,j; var max = 0; var scenes = new Array(); // Get the length of scenes for(i=0;i<len;i++) { var s = scenesNode[i]; var start = s.getAttribute("start"); var end = s.getAttribute("end"); var ref = s.getAttribute("ref"); var ss = new Object(); if (end == null) end = start if (max <end) max = end; ss.node = s; ss.start = start; ss.end = end; ss.ref = ref; ss.layer = null; scenes.push(ss); } if (max < 20) max = 30; // Collect all layers var nodes = xmlDoc.getElementsByTagNameNS("http://www.w3.org/2000/svg","svg")[0].childNodes; var layers = new Array(); len = nodes.length; for(i=0;i<len;i++) { if (nodes[i].localName == 'g') { var subnodes = nodes[i].childNodes; for(j=0;j<subnodes.length;j++) { if (subnodes[j].localName == 'g') { for(var k=0;k<scenes.length;k++) { if (scenes[k].ref == subnodes[j].getAttribute('id')) { scenes[k].layer = nodes[i].getAttribute('id'); break; } } } } layers.push(nodes[i]); } } var select = xmlDoc.getElementsByTagNameNS("http://madbutterfly.sourceforge.net/DTD/madbutterfly.dtd","select"); len = select.length; selectobjs = []; for(i=0;i<len;i++) { selectobjs.push(select[i].getAttribute('ref')); } self.selected_objects = selectobjs; self.layers = layers; self.scenes = scenes; self.maxframe = max; self.doc = xmlDoc; } MBSVGString.prototype=MBSVG.prototype; MBSVG.prototype.renderUI=function() { var layers = this.layers; var scenes = this.scenes; var max = this.maxframe; var cmd = "<table border=0>\n"; cmd = cmd + "<tr><td></td>"; for(var j=1;j<=max;j++) cmd = cmd + "<td>"+j+"</td>"; for(var i=layers.length-1;i>=0;i--) { var l = layers[i]; var id = l.getAttribute('id'); var label = l.getAttribute('inkscape:label'); cmd = cmd + "<tr><td>"+label+"</td>"; for(j=0;j<max;j++) { var empty = 1; var n = j +1; var id_str = id+"#"+n for(var k=0;k<scenes.length;k++) { if (id != scenes[k].layer) continue; if (n == scenes[k].start) { cmd = cmd + "<td><img class='normal' width='16' src=start.png id='"+id_str+"' onClick='selectCell(this)' /></td>"; empty = 0; break; } else if ((n>scenes[k].start)&&(n <= scenes[k].end)) { cmd = cmd + "<td><img class='normal' width='16' src=fill.png id='"+id_str+"' onClick='selectCell(this)' /></td>"; empty = 0; break; } } if (empty) { cmd = cmd + "<td><img class='normal' width='16' src=empty.png id='"+id_str+"'onClick='selectCell(this)' /></td>"; } } cmd = cmd + "</tr>\n"; } cmd = cmd + "</table>\n"; var frame = document.getElementById('frame'); frame.innerHTML=cmd; } MBSVG.prototype.findSymbolName=function(id) { var obj = this.doc.getElementById(id); var name = obj.getAttribute('mbname'); return name; } /** * Return a new XML document that all objects which is not in the current scene are deleted. * * This function will traverse all scenes. For each scene which is not in the current scene, we will delete the reference group. */ function deepcopy(obj) { var seenObjects = []; var mappingArray = []; var f = function(simpleObject) { var indexOf = seenObjects.indexOf(simpleObject); if (indexOf == -1) { switch (Ext.type(simpleObject)) { case 'object': seenObjects.push(simpleObject); var newObject = {}; mappingArray.push(newObject); for (var p in simpleObject) newObject[p] = f(simpleObject[p]); newObject.constructor = simpleObject.constructor; return newObject; case 'array': seenObjects.push(simpleObject); var newArray = []; mappingArray.push(newArray); for(var i=0,len=simpleObject.length; i<len; i++) newArray.push(f(simpleObject[i])); return newArray; default: return simpleObject; } } else { return mappingArray[indexOf]; } }; return f(obj); } MBSVG.prototype.generateCurrentSVG=function() { var i; var scenes = this.scenes; var len = scenes.length; var newcopy = $(this.doc).clone(); for(i=0;i<len;i++) { if (scenes[i].start > this.current || scenes[i].end < this.current) { var obj = newcopy.find('#'+scenes[i].ref); obj.remove(); } } return newcopy; } /** * UI for madbuilder.html to build the scene editor */ function selectCell(obj) { var id = obj.getAttribute('id'); var layer,n; var f = id.split('#'); layer=f[0]; n = f[1]; var img = obj.getAttribute('src'); var f = img.split('-'); if (f[0] == 'active') return; else { obj.setAttribute('src', 'active-'+img); } if (last_select != null) { f = last_select.getAttribute('src').split('-'); last_select.setAttribute('src', f[1]); } last_select = obj; currentScene = n; currentLayer = layer; } function onButtonClick(obj) { var id = obj.getAttribute('id'); if (id == 'Jump') { if (inkscape.isInProgress != 0) return; if (currentScene != 0) inkscape.gotoScene(currentScene); } else if (id == 'InsertKey') { if (inkscape.isInProgress != 0) return; inkscape.insertKey(currentScene); } else if (id == 'ExtendScene') { if (inkscape.isInProgress != 0) return; inkscape.extendScene(currentScene); } else if (id == 'DeleteScene') { if (inkscape.isInProgress != 0) return; inkscape.deleteScene(currentScene); } else if (id == 'MakeSymbol') { if (inkscape.isInProgress != 0) return; inkscape.MakeSymbol(); } else if (id == 'Save') { project_save(); } else if (id == 'Test') { if (project_compile()) { project_run(); } else { } } else if (id == 'Open') { filedialog = jQuery('#filedialog'); filedialog.dialog({width:500, modal: true, autoOpen:false, title:'Please select a file'}); filedialog.show(); filedialog.html('Please select the project file<br>'); filedialog.append('<input type=file value="Select the project file" id="mbsvg" accept="image/png">'); filedialog.append('<input type=button value="Load" onclick="project_loadFile()">'); filedialog.dialog("open"); } else if (id == 'EditAnimation') { inkscape.editAnimation(); } else { alert(id+' has not been implemented yet'); } } function gotoScene_cb(resObj) { } var nextScene; var currentScene = 0; var currentLayer = ''; function dump(n) { cmd = ""; for(k in n) { cmd = cmd + k+"="+n[k]+"\n"; } alert(cmd); } function loadInkscapeFile() { ele = $('#mbsvg'); file = ele.attr('value'); inkscape = new Inkscape("file://"+file); file1_animation = [ { attributes: {id:"an1-1"}, data: "animation1" }, { attributes: {id:"an1-2"}, data: "animation2" } ]; file1 = { attributes:{id:"file1"}, data: "scene1.mbsvg", children: file1_animation }; file2 = { attributes:{id:"file2"}, data: "scene2.mbsvg", }; file3 = { attributes:{id:"file3"}, data: "scene3.mbsvg", }; scenes = [ file1,file2,file3]; src1 = {attributes:{id:"src1"},data:"src1.c"}; src2 = {attributes:{id:"src1"},data:"src2.c"}; src3 = {attributes:{id:"src1"},data:"src3.c"}; sources = [src1,src2,src3]; } function project_compile() { } function project_showFile(node) { var file = node.textContent; if (endsWith(file,"mbsvg")) { project_loadScene(node); } else { project_loadEditor(node); } } function project_loadScene(node) { var file = node.textContent; if (file.substr(0,1) == '/') inkscape = new Inkscape("file://"+file); else inkscape = new Inkscape("file://"+project_dir+'/'+file); } function project_loadEditor(node) { var file = node.textContent; if (file.substr(0,1) == '/') editor = new TextEditor("file://"+file); else editor = new TextEditor("file://"+project_dir+'/'+file); } function project_parse(xml) { var xmlParser = new DOMParser(); var xmlDoc = xmlParser.parseFromString( xml, 'text/xml'); var scenesNode = xmlDoc.getElementsByTagName("scene"); if (scenesNode == null) { alert('This is not a valid scene file'); } var len = scenesNode.length; var i,j; var max = 0; var scenes = new Array(); // Get the length of scenes for(i=0;i<len;i++) { var n = scenesNode[i]; var s = new Object(); s.attributes = new Object(); s.attributes.id = "scene"+i; s.state = "open"; s.data = n.getAttribute("src"); scenes.push(s); } var nodes = xmlDoc.getElementsByTagName("source"); var len = nodes.length; var i,j; var max = 0; var sources = []; // Get the length of scenes for(i=0;i<len;i++) { var n = nodes[i]; var s = new Object(); s.attributes = new Object(); s.attributes.id = "sources"+i; s.state = "open"; s.data = n.getAttribute("src"); sources.push(s); } var tree = $.tree_create(); project_tree = tree; tree.init($("#filelist"), { data: { type: "json", json : [ { attributes: {id: "prj"}, state: "open", data: "Project", children: [ { attributes:{id:"scenes"}, data:"scene", children: scenes}, { attributes:{id:"sources"},data:"sources",children: sources} ] } ], }, callback : { ondblclk : function(NODE,TREE_OBJ) { project_showFile(NODE); TREE_OBJ.toggle_branch.call(TREE_OBJ, NODE); TREE_OBJ.select_branch.call(TREE_OBJ, NODE);} }, ui : { context : [ { id: "Open", label: "Open", icon: "open.png", visible: function(NODE,TREE_OBJ) { if(NODE.length != 1) return false; return true;}, action: function(NODE,TREE_OBJ) { onTree_openFile(NODE,TREE_OBJ);} }, { id: "New", label: "New", icon: "create.png", visible: function(NODE,TREE_OBJ) { if(NODE.length != 1) return false; return NODE[0].id == "prj";}, action: function(NODE,TREE_OBJ) { alert("open is not support yet");} }, { id: "Rename", label: "Rename", icon: "rename.png", visible: function(NODE,TREE_OBJ) { if(NODE.length != 1) return false; return NODE[0].id == "prj";}, action: function(NODE,TREE_OBJ) { alert("open is not support yet");} } ] } }); } function fileDialog_cb() { var file = $('#filedialogsrc').attr('value'); filedialog.dialog('close'); filedialog_cb(file,filedialog_arg); } function openFileDialog(callback,arg) { filedialog_cb = callback; filedialog_arg = arg; filedialog.html('Please select the scene file<br>'); filedialog.append('<input type=file value="Select the scene file" id="filedialogsrc">'); filedialog.append('<input type=button value="Load" onclick="fileDialog_cb()">'); filedialog.show(); filedialog.dialog('open'); } function project_addScene(file,treeobj) { if (file == '') { return; } treeobj.create(false,treeobj.selected,file); } function onTree_addSceneFile(node,treeobj) { openFileDialog(project_addScene,treeobj); } function project_addSource(file,treeobj) { treeobj.create(false,treeobj.selected,file); } function onTree_addSourceFile(node,treeobj) { openFileDialog(project_addSource,treeobj); } function onTree_openFile(node,treeobj) { if (node[0].id == "scenes") { onTree_addSceneFile(node,treeobj); } else if (node[0].id == "sources") { onTree_addSourceFile(node,treeobj); } } function system_open_read(fname) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Permission to read file was denied."); } var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); try { file.initWithPath( fname ); if ( file.exists() == false ) { alert("File does not exist"); } var is = Components.classes["@mozilla.org/network/file-input-stream;1"] .createInstance( Components.interfaces.nsIFileInputStream ); is.init( file,0x01, 00004, null); var sis = Components.classes["@mozilla.org/scriptableinputstream;1"] .createInstance( Components.interfaces.nsIScriptableInputStream ); sis.init( is ); } catch(e) { alert(fname+" does not exist"); } return sis; } function system_read(fname) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Permission to read file was denied."); } var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); try { file.initWithPath( fname ); if ( file.exists() == false ) { alert("File does not exist"); } var is = Components.classes["@mozilla.org/network/file-input-stream;1"] .createInstance( Components.interfaces.nsIFileInputStream ); is.init( file,0x01, 00004, null); var sis = Components.classes["@mozilla.org/scriptableinputstream;1"] .createInstance( Components.interfaces.nsIScriptableInputStream ); sis.init( is ); var output = sis.read( sis.available() ); sis.close(); } catch(e) { alert(fname+" does not exist"); } return output; } function system_open_write(fname) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Permission to read file was denied."); } var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); try { file.initWithPath( fname ); var fostream = Components.classes["@mozilla.org/network/file-output-stream;1"] .createInstance( Components.interfaces.nsIFileOutputStream ); fostream.init( file,0x02|0x8|0x20, 0666,0); } catch(e) { alert('can not create '+fname); } return fostream; } function system_write(fname,xml) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Permission to read file was denied."); } var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); try { file.initWithPath( fname ); var fostream = Components.classes["@mozilla.org/network/file-output-stream;1"] .createInstance( Components.interfaces.nsIFileOutputStream ); fostream.init( file,0x02|0x8|0x20, 0666,0); fostream.write( xml,xml.length ); fostream.close(); } catch(e) { alert(fname+" does not exist"); } } function system_mkdir(path) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Permission to read file was denied."); } var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); try { file.initWithPath(path); if( !file.exists() || !file.isDirectory() ) { // if it doesn't exist, create file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777); } } catch(e) { alert('Failed to create directopry '+path+e); } } function getPathDirectory(path) { var s = path.lastIndexOf('/'); if (s == -1) return ''; else return path.substr(0,s); } function project_loadFile() { prjname = $('#mbsvg').attr('value'); project_name = prjname; project_dir = getPathDirectory(prjname); var f = system_open_write("/tmp/madbuilder.ws"); var s = "last="+prjname; f.write(s,s.length); f.close(); var prj = system_read(prjname); project_parse(prj); filedialog.dialog('close'); } function project_save() { var i; var xml = "<project>\n"; var scenes = $('#scenes'); var sources = $('#sources'); var list = project_tree.getJSON(scenes); var len = list.children.length; for(i=0;i<len;i++) { xml = xml + "\t<scene src='"+list.children[i].data+"' />\n"; } list = project_tree.getJSON(sources); len = list.children.length; for(i=0;i<len;i++) { xml = xml + "\t<source src='"+list.children[i].data+"' />\n"; } xml = xml + "</project>\n"; system_write(project_name,xml); } function onLoadProject(path) { project_name = path; project_dir = getPathDirectory(project_name); var prj = system_read(project_name); project_parse(prj); } function loadOldProject() { return -1; var f = system_open_read("/tmp/madbuilder.ws"); if (f == null) return -1; var s = f.read(f.available()); f.close(); var pos = s.indexOf("last="); if (pos == -1) return -1; var m = s.match("last=([^\s]*)"); if (m[1]) { var prj = system_read(m[1]); project_dir = getPathDirectory(m[1]); project_parse(prj); $('#filedialog').dialog("close"); } return 0; }