Files
Mozilla/mozilla/cmd/xfe/src/ComposeFolderView.cpp
ltabb 8ed5afe62c Free the lizard
git-svn-id: svn://10.0.0.236/trunk@10 18797224-902f-48f8-a5cc-f745e15eee43
1998-03-28 02:44:41 +00:00

487 lines
14 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.
*/
/*
ComposeFolderView.cpp -- presents view for addressing and attachment .
Created: Dora Hsu <dora@netscape.com>, 23-Sept-96.
*/
#include "ComposeView.h"
#include "ComposeFolderView.h"
#include "AddressFolderView.h"
#include "ComposeAttachFolderView.h"
#include "AddressOutliner.h"
#include "xfe.h"
#include "IconGroup.h"
#include "xp_mem.h"
#include <xpgetstr.h> /* for XP_GetString() */
#include <Xm/Xm.h>
#include <Xm/Frame.h>
#include <XmL/XmL.h>
#include <Xm/DrawnB.h>
#include <Xm/ArrowB.h>
#include <Xm/LabelG.h>
#include <XmL/Folder.h>
#include <Xfe/Button.h>
extern int XFE_MNC_ADDRESS;
extern int XFE_MNC_ATTACHMENT;
extern int XFE_MNC_OPTION;
#ifdef DEBUG_dora
#define XDEBUG(x) x
#else
#define XDEBUG(x)
#endif
extern "C" {
Widget fe_EditorCreateComposeToolbar(MWContext*, Widget, char*);
}
extern "C"
Widget fe_MailComposeWin_Create(MWContext* context, Widget parent);
extern "C" Widget
fe_MailComposeAddress_CreateManaged(MWContext* context, Widget parent);
extern "C" Widget
fe_MailComposeAttach_CreateManaged(MWContext* context, Widget parent);
extern "C" Widget
makeOptionMenu(MWContext *context, Widget parent);
Boolean
XFE_ComposeFolderView::isPrioritySelected(MSG_PRIORITY priority)
{
return m_optionFolderViewAlias->isPrioritySelected(priority);
}
void
XFE_ComposeFolderView::selectPriority(MSG_PRIORITY priority)
{
m_optionFolderViewAlias->selectPriority(priority);
}
/* Constructor */
XFE_ComposeFolderView::XFE_ComposeFolderView(
XFE_Component *toplevel_component,
XFE_View *parent_view,
MSG_Pane *p,
MWContext *context)
: XFE_MNView(toplevel_component, parent_view, context, p)
{
//XP_ASSERT(p==NULL);
setParent(parent_view);
/* Create Widgets */
// Initialize necessary data
m_addressFormW = 0;
m_attachFormW = 0;
m_optionFormW = 0;
m_frameW = 0;
m_optionW = 0;
// m_expanded = True;
m_tabNumber = 0;
m_selectedPriority = MSG_NormalPriority;
m_attachFolderViewAlias = NULL;
m_addressFolderViewAlias = NULL;
}
XP_Bool
XFE_ComposeFolderView::isCommandSelected(CommandType command,
void* calldata,
XFE_CommandInfo* info)
{
if ((command == xfeCmdViewAddresses)
|| (command == xfeCmdViewOptions)
|| (command == xfeCmdViewAttachments)) {
int tab_number;
XtVaGetValues(m_tabGroupW, XmNactiveTab, &tab_number, 0);
if (command == xfeCmdViewAddresses)
return (tab_number == 0);
else if (command == xfeCmdViewAttachments)
return (tab_number == 1);
else // if (command == xfeCmdViewOptions)
return (tab_number == 2);
} else {
return XFE_MNView::isCommandSelected(command, calldata, info);
}
}
Boolean
XFE_ComposeFolderView::isCommandEnabled(CommandType command,
void *, XFE_CommandInfo* )
{
if ((command == xfeCmdViewAddresses)
|| (command == xfeCmdViewOptions)
|| (command == xfeCmdViewAttachments))
return True;
else if (m_addressFolderViewAlias &&
m_addressFolderViewAlias->isCommandEnabled(command))
return True;
else if ( m_attachFolderViewAlias &&
m_attachFolderViewAlias->isCommandEnabled(command))
return True;
return False;
}
Boolean
XFE_ComposeFolderView::handlesCommand(CommandType command,
void *, XFE_CommandInfo*)
{
XDEBUG( printf ("in XFE_ComposeFolderView::handlesCommand(%s)\n", Command::getString(command));)
if ((command == xfeCmdViewAddresses)
|| (command == xfeCmdViewOptions)
|| (command == xfeCmdViewAttachments))
return True;
else if (m_addressFolderViewAlias &&
m_addressFolderViewAlias->handlesCommand(command))
return True;
else if ( m_attachFolderViewAlias &&
m_attachFolderViewAlias->handlesCommand(command))
return True;
XDEBUG( printf ("leaving XFE_ComposeFolderView::handlesCommand(%s), Command::getString(command)\n");)
return False;
}
void
XFE_ComposeFolderView::doCommand(CommandType command,
void *, XFE_CommandInfo* )
{
if (command == xfeCmdViewAddresses)
{
XDEBUG( printf ("XFE_ComposeFolderView::xfeCmdViewAddresses()\n");)
XmLFolderSetActiveTab(m_tabGroupW, 0, True);
}
else if (command == xfeCmdViewAttachments)
{
XDEBUG( printf ("XFE_ComposeFolderView::xfeCmdViewAttachments()\n");)
XmLFolderSetActiveTab(m_tabGroupW, 1, True);
}
else if (command == xfeCmdViewOptions)
{
XDEBUG( printf ("XFE_ComposeFolderView::xfeCmdViewOptions()\n");)
XmLFolderSetActiveTab(m_tabGroupW, 2, True);
}
else if ( command == xfeCmdAttachFile)
{
if (m_attachFolderViewAlias)
m_attachFolderViewAlias->doCommand(command);
}
else if ( command == xfeCmdAttachWebPage )
{
if (m_attachFolderViewAlias)
m_attachFolderViewAlias->doCommand(command);
}
else if ( command == xfeCmdDeleteAttachment )
{
if (m_attachFolderViewAlias)
m_attachFolderViewAlias->doCommand(command);
}
else if ( command == xfeCmdDelete )
{
if (m_attachFolderViewAlias)
m_attachFolderViewAlias->doCommand(command);
}
else if ( command == xfeCmdAddresseePicker )
{
if (m_addressFolderViewAlias)
m_addressFolderViewAlias->doCommand(command);
}
XDEBUG( printf ("leaving XFE_ComposeFolderView::doCommand()\n");)
}
// called when any compose folder tab is pressed
void
XFE_ComposeFolderView::folderActivate(int tabPosition)
{
// ASSUMPTION: Tab #1 is 'Attachments'
// Allow Attach folder to track its state
if (m_attachFolderViewAlias) {
m_attachFolderViewAlias->folderVisible(tabPosition==1 ? TRUE : FALSE);
}
else if ( tabPosition == 2 ) // ASSUMPTION: Tab #2 is 'Options'
{
if (m_optionFolderViewAlias)
m_optionFolderViewAlias->updateAllOptions();
}
}
void
XFE_ComposeFolderView::createWidgets(Widget parent_widget, XP_Bool /*usePlainText*/)
{
XmString str;
Widget formBaseW;
XDEBUG( printf("enter XFE_ComposeFolderView::createWidgets()\n");)
Visual *v =0;
Colormap cmap = 0;
Cardinal depth = 0;
XtVaGetValues(getToplevel()->getBaseWidget(),
XmNvisual, &v,
XmNcolormap, &cmap,
XmNdepth, &depth, 0);
formBaseW = XtVaCreateManagedWidget("addressBaseForm",
xmFormWidgetClass, parent_widget,
XmNcolormap, cmap,
XmNdepth, depth,
XmNvisual, v, 0);
setBaseWidget(formBaseW);
setupIcons(); //- don't do icon for now
{
m_frameW = XtVaCreateManagedWidget("newAddressFrame",
xmFrameWidgetClass, formBaseW,
XmNshadowType, XmSHADOW_IN,
XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM,
XmNcolormap, cmap,
XmNdepth, depth,
XmNvisual, v, 0);
m_tabGroupW = XtVaCreateWidget("newComposeFolder",
xmlFolderWidgetClass,
m_frameW,
XmNcolormap, cmap,
XmNtabPlacement, XmFOLDER_LEFT,
XmNtabWidgetClass, xfeButtonWidgetClass,
XmNdepth, depth,
XmNvisual, v, 0);
XtAddCallback(m_tabGroupW,XmNactivateCallback,folderActivateCallback,(XtPointer)this);
XtManageChild(m_tabGroupW);
Pixel bg;
XtVaGetValues(m_tabGroupW, XmNbackground, &bg, 0);
str = XmStringCreateSimple(XP_GetString(XFE_MNC_ADDRESS));
Widget m_addressTab = XmLFolderAddTabFromClass(m_tabGroupW, str);
XtVaSetValues(m_addressTab, XmNbuttonLayout, XmBUTTON_PIXMAP_ONLY,
XmNpixmap, MNC_AddressSmall_group.pixmap_icon.pixmap,
NULL);
XmStringFree(str);
m_addressFormW = XtVaCreateManagedWidget("form_addr",
xmFormWidgetClass, m_tabGroupW,
XmNbackground, bg ,
NULL);
XtVaSetValues(m_addressTab, XmNtabManagedWidget, m_addressFormW, NULL);
str = XmStringCreateSimple(XP_GetString(XFE_MNC_ATTACHMENT));
//m_attachFormW = XmLFolderAddTabForm(m_tabGroupW, str);
Widget m_attachTab = XmLFolderAddTabFromClass(m_tabGroupW, str);
XtVaSetValues(m_attachTab, XmNbuttonLayout, XmBUTTON_PIXMAP_ONLY,
XmNpixmap, MNC_AttachSmall_group.pixmap_icon.pixmap, NULL);
XmStringFree(str);
m_attachFormW = XtVaCreateManagedWidget("form_attach",
xmFormWidgetClass, m_tabGroupW,
XmNbackground, bg,
NULL);
XtVaSetValues(m_attachTab, XmNtabManagedWidget, m_attachFormW, NULL);
str = XmStringCreateSimple(XP_GetString(XFE_MNC_OPTION));
//m_optionFormW = XmLFolderAddTabForm(m_tabGroupW, str);
Widget m_optionTab = XmLFolderAddTabFromClass(m_tabGroupW, str);
XtVaSetValues(m_optionTab, XmNbuttonLayout, XmBUTTON_PIXMAP_ONLY,
XmNpixmap, MNC_Options_group.pixmap_icon.pixmap, NULL);
XmStringFree(str);
m_optionFormW = XtVaCreateManagedWidget("form_attach",
xmFormWidgetClass, m_tabGroupW,
XmNbackground, bg,
NULL);
XtVaSetValues(m_optionTab, XmNtabManagedWidget, m_optionFormW, NULL);
{ // Addressing Folder
XFE_AddressFolderView *addressFolderView =
new XFE_AddressFolderView( getToplevel(), (XFE_View*)this, getPane(), getContext());
addView(addressFolderView);
m_addressFolderViewAlias = addressFolderView;
addressFolderView->createWidgets(m_addressFormW);
Widget addressContent;
addressContent = addressFolderView->getBaseWidget();
XtVaSetValues(addressContent, XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM, NULL);
addressFolderView->show();
}
{// Attachment Folder
XFE_ComposeAttachFolderView *attachFolderView =
new XFE_ComposeAttachFolderView(getToplevel(),(XFE_View*)this,getPane(), getContext());
addView(attachFolderView);
m_attachFolderViewAlias = attachFolderView;
attachFolderView->createWidgets(m_attachFormW);
Widget attachContent;
attachContent = attachFolderView->getBaseWidget();
XtVaSetValues(attachContent, XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM, NULL);
attachFolderView->show();
}
{ // Option Folder
XFE_OptionFolderView *optionFolderView =
new XFE_OptionFolderView( getToplevel(), (XFE_View*)this, getPane(), getContext());
addView(optionFolderView);
m_optionFolderViewAlias = optionFolderView;
optionFolderView->createWidgets(m_optionFormW);
Widget optionContent;
optionContent = optionFolderView->getBaseWidget();
XtVaSetValues(optionContent, XmNtopAttachment, XmATTACH_FORM,
XmNbottomAttachment, XmATTACH_FORM,
XmNleftAttachment, XmATTACH_FORM,
XmNrightAttachment, XmATTACH_FORM, NULL);
optionFolderView->show();
}
} // End of Address Frame
XDEBUG( printf("leave XFE_ComposeFolderView::createWidgets()\n");)
}
void
XFE_ComposeFolderView::folderActivateCallback(Widget, XtPointer clientData, XtPointer callData)
{
XFE_ComposeFolderView *obj = (XFE_ComposeFolderView*)clientData;
XmLFolderCallbackStruct *fcb=(XmLFolderCallbackStruct*)callData;
if (obj && fcb)
obj->folderActivate(fcb->pos);
}
//-------------NEW code ---------------------------------------
#ifndef EDITOR
Widget
fe_OptionMenuSetHistory(Widget menu, unsigned index)
{
Arg args[4];
Cardinal n;
Widget cascade;
Widget popup_menu;
WidgetList children;
Cardinal nchildren;
/*
* Update the label, and set the position of the popup.
*/
cascade = XmOptionButtonGadget(menu);
/*
* Get the popup menu from the cascade.
*/
n = 0;
XtSetArg(args[n], XmNsubMenuId, &popup_menu); n++;
XtGetValues(cascade, args, n);
/*
* Get the children of the popup.
*/
n = 0;
XtSetArg(args[n], XmNchildren, &children); n++;
XtSetArg(args[n], XmNnumChildren, &nchildren); n++;
XtGetValues(popup_menu, args, n);
if (index < nchildren) {
/*
* Finally, set the Nth button as history.
*/
n = 0;
XtSetArg(args[n], XmNmenuHistory, children[index]); n++;
/* NOTE: set it on the top level menu (strange) */
XtSetValues(menu, args, n);
return children[index];
}
return NULL;
}
#endif
void
XFE_ComposeFolderView::updateHeaderInfo(void)
{
if ( m_addressFolderViewAlias )
m_addressFolderViewAlias->updateHeaderInfo();
}
void
XFE_ComposeFolderView::setupIcons()
{
Widget base = getToplevel()->getBaseWidget();
Pixel bg_pixel;
XtVaGetValues(base, XmNbackground, &bg_pixel, 0);
IconGroup_createAllIcons(&MNC_AddressSmall_group,
getToplevel()->getBaseWidget(),
BlackPixelOfScreen(XtScreen(base)), // hack. :(
bg_pixel);
IconGroup_createAllIcons(&MNC_AttachSmall_group,
getToplevel()->getBaseWidget(),
BlackPixelOfScreen(XtScreen(base)), // hack. :(
bg_pixel);
IconGroup_createAllIcons(&MNC_Options_group,
getToplevel()->getBaseWidget(),
BlackPixelOfScreen(XtScreen(base)), // hack. :(
bg_pixel);
}