home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / mozil06.zip / bin / chrome / messenger.jar / content / messenger / messageWindow.js < prev    next >
Text File  |  2001-02-14  |  14KB  |  560 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. /* This is where functions related to the standalone message window are kept */
  22.  
  23. /* globals for a particular window */
  24.  
  25. var compositeDataSourceContractID        = datasourceContractIDPrefix + "composite-datasource";
  26.  
  27. var gCompositeDataSource;
  28. var gCurrentMessageUri;
  29. var gCurrentFolderUri;
  30.  
  31. var gCurrentMessageIsDeleted = false;
  32.  
  33. // the folderListener object
  34. var folderListener = {
  35.     OnItemAdded: function(parentItem, item, view) {},
  36.  
  37.     OnItemRemoved: function(parentItem, item, view)
  38.     {
  39.         var parentFolderResource = parentItem.QueryInterface(Components.interfaces.nsIRDFResource);
  40.         if(!parentFolderResource)
  41.             return;
  42.  
  43.         var parentURI = parentFolderResource.Value;
  44.         if(parentURI != gCurrentFolderUri)
  45.             return;
  46.  
  47.         var deletedMessageResource = item.QueryInterface(Components.interfaces.nsIRDFResource);
  48.         var deletedUri = deletedMessageResource.Value;
  49.  
  50.         //If the deleted message is our message then we know we're about to be deleted.
  51.         if(deletedUri == gCurrentMessageUri)
  52.         {
  53.             gCurrentMessageIsDeleted = true;
  54.         }
  55.  
  56.     },
  57.  
  58.     OnItemPropertyChanged: function(item, property, oldValue, newValue) {},
  59.  
  60.     OnItemIntPropertyChanged: function(item, property, oldValue, newValue)
  61.     {
  62.     },
  63.  
  64.     OnItemBoolPropertyChanged: function(item, property, oldValue, newValue) {},
  65.  
  66.     OnItemUnicharPropertyChanged: function(item, property, oldValue, newValue){},
  67.     OnItemPropertyFlagChanged: function(item, property, oldFlag, newFlag) {},
  68.  
  69.     OnItemEvent: function(folder, event) {
  70.         if (event.GetUnicode() == "DeleteOrMoveMsgCompleted") {
  71.             HandleDeleteOrMoveMsgCompleted(folder);
  72.         }     
  73.                 else if (event.GetUnicode() == "DeleteOrMoveMsgFailed") {
  74.                         HandleDeleteOrMoveMsgFailed(folder);
  75.                 }
  76.     }
  77. }
  78.  
  79. function HandleDeleteOrMoveMsgCompleted(folder)
  80. {
  81.     dump("In HandleDeleteOrMoveMsgCompleted\n");
  82.     var folderResource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
  83.     if(!folderResource)
  84.         return;
  85.  
  86.     var folderUri = folderResource.Value;
  87.     if((folderUri == gCurrentFolderUri) && gCurrentMessageIsDeleted)
  88.     {
  89.         //If we knew we were going to be deleted and the deletion has finished, close the window.
  90.         gCurrentMessageIsDeleted = false;
  91.         //Use timeout to make sure all folder listeners get event before removing them.  Messes up
  92.         //folder listener iterator if we don't do this.
  93.         setTimeout("window.close();",0);
  94.  
  95.     }
  96. }
  97.  
  98. function HandleDeleteOrMoveMsgFailed(folder)
  99. {
  100.         var folderResource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
  101.         if(!folderResource)
  102.                 return;
  103.  
  104.         var folderUri = folderResource.Value;
  105.         if((folderUri == gCurrentFolderUri) && gCurrentMessageIsDeleted)
  106.         {
  107.                 gCurrentMessageIsDeleted = false;
  108.         }    
  109. }
  110.  
  111. function OnLoadMessageWindow()
  112. {
  113.     HideMenus();
  114.     HideToolbarButtons();
  115.     CreateMailWindowGlobals();
  116.     CreateMessageWindowGlobals();
  117.     verifyAccounts();
  118.  
  119.     InitMsgWindow();
  120.  
  121.     messenger.SetWindow(window, msgWindow);
  122.     InitializeDataSources();
  123.     // FIX ME - later we will be able to use onload from the overlay
  124.     OnLoadMsgHeaderPane();
  125.  
  126.     try {
  127.         mailSession.AddFolderListener(folderListener);
  128.     } catch (ex) {
  129.         dump("Error adding to session\n");
  130.     }
  131.  
  132.     if(window.arguments && window.arguments.length == 2)
  133.     {
  134.         if(window.arguments[0])
  135.         {
  136.             gCurrentMessageUri = window.arguments[0];
  137.         }
  138.         else
  139.         {
  140.             gCurrentMessageUri = null;
  141.         }
  142.  
  143.         if(window.arguments[1])
  144.         {
  145.             gCurrentFolderUri = window.arguments[1];
  146.         }
  147.         else
  148.         {
  149.             gCurrentFolderUri = null;
  150.         }
  151.     }    
  152.  
  153.   setTimeout("OpenURL(gCurrentMessageUri);", 0);
  154.   SetupCommandUpdateHandlers();
  155.  
  156. }
  157.  
  158. function HideMenus()
  159. {
  160.     var message_menuitem=document.getElementById('menu_showMessage');
  161.     if(message_menuitem)
  162.         message_menuitem.setAttribute("hidden", "true");
  163.  
  164.     var expandOrCollapseMenu = document.getElementById('menu_expandOrCollapse');
  165.     if(expandOrCollapseMenu)
  166.         expandOrCollapseMenu.setAttribute("hidden", "true");
  167.  
  168.     var renameFolderMenu = document.getElementById('menu_renameFolder');
  169.     if(renameFolderMenu)
  170.         renameFolderMenu.setAttribute("hidden", "true");
  171.  
  172.     var viewMessagesMenu = document.getElementById('viewMessagesMenu');
  173.     if(viewMessagesMenu)
  174.         viewMessagesMenu.setAttribute("hidden", "true");
  175.  
  176.     var openMessageMenu = document.getElementById('openMessageWindowMenuitem');
  177.     if(openMessageMenu)
  178.         openMessageMenu.setAttribute("hidden", "true");
  179.  
  180.     var viewSortMenu = document.getElementById('viewSortMenu');
  181.     if(viewSortMenu)
  182.         viewSortMenu.setAttribute("hidden", "true");
  183.  
  184.     var viewThreadedMenu = document.getElementById('menu_showThreads');
  185.     if(viewThreadedMenu)
  186.         viewThreadedMenu.setAttribute("hidden", "true");
  187.  
  188.     var goNextMenu = document.getElementById('goNextMenu');
  189.     if(goNextMenu)
  190.         goNextMenu.setAttribute("hidden", "true");
  191.  
  192.     var goPreviousMenu = document.getElementById('goPreviousMenu');
  193.     if(goPreviousMenu)
  194.         goPreviousMenu.setAttribute("hidden", "true");
  195.  
  196.     var goNextSeparator = document.getElementById('goNextSeparator');
  197.     if(goNextSeparator)
  198.         goNextSeparator.setAttribute("hidden", "true");
  199.  
  200.     var emptryTrashMenu = document.getElementById('menu_emptyTrash');
  201.     if(emptryTrashMenu)
  202.         emptryTrashMenu.setAttribute("hidden", "true");
  203.  
  204.     var compactFolderMenu = document.getElementById('menu_compactFolder');
  205.     if(compactFolderMenu)
  206.         compactFolderMenu.setAttribute("hidden", "true");
  207.  
  208.     var trashSeparator = document.getElementById('trashMenuSeparator');
  209.     if(trashSeparator)
  210.         trashSeparator.setAttribute("hidden", "true");
  211.  
  212. }
  213.  
  214. function HideToolbarButtons()
  215. {
  216.     var nextButton = document.getElementById('button-next');
  217.     if(nextButton)
  218.         nextButton.setAttribute("hidden", "true");
  219.  
  220. }
  221.  
  222. function OnUnloadMessageWindow()
  223. {
  224.     OnMailWindowUnload();
  225. }
  226.  
  227. function CreateMessageWindowGlobals()
  228. {
  229.     gCompositeDataSource = Components.classes[compositeDataSourceContractID].createInstance();
  230.     gCompositeDataSource = gCompositeDataSource.QueryInterface(Components.interfaces.nsIRDFCompositeDataSource);
  231.  
  232. }
  233.  
  234. function InitializeDataSources()
  235. {
  236.     AddDataSources();
  237.     //Now add datasources to composite datasource
  238.     gCompositeDataSource.AddDataSource(accountManagerDataSource);
  239.     gCompositeDataSource.AddDataSource(folderDataSource);
  240.     gCompositeDataSource.AddDataSource(messageDataSource);
  241. }
  242.  
  243. function GetSelectedMsgFolders()
  244. {
  245.     var folderArray = new Array(1);
  246.     var msgFolder = GetLoadedMsgFolder();
  247.     if(msgFolder)
  248.     {
  249.         folderArray[0] = msgFolder;    
  250.     }
  251.     return folderArray;
  252. }
  253.  
  254. function GetSelectedMessage(index)
  255. {
  256.     return GetLoadedMessage();
  257. }
  258.  
  259. function GetNumSelectedMessages()
  260. {
  261.     if(gCurrentMessageUri)
  262.         return 1;
  263.     else
  264.         return 0;
  265. }
  266.  
  267. function GetSelectedMessages()
  268. {
  269.     var messageArray = new Array(1);
  270.     var message = GetLoadedMessage();
  271.     if(message)
  272.     {
  273.         messageArray[0] = message;    
  274.     }
  275.     return messageArray;
  276. }
  277.  
  278. function GetLoadedMsgFolder()
  279. {
  280.     if(gCurrentFolderUri)
  281.     {
  282.         var folderResource = RDF.GetResource(gCurrentFolderUri);
  283.         if(folderResource)
  284.         {
  285.             var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
  286.             return msgFolder;
  287.         }
  288.     }
  289.     return null;
  290. }
  291.  
  292. function GetLoadedMessage()
  293. {
  294.     if(gCurrentMessageUri)
  295.     {
  296.         var messageResource = RDF.GetResource(gCurrentMessageUri);
  297.         if(messageResource)
  298.         {
  299.             var message = messageResource.QueryInterface(Components.interfaces.nsIMessage);
  300.             return message;
  301.         }
  302.     }
  303.     return null;
  304.  
  305. }
  306.  
  307. //Clear everything related to the current message. called after load start page.
  308. function ClearMessageSelection()
  309. {
  310.     gCurrentMessageUri = null;
  311.     gCurrentFolderUri = null;
  312.     CommandUpdate_Mail();
  313. }
  314.  
  315. function GetCompositeDataSource(command)
  316. {
  317.     return gCompositeDataSource;    
  318. }
  319.  
  320. //Sets the next message after a delete.  If useSelection is true then use the
  321. //current selection to determine this.  Otherwise use messagesToCheck which will
  322. //be an array of nsIMessage's.
  323. function SetNextMessageAfterDelete(messagesToCheck, useSelection)
  324. {
  325.     gCurrentMessageIsDeleted = true;
  326. }
  327.  
  328. function SelectFolder(folderUri)
  329. {
  330.     gCurrentFolderUri = folderUri;
  331. }
  332.  
  333. function SelectMessage(messageUri)
  334. {
  335.     gCurrentMessageUri = messageUri;
  336.     OpenURL(gCurrentMessageUri);
  337. }
  338.  
  339. function ReloadMessage()
  340. {
  341.     OpenURL(gCurrentMessageUri);
  342. }
  343.  
  344. // MessageWindowController object (handles commands when one of the trees does not have focus)
  345. var MessageWindowController =
  346. {
  347.    supportsCommand: function(command)
  348.     {
  349.  
  350.         switch ( command )
  351.         {
  352.             case "cmd_reply":
  353.             case "button_reply":
  354.             case "cmd_replySender":
  355.             case "cmd_replyGroup":
  356.             case "cmd_replyall":
  357.             case "button_replyall":
  358.             case "cmd_forward":
  359.             case "button_forward":
  360.             case "cmd_forwardInline":
  361.             case "cmd_forwardAttachment":
  362.             case "cmd_editAsNew":
  363.             case "cmd_delete":
  364.             case "button_delete":
  365.             case "cmd_shiftDelete":
  366.             case "cmd_print":
  367.             case "cmd_saveAsFile":
  368.             case "cmd_saveAsTemplate":
  369.             case "cmd_viewPageSource":
  370.             case "cmd_reload":
  371.             case "cmd_getNewMessages":
  372.             case "cmd_getNextNMessages":
  373.             case "cmd_find":
  374.             case "cmd_findAgain":
  375.             case "cmd_markAsRead":
  376.             case "cmd_markAllRead":
  377.             case "cmd_markThreadAsRead":
  378.             case "cmd_markAsFlagged":
  379.             case "cmd_file":
  380.                 return true;
  381.             default:
  382.                 return false;
  383.         }
  384.     },
  385.  
  386.     isCommandEnabled: function(command)
  387.     {
  388.         switch ( command )
  389.         {
  390.             case "cmd_reply":
  391.             case "button_reply":
  392.             case "cmd_replySender":
  393.             case "cmd_replyGroup":
  394.             case "cmd_replyall":
  395.             case "button_replyall":
  396.             case "cmd_forward":
  397.             case "button_forward":
  398.             case "cmd_forwardInline":
  399.             case "cmd_forwardAttachment":
  400.             case "cmd_editAsNew":
  401.             case "cmd_delete":
  402.             case "button_delete":
  403.             case "cmd_shiftDelete":
  404.             case "cmd_print":
  405.             case "cmd_saveAsFile":
  406.             case "cmd_saveAsTemplate":
  407.             case "cmd_viewPageSource":
  408.             case "cmd_reload":
  409.             case "cmd_find":
  410.             case "cmd_findAgain":
  411.             case "cmd_markAsRead":
  412.             case "cmd_markAllRead":
  413.             case "cmd_markThreadAsRead":
  414.             case "cmd_markAsFlagged":
  415.             case "cmd_file":
  416.                 if ( command == "cmd_delete")
  417.                 {
  418.                     goSetMenuValue(command, 'valueMessage');
  419.                 }
  420.                 return ( gCurrentMessageUri != null);
  421.             case "cmd_getNewMessages":
  422.                 return IsGetNewMessagesEnabled();
  423.             case "cmd_getNextNMessages":
  424.                 return IsGetNextNMessagesEnabled();
  425.             default:
  426.                 return false;
  427.         }
  428.     },
  429.  
  430.     doCommand: function(command)
  431.     {
  432.            //dump("MessageWindowController.doCommand(" + command + ")\n");
  433.  
  434.         switch ( command )
  435.         {
  436.             case "cmd_getNewMessages":
  437.                 MsgGetMessage();
  438.                 break;
  439.             case "cmd_getNextNMessages":
  440.                 MsgGetNextNMessages();
  441.                 break;
  442.             case "cmd_reply":
  443.                 MsgReplyMessage(null);
  444.                 break;
  445.             case "cmd_replySender":
  446.                 MsgReplySender(null);
  447.                 break;
  448.             case "cmd_replyGroup":
  449.                 MsgReplyGroup(null);
  450.                 break;
  451.             case "cmd_replyall":
  452.                 MsgReplyToAllMessage(null);
  453.                 break;
  454.             case "cmd_forward":
  455.                 MsgForwardMessage(null);
  456.                 break;
  457.             case "cmd_forwardInline":
  458.                 MsgForwardAsInline(null);
  459.                 break;
  460.             case "cmd_forwardAttachment":
  461.                 MsgForwardAsAttachment(null);
  462.                 break;
  463.             case "cmd_editAsNew":
  464.                 MsgEditMessageAsNew();
  465.                 break;
  466.             case "cmd_delete":
  467.                 MsgDeleteMessage(false, false);
  468.                 break;
  469.             case "cmd_shiftDelete":
  470.                 MsgDeleteMessage(true, false);
  471.                 break;
  472.             case "button_delete":
  473.                 MsgDeleteMessage(false, true);
  474.                 break;
  475.             case "cmd_print":
  476.                 PrintEnginePrint();
  477.                 break;
  478.             case "cmd_saveAsFile":
  479.                 MsgSaveAsFile();
  480.                 break;
  481.             case "cmd_saveAsTemplate":
  482.                 MsgSaveAsTemplate();
  483.                 break;
  484.             case "cmd_viewPageSource":
  485.                 MsgViewPageSource();
  486.                 break;
  487.             case "cmd_reload":
  488.                 MsgReload();
  489.                 break;
  490.             case "cmd_find":
  491.                 MsgFind();
  492.                 break;
  493.             case "cmd_findAgain":
  494.                 MsgFindAgain();
  495.                 break;
  496.             case "cmd_markAsRead":
  497.                 MsgMarkMsgAsRead(null);
  498.                 return;
  499.             case "cmd_markThreadAsRead":
  500.                 MsgMarkThreadAsRead();
  501.                 return;
  502.             case "cmd_markAllRead":
  503.                 MsgMarkAllRead();
  504.                 return;
  505.             case "cmd_markAsFlagged":
  506.                 MsgMarkAsFlagged(null);
  507.                 return;
  508.         }
  509.     },
  510.     
  511.     onEvent: function(event)
  512.     {
  513.     }
  514. };
  515.  
  516.  
  517. function CommandUpdate_Mail()
  518. {
  519.     goUpdateCommand('cmd_reply');
  520.     goUpdateCommand('cmd_replySender');
  521.     goUpdateCommand('cmd_replyGroup');
  522.     goUpdateCommand('cmd_replyall');
  523.     goUpdateCommand('cmd_forward');
  524.     goUpdateCommand('cmd_forwardInline');
  525.     goUpdateCommand('cmd_forwardAttachment');
  526.     goUpdateCommand('button_reply');
  527.     goUpdateCommand('button_replyall');
  528.     goUpdateCommand('button_forward');
  529.     goUpdateCommand('cmd_editAsNew');
  530.     goUpdateCommand('cmd_delete');
  531.     goUpdateCommand('button_delete');
  532.     goUpdateCommand('cmd_shiftDelete');
  533.     goUpdateCommand('cmd_print');
  534.     goUpdateCommand('cmd_saveAsFile');
  535.     goUpdateCommand('cmd_saveAsTemplate');
  536.     goUpdateCommand('cmd_viewPageSource');
  537.     goUpdateCommand('cmd_reload');
  538.     goUpdateCommand('cmd_getNewMessages');
  539.     goUpdateCommand('cmd_getNextNMessages');
  540.     goUpdateCommand('cmd_find');
  541.     goUpdateCommand('cmd_findAgain');
  542.     goUpdateCommand('cmd_markAsRead');
  543.     goUpdateCommand('cmd_markThreadAsRead');
  544.     goUpdateCommand('cmd_markAllRead');
  545.     goUpdateCommand('cmd_markAsFlagged');
  546.     goUpdateCommand('cmd_file');
  547.  
  548. }
  549.  
  550. function SetupCommandUpdateHandlers()
  551. {
  552.     top.controllers.insertControllerAt(0, MessageWindowController);
  553. }
  554.  
  555. function CommandUpdate_UndoRedo()
  556. {
  557.  
  558. }
  559.  
  560.