You can now select a message or folder from a msgWindow.

This commit is contained in:
putterman%netscape.com 2000-04-28 20:10:36 +00:00
Родитель fb4c720c15
Коммит b2e89de4f7
9 изменённых файлов: 129 добавлений и 25 удалений

Просмотреть файл

@ -47,6 +47,8 @@ interface nsIMsgWindow : nsISupports {
void SetDOMWindow(in nsIDOMWindow window);
void StopUrls();
void SelectFolder(in string folderUri);
void SelectMessage(in string messageUri);
/* when the msg window is being unloaded from the content window,
* we can use this notification to force a flush on anything the
* msg window hangs on too. For some reason xpconnect is still hanging
@ -55,3 +57,10 @@ interface nsIMsgWindow : nsISupports {
*/
void closeWindow();
};
[scriptable, uuid(FAD93C80-1AC6-11d4-A8F6-006097222B83)]
interface nsIMsgWindowCommands : nsISupports {
void SelectFolder(in string folderUri);
void SelectMessage(in string messageUri);
};

Просмотреть файл

@ -61,6 +61,25 @@ var gMeterObserver;
var startTime = 0;
//End progress and Status variables
function OnMailWindowUnload()
{
mailSession.RemoveMsgWindow(msgWindow);
messenger.SetWindow(null, null);
var msgDS = folderDataSource.QueryInterface(Components.interfaces.nsIMsgRDFDataSource);
msgDS.window = null;
msgDS = messageDataSource.QueryInterface(Components.interfaces.nsIMsgRDFDataSource);
msgDS.window = null;
msgDS = accountManagerDataSource.QueryInterface(Components.interfaces.nsIMsgRDFDataSource);
msgDS.window = null;
msgWindow.closeWindow();
}
function CreateMailWindowGlobals()
{
// get the messenger instance
@ -75,6 +94,7 @@ function CreateMailWindowGlobals()
statusFeedback = Components.classes[statusFeedbackProgID].createInstance();
statusFeedback = statusFeedback.QueryInterface(Components.interfaces.nsIMsgStatusFeedback);
window.MsgWindowCommands = new nsMsgWindowCommands();
//Create message view object
messageView = Components.classes[messageViewProgID].createInstance();
messageView = messageView.QueryInterface(Components.interfaces.nsIMessageView);
@ -111,7 +131,9 @@ function InitMsgWindow()
msgWindow.statusFeedback = statusFeedback;
msgWindow.messageView = messageView;
msgWindow.msgHeaderSink = messageHeaderSink;
msgWindow.SetDOMWindow(window);
msgWindow.SetDOMWindow(window);
mailSession.AddMsgWindow(msgWindow);
}
function AddDataSources()
@ -244,3 +266,29 @@ nsMsgStatusFeedback.prototype =
{
}
}
function nsMsgWindowCommands()
{
}
nsMsgWindowCommands.prototype =
{
QueryInterface : function(iid)
{
if(iid.equals(Components.interfaces.nsIMsgWindowCommands))
return this;
throw Components.results.NS_NOINTERFACE;
},
SelectFolder: function(folderUri)
{
SelectFolder(folderUri);
},
SelectMessage: function(messageUri)
{
SelectMessage(messageUri);
}
}

Просмотреть файл

@ -70,9 +70,7 @@ function OnLoadMessageWindow()
function OnUnloadMessageWindow()
{
messenger.SetWindow(null, null);
msgWindow.closeWindow();
OnMailWindowUnload();
}
function CreateMessageWindowGlobals()
@ -148,3 +146,14 @@ function SetNextMessageAfterDelete(messagesToCheck, useSelection)
{
gCurrentMessageIsDeleted = true;
}
function SelectFolder(folderUri)
{
gCurrentFolderUri = folderUri;
}
function SelectMessage(messageUri)
{
gCurrentMessageUri = messageUri;
OpenURL(gCurrentMessageUri);
}

Просмотреть файл

@ -44,14 +44,20 @@ Rights Reserved.
windowtype="mail:messageWindow">
<html:script src="chrome://global/content/strres.js"/>
<html:script src="chrome://messenger/content/commandglue.js"/>
<html:script src="chrome://messenger/content/mailWindow.js"/>
<html:script src="chrome://messenger/content/messageWindow.js"/>
<html:script src="chrome://messenger/content/accountUtils.js"/>
<html:script src="chrome://global/content/strres.js"/>
<html:script src="chrome://messenger/content/commandglue.js"/>
<html:script src="chrome://messenger/content/mailWindow.js"/>
<html:script src="chrome://messenger/content/messageWindow.js"/>
<html:script src="chrome://messenger/content/accountUtils.js"/>
<broadcasterset id="broadcasterset"/>
<popupset>
<popup id="emailAddressPopup" oncreate="return fillEmailAddressMenu(document.popupNode);" popupanchor="bottomleft">
<menuitem value="&AddToAddressBook.label;" oncommand="AddNodeToAddressBook(document.popupNode)"/>
<menuitem value="&SendMailTo.label;" oncommand="SendMailToNode(document.popupNode)"/>
</popup>
</popupset>
<menubar id="mailMenubar"/>
<toolbox id="mailToolbarToolbox"/>

Просмотреть файл

@ -267,22 +267,10 @@ function OnUnloadMessenger()
if(mailSession)
{
mailSession.RemoveFolderListener(folderListener);
mailSession.RemoveMsgWindow(msgWindow);
messenger.SetWindow(null, null);
}
}
var msgDS = folderDataSource.QueryInterface(Components.interfaces.nsIMsgRDFDataSource);
msgDS.window = null;
msgDS = messageDataSource.QueryInterface(Components.interfaces.nsIMsgRDFDataSource);
msgDS.window = null;
msgDS = accountManagerDataSource.QueryInterface(Components.interfaces.nsIMsgRDFDataSource);
msgDS.window = null;
msgWindow.closeWindow();
OnMailWindowUnload();
}
@ -405,7 +393,6 @@ function AddToSession()
var mailSession = Components.classes[mailSessionProgID].getService(Components.interfaces.nsIMsgMailSession);
mailSession.AddFolderListener(folderListener);
mailSession.AddMsgWindow(msgWindow);
} catch (ex) {
dump("Error adding to session\n");
}
@ -1318,6 +1305,24 @@ function SetNextMessageAfterDelete(messagesToCheck, useSelection)
}
}
function SelectFolder(folderUri)
{
var tree = GetFolderTree();
var treeitem = document.getElementById(folderUri);
if(tree && treeitem)
ChangeSelection(tree, treeitem);
}
function SelectMessage(messageUri)
{
var tree = GetThreadTree();
var treeitem = document.getElementById(messageUri);
if(tree && treeitem)
ChangeSelection(tree, treeitem);
}
//3pane related commands. Need to go in own file. Putting here for the moment.
function MsgSortByDate()
{

Просмотреть файл

@ -79,7 +79,7 @@ Rights Reserved.
onclick="return top.ToggleMessageFlagged(event.target.parentNode.parentNode.parentNode)"
value="rdf:http://home.netscape.com/NC-rdf#Flagged" />
<treecell value="rdf:http://home.netscape.com/NC-rdf#Status"/>
<treecell value="rdf:http://home.netscape.com/NC-rdf#Size"/>
<treecell value="rdf:http://home.netscape.com/NC-rdf#Size" align="right"/>
<treecell value="rdf:http://home.netscape.com/NC-rdf#TotalUnreadMessages"/>
<treecell value="rdf:http://home.netscape.com/NC-rdf#TotalMessages"/>
<treecell value="rdf:http://home.netscape.com/NC-rdf#OrderReceived"/>

Просмотреть файл

@ -300,7 +300,7 @@ nsresult nsMsgMailSession::GetTopmostMsgWindow(nsIMsgWindow* *aMsgWindow)
if(count > 0)
{
nsCOMPtr<nsISupports> windowSupports = mWindows->ElementAt(0);
nsCOMPtr<nsISupports> windowSupports = mWindows->ElementAt(count - 1);
if(windowSupports)
rv = windowSupports->QueryInterface(NS_GET_IID(nsIMsgWindow), (void**)aMsgWindow);
if(NS_FAILED(rv))

Просмотреть файл

@ -35,6 +35,8 @@
#include "nsILoadGroup.h"
#include "nsIMsgMailNewsUrl.h"
#include "nsIInterfaceRequestor.h"
#include "nsPIDOMWindow.h"
static NS_DEFINE_CID(kTransactionManagerCID, NS_TRANSACTIONMANAGER_CID);
static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID);
@ -76,6 +78,18 @@ nsresult nsMsgWindow::Init()
return rv;
}
/* void SelectFolder (in string folderUri); */
NS_IMETHODIMP nsMsgWindow::SelectFolder(const char *folderUri)
{
return mMsgWindowCommands->SelectFolder(folderUri);
}
/* void SelectMessage (in string messasgeUri); */
NS_IMETHODIMP nsMsgWindow::SelectMessage(const char *messageUri)
{
return mMsgWindowCommands->SelectMessage(messageUri);
}
NS_IMETHODIMP nsMsgWindow::CloseWindow()
{
nsresult rv = NS_OK;
@ -232,6 +246,18 @@ NS_IMETHODIMP nsMsgWindow::SetDOMWindow(nsIDOMWindow *aWindow)
// we don't own mMessageWindowWebShell so don't try to keep a reference to it!
mMessageWindowWebShell = msgWebShell;
}
//Get nsIMsgWindowCommands object
nsCOMPtr<nsISupports> xpConnectObj;
nsCOMPtr<nsPIDOMWindow> piDOMWindow(do_QueryInterface(aWindow));
if (piDOMWindow)
{
nsAutoString msgWindowCommandsWinId;
msgWindowCommandsWinId.AssignWithConversion("MsgWindowCommands");
piDOMWindow->GetObjectProperty(msgWindowCommandsWinId.GetUnicode(), getter_AddRefs(xpConnectObj));
mMsgWindowCommands = do_QueryInterface(xpConnectObj);
}
return rv;
}

Просмотреть файл

@ -52,6 +52,7 @@ protected:
nsCOMPtr<nsITransactionManager> mTransactionManager;
nsCOMPtr<nsIMessageView> mMessageView;
nsCOMPtr<nsIMsgFolder> mOpenFolder;
nsCOMPtr<nsIMsgWindowCommands> mMsgWindowCommands;
// let's not make this a strong ref - we don't own it.
nsIWebShell *mRootWebShell;