home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / mozil06.zip / bin / chrome / messenger.jar / content / messenger / FilterListDialog.js < prev    next >
Text File  |  2001-02-14  |  6KB  |  242 lines

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  * The contents of this file are subject to the Netscape Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/NPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is Mozilla Communicator client code, released
  13.  * March 31, 1998.
  14.  * 
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation. Portions created by Netscape are
  17.  * Copyright (C) 1998-1999 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  */
  20.  
  21. var rdf;
  22.  
  23. var editButton;
  24. var deleteButton;
  25.  
  26. var nsMsgFilterMotion = Components.interfaces.nsMsgFilterMotion;
  27.  
  28. var gBundle;
  29.  
  30. function getBundle()
  31. {
  32.     if (!gBundle) gBundle = srGetStrBundle("chrome://messenger/locale/search.properties");
  33.     return gBundle;
  34. }
  35.  
  36. function onLoad()
  37. {
  38.     rdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
  39.  
  40.     editButton = document.getElementById("editButton");
  41.     deleteButton = document.getElementById("deleteButton");
  42.  
  43.     doSetOKCancel(onOk, null);
  44.     
  45.     updateButtons();
  46.     
  47.     var firstItem;
  48.     var args = window.arguments;
  49.     if (args && args[0])
  50.         firstItem = args[0].initialServerUri;
  51.     
  52.     else {
  53.         var serverMenu = document.getElementById("serverMenu");
  54.         var menuitems = serverMenu.getElementsByTagName("menuitem");
  55.         firstItem = menuitems[1].id;
  56.     }
  57.     
  58.     selectServer(firstItem);
  59.     moveToAlertPosition();
  60. }
  61.  
  62. function onOk()
  63. {
  64.     // make sure to save the filter to disk
  65.     filterList =  currentFilterList();
  66.     if (filterList) filterList.saveToDefaultFile();
  67.     window.close();
  68. }
  69.  
  70. function onServerClick(event)
  71. {
  72.     var item = event.target;
  73.  
  74.     // don't check this in.
  75.     dump("setServer(\"" + item.id + "\");\n");
  76.     setTimeout("setServer(\"" + item.id + "\");", 0);
  77. }
  78.  
  79. // roots the tree at the specified server
  80. function setServer(uri)
  81. {
  82.     var tree = document.getElementById("filterTree");
  83.     tree.setAttribute("ref", uri);
  84.     updateButtons();
  85. }
  86.  
  87. function onToggleEnabled(event)
  88. {
  89.     var item = event.target;
  90.     while (item && item.localName != "treeitem") {
  91.         lastItem = item;
  92.         item = item.parentNode;
  93.     }
  94.     
  95.     var filterResource = rdf.GetUnicodeResource(item.id);
  96.     filter = filterResource.GetDelegate("filter",
  97.                                         Components.interfaces.nsIMsgFilter);
  98.     filter.enabled = !filter.enabled;
  99.     refreshFilterList();
  100. }
  101.  
  102. // sets up the menulist and the tree
  103. function selectServer(uri)
  104. {
  105.     // update the server menu
  106.     var serverMenu = document.getElementById("serverMenu");
  107.     var menuitems = serverMenu.getElementsByAttribute("id", uri);
  108.     
  109.     serverMenu.selectedItem = menuitems[0];
  110.     
  111.     setServer(uri);
  112. }
  113.  
  114. function currentFilter()
  115. {
  116.     var selection = document.getElementById("filterTree").selectedItems;
  117.     if (!selection || selection.length <=0)
  118.         return null;
  119.  
  120.     var filter;
  121.     try {
  122.         var filterResource = rdf.GetUnicodeResource(selection[0].id);
  123.         filter = filterResource.GetDelegate("filter",
  124.                                             Components.interfaces.nsIMsgFilter);
  125.     } catch (ex) {
  126.         dump(ex);
  127.         dump("no filter selected!\n");
  128.     }
  129.     return filter;
  130. }
  131.  
  132. function currentFilterList()
  133. {
  134.     var serverMenu = document.getElementById("serverMenu");
  135.     var serverUri = serverMenu.data;
  136.  
  137.     var filterList = rdf.GetResource(serverUri).GetDelegate("filter", Components.interfaces.nsIMsgFilterList);
  138.  
  139.     return filterList;
  140. }
  141.  
  142. function onFilterSelect(event)
  143. {
  144.     updateButtons();
  145. }
  146.  
  147. function onEditFilter() {
  148.  
  149.     var selectedFilter = currentFilter();
  150.  
  151.     var args = {filter: selectedFilter};
  152.     
  153.     window.openDialog("chrome://messenger/content/FilterEditor.xul", "FilterEditor", "chrome,modal,titlebar,resizable", args);
  154.  
  155.     if (args.refresh)
  156.         refreshFilterList();
  157. }
  158.  
  159. function onNewFilter()
  160. {
  161.     var curFilterList = currentFilterList();
  162.     var args = {filterList: curFilterList };
  163.     
  164.   window.openDialog("chrome://messenger/content/FilterEditor.xul", "FilterEditor", "chrome,modal,titlebar,resizable", args);
  165.  
  166.   if (args.refresh) refreshFilterList();
  167.   
  168. }
  169.  
  170. function onDeleteFilter()
  171. {
  172.     var filter = currentFilter();
  173.     if (!filter) return;
  174.     var filterList = currentFilterList();
  175.     if (!filterList) return;
  176.  
  177.     var confirmStr = getBundle().GetStringFromName("deleteFilterConfirmation");
  178.     
  179.     if (!window.confirm(confirmStr)) return;
  180.  
  181.     filterList.removeFilter(filter);
  182.     refreshFilterList();
  183. }
  184.  
  185. function onUp(event)
  186. {
  187.     moveCurrentFilter(nsMsgFilterMotion.up);
  188. }
  189.  
  190. function onDown(event)
  191. {
  192.     moveCurrentFilter(nsMsgFilterMotion.down);
  193. }
  194.  
  195. function moveCurrentFilter(motion)
  196. {
  197.     var filterList = currentFilterList();
  198.     var filter = currentFilter();
  199.     if (!filterList) return;
  200.     if (!filter) return;
  201.  
  202.     filterList.moveFilter(filter, motion);
  203.     refreshFilterList();
  204. }
  205.  
  206. function refreshFilterList() {
  207.     var tree = document.getElementById("filterTree");
  208.     if (!tree) return;
  209.  
  210.     var selection;
  211.     
  212.     var selectedItems = tree.selectedItems;
  213.     if (selectedItems && selectedItems.length >0)
  214.         selection = tree.selectedItems[0].id;
  215.  
  216.     tree.clearItemSelection();
  217.     tree.setAttribute("ref", tree.getAttribute("ref"));
  218.  
  219.     if (selection) {
  220.         var newItem = document.getElementById(selection);
  221.  
  222.         // sometimes the selected element is gone.
  223.         if (newItem) {
  224.             tree.selectItem(newItem);
  225.             tree.ensureElementIsVisible(newItem);
  226.         }
  227.     }
  228. }
  229.  
  230. function updateButtons()
  231. {
  232.     var filter = currentFilter();
  233.     if (filter) {
  234.         editButton.removeAttribute("disabled");
  235.         deleteButton.removeAttribute("disabled");
  236.     } else {
  237.         editButton.setAttribute("disabled", "true");
  238.         deleteButton.setAttribute("disabled", "true");
  239.     }                      
  240. }
  241.  
  242.