Started work on 17376. reviewed by bienvenu. create an object that knows about

mailnews window data and pass it through backend.
This commit is contained in:
putterman%netscape.com 1999-10-27 22:38:47 +00:00
Родитель 94ce645568
Коммит 4e22bcccab
17 изменённых файлов: 316 добавлений и 74 удалений

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

@ -247,4 +247,15 @@
{ 0x4e03b3a6, 0x624a, 0x11d3, \
{ 0x8a, 0xd4, 0x0, 0x60, 0xb0, 0xfc, 0x4, 0xd2}}
//
//nsMsgWindow
//
#define NS_MSGWINDOW_PROGID \
"component://netscape/messenger/msgwindow"
/* BB460DFF-8BF0-11d3-8AFE-0060B0FC04D2*/
#define NS_MSGWINDOW_CID \
{ 0xbb460dff, 0x8bf0, 0x11d3, \
{ 0x8a, 0xfe, 0x0, 0x60, 0xb0, 0xfc, 0x4, 0xd2}}
#endif // nsMessageBaseCID_h__

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

@ -64,6 +64,7 @@
#include "nsMsgFilterService.h"
#include "nsMessageView.h"
#include "nsMsgWindow.h"
static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID);
@ -112,6 +113,8 @@ static NS_DEFINE_CID(kMsgStatusFeedbackCID, NS_MSGSTATUSFEEDBACK_CID);
//MessageView
static NS_DEFINE_CID(kMessageViewCID, NS_MESSAGEVIEW_CID);
//MsgWindow
static NS_DEFINE_CID(kMsgWindowCID, NS_MSGWINDOW_CID);
// private factory declarations for each component we know how to produce
@ -133,6 +136,7 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgCopyService)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgFolderCache)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgStatusFeedback)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMessageView,Init)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMsgWindow,Init)
// Module implementation for the sample library
class nsMsgBaseModule : public nsIModule
@ -170,6 +174,7 @@ protected:
nsCOMPtr<nsIGenericFactory> mMsgFolderCacheFactory;
nsCOMPtr<nsIGenericFactory> mMsgStatusFeedbackFactory;
nsCOMPtr<nsIGenericFactory> mMessageViewFactory;
nsCOMPtr<nsIGenericFactory> mMsgWindowFactory;
};
nsMsgBaseModule::nsMsgBaseModule()
@ -217,6 +222,7 @@ void nsMsgBaseModule::Shutdown()
mMsgFolderCacheFactory = null_nsCOMPtr();
mMsgStatusFeedbackFactory = null_nsCOMPtr();
mMessageViewFactory = null_nsCOMPtr();
mMsgWindowFactory = null_nsCOMPtr();
}
// Create a factory object for creating instances of aClass.
@ -353,6 +359,12 @@ NS_IMETHODIMP nsMsgBaseModule::GetClassObject(nsIComponentManager *aCompMgr,
rv = NS_NewGenericFactory(getter_AddRefs(mMessageViewFactory), &nsMessageViewConstructor);
fact = mMessageViewFactory;
}
else if (aClass.Equals(kMsgWindowCID))
{
if (!mMsgWindowFactory)
rv = NS_NewGenericFactory(getter_AddRefs(mMsgWindowFactory), &nsMsgWindowConstructor);
fact = mMsgWindowFactory;
}
if (fact)
@ -404,7 +416,9 @@ static Components gComponents[] = {
{ "Mail/News Status Feedback", &kMsgStatusFeedbackCID,
NS_MSGSTATUSFEEDBACK_PROGID},
{ "Mail/News MessageView", &kMessageViewCID,
NS_MESSAGEVIEW_PROGID}
NS_MESSAGEVIEW_PROGID},
{ "Mail/News MsgWindow", &kMsgWindowCID,
NS_MSGWINDOW_PROGID}
};

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

@ -30,8 +30,10 @@ nsIMsgCopyService.idl
nsIMsgCopyServiceListener.idl
nsIMsgStatusFeedback.idl
nsIMsgMailNewsUrl.idl
nsIMsgWindowData.idl
nsIMsgWindow.idl
nsIUrlListenerManager.idl
nsIMsgProtocolInfo.idl
nsIMsgRDFDataSource.idl

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

@ -63,8 +63,9 @@ XPIDLSRCS = \
nsIMsgCopyServiceListener.idl \
nsIMsgStatusFeedback.idl \
nsIMsgMailNewsUrl.idl \
nsIMsgWindowData.idl \
nsIMsgWindow.idl \
nsIMsgProtocolInfo.idl \
nsIMsgRDFDataSource.idl \
$(NULL)
include $(topsrcdir)/config/rules.mk

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

@ -47,8 +47,9 @@ XPIDLSRCS = \
.\nsIUrlListenerManager.idl \
.\nsIMsgStatusFeedback.idl \
.\nsIMsgMailNewsUrl.idl \
.\nsIMsgWindowData.idl \
.\nsIMsgWindow.idl \
.\nsIMsgProtocolInfo.idl \
.\nsIMsgRDFDataSource.idl \
$(NULL)
################################################################################

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

@ -0,0 +1,29 @@
/* -*- 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.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsISupports.idl"
#include "nsIMsgWindow.idl"
[scriptable, uuid(BB460DFE-8BF0-11d3-8AFE-0060B0FC04D2)]
/* Interface used to access functions particular to mailnews datasources */
interface nsIMsgRDFDataSource : nsISupports
{
attribute nsIMsgWindow window;
};

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

@ -0,0 +1,36 @@
/* -*- Mode: IDL; 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.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsISupports.idl"
#include "nsIMsgStatusFeedback.idl"
#include "nsIMessageView.idl"
interface nsITransactionManager;
/*
* This interface can be used to set data specific to a window.
*/
[scriptable, uuid(BD85A416-5433-11d3-8AC5-0060B0FC04D2)]
interface nsIMsgWindow : nsISupports {
attribute nsIMsgStatusFeedback statusFeedback;
attribute nsITransactionManager transactionManager;
attribute nsIMessageView messageView;
};

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

@ -26,6 +26,7 @@ var statusFeedbackProgID = "component://netscape/messenger/statusfeedback";
var messageViewProgID = "component://netscape/messenger/messageview";
var mailSessionProgID = "component://netscape/messenger/services/session";
var prefProgID = "component://netscape/preferences";
var msgWindowProgID = "component://netscape/messenger/msgwindow";
var datasourceProgIDPrefix = "component://netscape/rdf/datasource?name=";
var accountManagerDSProgID = datasourceProgIDPrefix + "msgaccountmanager";
@ -53,6 +54,10 @@ statusFeedback = statusFeedback.QueryInterface(Components.interfaces.nsIMsgStatu
var messageView = Components.classes[messageViewProgID].createInstance();
messageView = messageView.QueryInterface(Components.interfaces.nsIMessageView);
//Create message window object
var msgWindow = Components.classes[msgWindowProgID].createInstance();
msgWindow = msgWindow.QueryInterface(Components.interfaces.nsIMsgWindow);
// the folderListener object
var folderListener = {
OnItemAdded: function(parentFolder, item) {},
@ -92,6 +97,8 @@ function OnLoadMessenger()
loadStartPage();
messenger.SetWindow(window, statusFeedback);
InitMsgWindow();
AddDataSources();
InitPanes();
@ -212,6 +219,11 @@ function getFolderListener()
}
}
function InitMsgWindow()
{
msgWindow.statusFeedback = statusFeedback;
msgWindow.messageView = messageView;
}
function AddDataSources()
{
@ -236,17 +248,15 @@ function AddDataSources()
copyMenu.setAttribute('ref', 'msgaccounts:/');
}
//Add statusFeedback
var windowData = folderDataSource.QueryInterface(Components.interfaces.nsIMsgWindowData);
windowData.statusFeedback = statusFeedback;
windowData.messageView = messageView;
windowData = messageDataSource.QueryInterface(Components.interfaces.nsIMsgWindowData);
windowData.statusFeedback = statusFeedback;
windowData.messageView = messageView;
var msgDS = folderDataSource.QueryInterface(Components.interfaces.nsIMsgRDFDataSource);
msgDS.window = msgWindow;
windowData = accountManagerDataSource.QueryInterface(Components.interfaces.nsIMsgWindowData);
windowData.statusFeedback = statusFeedback;
windowData.messageView = messageView;
msgDS = messageDataSource.QueryInterface(Components.interfaces.nsIMsgRDFDataSource);
msgDS.window = msgWindow;
msgDS = accountManagerDataSource.QueryInterface(Components.interfaces.nsIMsgRDFDataSource);
msgDS.window = msgWindow;
}
@ -273,8 +283,10 @@ function OnLoadFolderPane(folderTree)
//Add folderDataSource and accountManagerDataSource to folderPane
accountManagerDataSource = accountManagerDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
folderDataSource = folderDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
folderTree.database.AddDataSource(accountManagerDataSource);
folderTree.database.AddDataSource(folderDataSource);
var database = folderTree.database;
database.AddDataSource(accountManagerDataSource);
database.AddDataSource(folderDataSource);
folderTree.setAttribute('ref', 'msgaccounts:/');
}
@ -341,6 +353,10 @@ function RefreshThreadTreeView()
{
var currentFolder = GetThreadTreeFolder();
var currentFolderID = currentFolder.getAttribute('ref');
//This will make us lose selection when this happens.
//need to figure out if we have to save off selection or if
//tree widget is responsible for this.
ClearThreadTreeSelection();
currentFolder.setAttribute('ref', currentFolderID);
}

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

@ -34,6 +34,8 @@ nsCopyMessageStreamListener.h
nsMsgCopyService.h
nsMsgStatusFeedback.h
nsMessageView.h
nsMsgWindow.h

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

@ -48,6 +48,7 @@ CPPSRCS = \
nsMsgFolderCacheElement.cpp \
nsMsgStatusFeedback.cpp \
nsMessageView.cpp \
nsMsgWindow.cpp \
$(NULL)
EXPORTS = \
@ -70,6 +71,7 @@ EXPORTS = \
nsMsgCopyService.h \
nsMsgStatusFeedback.h \
nsMessageView.h \
nsMsgWindow.h \
$(NULL)
# we don't want the shared lib, but we want to force the creation of a static lib.

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

@ -44,6 +44,7 @@ EXPORTS= \
nsMsgCopyService.h \
nsMsgStatusFeedback.h \
nsMessageView.h \
nsMsgWindow.h \
$(NULL)
@ -74,6 +75,7 @@ CPP_OBJS= \
.\$(OBJDIR)\nsMsgCopyService.obj \
.\$(OBJDIR)\nsMsgStatusFeedback.obj \
.\$(OBJDIR)\nsMessageView.obj \
.\$(OBJDIR)\nsMsgWindow.obj \
$(NULL)

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

@ -312,7 +312,11 @@ NS_IMETHODIMP nsMsgFolderDataSource::GetTargets(nsIRDFResource* source,
else if ((kNC_MessageChild == property))
{
PRBool showThreads;
rv = mMessageView->GetShowThreads(&showThreads);
nsCOMPtr<nsIMessageView> messageView;
rv = mWindow->GetMessageView(getter_AddRefs(messageView));
if(NS_FAILED(rv)) return rv;
rv = messageView->GetShowThreads(&showThreads);
if(NS_FAILED(rv)) return rv;
if(showThreads)
@ -335,7 +339,11 @@ NS_IMETHODIMP nsMsgFolderDataSource::GetTargets(nsIRDFResource* source,
if (NS_SUCCEEDED(rv))
{
PRUint32 viewType;
rv = mMessageView->GetViewType(&viewType);
nsCOMPtr<nsIMessageView> messageView;
rv = mWindow->GetMessageView(getter_AddRefs(messageView));
if(NS_FAILED(rv)) return rv;
rv = messageView->GetViewType(&viewType);
if(NS_FAILED(rv)) return rv;
nsMessageViewMessageEnumerator * messageEnumerator =
new nsMessageViewMessageEnumerator(messages, viewType);

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

@ -316,7 +316,11 @@ NS_IMETHODIMP nsMsgMessageDataSource::GetTargets(nsIRDFResource* source,
nsCOMPtr<nsIMessage> message(do_QueryInterface(source, &rv));
if (NS_SUCCEEDED(rv)) {
PRBool showThreads;
rv = mMessageView->GetShowThreads(&showThreads);
nsCOMPtr<nsIMessageView> messageView;
rv = mWindow->GetMessageView(getter_AddRefs(messageView));
if(NS_FAILED(rv)) return rv;
rv = messageView->GetShowThreads(&showThreads);
if(NS_FAILED(rv)) return rv;
if(showThreads && property == kNC_MessageChild)
@ -336,7 +340,11 @@ NS_IMETHODIMP nsMsgMessageDataSource::GetTargets(nsIRDFResource* source,
nsCOMPtr<nsMessageFromMsgHdrEnumerator> converter;
NS_NewMessageFromMsgHdrEnumerator(messages, msgfolder, getter_AddRefs(converter));
PRUint32 viewType;
rv = mMessageView->GetViewType(&viewType);
nsCOMPtr<nsIMessageView> messageView;
rv = mWindow->GetMessageView(getter_AddRefs(messageView));
if(NS_FAILED(rv)) return rv;
rv = messageView->GetViewType(&viewType);
if(NS_FAILED(rv)) return rv;
nsMessageViewMessageEnumerator * messageEnumerator =
@ -430,7 +438,11 @@ NS_IMETHODIMP nsMsgMessageDataSource::ArcLabelsOut(nsIRDFResource* source,
{
PRBool showThreads;
rv = mMessageView->GetShowThreads(&showThreads);
nsCOMPtr<nsIMessageView> messageView;
rv = mWindow->GetMessageView(getter_AddRefs(messageView));
if(NS_FAILED(rv)) return rv;
rv = messageView->GetShowThreads(&showThreads);
if(NS_FAILED(rv)) return rv;
if(showThreads)
@ -895,7 +907,11 @@ nsresult nsMsgMessageDataSource::createMessageTotalNode(nsIMessage *message, nsI
nsString emptyString("");
PRBool showThreads;
rv = mMessageView->GetShowThreads(&showThreads);
nsCOMPtr<nsIMessageView> messageView;
rv = mWindow->GetMessageView(getter_AddRefs(messageView));
if(NS_FAILED(rv)) return rv;
rv = messageView->GetShowThreads(&showThreads);
if(NS_FAILED(rv)) return rv;
if(!showThreads)
@ -939,7 +955,11 @@ nsresult nsMsgMessageDataSource::createMessageUnreadNode(nsIMessage *message, ns
nsString emptyString("");
PRBool showThreads;
rv = mMessageView->GetShowThreads(&showThreads);
nsCOMPtr<nsIMessageView> messageView;
rv = mWindow->GetMessageView(getter_AddRefs(messageView));
if(NS_FAILED(rv)) return rv;
rv = messageView->GetShowThreads(&showThreads);
if(NS_FAILED(rv)) return rv;
if(!showThreads)

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

@ -61,9 +61,7 @@ nsMsgRDFDataSource::Init()
void nsMsgRDFDataSource::Close()
{
mStatusFeedback = null_nsCOMPtr();
mTransactionManager = null_nsCOMPtr();
mMessageView = null_nsCOMPtr();
mWindow = null_nsCOMPtr();
kEmptyArray = null_nsCOMPtr();
}
@ -84,8 +82,8 @@ nsMsgRDFDataSource::QueryInterface(const nsIID& iid, void **result)
res = NS_STATIC_CAST(nsIRDFDataSource*, this);
else if(iid.Equals(nsCOMTypeInfo<nsIShutdownListener>::GetIID()))
res = NS_STATIC_CAST(nsIShutdownListener*, this);
else if(iid.Equals(nsCOMTypeInfo<nsIMsgWindowData>::GetIID()))
res = NS_STATIC_CAST(nsIMsgWindowData*, this);
else if(iid.Equals(nsCOMTypeInfo<nsIMsgRDFDataSource>::GetIID()))
res = NS_STATIC_CAST(nsIMsgRDFDataSource*, this);
if (res) {
NS_ADDREF(this);
@ -295,57 +293,22 @@ nsMsgRDFDataSource::OnShutdown(const nsCID& aClass, nsISupports* service)
}
NS_IMETHODIMP nsMsgRDFDataSource::GetStatusFeedback(nsIMsgStatusFeedback * *aStatusFeedback)
NS_IMETHODIMP nsMsgRDFDataSource::GetWindow(nsIMsgWindow * *aWindow)
{
if(!aStatusFeedback)
if(!aWindow)
return NS_ERROR_NULL_POINTER;
*aStatusFeedback = mStatusFeedback;
NS_IF_ADDREF(*aStatusFeedback);
*aWindow = mWindow;
NS_IF_ADDREF(*aWindow);
return NS_OK;
}
NS_IMETHODIMP nsMsgRDFDataSource::SetStatusFeedback(nsIMsgStatusFeedback * aStatusFeedback)
NS_IMETHODIMP nsMsgRDFDataSource::SetWindow(nsIMsgWindow * aWindow)
{
mStatusFeedback = aStatusFeedback;
mWindow = aWindow;
return NS_OK;
}
NS_IMETHODIMP nsMsgRDFDataSource::GetTransactionManager(nsITransactionManager * *aTransactionManager)
{
if(!aTransactionManager)
return NS_ERROR_NULL_POINTER;
*aTransactionManager = mTransactionManager;
NS_IF_ADDREF(*aTransactionManager);
return NS_OK;
}
NS_IMETHODIMP nsMsgRDFDataSource::SetTransactionManager(nsITransactionManager * aTransactionManager)
{
mTransactionManager = aTransactionManager;
return NS_OK;
}
NS_IMETHODIMP nsMsgRDFDataSource::GetMessageView(nsIMessageView * *aMessageView)
{
if(!aMessageView)
return NS_ERROR_NULL_POINTER;
*aMessageView = mMessageView;
NS_IF_ADDREF(*aMessageView);
return NS_OK;
}
NS_IMETHODIMP nsMsgRDFDataSource::SetMessageView(nsIMessageView * aMessageView)
{
mMessageView = aMessageView;
return NS_OK;
}
nsIRDFService *
nsMsgRDFDataSource::getRDFService()
{

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

@ -26,10 +26,12 @@
#include "nsIServiceManager.h"
#include "nsISupportsArray.h"
#include "nsITransactionManager.h"
#include "nsIMsgWindowData.h"
#include "nsIMsgWindow.h"
#include "nsIMsgRDFDataSource.h"
class nsMsgRDFDataSource : public nsIRDFDataSource,
public nsIShutdownListener,
public nsIMsgWindowData
public nsIMsgRDFDataSource
{
public:
nsMsgRDFDataSource();
@ -37,7 +39,7 @@ class nsMsgRDFDataSource : public nsIRDFDataSource,
virtual nsresult Init();
NS_DECL_ISUPPORTS
NS_DECL_NSIMSGWINDOWDATA
NS_DECL_NSIMSGRDFDATASOURCE
NS_DECL_NSIRDFDATASOURCE
NS_IMETHOD OnShutdown(const nsCID& aClass, nsISupports* service);
@ -51,9 +53,7 @@ class nsMsgRDFDataSource : public nsIRDFDataSource,
nsIRDFNode *object, PRBool assert);
nsresult GetTransactionManager(nsISupportsArray *sources, nsITransactionManager **aTransactionManager);
nsCOMPtr<nsIMsgStatusFeedback> mStatusFeedback;
nsCOMPtr<nsITransactionManager> mTransactionManager;
nsCOMPtr<nsIMessageView> mMessageView;
nsCOMPtr<nsIMsgWindow> mWindow;
nsCOMPtr<nsISupportsArray> kEmptyArray;
PRBool m_shuttingDown;

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

@ -0,0 +1,87 @@
/* -*- 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.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsMsgWindow.h"
NS_IMPL_ISUPPORTS(nsMsgWindow, nsCOMTypeInfo<nsIMsgWindow>::GetIID())
nsMsgWindow::nsMsgWindow()
{
NS_INIT_REFCNT();
}
nsMsgWindow::~nsMsgWindow()
{
}
nsresult nsMsgWindow::Init()
{
return NS_OK;
}
NS_IMETHODIMP nsMsgWindow::GetStatusFeedback(nsIMsgStatusFeedback * *aStatusFeedback)
{
if(!aStatusFeedback)
return NS_ERROR_NULL_POINTER;
*aStatusFeedback = mStatusFeedback;
NS_IF_ADDREF(*aStatusFeedback);
return NS_OK;
}
NS_IMETHODIMP nsMsgWindow::SetStatusFeedback(nsIMsgStatusFeedback * aStatusFeedback)
{
mStatusFeedback = aStatusFeedback;
return NS_OK;
}
NS_IMETHODIMP nsMsgWindow::GetTransactionManager(nsITransactionManager * *aTransactionManager)
{
if(!aTransactionManager)
return NS_ERROR_NULL_POINTER;
*aTransactionManager = mTransactionManager;
NS_IF_ADDREF(*aTransactionManager);
return NS_OK;
}
NS_IMETHODIMP nsMsgWindow::SetTransactionManager(nsITransactionManager * aTransactionManager)
{
mTransactionManager = aTransactionManager;
return NS_OK;
}
NS_IMETHODIMP nsMsgWindow::GetMessageView(nsIMessageView * *aMessageView)
{
if(!aMessageView)
return NS_ERROR_NULL_POINTER;
*aMessageView = mMessageView;
NS_IF_ADDREF(*aMessageView);
return NS_OK;
}
NS_IMETHODIMP nsMsgWindow::SetMessageView(nsIMessageView * aMessageView)
{
mMessageView = aMessageView;
return NS_OK;
}

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

@ -0,0 +1,48 @@
/* -*- 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.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef _nsMsgWindow_h
#define _nsMsgWindow_h
#include "nsIMsgWindow.h"
#include "nsIMsgStatusFeedback.h"
#include "nsITransactionManager.h"
#include "nsIMessageView.h"
#include "nsCOMPtr.h"
class nsMsgWindow : public nsIMsgWindow {
public:
NS_DECL_ISUPPORTS
nsMsgWindow();
virtual ~nsMsgWindow();
nsresult Init();
NS_DECL_NSIMSGWINDOW
protected:
nsCOMPtr<nsIMsgStatusFeedback> mStatusFeedback;
nsCOMPtr<nsITransactionManager> mTransactionManager;
nsCOMPtr<nsIMessageView> mMessageView;
};
#endif