home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2005 October / Gamestar_77_2005-10_dvd.iso / Programy / nsb-install-8-0.exe / chrome / toolkit.jar / content / mozapps / downloads / editAction.js < prev    next >
Text File  |  2005-07-29  |  7KB  |  206 lines

  1.  
  2. var gRDF, gItemRes, gHelperApps;
  3. var gNC_URI;
  4. var gHandlerRes, gExtAppRes;
  5.  
  6. var gLastSelectedActionItem = null;
  7.  
  8. function init()
  9. {
  10.   gRDF = window.opener.gRDF;
  11.   gItemRes = window.arguments[0];
  12.   
  13.   gHelperApps = window.opener.gHelperApps;
  14.   gHandlerPropArc = gHelperApps._handlerPropArc;
  15.   gExternalAppArc = gHelperApps._externalAppArc;
  16.   gFileHandlerArc = gHelperApps._fileHandlerArc;
  17.   
  18.   gNC_URI = window.opener.NC_URI;
  19.   
  20.   var typeField = document.getElementById("typeField");
  21.   var str = gHelperApps.getLiteralValue(gItemRes.Value, "FileType");
  22.   // XXXben localize!
  23.   str += " (" + gHelperApps.getLiteralValue(gItemRes.Value, "FileExtensions") + ")";
  24.   typeField.value = str;
  25.   var typeIcon = document.getElementById("typeIcon");
  26.   typeIcon.src = gHelperApps.getLiteralValue(gItemRes.Value, "FileIcon");
  27.  
  28.   var handlerGroup = document.getElementById("handlerGroup");
  29.   
  30.   gHandlerRes = gHelperApps.GetTarget(gItemRes, gHandlerPropArc, true);
  31.   if (gHandlerRes) {
  32.     gHandlerRes = gHandlerRes.QueryInterface(Components.interfaces.nsIRDFResource);
  33.  
  34.     // Custom App Handler Path - this must be set before we set the selected
  35.     // radio button because the selection event handler for the radio group
  36.     // requires the extapp handler field to be non-empty for the extapp radio
  37.     // button to be selected. 
  38.     var gExtAppRes = gHelperApps.GetTarget(gHandlerRes, gExternalAppArc, true);
  39.     if (gExtAppRes) {
  40.       gExtAppRes = gExtAppRes.QueryInterface(Components.interfaces.nsIRDFResource);
  41.  
  42.       var customAppPath = document.getElementById("customAppPath");          
  43.       customAppPath.value = gHelperApps.getLiteralValue(gExtAppRes.Value, "path");
  44.     }
  45.     
  46.     // Selected Action Radiogroup
  47.     var handleInternal = gHelperApps.getLiteralValue(gHandlerRes.Value, "useSystemDefault");
  48.     var saveToDisk = gHelperApps.getLiteralValue(gHandlerRes.Value, "saveToDisk");
  49.     if (handleInternal == "true")
  50.       handlerGroup.selectedItem = document.getElementById("openDefault");
  51.     else if (saveToDisk == "true")
  52.       handlerGroup.selectedItem = document.getElementById("saveToDisk");
  53.     else
  54.       handlerGroup.selectedItem = document.getElementById("openApplication");
  55.       
  56.     gLastSelectedActionItem = handlerGroup.selectedItem;
  57.   }
  58.   else {
  59.     // No Handler/ExtApp Resources for this type for some reason
  60.     handlerGroup.selectedItem = document.getElementById("openDefault");
  61.   }
  62.  
  63.   var defaultAppName = document.getElementById("defaultAppName");
  64.   var mimeInfo = gHelperApps.getMIMEInfo(gItemRes);
  65.   defaultAppName.value = mimeInfo.defaultDescription;
  66.   
  67.   handlerGroup.focus();
  68.   
  69.   // We don't let users open .exe files or random binary data directly 
  70.   // from the browser at the moment because of security concerns. 
  71.   var mimeType = mimeInfo.MIMEType;
  72.   if (mimeType == "application/object-stream" ||
  73.       mimeType == "application/x-msdownload") {
  74.     document.getElementById("openApplication").disabled = true;
  75.     document.getElementById("openDefault").disabled = true;
  76.     handlerGroup.selectedItem = document.getElementById("saveToDisk");
  77.   }
  78.   
  79.   var x = document.documentElement.getAttribute("screenX");
  80.   if (x == "")
  81.     setTimeout(centerOverParent, 0);
  82. }
  83.  
  84. function setLiteralValue(aResource, aProperty, aValue)
  85. {
  86.   var prop = gRDF.GetResource(gNC_URI(aProperty));
  87.   var val = gRDF.GetLiteral(aValue);
  88.   var oldVal = gHelperApps.GetTarget(aResource, prop, true);
  89.   if (oldVal)
  90.     gHelperApps.Change(aResource, prop, oldVal, val);
  91.   else
  92.     gHelperApps.Assert(aResource, prop, val, true);
  93. }
  94.  
  95. function onAccept()
  96. {
  97.   var dirty = false;
  98.   
  99.   if (gHandlerRes) {  
  100.     var handlerGroup = document.getElementById("handlerGroup");
  101.     var value = handlerGroup.selectedItem.getAttribute("value");
  102.     switch (value) {
  103.     case "system":
  104.       setLiteralValue(gHandlerRes, "saveToDisk", "false");
  105.       setLiteralValue(gHandlerRes, "useSystemDefault", "true");
  106.       break;
  107.     case "app":
  108.       setLiteralValue(gHandlerRes, "saveToDisk", "false");
  109.       setLiteralValue(gHandlerRes, "useSystemDefault", "false");
  110.       break;  
  111.     case "save":
  112.       setLiteralValue(gHandlerRes, "saveToDisk", "true");
  113.       setLiteralValue(gHandlerRes, "useSystemDefault", "false");
  114.       break;  
  115.     }
  116.     
  117.     dirty = true;
  118.   }
  119.     
  120.   if (gExtAppRes) {
  121.     var customAppPath = document.getElementById("customAppPath");
  122.     if (customAppPath.value != "") {
  123.       setLiteralValue(gExtAppRes, "path", customAppPath.value);
  124.       setLiteralValue(gExtAppRes, "prettyName", customAppPath.getAttribute("prettyName"));
  125.     }
  126.     
  127.     dirty = true;
  128.   }
  129.   
  130.   if (dirty) {
  131.     gHelperApps.flush();
  132.    
  133.     // Get the template builder to refresh the display by announcing our imaginary
  134.     // "FileHandler" property has been updated. (NC:FileHandler is a property
  135.     // that our wrapper DS uses, its value is built dynamically based on real
  136.     // values of other properties.
  137.     var newHandler = gHelperApps.GetTarget(gItemRes, gFileHandlerArc, true);
  138.     gHelperApps.onChange(gHelperApps, gItemRes, gFileHandlerArc, newHandler);
  139.     
  140.     // ... this doesn't seem to work, so...
  141.     var fileHandlersList = window.opener.document.getElementById("fileHandlersList");
  142.     fileHandlersList.builder.rebuild();
  143.   }
  144.     
  145.   return true;
  146. }
  147.  
  148. function centerOverParent()
  149. {
  150.   var parent = window.opener;
  151.   
  152.   x = parent.screenX + (parent.outerWidth / 2) - (window.outerWidth / 2);
  153.   y = parent.screenY + (parent.outerHeight / 2) - (window.outerHeight / 2);
  154.   window.moveTo(x, y);
  155. }
  156.  
  157. function doEnabling(aSelectedItem)
  158. {
  159.   if (aSelectedItem.id == "openApplication") {
  160.     var customAppPath = document.getElementById("customAppPath")
  161.     customAppPath.disabled = false;
  162.     document.getElementById("changeApp").disabled = false;
  163.     
  164.     if (customAppPath.value == "" && !changeApp()) {
  165.       gLastSelectedActionItem.click();
  166.       return;
  167.     }
  168.   }
  169.   else {
  170.     document.getElementById("customAppPath").disabled = true;
  171.     document.getElementById("changeApp").disabled = true;
  172.   }
  173.   
  174.   gLastSelectedActionItem = aSelectedItem;
  175. }
  176.  
  177. function changeApp()
  178. {
  179.   const nsIFilePicker = Components.interfaces.nsIFilePicker;
  180.   var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  181.  
  182.   // extract the window title
  183.   var winTitle = document.getElementById('changeApp').getAttribute('filepickertitle');
  184.   fp.init(window, winTitle, nsIFilePicker.modeOpen);
  185.   
  186.   fp.appendFilters(nsIFilePicker.filterApps);
  187.   if (fp.show() == nsIFilePicker.returnOK && fp.file) {
  188.     var customAppPath = document.getElementById("customAppPath");
  189.     customAppPath.value = fp.file.path;
  190.     
  191.     var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
  192.     var uri = ioService.newFileURI(fp.file);
  193.     var url = uri.QueryInterface(Components.interfaces.nsIURL);
  194.     customAppPath.setAttribute("prettyName", url.fileName);
  195.  
  196.     var mimeInfo = gHelperApps.getMIMEInfo(gItemRes);
  197.     gExtAppRes = gRDF.GetResource("urn:mimetype:externalApplication:" + mimeInfo.MIMEType);
  198.     
  199.     
  200.     return true;
  201.   }
  202.   
  203.   return false;
  204. }
  205.  
  206.