/* -*- 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 , 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 /* for XP_GetString() */ #include #include #include #include #include #include #include #include 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); }