From 576104c21d3ae19212660fb505b3d3e99017ae0a Mon Sep 17 00:00:00 2001 From: "ben%netscape.com" Date: Fri, 7 Jul 2000 05:44:53 +0000 Subject: [PATCH] latest updates to helper apps pref panel (now support editing of types, and overwriting old types with new ones! =D) --- .../resources/content/overrideHandler.js | 96 ++++++++++++++++--- .../content/pref-applications-edit.xul | 6 +- .../content/pref-applications-new.js | 2 + .../resources/content/pref-applications.js | 15 +++ 4 files changed, 105 insertions(+), 14 deletions(-) diff --git a/xpfe/components/prefwindow/resources/content/overrideHandler.js b/xpfe/components/prefwindow/resources/content/overrideHandler.js index df7b5a535399..0065184bedcb 100644 --- a/xpfe/components/prefwindow/resources/content/overrideHandler.js +++ b/xpfe/components/prefwindow/resources/content/overrideHandler.js @@ -13,6 +13,7 @@ if (gRDF) function HandlerOverride(aURI) { this.URI = aURI; + this.mUpdateMode = false; } HandlerOverride.prototype = { @@ -24,7 +25,10 @@ HandlerOverride.prototype = { set mimeType(aMIMETypeString) { - assertMIMEStuff(MIME_URI(aMIMETypeString), "value", aMIMETypeString); + if (!this.mUpdateMode) + assertMIMEStuff(MIME_URI(aMIMETypeString), "value", aMIMETypeString); + else + changeMIMEStuff(MIME_URI(aMIMETypeString), "value", aMIMETypeString); }, get description() @@ -34,7 +38,10 @@ HandlerOverride.prototype = { set description(aDescriptionString) { - assertMIMEStuff(MIME_URI(this.mimeType), "description", aDescriptionString); + if (!this.mUpdateMode) + assertMIMEStuff(MIME_URI(this.mimeType), "description", aDescriptionString); + else + changeMIMEStuff(MIME_URI(this.mimeType), "description", aDescriptionString); }, get isEditable() @@ -44,7 +51,10 @@ HandlerOverride.prototype = { set isEditable(aIsEditableString) { - assertMIMEStuff(MIME_URI(this.mimeType), "editable", aIsEditableString); + if (!this.mUpdateMode) + assertMIMEStuff(MIME_URI(this.mimeType), "editable", aIsEditableString); + else + changeMIMEStuff(MIME_URI(this.mimeType), "editable", aIsEditableString); }, get largeIconURL() @@ -57,7 +67,10 @@ HandlerOverride.prototype = { set largeIconURL(aLargeIconURL) { - assertMIMEStuff(MIME_URI(this.mimeType), "largeIcon", aLargeIconURL); + if (!this.mUpdateMode) + assertMIMEStuff(MIME_URI(this.mimeType), "largeIcon", aLargeIconURL); + else + changeMIMEStuff(MIME_URI(this.mimeType), "largeIcon", aLargeIconURL); }, get smallIconURL() @@ -68,9 +81,12 @@ HandlerOverride.prototype = { return url; }, - set smallIconURL() + set smallIconURL(aSmallIconURL) { - assertMIMEStuff(MIME_URI(this.mimeType), "smallIcon", aLargeIconURL); + if (!this.mUpdateMode) + assertMIMEStuff(MIME_URI(this.mimeType), "smallIcon", aSmallIconURL); + else + changeMIMEStuff(MIME_URI(this.mimeType), "smallIcon", aSmallIconURL); }, get extensions() @@ -110,8 +126,20 @@ HandlerOverride.prototype = { set saveToDisk(aSavedToDisk) { - assertMIMEStuff(HANDLER_URI(this.mimeType), "saveToDisk", aSavedToDisk); - }, + var handlerSource = gRDF.GetResource(HANDLER_URI(this.mimeType)); + var handlerProperty = gRDF.GetResource(NC_RDF("saveToDisk")); + var trueLiteral = gRDF.GetLiteral("true"); + var hasSaveToDisk = gDS.HasAssertion(handlerSource, handlerProperty, trueLiteral, true); + if (!hasSaveToDisk) { + var falseLiteral = gRDF.GetLiteral("false"); + hasSaveToDisk = gDS.HasAssertion(handlerSource, handlerProperty, falseLiteral, true); + } + if (!this.mUpdateMode || !hasSaveToDisk) + assertMIMEStuff(HANDLER_URI(this.mimeType), "saveToDisk", aSavedToDisk); + else + changeMIMEStuff(HANDLER_URI(this.mimeType), "saveToDisk", aSavedToDisk); + this.setHandlerProcedure("handleInternal", "false"); + }, get handleInternal() { @@ -120,7 +148,32 @@ HandlerOverride.prototype = { set handleInternal(aHandledInternally) { - assertMIMEStuff(HANDLER_URI(this.mimeType), "handleInternal", aHandledInternally); + var handlerSource = gRDF.GetResource(HANDLER_URI(this.mimeType)); + var handlerProperty = gRDF.GetResource(NC_RDF("handleInternal")); + var trueLiteral = gRDF.GetLiteral("true"); + var hasHandleInternal = gDS.HasAssertion(handlerSource, handlerProperty, trueLiteral, true); + if (!hasHandleInternal) { + var falseLiteral = gRDF.GetLiteral("false"); + hasHandleInternal = gDS.HasAssertion(handlerSource, handlerProperty, falseLiteral, true); + } + if (!this.mUpdateMode || !hasHandleInternal) + assertMIMEStuff(HANDLER_URI(this.mimeType), "handleInternal", aHandledInternally); + else + changeMIMEStuff(HANDLER_URI(this.mimeType), "handleInternal", aHandledInternally); + this.setHandlerProcedure("saveToDisk", "false"); + }, + + setHandlerProcedure: function (aHandlerProcedure, aValue) + { + var handlerSource = gRDF.GetResource(HANDLER_URI(this.mimeType)); + var handlerProperty = gRDF.GetResource(NC_RDF(aHandlerProcedure)); + var oppositeValue = aValue == "false" ? "true" : "false"; + var trueLiteral = gRDF.GetLiteral(oppositeValue); + var hasCounterpart = gDS.HasAssertion(handlerSource, handlerProperty, trueLiteral, true); + if (hasCounterpart) { + var falseLiteral = gRDF.GetLiteral(aValue); + gDS.Change(handlerSource, handlerProperty, trueLiteral, falseLiteral); + } }, get alwaysAsk() @@ -130,7 +183,10 @@ HandlerOverride.prototype = { set alwaysAsk(aAlwaysAsk) { - assertMIMEStuff(HANDLER_URI(this.mimeType), "alwaysAsk", aAlwaysAsk); + if (!this.mUpdateMode) + assertMIMEStuff(HANDLER_URI(this.mimeType), "alwaysAsk", aAlwaysAsk); + else + changeMIMEStuff(HANDLER_URI(this.mimeType), "alwaysAsk", aAlwaysAsk); }, // helper application @@ -141,7 +197,10 @@ HandlerOverride.prototype = { set appDisplayName(aDisplayName) { - assertMIMEStuff(APP_URI(this.mimeType), "prettyName", aDisplayName); + if (!this.mUpdateMode) + assertMIMEStuff(APP_URI(this.mimeType), "prettyName", aDisplayName); + else + changeMIMEStuff(APP_URI(this.mimeType), "prettyName", aDisplayName); }, get appPath() @@ -151,7 +210,10 @@ HandlerOverride.prototype = { set appPath(aAppPath) { - assertMIMEStuff(APP_URI(this.mimeType), "path", aAppPath); + if (!this.mUpdateMode) + assertMIMEStuff(APP_URI(this.mimeType), "path", aAppPath); + else + changeMIMEStuff(APP_URI(this.mimeType), "path", aAppPath); }, /** @@ -267,6 +329,15 @@ function assertMIMEStuff(aMIMEString, aPropertyString, aValueString) gDS.Assert(mimeSource, valueProperty, mimeLiteral, true); } +function changeMIMEStuff(aMIMEString, aPropertyString, aValueString) +{ + var mimeSource = gRDF.GetResource(aMIMEString); + var valueProperty = gRDF.GetResource(NC_RDF(aPropertyString)); + var mimeLiteral = gRDF.GetLiteral(aValueString); + var currentValue = gDS.GetTarget(mimeSource, valueProperty, true); + gDS.Change(mimeSource, valueProperty, currentValue, mimeLiteral); +} + function unassertMIMEStuff(aMIMEString, aPropertyString, aValueString) { var mimeSource = gRDF.GetResource(aMIMEString); @@ -275,4 +346,3 @@ function unassertMIMEStuff(aMIMEString, aPropertyString, aValueString) gDS.Unassert(mimeSource, valueProperty, mimeLiteral, true); } - diff --git a/xpfe/components/prefwindow/resources/content/pref-applications-edit.xul b/xpfe/components/prefwindow/resources/content/pref-applications-edit.xul index 7a4a6ebef1d6..5f00207ee2e7 100644 --- a/xpfe/components/prefwindow/resources/content/pref-applications-edit.xul +++ b/xpfe/components/prefwindow/resources/content/pref-applications-edit.xul @@ -164,11 +164,15 @@ function onOK() // now save the information var handlerInfo = new HandlerOverride(MIME_URI(gMIMEField.value)); + handlerInfo.mUpdateMode = mimeHandlerExists(gMIMEField.value); handlerInfo.mimeType = gMIMEField.value; // other info we need to set (not reflected in UI) - if (gHandlerGroup.data == "2") + if (gHandlerGroup.data == "2") { handlerInfo.appPath = gAppPath.value; + handlerInfo.setHandlerProcedure("saveToDisk", "false"); + handlerInfo.setHandlerProcedure("handleInternal", "false"); + } else if (gHandlerGroup.data == "1") handlerInfo.saveToDisk = true; else diff --git a/xpfe/components/prefwindow/resources/content/pref-applications-new.js b/xpfe/components/prefwindow/resources/content/pref-applications-new.js index 26c0ff9ef1eb..e08455265785 100644 --- a/xpfe/components/prefwindow/resources/content/pref-applications-new.js +++ b/xpfe/components/prefwindow/resources/content/pref-applications-new.js @@ -69,8 +69,10 @@ function onOK() window.close(); } + // now save the information var handlerInfo = new HandlerOverride(MIME_URI(gMIMEField.value)); + handlerInfo.mUpdateMode = exists; // XXX Somewhat sleazy, I know... handlerInfo.mimeType = gMIMEField.value; handlerInfo.description = gDescriptionField.value; diff --git a/xpfe/components/prefwindow/resources/content/pref-applications.js b/xpfe/components/prefwindow/resources/content/pref-applications.js index 497b34ee616d..c8336336de72 100644 --- a/xpfe/components/prefwindow/resources/content/pref-applications.js +++ b/xpfe/components/prefwindow/resources/content/pref-applications.js @@ -9,6 +9,7 @@ function newType() if (gNewTypeRV) { //gTree.builder.rebuild(); gTree.setAttribute("ref", "urn:mimetypes"); + selectApplication(); gNewTypeRV = null; } } @@ -29,6 +30,7 @@ function editType() var uri = gTree.selectedItems[0].id; var handlerOverride = new HandlerOverride(uri); window.openDialog("chrome://communicator/content/pref/pref-applications-edit.xul", "appEdit", "chrome,modal=yes,resizable=no", handlerOverride); + selectApplication(); } } @@ -39,6 +41,8 @@ var gBundle = null; var gExtensionField = null; var gMIMETypeField = null; var gHandlerField = null; +var gEditButton = null; +var gRemoveButton = null; function Startup() { @@ -50,6 +54,8 @@ function Startup() gExtensionField = document.getElementById("extension"); gMIMETypeField = document.getElementById("mimeType"); gHandlerField = document.getElementById("handler"); + gEditButton = document.getElementById("editButton"); + gRemoveButton = document.getElementById("removeButton"); const mimeTypes = 66638; var fileLocator = Components.classes["component://netscape/filelocator"].getService(); @@ -83,6 +89,15 @@ function selectApplication() else gHandlerField.setAttribute("value", handlerOverride.appDisplayName); + if (handlerOverride.isEditable == "false") { + gEditButton.setAttribute("disabled", "true"); + gRemoveButton.setAttribute("disabled", "true"); + } + else { + gEditButton.removeAttribute("disabled"); + gRemoveButton.removeAttribute("disabled"); + } + delete handlerOverride; } }