for providing the patch. git-svn-id: svn://10.0.0.236/trunk@11242 18797224-902f-48f8-a5cc-f745e15eee43
890 lines
27 KiB
C++
890 lines
27 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* 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.
|
|
*/
|
|
/*
|
|
MsgFrame.cpp -- Msg window stuff
|
|
Created: Chris Toshok <toshok@netscape.com>, 29-Aug-96.
|
|
*/
|
|
|
|
|
|
#include "rosetta.h"
|
|
#include "MsgFrame.h"
|
|
#include "MsgView.h"
|
|
#include "ThreadView.h"
|
|
#include "AttachmentMenu.h"
|
|
#include "FolderMenu.h"
|
|
#include "Command.h"
|
|
#include "xpassert.h"
|
|
#include "MozillaApp.h"
|
|
#include "Dashboard.h"
|
|
#include "MailDownloadFrame.h"
|
|
#include "Xfe/Xfe.h"
|
|
|
|
#include "libi18n.h"
|
|
#include "csid.h"
|
|
#include "libmime.h"
|
|
#include "intl_csi.h"
|
|
#include "felocale.h"
|
|
|
|
|
|
#include "xpgetstr.h"
|
|
extern int XFE_MESSAGE;
|
|
extern int XFE_MESSAGE_SUBTITLE;
|
|
extern int XFE_MN_UNREAD_AND_TOTAL;
|
|
|
|
extern "C" void fe_set_scrolled_default_size(MWContext *context);
|
|
|
|
// Message Encoding Menu Spec - no longer shared between Browsers, and Mail/News
|
|
MenuSpec XFE_MsgFrame::encoding_menu_spec[] = {
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_LATIN1 },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_LATIN2 },
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_CP_1250 },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_EUCJP_AUTO },
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_SJIS },
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_EUCJP },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_BIG5 },
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_CNS_8BIT },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_GB_8BIT },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_KSC_8BIT_AUTO },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_8859_5 },
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_KOI8_R },
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_CP_1251 },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_KOI8_U },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_ARMSCII8 },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_8859_7 },
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_CP_1253 },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_8859_9 },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_TIS620 },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_UTF8 },
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_UTF7 },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdChangeDocumentEncoding, TOGGLEBUTTON, NULL, "EncodingRadioGroup", False, (void*)CS_USRDEF2 },
|
|
{ NULL }
|
|
};
|
|
MenuSpec XFE_MsgFrame::file_menu_spec[] = {
|
|
{ "newSubmenu", CASCADEBUTTON, (MenuSpec *) &XFE_ThreadFrame::new_submenu_spec },
|
|
MENU_SEPARATOR,
|
|
{ "saveMsgAs", CASCADEBUTTON, (MenuSpec *) &XFE_ThreadFrame::save_submenu_spec },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdRenameFolder, PUSHBUTTON },
|
|
{ xfeCmdEmptyTrash, PUSHBUTTON },
|
|
{ xfeCmdCompressAllFolders, PUSHBUTTON },
|
|
{ xfeCmdCleanUpDisk, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ "newMsgSubmenu", CASCADEBUTTON, (MenuSpec *) &XFE_Frame::newMsg_submenu_spec },
|
|
{ xfeCmdSendMessagesInOutbox, PUSHBUTTON },
|
|
{ xfeCmdAddNewsgroup, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdPrint, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdClose, PUSHBUTTON },
|
|
{ xfeCmdExit, PUSHBUTTON },
|
|
{ NULL }
|
|
};
|
|
|
|
MenuSpec XFE_MsgFrame::offline_submenu_spec[] = {
|
|
{ xfeCmdGetSelectedMessagesForOffline, PUSHBUTTON },
|
|
{ xfeCmdGetFlaggedMessagesForOffline, PUSHBUTTON },
|
|
{ xfeCmdChooseMessagesForOffline, PUSHBUTTON },
|
|
{ NULL }
|
|
};
|
|
|
|
MenuSpec XFE_MsgFrame::edit_menu_spec[] = {
|
|
{ xfeCmdUndo, PUSHBUTTON },
|
|
{ xfeCmdRedo, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdCut, PUSHBUTTON },
|
|
{ xfeCmdCopy, PUSHBUTTON },
|
|
{ xfeCmdPaste, PUSHBUTTON },
|
|
{ xfeCmdDeleteMessage, PUSHBUTTON },
|
|
|
|
{ "selectSubmenu", CASCADEBUTTON, (MenuSpec *) &XFE_Frame::select_submenu_spec },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdFindInObject, PUSHBUTTON },
|
|
{ xfeCmdFindAgain, PUSHBUTTON },
|
|
{ xfeCmdSearch, PUSHBUTTON },
|
|
{ xfeCmdSearchAddress, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdEditMailFilterRules,PUSHBUTTON },
|
|
{ xfeCmdEditPreferences, PUSHBUTTON },
|
|
{ NULL }
|
|
};
|
|
|
|
MenuSpec XFE_MsgFrame::view_menu_spec[] = {
|
|
{ "showSubmenu", CASCADEBUTTON, (MenuSpec *) &XFE_ThreadFrame::show_submenu_spec },
|
|
MENU_SEPARATOR,
|
|
{ "headersSubmenu", CASCADEBUTTON, (MenuSpec *) &XFE_Frame::headers_submenu_spec },
|
|
// This should just be a toggle. -slamm
|
|
{ "attachmentsSubmenu", CASCADEBUTTON, (MenuSpec *) &XFE_Frame::attachments_submenu_spec },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdIncreaseFont, PUSHBUTTON },
|
|
{ xfeCmdDecreaseFont, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdReload, PUSHBUTTON },
|
|
{ xfeCmdShowImages, PUSHBUTTON },
|
|
{ xfeCmdRefresh, PUSHBUTTON },
|
|
{ xfeCmdStopLoading, PUSHBUTTON },
|
|
//{ xfeCmdStopAnimations, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdRot13Message, PUSHBUTTON },
|
|
{ xfeCmdWrapLongLines, TOGGLEBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdViewPageSource, PUSHBUTTON },
|
|
{ xfeCmdViewPageInfo, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ "encodingSubmenu", CASCADEBUTTON,(MenuSpec*)&XFE_MsgFrame::encoding_menu_spec },
|
|
{ NULL }
|
|
};
|
|
|
|
MenuSpec XFE_MsgFrame::message_menu_spec[] = {
|
|
{ xfeCmdComposeMessage, PUSHBUTTON },
|
|
{ "replySubmenu", CASCADEBUTTON, (MenuSpec *) &XFE_Frame::reply_submenu_spec },
|
|
{ xfeCmdForwardMessage, PUSHBUTTON },
|
|
{ xfeCmdForwardMessageQuoted, PUSHBUTTON },
|
|
{ xfeCmdForwardMessageInLine, PUSHBUTTON },
|
|
{ xfeCmdEditMessage, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ "addToABSubmenu", CASCADEBUTTON, (MenuSpec *) &XFE_Frame::addrbk_submenu_spec },
|
|
{ "fileSubmenu", DYNA_CASCADEBUTTON, NULL, NULL,
|
|
False, (void*)xfeCmdMoveMessage, XFE_FolderMenu::generate },
|
|
{ "copySubmenu", DYNA_CASCADEBUTTON, NULL, NULL,
|
|
False, (void*)xfeCmdCopyMessage, XFE_FolderMenu::generate },
|
|
MENU_SEPARATOR,
|
|
{ "markSubmenu", CASCADEBUTTON, (MenuSpec *) &XFE_ThreadFrame::mark_submenu_spec },
|
|
{ xfeCmdMarkMessage, PUSHBUTTON },
|
|
{ xfeCmdUnflagMessage, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdIgnoreThread, PUSHBUTTON },
|
|
{ xfeCmdWatchThread, PUSHBUTTON },
|
|
{ NULL }
|
|
};
|
|
|
|
MenuSpec XFE_MsgFrame::go_menu_spec[] = {
|
|
{ xfeCmdNextMessage, PUSHBUTTON },
|
|
{ xfeCmdNextUnreadMessage, PUSHBUTTON },
|
|
{ xfeCmdNextFlaggedMessage, PUSHBUTTON },
|
|
{ xfeCmdNextUnreadThread, PUSHBUTTON },
|
|
{ xfeCmdNextCollection, PUSHBUTTON },
|
|
{ xfeCmdNextUnreadCollection, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdPreviousMessage, PUSHBUTTON },
|
|
{ xfeCmdPreviousUnreadMessage, PUSHBUTTON },
|
|
{ xfeCmdPreviousFlaggedMessage, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdFirstFlaggedMessage, PUSHBUTTON },
|
|
MENU_SEPARATOR,
|
|
{ xfeCmdBack, PUSHBUTTON },
|
|
{ xfeCmdForward, PUSHBUTTON },
|
|
{ NULL }
|
|
};
|
|
|
|
MenuSpec XFE_MsgFrame::menu_bar_spec[] = {
|
|
{ xfeMenuFile, CASCADEBUTTON, file_menu_spec },
|
|
{ xfeMenuEdit, CASCADEBUTTON, edit_menu_spec },
|
|
{ xfeMenuView, CASCADEBUTTON, view_menu_spec },
|
|
{ xfeMenuGo, CASCADEBUTTON, XFE_ThreadFrame::go_menu_spec },
|
|
{ xfeMenuMessage, CASCADEBUTTON, message_menu_spec },
|
|
{ "bookmarksSubmenu", CASCADEBUTTON, XFE_Frame::bookmark_submenu_spec },
|
|
{ xfeMenuWindow, CASCADEBUTTON, XFE_Frame::window_menu_spec },
|
|
{ xfeMenuHelp, CASCADEBUTTON, XFE_Frame::help_menu_spec },
|
|
{ NULL }
|
|
};
|
|
|
|
ToolbarSpec XFE_MsgFrame::toolbar_spec[] = {
|
|
{ xfeCmdGetNewMessages, PUSHBUTTON, &MNTB_GetMsg_group },
|
|
{ // XX mail only
|
|
xfeCmdComposeMessage,
|
|
CASCADEBUTTON,
|
|
&MNTB_Compose_group, NULL, NULL, NULL, // Icons
|
|
compose_message_submenu_spec, // Submenu spec
|
|
NULL, NULL, // Generate proc/arg
|
|
XFE_TOOLBAR_DELAY_LONG // Popup delay
|
|
},
|
|
{ // XX newsgroup only
|
|
xfeCmdComposeArticle,
|
|
CASCADEBUTTON,
|
|
&MNTB_Compose_group, NULL, NULL, NULL, // Icons
|
|
compose_article_submenu_spec, // Submenu spec
|
|
NULL, NULL, // Generate proc/arg
|
|
XFE_TOOLBAR_DELAY_LONG // Popup delay
|
|
},
|
|
|
|
TOOLBAR_SEPARATOR,
|
|
{ // XX mail only
|
|
xfeCmdReplyToSender,
|
|
CASCADEBUTTON,
|
|
&MNTB_Reply_group, NULL, NULL, NULL, // Icons
|
|
reply_submenu_spec, // Submenu spec
|
|
NULL, NULL, // Generate proc/arg
|
|
XFE_TOOLBAR_DELAY_LONG // Popup delay
|
|
},
|
|
{ // XX news only
|
|
xfeCmdReplyToNewsgroup,
|
|
CASCADEBUTTON,
|
|
&MNTB_Reply_group, NULL, NULL, NULL, // Icons
|
|
reply_submenu_spec, // Submenu spec
|
|
NULL, NULL, // Generate proc/arg
|
|
XFE_TOOLBAR_DELAY_LONG // Popup delay
|
|
},
|
|
{ xfeCmdForwardMessage, PUSHBUTTON, &MNTB_Forward_group },
|
|
TOOLBAR_SEPARATOR,
|
|
{ xfeCmdCopyMessage, // XX news only
|
|
DYNA_CASCADEBUTTON,
|
|
&MNTB_File_group, NULL, NULL, NULL, NULL,
|
|
XFE_FolderMenu::generate, (void*)xfeCmdCopyMessage,
|
|
XFE_TOOLBAR_DELAY_SHORT
|
|
},
|
|
{ xfeCmdMoveMessage, // XX mail only
|
|
DYNA_CASCADEBUTTON,
|
|
&MNTB_File_group, NULL, NULL, NULL, NULL,
|
|
XFE_FolderMenu::generate, (void*)xfeCmdMoveMessage,
|
|
XFE_TOOLBAR_DELAY_SHORT
|
|
},
|
|
{
|
|
xfeCmdNextUnreadMessage,
|
|
CASCADEBUTTON,
|
|
&MNTB_Next_group, NULL, NULL, NULL, // Icons
|
|
next_submenu_spec, // Submenu spec
|
|
NULL, NULL, // Generate proc/arg
|
|
XFE_TOOLBAR_DELAY_LONG // Popup delay
|
|
},
|
|
{ xfeCmdPrint, PUSHBUTTON, &TB_Print_group },
|
|
HG71611
|
|
{ xfeCmdMarkMessageRead, // XX news only
|
|
CASCADEBUTTON,
|
|
&MNTB_MarkRead_group, NULL, NULL, NULL, // Icons
|
|
mark_submenu_spec, // Submenu spec
|
|
NULL, NULL, // Generate proc/arg
|
|
XFE_TOOLBAR_DELAY_LONG // Popup delay
|
|
},
|
|
{ xfeCmdDeleteMessage, PUSHBUTTON, &MNTB_Trash_group }, // XX mail only
|
|
{ xfeCmdStopLoading, PUSHBUTTON, &TB_Stop_group },
|
|
{ NULL }
|
|
};
|
|
|
|
XFE_MsgFrame::XFE_MsgFrame(Widget toplevel, XFE_Frame *parent_frame, Chrome *chromespec)
|
|
: XFE_Frame("MailMsg", toplevel, parent_frame, FRAME_MAILNEWS_MSG, chromespec, True)
|
|
{
|
|
INTL_CharSetInfo c = LO_GetDocumentCharacterSetInfo(m_context);
|
|
INTL_SetCSIWinCSID(c,
|
|
INTL_DocToWinCharSetID (CONTEXT_DATA (m_context)->xfe_doc_csid));
|
|
|
|
geometryPrefName = "mail.msg";
|
|
|
|
// create the msg view
|
|
XFE_MsgView *mview;
|
|
|
|
mview = new XFE_MsgView(this, getChromeParent(), NULL, m_context);
|
|
mview->registerInterest(XFE_MsgView::spacebarAtMsgBottom,
|
|
this,
|
|
(XFE_FunctionNotification)spaceAtMsgEnd_cb);
|
|
|
|
mview->registerInterest(XFE_MsgView::messageHasChanged,
|
|
this,
|
|
(XFE_FunctionNotification)msgLoaded_cb);
|
|
|
|
mview->registerInterest(XFE_MsgView::lastMsgDeleted,
|
|
this,
|
|
(XFE_FunctionNotification)msgDeleted_cb);
|
|
|
|
m_banner = new XFE_MNBanner(this, m_toolbox);
|
|
|
|
setView(mview);
|
|
|
|
setMenubar(menu_bar_spec);
|
|
setToolbar(toolbar_spec);
|
|
|
|
fe_set_scrolled_default_size(m_context);
|
|
|
|
// m_banner->show();
|
|
mview->show();
|
|
|
|
m_banner->setTitle( XP_GetString ( XFE_MESSAGE ));
|
|
m_banner->setSubtitle( "" );
|
|
m_banner->setMommyIcon(&MN_Mommy_group);
|
|
|
|
// safe defaults. They will be overridden when we update the banner.
|
|
|
|
// Configure the dashboard
|
|
XP_ASSERT( m_dashboard != NULL );
|
|
|
|
HG11111
|
|
m_dashboard->setShowStatusBar(True);
|
|
m_dashboard->setShowProgressBar(True);
|
|
|
|
// Configure the toolbox for the first time
|
|
configureToolbox();
|
|
|
|
XFE_MozillaApp::theApp()->registerInterest(XFE_MNView::MNChromeNeedsUpdating,
|
|
this,
|
|
(XFE_FunctionNotification)MNChromeUpdate_cb);
|
|
|
|
XFE_MozillaApp::theApp()->registerInterest(XFE_MNView::folderChromeNeedsUpdating,
|
|
this,
|
|
(XFE_FunctionNotification)FolderChromeUpdate_cb);
|
|
|
|
XFE_MozillaApp::theApp()->registerInterest(XFE_MNView::msgWasDeleted,
|
|
this,
|
|
(XFE_FunctionNotification)msgDeleted_cb);
|
|
|
|
XFE_MozillaApp::theApp()->registerInterest(XFE_MNView::folderDeleted,
|
|
this,
|
|
(XFE_FunctionNotification)folderDeleted_cb);
|
|
}
|
|
|
|
XFE_MsgFrame::~XFE_MsgFrame()
|
|
{
|
|
XFE_MozillaApp::theApp()->unregisterInterest(XFE_MNView::MNChromeNeedsUpdating,
|
|
this,
|
|
(XFE_FunctionNotification)MNChromeUpdate_cb);
|
|
|
|
XFE_MozillaApp::theApp()->unregisterInterest(XFE_MNView::folderChromeNeedsUpdating,
|
|
this,
|
|
(XFE_FunctionNotification)FolderChromeUpdate_cb);
|
|
|
|
XFE_MozillaApp::theApp()->unregisterInterest(XFE_MNView::msgWasDeleted,
|
|
this,
|
|
(XFE_FunctionNotification)msgDeleted_cb);
|
|
|
|
XFE_MozillaApp::theApp()->unregisterInterest(XFE_MNView::folderDeleted,
|
|
this,
|
|
(XFE_FunctionNotification)folderDeleted_cb);
|
|
}
|
|
|
|
XP_Bool
|
|
XFE_MsgFrame::isCommandEnabled(CommandType cmd,
|
|
void *calldata, XFE_CommandInfo*)
|
|
{
|
|
if (cmd == xfeCmdToggleLocationToolbar)
|
|
return True;
|
|
else if (cmd == xfeCmdCleanUpDisk)
|
|
return True;
|
|
else
|
|
return XFE_Frame::isCommandEnabled(cmd, calldata);
|
|
}
|
|
|
|
void
|
|
XFE_MsgFrame::doCommand(CommandType cmd,
|
|
void *calldata, XFE_CommandInfo* info)
|
|
{
|
|
if (cmd == xfeCmdToggleLocationToolbar)
|
|
{
|
|
if (m_banner)
|
|
{
|
|
// Toggle the showing state
|
|
m_banner->toggleShowingState();
|
|
|
|
// Configure the logo
|
|
configureLogo();
|
|
|
|
// Update prefs
|
|
toolboxItemChangeShowing(m_banner);
|
|
|
|
// Update chrome
|
|
notifyInterested(XFE_View::chromeNeedsUpdating);
|
|
}
|
|
|
|
return;
|
|
} else if ( (cmd == xfeCmdComposeMessage) ||
|
|
(cmd == xfeCmdComposeMessagePlain) ||
|
|
(cmd == xfeCmdComposeMessageHTML) ||
|
|
(cmd == xfeCmdComposeArticle) ||
|
|
(cmd == xfeCmdComposeArticlePlain) ||
|
|
(cmd == xfeCmdComposeArticleHTML) )
|
|
|
|
{
|
|
XFE_MsgView *tview = (XFE_MsgView*)m_view;
|
|
|
|
tview->doCommand(cmd, calldata,info);
|
|
|
|
}
|
|
|
|
else
|
|
XFE_Frame::doCommand(cmd, calldata, info);
|
|
}
|
|
|
|
XP_Bool
|
|
XFE_MsgFrame::handlesCommand(CommandType cmd,
|
|
void *calldata, XFE_CommandInfo*)
|
|
{
|
|
if (cmd == xfeCmdToggleLocationToolbar)
|
|
return True;
|
|
else
|
|
return XFE_Frame::handlesCommand(cmd, calldata);
|
|
}
|
|
|
|
char *
|
|
XFE_MsgFrame::commandToString(CommandType cmd,
|
|
void *calldata, XFE_CommandInfo*)
|
|
{
|
|
if (cmd == xfeCmdToggleLocationToolbar)
|
|
{
|
|
char *res = NULL;
|
|
|
|
if (m_banner->isShown())
|
|
res = "hideLocationToolbarCmdString";
|
|
else
|
|
res = "showLocationToolbarCmdString";
|
|
|
|
return stringFromResource(res);
|
|
}
|
|
else
|
|
{
|
|
return XFE_Frame::commandToString(cmd, calldata);
|
|
}
|
|
}
|
|
|
|
void XFE_MsgFrame::setButtonsByContext(MWContextType cxType)
|
|
{
|
|
if (cxType == MWContextNewsMsg || cxType == MWContextNews)
|
|
{
|
|
m_toolbar->hideButton(xfeCmdComposeMessage, PUSHBUTTON);
|
|
m_toolbar->hideButton(xfeCmdDeleteMessage, PUSHBUTTON);
|
|
m_toolbar->hideButton(xfeCmdReplyToSender, CASCADEBUTTON);
|
|
m_toolbar->hideButton(xfeCmdMoveMessage, CASCADEBUTTON);
|
|
|
|
m_toolbar->showButton(xfeCmdMarkMessageRead, CASCADEBUTTON);
|
|
m_toolbar->showButton(xfeCmdComposeArticle, PUSHBUTTON);
|
|
m_toolbar->showButton(xfeCmdReplyToNewsgroup, CASCADEBUTTON);
|
|
m_toolbar->showButton(xfeCmdCopyMessage, CASCADEBUTTON);
|
|
}
|
|
else
|
|
{
|
|
m_toolbar->showButton(xfeCmdComposeMessage, PUSHBUTTON);
|
|
m_toolbar->showButton(xfeCmdDeleteMessage, PUSHBUTTON);
|
|
m_toolbar->showButton(xfeCmdReplyToSender, CASCADEBUTTON);
|
|
m_toolbar->showButton(xfeCmdMoveMessage, CASCADEBUTTON);
|
|
|
|
m_toolbar->hideButton(xfeCmdComposeArticle, PUSHBUTTON);
|
|
m_toolbar->hideButton(xfeCmdReplyToNewsgroup, CASCADEBUTTON);
|
|
m_toolbar->hideButton(xfeCmdMarkMessageRead, CASCADEBUTTON);
|
|
m_toolbar->hideButton(xfeCmdCopyMessage, CASCADEBUTTON);
|
|
}
|
|
}
|
|
|
|
void
|
|
XFE_MsgFrame::allConnectionsComplete(MWContext *context)
|
|
{
|
|
XFE_Frame::allConnectionsComplete(context);
|
|
updateReadAndTotalCounts();
|
|
}
|
|
|
|
void
|
|
XFE_MsgFrame::loadMessage(MSG_FolderInfo *folder_info,
|
|
MessageKey msg_key)
|
|
{
|
|
XFE_MsgView *mview = (XFE_MsgView*)m_view;
|
|
MSG_FolderLine folderline;
|
|
|
|
if (MSG_GetFolderLineById(XFE_MNView::getMaster(),
|
|
folder_info, &folderline))
|
|
{
|
|
if (folderline.flags & MSG_FOLDER_FLAG_NEWSGROUP)
|
|
setButtonsByContext(MWContextNewsMsg);
|
|
else
|
|
setButtonsByContext(MWContextMailMsg);
|
|
}
|
|
|
|
mview->loadMessage(folder_info, msg_key);
|
|
}
|
|
|
|
MSG_Pane *
|
|
XFE_MsgFrame::getPane()
|
|
{
|
|
XFE_MsgView *mview = (XFE_MsgView*)m_view;
|
|
|
|
return mview->getPane();
|
|
}
|
|
|
|
MSG_FolderInfo *
|
|
XFE_MsgFrame::getFolderInfo()
|
|
{
|
|
XFE_MsgView *mview = (XFE_MsgView*)m_view;
|
|
|
|
return mview->getFolderInfo();
|
|
}
|
|
|
|
MessageKey
|
|
XFE_MsgFrame::getMessageKey()
|
|
{
|
|
XFE_MsgView *mview = (XFE_MsgView*)m_view;
|
|
|
|
return mview->getMessageKey();
|
|
}
|
|
|
|
XFE_CALLBACK_DEFN(XFE_MsgFrame, spaceAtMsgEnd)(XFE_NotificationCenter*,
|
|
void *, void *)
|
|
{
|
|
if (m_view->isCommandEnabled(xfeCmdNextUnreadMessage))
|
|
m_view->doCommand(xfeCmdNextUnreadMessage);
|
|
}
|
|
|
|
XFE_CALLBACK_DEFN(XFE_MsgFrame, msgLoaded)(XFE_NotificationCenter*,
|
|
void*, void*)
|
|
{
|
|
MSG_FolderInfo *folder_info;
|
|
MessageKey msg_key;
|
|
MSG_MessageLine threadline;
|
|
MSG_FolderLine folderline;
|
|
MSG_ViewIndex index;
|
|
XFE_MsgView *mview = (XFE_MsgView*)m_view;
|
|
|
|
updateReadAndTotalCounts();
|
|
|
|
MSG_GetCurMessage(mview->getPane(), &folder_info, &msg_key, &index);
|
|
|
|
if (MSG_GetThreadLineById(mview->getPane(),
|
|
msg_key, &threadline))
|
|
{
|
|
char subtitle[1024];
|
|
char *foldername = "";
|
|
char *subject;
|
|
char *author;
|
|
|
|
m_banner->setTitle( XP_GetString ( XFE_MESSAGE ));
|
|
|
|
if (MSG_GetFolderLineById(XFE_MNView::getMaster(),
|
|
folder_info, &folderline))
|
|
{
|
|
char buf[200];
|
|
|
|
foldername = (char*)folderline.name;
|
|
|
|
PR_snprintf(buf, sizeof(buf), XP_GetString(XFE_MN_UNREAD_AND_TOTAL), folderline.unseen, folderline.total);
|
|
|
|
m_banner->setInfo(buf);
|
|
}
|
|
|
|
INTL_DECODE_MIME_PART_II(subject, threadline.subject, fe_LocaleCharSetID, FALSE);
|
|
INTL_DECODE_MIME_PART_II(author, threadline.author, fe_LocaleCharSetID, FALSE);
|
|
PR_snprintf(subtitle, sizeof(subtitle),
|
|
XP_GetString( XFE_MESSAGE_SUBTITLE ),
|
|
subject,
|
|
author,
|
|
foldername);
|
|
|
|
XP_FREE(subject);
|
|
XP_FREE(author);
|
|
m_banner->setSubtitle(subtitle);
|
|
notifyInterested(XFE_View::chromeNeedsUpdating);
|
|
}
|
|
}
|
|
|
|
void
|
|
XFE_MsgFrame::updateReadAndTotalCounts()
|
|
{
|
|
MSG_FolderLine folderline;
|
|
MSG_FolderInfo *folder_info;
|
|
MessageKey msg_key;
|
|
MSG_ViewIndex index;
|
|
XFE_MsgView *mview = (XFE_MsgView*)m_view;
|
|
|
|
MSG_GetCurMessage(mview->getPane(), &folder_info, &msg_key, &index);
|
|
|
|
if (folder_info)
|
|
{
|
|
if (MSG_GetFolderLineById(XFE_MNView::getMaster(),
|
|
folder_info, &folderline))
|
|
{
|
|
char buf[200];
|
|
|
|
PR_snprintf(buf, sizeof(buf),
|
|
XP_GetString(XFE_MN_UNREAD_AND_TOTAL),
|
|
folderline.unseen,
|
|
folderline.total);
|
|
|
|
m_banner->setInfo(buf);
|
|
}
|
|
}
|
|
}
|
|
|
|
XFE_CALLBACK_DEFN(XFE_MsgFrame, MNChromeUpdate)(XFE_NotificationCenter*,
|
|
void*, void*)
|
|
{
|
|
notifyInterested(XFE_View::chromeNeedsUpdating);
|
|
|
|
updateReadAndTotalCounts();
|
|
}
|
|
|
|
XFE_CALLBACK_DEFN(XFE_MsgFrame, FolderChromeUpdate)(XFE_NotificationCenter*,
|
|
void*, void *cd)
|
|
{
|
|
MSG_FolderInfo *info = (MSG_FolderInfo*)cd;
|
|
|
|
if (info == getFolderInfo())
|
|
{
|
|
notifyInterested(XFE_View::chromeNeedsUpdating);
|
|
|
|
updateReadAndTotalCounts();
|
|
}
|
|
}
|
|
|
|
XFE_CALLBACK_DEFN(XFE_MsgFrame, msgDeleted)(XFE_NotificationCenter*,
|
|
void *, void *cdata)
|
|
{
|
|
/* Need to check if this folder ?
|
|
*/
|
|
MessageKey id = (MessageKey) cdata;
|
|
if (id == getMessageKey())
|
|
hide();
|
|
}
|
|
|
|
XFE_CALLBACK_DEFN(XFE_MsgFrame, folderDeleted)(XFE_NotificationCenter*,
|
|
void *, void *cdata)
|
|
{
|
|
|
|
/* Need to check if this folder ?
|
|
*/
|
|
MSG_FolderInfo *info = (MSG_FolderInfo *) cdata;
|
|
if (info == getFolderInfo())
|
|
delete_response();
|
|
}
|
|
|
|
XFE_MsgFrame *
|
|
XFE_MsgFrame::frameForMessage(MSG_FolderInfo *info, MessageKey key)
|
|
{
|
|
XP_List *msg_frame_list = XFE_MozillaApp::theApp()->getFrameList( FRAME_MAILNEWS_MSG );
|
|
XP_List *current_list_entry;
|
|
|
|
for (current_list_entry = msg_frame_list;
|
|
current_list_entry != NULL;
|
|
current_list_entry = current_list_entry->next)
|
|
{
|
|
if (current_list_entry->object
|
|
&& ((XFE_Frame*)current_list_entry->object)->getType() == FRAME_MAILNEWS_MSG // sanity check
|
|
&& ((XFE_MsgFrame*)current_list_entry->object)->getFolderInfo() == info
|
|
&& ((XFE_MsgFrame*)current_list_entry->object)->getMessageKey() == key)
|
|
{
|
|
return (XFE_MsgFrame*)current_list_entry->object;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
MWContext*
|
|
fe_showMsg(Widget toplevel,
|
|
XFE_Frame *parent_frame,
|
|
Chrome *chromespec,
|
|
MSG_FolderInfo *folder_info,
|
|
MessageKey msg_key,
|
|
XP_Bool with_reuse)
|
|
{
|
|
|
|
XFE_MsgFrame *theFrame = NULL;
|
|
|
|
if ( with_reuse )
|
|
{
|
|
XP_List *msg_frame_list = XFE_MozillaApp::theApp()->getFrameList( FRAME_MAILNEWS_MSG );
|
|
|
|
if (!XP_ListIsEmpty(msg_frame_list))
|
|
{
|
|
theFrame = (XFE_MsgFrame*)XP_ListTopObject( msg_frame_list );
|
|
}
|
|
|
|
if (theFrame)
|
|
{
|
|
theFrame->show();
|
|
theFrame->loadMessage( folder_info, msg_key );
|
|
return theFrame->getContext();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
theFrame = XFE_MsgFrame::frameForMessage( folder_info, msg_key );
|
|
|
|
if (theFrame)
|
|
{
|
|
theFrame->show();
|
|
return theFrame->getContext();
|
|
}
|
|
}
|
|
|
|
// if we get here, either we were trying to reuse and there wasn't a
|
|
// messageframe at all, or we were not trying to reuse and just looking for
|
|
// for the messageframe displaying this message already and failed to find it.
|
|
// At any rate, we need to pop up another window.
|
|
theFrame = new XFE_MsgFrame(toplevel, parent_frame, chromespec);
|
|
theFrame->show();
|
|
theFrame->loadMessage( folder_info, msg_key );
|
|
|
|
return theFrame->getContext();
|
|
}
|
|
|
|
int
|
|
XFE_MsgFrame::getSecurityStatus()
|
|
{
|
|
XFE_MailSecurityStatusType status = XFE_UNSECURE_UNSIGNED;
|
|
HG98200
|
|
return status;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Toolbox methods
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void
|
|
XFE_MsgFrame::toolboxItemSnap(XFE_ToolboxItem * item)
|
|
{
|
|
XP_ASSERT( item == m_toolbar || item == m_banner );
|
|
|
|
// Navigation
|
|
fe_globalPrefs.messenger_navigation_toolbar_position = m_toolbar->getPosition();
|
|
|
|
// Location
|
|
fe_globalPrefs.messenger_location_toolbar_position = m_banner->getPosition();
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void
|
|
XFE_MsgFrame::toolboxItemClose(XFE_ToolboxItem * item)
|
|
{
|
|
XP_ASSERT( item != NULL );
|
|
|
|
// Navigation
|
|
if (item == m_toolbar)
|
|
{
|
|
fe_globalPrefs.messenger_navigation_toolbar_open = False;
|
|
}
|
|
// Location
|
|
else if (item == m_banner)
|
|
{
|
|
fe_globalPrefs.messenger_location_toolbar_open = False;
|
|
}
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void
|
|
XFE_MsgFrame::toolboxItemOpen(XFE_ToolboxItem * item)
|
|
{
|
|
XP_ASSERT( item != NULL );
|
|
|
|
// Navigation
|
|
if (item == m_toolbar)
|
|
{
|
|
fe_globalPrefs.messenger_navigation_toolbar_open = True;
|
|
}
|
|
// Location
|
|
else if (item == m_banner)
|
|
{
|
|
fe_globalPrefs.messenger_location_toolbar_open = True;
|
|
}
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void
|
|
XFE_MsgFrame::toolboxItemChangeShowing(XFE_ToolboxItem * item)
|
|
{
|
|
XP_ASSERT( item != NULL );
|
|
|
|
// Navigation
|
|
if (item == m_toolbar)
|
|
{
|
|
fe_globalPrefs.messenger_navigation_toolbar_showing = item->isShown();
|
|
}
|
|
// Location
|
|
else if (item == m_banner)
|
|
{
|
|
fe_globalPrefs.messenger_location_toolbar_showing = item->isShown();
|
|
}
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void
|
|
XFE_MsgFrame::configureToolbox()
|
|
{
|
|
// If a the frame was constructed with a chromespec, then we ignore
|
|
// all the preference magic.
|
|
if (m_chromespec_provided)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Make sure the toolbox is alive
|
|
if (!m_toolbox || (m_toolbox && !m_toolbox->isAlive()))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Navigation
|
|
if (m_toolbar)
|
|
{
|
|
m_toolbar->setShowing(fe_globalPrefs.messenger_navigation_toolbar_showing);
|
|
m_toolbar->setOpen(fe_globalPrefs.messenger_navigation_toolbar_open);
|
|
m_toolbar->setPosition(fe_globalPrefs.messenger_navigation_toolbar_position);
|
|
}
|
|
|
|
// Location
|
|
if (m_banner)
|
|
{
|
|
m_banner->setShowing(fe_globalPrefs.messenger_location_toolbar_showing);
|
|
m_banner->setOpen(fe_globalPrefs.messenger_location_toolbar_open);
|
|
m_banner->setPosition(fe_globalPrefs.messenger_location_toolbar_position);
|
|
}
|
|
}
|
|
extern int XFE_SEND_UNSENTMAIL;
|
|
|
|
XP_Bool
|
|
XFE_MsgFrame::isOkToClose()
|
|
{
|
|
Boolean haveQueuedMail = False;
|
|
XFE_MsgView *tview = (XFE_MsgView*)m_view;
|
|
|
|
if ( XFE_MozillaApp::theApp()->mailNewsWindowCount() == 1 )
|
|
{
|
|
MSG_CommandStatus(tview->getPane(), MSG_DeliverQueuedMessages, NULL, 0,
|
|
&haveQueuedMail, NULL, NULL, NULL );
|
|
|
|
if (haveQueuedMail) {
|
|
void * sendNow = 0;
|
|
const char *buf = XP_GetString (XFE_SEND_UNSENTMAIL);
|
|
sendNow = fe_dialog (CONTEXT_WIDGET(m_context),
|
|
"sendNow", buf, TRUE, 0, TRUE, FALSE, 0);
|
|
if (sendNow) {
|
|
MSG_Command (tview->getPane(), MSG_DeliverQueuedMessages, NULL, 0);
|
|
return False;
|
|
}
|
|
}
|
|
|
|
|
|
// See if we need to clean up based on disk space prefs
|
|
if (MSG_CleanupNeeded(tview->getMaster()))
|
|
{
|
|
// create progress pane
|
|
XFE_MailDownloadFrame* progressFrame =
|
|
new XFE_MailDownloadFrame(XfeAncestorFindApplicationShell(getBaseWidget()),
|
|
this,
|
|
tview->getPane());
|
|
progressFrame->cleanUpNews();
|
|
return True;
|
|
}
|
|
}
|
|
return True;
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|