in suite/mailnews/content/mail3PaneWindowCommands.js [228:478]
isCommandEnabled: function(command)
{
var enabled = new Object();
enabled.value = false;
var checkStatus = new Object();
switch ( command )
{
case "cmd_delete":
UpdateDeleteCommand();
// fall through
case "button_delete":
if (command == "button_delete")
UpdateDeleteToolbarButton(false);
if (gDBView)
gDBView.getCommandStatus(nsMsgViewCommandType.deleteMsg, enabled, checkStatus);
return enabled.value;
case "cmd_shiftDelete":
case "button_shiftDelete":
if (gDBView)
gDBView.getCommandStatus(nsMsgViewCommandType.deleteNoTrash, enabled, checkStatus);
return enabled.value;
case "cmd_cancel":
return GetNumSelectedMessages() == 1 &&
gFolderDisplay.selectedMessageIsNews;
case "button_junk":
UpdateJunkToolbarButton();
if (gDBView)
gDBView.getCommandStatus(nsMsgViewCommandType.junk, enabled, checkStatus);
return enabled.value;
case "cmd_killThread":
case "cmd_killSubthread":
return GetNumSelectedMessages() > 0;
case "cmd_watchThread":
if (gDBView)
gDBView.getCommandStatus(nsMsgViewCommandType.toggleThreadWatched, enabled, checkStatus);
return enabled.value;
case "cmd_createFilterFromPopup":
case "cmd_createFilterFromMenu":
var loadedFolder = GetLoadedMsgFolder();
if (!(loadedFolder && loadedFolder.server.canHaveFilters))
return false; // else fall thru
case "cmd_saveAsFile":
return GetNumSelectedMessages() > 0;
case "cmd_saveAsTemplate":
var msgFolder = GetSelectedMsgFolders();
var target = msgFolder[0].server.localStoreType;
if (GetNumSelectedMessages() == 0 || target == "news")
return false; // else fall thru
case "cmd_reply":
case "button_reply":
case "cmd_replyList":
case "cmd_replyGroup":
case "cmd_replySender":
case "cmd_replyall":
case "button_replyall":
case "cmd_replySenderAndGroup":
case "cmd_replyAllRecipients":
case "cmd_forward":
case "button_forward":
case "cmd_forwardInline":
case "cmd_forwardAttachment":
case "cmd_editAsNew":
case "cmd_editDraftMsg":
case "cmd_newMsgFromTemplate":
case "cmd_editTemplateMsg":
case "cmd_openMessage":
case "button_print":
case "cmd_print":
case "cmd_viewPageSource":
case "cmd_reload":
case "cmd_applyFiltersToSelection":
if (command == "cmd_applyFiltersToSelection")
{
var whichText = "valueMessage";
if (GetNumSelectedMessages() > 1)
whichText = "valueSelection";
goSetMenuValue(command, whichText);
goSetAccessKey(command, whichText + "AccessKey");
}
if (GetNumSelectedMessages() > 0)
{
if (gDBView)
{
gDBView.getCommandStatus(nsMsgViewCommandType.cmdRequiringMsgBody, enabled, checkStatus);
return enabled.value;
}
}
return false;
case "cmd_printpreview":
if ( GetNumSelectedMessages() == 1 && gDBView)
{
gDBView.getCommandStatus(nsMsgViewCommandType.cmdRequiringMsgBody, enabled, checkStatus);
return enabled.value;
}
return false;
case "cmd_printSetup":
case "cmd_viewAllHeader":
case "cmd_viewNormalHeader":
return true;
case "cmd_markAsFlagged":
case "button_file":
return GetNumSelectedMessages() > 0;
case "cmd_archive":
return gFolderDisplay.canArchiveSelectedMessages;
case "cmd_markAsJunk":
case "cmd_markAsNotJunk":
if (gDBView)
gDBView.getCommandStatus(nsMsgViewCommandType.junk, enabled, checkStatus);
return enabled.value;
case "cmd_recalculateJunkScore":
// We're going to take a conservative position here, because we really
// don't want people running junk controls on folders that are not
// enabled for junk. The junk type picks up possible dummy message headers,
// while the runJunkControls will prevent running on XF virtual folders.
if (gDBView)
{
gDBView.getCommandStatus(nsMsgViewCommandType.runJunkControls, enabled, checkStatus);
if (enabled.value)
gDBView.getCommandStatus(nsMsgViewCommandType.junk, enabled, checkStatus);
}
return enabled.value;
case "cmd_markAsShowRemote":
return (GetNumSelectedMessages() > 0 && checkMsgHdrPropertyIsNot("remoteContentPolicy", kAllowRemoteContent));
case "cmd_markAsNotPhish":
return (GetNumSelectedMessages() > 0 && checkMsgHdrPropertyIsNot("notAPhishMessage", kNotAPhishMessage));
case "cmd_displayMsgFilters":
return MailServices.accounts.accounts.length > 0;
case "cmd_applyFilters":
if (gDBView)
gDBView.getCommandStatus(nsMsgViewCommandType.applyFilters, enabled, checkStatus);
return enabled.value;
case "cmd_runJunkControls":
if (gDBView)
gDBView.getCommandStatus(nsMsgViewCommandType.runJunkControls, enabled, checkStatus);
return enabled.value;
case "cmd_deleteJunk":
if (gDBView)
gDBView.getCommandStatus(nsMsgViewCommandType.deleteJunk, enabled, checkStatus);
return enabled.value;
case "button_mark":
case "cmd_markThreadAsRead":
return GetNumSelectedMessages() > 0;
case "cmd_markAsRead":
return CanMarkMsgAsRead(true);
case "cmd_markAsUnread":
return CanMarkMsgAsRead(false);
case "button_next":
return IsViewNavigationItemEnabled();
case "cmd_nextMsg":
case "cmd_nextUnreadMsg":
case "cmd_nextUnreadThread":
case "cmd_previousMsg":
case "cmd_previousUnreadMsg":
return IsViewNavigationItemEnabled();
case "button_goBack":
case "cmd_goBack":
return gDBView && gDBView.navigateStatus(nsMsgNavigationType.back);
case "button_goForward":
case "cmd_goForward":
return gDBView && gDBView.navigateStatus(nsMsgNavigationType.forward);
case "cmd_goStartPage":
return Services.prefs.getBoolPref("mailnews.start_page.enabled") && !IsMessagePaneCollapsed();
case "cmd_markAllRead":
return IsFolderSelected() && gDBView && gDBView.msgFolder.getNumUnread(false) > 0;
case "cmd_markReadByDate":
return IsFolderSelected();
case "cmd_find":
case "cmd_findNext":
case "cmd_findPrev":
return IsMessageDisplayedInMessagePane();
break;
case "button_search":
case "cmd_search":
return MailServices.accounts.accounts.length > 0;
case "cmd_selectAll":
case "cmd_selectFlagged":
return !!gDBView;
// these are enabled on when we are in threaded mode
case "cmd_selectThread":
if (GetNumSelectedMessages() <= 0) return false;
case "cmd_expandAllThreads":
case "cmd_collapseAllThreads":
return gDBView && (gDBView.viewFlags & nsMsgViewFlagsType.kThreadedDisplay);
break;
case "cmd_nextFlaggedMsg":
case "cmd_previousFlaggedMsg":
return IsViewNavigationItemEnabled();
case "cmd_viewAllMsgs":
case "cmd_viewUnreadMsgs":
case "cmd_viewIgnoredThreads":
return gDBView;
case "cmd_viewThreadsWithUnread":
case "cmd_viewWatchedThreadsWithUnread":
return gDBView && !(GetSelectedMsgFolders()[0].flags &
Ci.nsMsgFolderFlags.Virtual);
case "cmd_stop":
return true;
case "cmd_undo":
case "cmd_redo":
return SetupUndoRedoCommand(command);
case "cmd_renameFolder":
{
let folders = GetSelectedMsgFolders();
return folders.length == 1 && folders[0].canRename &&
folders[0].isCommandEnabled("cmd_renameFolder");
}
case "cmd_sendUnsentMsgs":
return IsSendUnsentMsgsEnabled(null);
case "cmd_subscribe":
return IsSubscribeEnabled();
case "cmd_properties":
return IsPropertiesEnabled(command);
case "button_getNewMessages":
case "cmd_getNewMessages":
case "cmd_getMsgsForAuthAccounts":
return IsGetNewMessagesEnabled();
case "cmd_getNextNMessages":
return IsGetNextNMessagesEnabled();
case "cmd_emptyTrash":
{
let folder = GetSelectedMsgFolders()[0];
return folder && folder.server.canEmptyTrashOnExit ?
IsMailFolderSelected() : false;
}
case "cmd_compactFolder":
{
let folders = GetSelectedMsgFolders();
let canCompactAll = function canCompactAll(folder) {
return folder.server.canCompactFoldersOnServer &&
!folder.getFlag(Ci.nsMsgFolderFlags.Virtual) &&
folder.isCommandEnabled("cmd_compactFolder");
}
return folders && folders.every(canCompactAll);
}
case "cmd_setFolderCharset":
return IsFolderCharsetEnabled();
case "cmd_downloadFlagged":
return !Services.io.offline;
case "cmd_downloadSelected":
return IsFolderSelected() && !Services.io.offline &&
GetNumSelectedMessages() > 0;
case "cmd_synchronizeOffline":
return !Services.io.offline;
case "cmd_settingsOffline":
return IsAccountOfflineEnabled();
default:
return false;
}
return false;
},