/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * The contents of this file are subject to the Netscape Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is Mozilla Communicator client code, released * March 31, 1998. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998-1999 Netscape Communications Corporation. All * Rights Reserved. */ /* * widget-specific wrapper glue. There should be one function for every * widget/menu item, which gets some context (like the current selection) * and then calls a function/command in commandglue */ // Controller object for folder pane var FolderPaneController = { supportsCommand: function(command) { switch ( command ) { case "cmd_delete": case "button_delete": return true; case "cmd_selectAll": case "cmd_undo": case "cmd_redo": case "cmd_cut": case "cmd_copy": case "cmd_paste": return true; default: return false; } }, isCommandEnabled: function(command) { // dump("FolderPaneController.IsCommandEnabled(" + command + ")\n"); switch ( command ) { case "cmd_selectAll": case "cmd_undo": case "cmd_redo": case "cmd_cut": case "cmd_copy": case "cmd_paste": return false; case "cmd_delete": case "button_delete": /* add this back when folder delete has warning if ( command == "cmd_delete" ) goSetMenuValue(command, 'valueFolder'); var folderTree = GetFolderTree(); if ( folderTree && folderTree.selectedItems ) return true; else*/ return false; default: return false; } }, doCommand: function(command) { switch ( command ) { case "cmd_delete": case "button_delete": // add this back in when folder delete has warning //MsgDeleteFolder(); break; } }, onEvent: function(event) { // on blur events set the menu item texts back to the normal values if ( event == 'blur' ) { goSetMenuValue('cmd_delete', 'valueDefault'); goSetMenuValue('cmd_undo', 'valueDefault'); goSetMenuValue('cmd_redo', 'valueDefault'); } } }; // Controller object for thread pane var ThreadPaneController = { supportsCommand: function(command) { switch ( command ) { case "cmd_undo": case "cmd_redo": case "cmd_selectAll": return true; case "cmd_cut": case "cmd_copy": case "cmd_paste": return true; default: return false; } }, isCommandEnabled: function(command) { switch ( command ) { case "cmd_selectAll": return true; case "cmd_cut": case "cmd_copy": case "cmd_paste": return false; case "cmd_undo": case "cmd_redo": return SetupUndoRedoCommand(command); default: return false; } }, doCommand: function(command) { switch ( command ) { case "cmd_selectAll": var threadTree = GetThreadTree(); if ( threadTree ) { threadTree.selectAll(); if ( threadTree.selectedItems && threadTree.selectedItems.length != 1 ) ClearMessagePane(); } break; case "cmd_undo": messenger.Undo(msgWindow); break; case "cmd_redo": messenger.Redo(msgWindow); break; } }, onEvent: function(event) { // on blur events set the menu item texts back to the normal values if ( event == 'blur' ) { goSetMenuValue('cmd_undo', 'valueDefault'); goSetMenuValue('cmd_redo', 'valueDefault'); } } }; // DefaultController object (handles commands when one of the trees does not have focus) var DefaultController = { supportsCommand: function(command) { switch ( command ) { case "cmd_delete": case "button_delete": return true; default: return false; } }, isCommandEnabled: function(command) { // dump("ThreadPaneController.isCommandEnabled(" + command + ")\n"); switch ( command ) { case "cmd_delete": case "button_delete": var threadTree = GetThreadTree(); var numSelected = 0; if ( threadTree && threadTree.selectedItems ) numSelected = threadTree.selectedItems.length; if ( command == "cmd_delete" ) { if ( numSelected < 2 ) goSetMenuValue(command, 'valueMessage'); else goSetMenuValue(command, 'valueMessages'); } return ( numSelected > 0 ); default: return false; } }, doCommand: function(command) { switch ( command ) { case "cmd_delete": MsgDeleteMessage(false); break; case "button_delete": MsgDeleteMessage(true); break; } }, onEvent: function(event) { // on blur events set the menu item texts back to the normal values if ( event == 'blur' ) { goSetMenuValue('cmd_delete', 'valueDefault'); } } }; function CommandUpdate_Mail() { /*var messagePane = top.document.getElementById('messagePane'); var drawFocusBorder = messagePane.getAttribute('draw-focus-border'); if ( MessagePaneHasFocus() ) { if ( !drawFocusBorder ) messagePane.setAttribute('draw-focus-border', 'true'); } else { if ( drawFocusBorder ) messagePane.removeAttribute('draw-focus-border'); }*/ goUpdateCommand('cmd_delete'); goUpdateCommand('button_delete'); } function SetupUndoRedoCommand(command) { // dump ("--- SetupUndoRedoCommand: " + command + "\n"); var canUndoOrRedo = false; var txnType = 0; if (command == "cmd_undo") { canUndoOrRedo = messenger.CanUndo(); txnType = messenger.GetUndoTransactionType(); } else { canUndoOrRedo = messenger.CanRedo(); txnType = messenger.GetRedoTransactionType(); } if (canUndoOrRedo) { switch (txnType) { default: case 0: goSetMenuValue(command, 'valueDefault'); break; case 1: goSetMenuValue(command, 'valueDeleteMsg'); break; case 2: goSetMenuValue(command, 'valueMoveMsg'); break; case 3: goSetMenuValue(command, 'valueCopyMsg'); break; } } return canUndoOrRedo; } function CommandUpdate_UndoRedo() { ShowMenuItem("menu_undo", true); EnableMenuItem("menu_undo", SetupUndoRedoCommand("cmd_undo")); ShowMenuItem("menu_redo", true); EnableMenuItem("menu_redo", SetupUndoRedoCommand("cmd_redo")); } /*function MessagePaneHasFocus() { var focusedWindow = top.document.commandDispatcher.focusedWindow; var messagePaneWindow = top.frames['messagepane']; if ( focusedWindow && messagePaneWindow && (focusedWindow != top) ) { var hasFocus = IsSubWindowOf(focusedWindow, messagePaneWindow, false); dump("...........Focus on MessagePane = " + hasFocus + "\n"); return hasFocus; } return false; } function IsSubWindowOf(search, wind, found) { //dump("IsSubWindowOf(" + search + ", " + wind + ", " + found + ")\n"); if ( found || (search == wind) ) return true; for ( index = 0; index < wind.frames.length; index++ ) { if ( IsSubWindowOf(search, wind.frames[index], false) ) return true; } return false; }*/ function SetupCommandUpdateHandlers() { dump("SetupCommandUpdateHandlers\n"); var widget; // folder pane widget = GetFolderTree(); if ( widget ) widget.controllers.appendController(FolderPaneController); // thread pane widget = GetThreadTree(); if ( widget ) widget.controllers.appendController(ThreadPaneController); top.controllers.insertControllerAt(0, DefaultController); } var viewShowAll =0; var viewShowRead = 1; var viewShowUnread =2; var viewShowWatched = 3; function MsgHome(url) { window.open( url, "_blank", "chrome,dependent=yes,all" ); } function MsgGetMessage() { GetNewMessages(); } function MsgDeleteMessage(fromToolbar) { //dump("\nMsgDeleteMessage from XUL\n"); //dump("from toolbar? " + fromToolbar + "\n"); var tree = GetThreadTree(); if(tree) { var srcFolder = GetThreadTreeFolder(); // if from the toolbar, return right away if this is a news message // only allow cancel from the menu: "Edit | Cancel / Delete Message" if (fromToolbar) { uri = srcFolder.getAttribute('ref'); //dump("uri[0:6]=" + uri.substring(0,6) + "\n"); if (uri.substring(0,6) == "news:/") { //dump("delete ignored!\n"); return; } } dump("tree is valid\n"); //get the selected elements var messageList = ConvertDOMListToResourceArray(tree.selectedItems); var nextMessage = GetNextMessageAfterDelete(tree.selectedItems); //get the current folder messenger.DeleteMessages(tree.database, srcFolder.resource, messageList); gNextMessageAfterDelete = nextMessage.getAttribute('id'); } } function ConvertDOMListToResourceArray(nodeList) { var result = Components.classes["component://netscape/supports-array"].createInstance(Components.interfaces.nsISupportsArray); for (var i=0; i