home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2005 October / Gamestar_77_2005-10_dvd.iso / Programy / nsb-install-8-0.exe / chrome / browser.jar / content / browser / pref / pref-themes.js < prev    next >
Encoding:
Text File  |  2005-07-29  |  5.6 KB  |  180 lines

  1.  
  2. var gData;
  3. const kPrefSvcContractID = "@mozilla.org/preferences;1";
  4. const kPrefSvcIID = Components.interfaces.nsIPref;
  5. const gPrefSvc = Components.classes[kPrefSvcContractID].getService(kPrefSvcIID);
  6.  
  7. try {
  8.   var chromeRegistry = Components.classes["@mozilla.org/chrome/chrome-registry;1"].getService();
  9.   if (chromeRegistry)
  10.     chromeRegistry = chromeRegistry.QueryInterface(Components.interfaces.nsIXULChromeRegistry);
  11. }
  12. catch(e) {}
  13.  
  14. function Startup()
  15. {
  16.   gData = parent.hPrefWindow.wsm.dataManager.pageData["chrome://browser/content/pref/pref-themes.xul"].userData;
  17.   var list = document.getElementById( "skinsList" );
  18.   if ("loaded" in gData && "themeIndex" in gData) {
  19.     list.selectedIndex = gData.themeIndex;    
  20.     removeInvalidThemes();
  21.     return;
  22.   }
  23.   gData.loaded = true;
  24.   parent.hPrefWindow.registerOKCallbackFunc(applyTheme);
  25.  
  26.   var theme = null;
  27.   try {
  28.     theme = gPrefSvc.getComplexValue("general.skins.selectedSkin",
  29.                                      Components.interfaces.nsISupportsString).data;
  30.   } catch (e) {
  31.   }
  32.   var matches;
  33.   for (var i = 0; i < list.childNodes.length; ++i) {
  34.     var child = list.childNodes[i];
  35.     var name = child.getAttribute("name");
  36.     if (!theme)
  37.       matches = chromeRegistry.isSkinSelectedForPackage(name, "browser", true);
  38.     else
  39.       matches = name == theme;
  40.     if (matches) {
  41.       list.selectItem(child);
  42.       break;
  43.     }      
  44.   }
  45.   removeInvalidThemes();
  46. }
  47.  
  48. function removeInvalidThemes() {
  49.   var list = document.getElementById( "skinsList" );
  50.   for (var i = 0; i < list.childNodes.length; ++i) {
  51.     var child = list.childNodes[i];
  52.     var name = child.getAttribute("name");
  53.     if (name) {
  54.       var oldTheme = !chromeRegistry.checkThemeVersion(name);
  55.       if (oldTheme) {
  56.         list.removeItemAt(i);
  57.         i--;
  58.       }
  59.     }
  60.   }
  61. }
  62.  
  63. function applyTheme()
  64. {
  65.   var data = parent.hPrefWindow.wsm.dataManager.pageData["chrome://browser/content/pref/pref-themes.xul"].userData;
  66.   if (data.name == null)
  67.     return;
  68.  
  69.   const kPrefSvcContractID = "@mozilla.org/preferences;1";
  70.   const kPrefSvcIID = Components.interfaces.nsIPref;
  71.   var prefSvc = Components.classes[kPrefSvcContractID].getService(kPrefSvcIID);
  72.  
  73.   var theme = null;
  74.   try {
  75.     theme = prefSvc.getComplexValue("general.skins.selectedSkin",
  76.                                      Components.interfaces.nsISupportsString).data;
  77.   } catch (e) {
  78.   }
  79.  
  80.   if (theme == data.name) return;
  81.  
  82.   try {
  83.     var reg = Components.classes["@mozilla.org/chrome/chrome-registry;1"].getService();
  84.     if (reg)
  85.       reg = reg.QueryInterface(Components.interfaces.nsIXULChromeRegistry);
  86.   }
  87.   catch(e) {}
  88.  
  89.   var inUse = reg.isSkinSelected(data.name, true);
  90.   if (!theme && inUse == Components.interfaces.nsIChromeRegistry.FULL) return;
  91.  
  92.   var chromeRegistry = Components.classes["@mozilla.org/chrome/chrome-registry;1"]
  93.     .getService(Components.interfaces.nsIXULChromeRegistry);
  94.  
  95.   var str = Components.classes["@mozilla.org/supports-string;1"]
  96.                       .createInstance(Components.interfaces.nsISupportsString);
  97.   str.data = data.name;
  98.   prefSvc.setComplexValue("general.skins.selectedSkin", Components.interfaces.nsISupportsString, str);
  99.  
  100.  
  101.   chromeRegistry.selectSkin(data.name, true);
  102.   chromeRegistry.refreshSkins();
  103. }
  104.  
  105.  
  106. function uninstallSkin()
  107. {
  108.   var list = document.getElementById("skinsList");
  109.   var selectedSkinItem = list.selectedItems[0];
  110.   var skinName = selectedSkinItem.getAttribute("name");
  111.   var inUse = chromeRegistry.isSkinSelected(skinName, true);
  112.   chromeRegistry.uninstallSkin(skinName, true);
  113.   if (inUse)
  114.     chromeRegistry.refreshSkins();
  115.   list.selectedIndex = 0;
  116. }
  117.  
  118. function themeSelect()
  119. {
  120.   var list = document.getElementById("skinsList");
  121.  
  122.   if (!list)
  123.     return;
  124.  
  125.   var prefbundle = document.getElementById("bundle_prefutilities");
  126.  
  127.   var selectedItem = list.selectedItems.length ? list.selectedItems[0] : null;
  128.   if (selectedItem && selectedItem.getAttribute("skin") == "true") {
  129.     var themeName = selectedItem.getAttribute("displayName");
  130.     var skinName = selectedItem.getAttribute("name");
  131.     gData.name = skinName;
  132.     gData.themeIndex = list.selectedIndex;
  133.  
  134.     var nameField = document.getElementById("displayName");
  135.     var author = document.getElementById("author");
  136.     var image = document.getElementById("previewImage");
  137.     var descText = document.createTextNode(selectedItem.getAttribute("description"));
  138.     var description = document.getElementById("description");
  139.     var uninstallButton = document.getElementById("uninstallSkin");
  140.     var uninstallLabel = prefbundle.getString("uninstallThemePrefix");
  141.  
  142.     while (description.hasChildNodes())
  143.       description.removeChild(description.firstChild);
  144.  
  145.     nameField.setAttribute("value", themeName);
  146.     
  147.     author.setAttribute("value", selectedItem.getAttribute("author"));
  148.     var authorURL = selectedItem.getAttribute("authorURL");
  149.     if (authorURL != "") {
  150.       author.setAttribute("link", selectedItem.getAttribute("authorURL"));
  151.       author.className = "themesLink";
  152.     }
  153.     else {
  154.       author.removeAttribute("link");
  155.       author.className = "";
  156.     }
  157.         
  158.     image.setAttribute("src", selectedItem.getAttribute("image"));
  159.  
  160.     // XXX - this sucks and should only be temporary.
  161.     var selectedSkin = "";
  162.     try {
  163.       selectedSkin = gPrefSvc.CopyCharPref("general.skins.selectedSkin");
  164.     }
  165.     catch (e) {
  166.     }
  167.     description.appendChild(descText);
  168.     
  169.     var locType = selectedItem.getAttribute("loctype");
  170.     uninstallButton.disabled = (selectedSkin == skinName) || (locType == "install");
  171.     
  172.     uninstallLabel = uninstallLabel.replace(/%theme_name%/, themeName);
  173.     uninstallButton.label = uninstallLabel;
  174.   }
  175.   else {
  176.     uninstallButton.disabled = true;
  177.     gData.name = null;
  178.   }
  179. }
  180.