Fixing bug 103689. Make sure that the right set of addresses are pre-populated in the compose window based on the items selected in the AdderssBook window. Also fixes the new card created from the AddressBook window's file new menu should reflect the right parent addressbook. r=ssu, sr=sspitzer

This commit is contained in:
racham%netscape.com 2002-01-15 22:51:53 +00:00
parent 0b7a3e29e4
commit 1205923e1b
2 changed files with 65 additions and 21 deletions

View file

@ -325,7 +325,10 @@ function AbNewMessage()
var composeFields = Components.classes["@mozilla.org/messengercompose/composefields;1"].createInstance(Components.interfaces.nsIMsgCompFields);
if (composeFields)
{
composeFields.to = GetSelectedAddresses();
if (DirPaneHasFocus())
composeFields.to = GetSelectedAddressesFromDirTree();
else
composeFields.to = GetSelectedAddresses();
params.composeFields = composeFields;
msgComposeService.OpenComposeWindowWithParams(null, params);
}
@ -367,26 +370,58 @@ function goToggleSplitter( id, elementID )
}
}
// Generate a list of cards from the selected mailing list
// and get a comma separated list of card addresses. If the
// item selected in the directory pane is not a mailing list,
// an empty string is returned.
function GetSelectedAddressesFromDirTree()
{
var addresses = "";
var selectedItems = dirTree.selectedItems;
if (selectedItems.length == 1) {
var mailingListUri = selectedItems[0].getAttribute('id');
var directory = GetDirectoryFromURI(mailingListUri);
if (directory.isMailList) {
var listCardsCount = directory.addressLists.Count();
var cards = new Array(listCardsCount);
for ( var i = 0; i < listCardsCount; i++ ) {
var card = directory.addressLists.GetElementAt(i);
card = card.QueryInterface(Components.interfaces.nsIAbCard);
cards[i] = card;
}
addresses = GetAddressesForCards(cards);
}
}
return addresses;
}
function GetSelectedAddresses()
{
var selectedAddresses = "";
var selectedCards = GetSelectedAbCards();
return GetAddressesForCards(selectedCards);
}
// Generate a comma seperate list of addresses from a given
// set of cards.
function GetAddressesForCards(cards)
{
var addresses = "";
var cards = GetSelectedAbCards();
if (!cards)
return selectedAddresses;
return addresses;
var count = cards.length;
if (count > 0)
selectedAddresses += GenerateAddressFromCard(cards[0]);
addresses += GenerateAddressFromCard(cards[0]);
for (var i = 1; i < count; i++) {
var generatedAddress = GenerateAddressFromCard(cards[i]);
if (generatedAddress)
selectedAddresses += "," + generatedAddress;
addresses += "," + generatedAddress;
}
return selectedAddresses;
return addresses;
}
function GetNumSelectedCards()
@ -438,7 +473,7 @@ function GetSelectedAbCards()
var cards = new Array(gAbView.selection.count);
var i,j;
var count = gAbView.selection.getRangeCount();
var current = 0;
for (i=0; i < count; i++) {
@ -450,11 +485,9 @@ function GetSelectedAbCards()
current++;
}
}
return cards;
}
function SelectFirstAddressBook()
{
var children = dirTree.childNodes;
@ -509,7 +542,7 @@ function DirPaneDoubleClick()
function DirPaneSelectionChange()
{
if (dirTree && dirTree.selectedItems && (dirTree.selectedItems.length == 1))
if (dirTree && dirTree.selectedItems && (dirTree.selectedItems.length == 1))
ChangeDirectoryByDOMNode(dirTree.selectedItems[0]);
}
@ -589,7 +622,7 @@ function ChangeDirectoryByDOMNode(dirNode)
var actualSortColumn = SetAbView(uri, sortColumn, sortDirection);
UpdateSortIndicators(actualSortColumn, sortDirection);
// only select the first card if there is a first card
if (gAbView && gAbView.getCardFromRow(0)) {
SelectFirstCard();
@ -781,9 +814,9 @@ function GenerateAddressFromCard(card)
{
var email;
if (card.isMailList)
if (card.isMailList)
email = card.displayName;
else
else
email = card.primaryEmail;
return gHeaderParser.makeFullAddressWString(card.displayName, email);
@ -812,3 +845,9 @@ function GetParentDirectoryFromMailingListURI(abURI)
return null;
}
function DirPaneHasFocus()
{
// returns true if diectory pane has the focus. Returns false, otherwise.
return (top.document.commandDispatcher.focusedElement == dirTree)
}

View file

@ -1,16 +1,21 @@
<?xml version="1.0"?>
<!-- retrieve generic commands -->
<?xul-overlay href="chrome://messenger/content/mailOverlay.xul"?>
<!DOCTYPE window SYSTEM "chrome://messenger/locale/mailOverlay.dtd">
<overlay id="mailABOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- addressbook specific UI items -->
<commandset id="tasksCommands">
<command id="cmd_newMessage" oncommand="AbNewMessage();"/>
<command id="cmd_newCard" oncommand="AbNewCard('dirTree');"/>
</commandset>
<menupopup id="menu_NewPopup">
<menuitem id="menu_newMessage" position="5"/>
<menuitem id="menu_newCard" position="6"/>
<menuitem id="menu_newMessage" position="5" label="&newMessageCmd.label;" key="key_newMessage" accesskey="&newMessageCmd.accesskey;" command="cmd_newMessage"/>
<menuitem id="menu_newCard" position="6" label="&newCardCmd.label;" accesskey="&newCardCmd.accesskey;" command="cmd_newCard"/>
</menupopup>
<keyset id="tasksKeys">
<key id="key_newMessage" key="&newMessageCmd.key;" command="cmd_newMessage" modifiers="accel"/>
</keyset>
</overlay>