home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / src / ABNameConTab.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  13.4 KB  |  480 lines

  1. /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  *
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18. /* 
  19.    ABNameConTabView.cpp -- class definition for ABNameConTabView
  20.    Created: Tao Cheng <tao@netscape.com>, 12-nov-96
  21.  */
  22.  
  23. #include "PropertySheetView.h"
  24. #include "ABNameConTab.h"
  25. #include "ABNameFolderDlg.h"
  26. #include "AddrBookView.h"
  27.  
  28. #include <Xm/Form.h>
  29. #include <Xm/TextF.h> 
  30. #include <Xm/Text.h> 
  31. #include <Xm/Separator.h>
  32.  
  33. #include <Xm/ToggleB.h>
  34. #include <Xm/LabelG.h> 
  35.  
  36. #include "felocale.h"
  37. #include "xpgetstr.h"
  38.  
  39. extern int XFE_AB_NAME_CONTACT_TAB;
  40. extern int XFE_AB_ADDRESS;
  41. extern int XFE_AB_CITY;
  42. extern int XFE_AB_STATE;
  43. extern int XFE_AB_ZIP;
  44. extern int XFE_AB_COUNTRY;
  45. extern int XFE_AB_WORKPHONE;
  46. extern int XFE_AB_FAX;
  47. extern int XFE_AB_HOMEPHONE;
  48. extern int XFE_AB_PAGER;
  49. extern int XFE_AB_CELLULAR;
  50.  
  51. XFE_ABNameConTabView::XFE_ABNameConTabView(XFE_Component *top,
  52.                        XFE_View *view):
  53.   XFE_PropertyTabView(top, view, XFE_AB_NAME_CONTACT_TAB)
  54. {
  55.  
  56.   int ac, numForms = AB_LAST;
  57.   Arg    av[20];
  58.   Widget topForm = getBaseWidget(),
  59.          label,
  60.          stripForm[AB_LAST];
  61.   Dimension width;
  62.   char *genTabLabels[AB_LAST];
  63.  
  64.   genTabLabels[AB_ADDRESS] = XP_GetString(XFE_AB_ADDRESS);
  65.   genTabLabels[AB_CITY] = XP_GetString(XFE_AB_CITY);
  66.   genTabLabels[AB_STATE] = XP_GetString(XFE_AB_STATE);
  67.   genTabLabels[AB_ZIP] = XP_GetString(XFE_AB_ZIP);
  68.   genTabLabels[AB_COUNTRY] = XP_GetString(XFE_AB_COUNTRY);
  69.  
  70.   genTabLabels[AB_WORKPHONE] = XP_GetString(XFE_AB_WORKPHONE);
  71.   genTabLabels[AB_FAXPHONE] = XP_GetString(XFE_AB_FAX);
  72.   genTabLabels[AB_HOMEPHONE] = XP_GetString(XFE_AB_HOMEPHONE);
  73.   genTabLabels[AB_PAGER] = XP_GetString(XFE_AB_PAGER);
  74.   genTabLabels[AB_CELLULAR] = XP_GetString(XFE_AB_CELLULAR);
  75.  
  76.   int i; // for use in multiple for loops... without breaking newer ANSI C++ rules
  77.   for (i=0; i < numForms; i++) {
  78.     ac = 0;
  79.     stripForm[i] = XmCreateForm(topForm, "strip", av, ac);
  80.  
  81.     /* Create labels
  82.      */
  83.     label = XtVaCreateManagedWidget(genTabLabels[i],
  84.                                     xmLabelGadgetClass, stripForm[i],
  85.                                     XmNalignment, XmALIGNMENT_END, 
  86.                                     NULL);
  87.     m_labels[i] = label;
  88.     XtVaSetValues(label,
  89.                   XmNleftAttachment, XmATTACH_FORM,
  90.                   XmNtopAttachment, XmATTACH_FORM,
  91.                   XmNrightAttachment, XmATTACH_NONE,
  92.                   XmNbottomAttachment, XmATTACH_FORM,
  93.                   0);
  94.  
  95.     XtVaGetValues(label, 
  96.                   XmNwidth, &width,
  97.                   0);
  98.     m_labelWidth = (m_labelWidth < width)?width:m_labelWidth;
  99.     
  100.     if (i == 0) {
  101.         /* Text
  102.          */
  103.         ac = 0;
  104.         XtSetArg (av[ac], XmNheight, 60); ac++;
  105.         XtSetArg (av[ac], XmNeditMode, XmMULTI_LINE_EDIT); ac++;
  106.         m_textFs[i] = fe_CreateText(stripForm[i], "longAddress", av, ac);
  107.         XtVaSetValues(m_textFs[i],
  108.                       XmNleftAttachment, XmATTACH_WIDGET,
  109.                       XmNleftWidget, label,
  110.                       XmNtopAttachment, XmATTACH_FORM,
  111.                       XmNrightAttachment, XmATTACH_FORM,
  112.                       XmNbottomAttachment, XmATTACH_FORM,
  113.                       0);
  114.         XtManageChild(m_textFs[i]);
  115.     }/* if */
  116.     else {
  117.         /* TextF
  118.          */
  119.         ac = 0;
  120.         m_textFs[i] = fe_CreateTextField(stripForm[i], 
  121.                                          (char *) genTabLabels[i],
  122.                                          av, ac);
  123.         XtVaSetValues(m_textFs[i], 
  124.                       XmNleftAttachment, XmATTACH_WIDGET,
  125.                       XmNleftWidget, label,
  126.                       XmNtopAttachment, XmATTACH_FORM,
  127.                       XmNrightAttachment, XmATTACH_FORM,
  128.                       XmNbottomAttachment, XmATTACH_FORM,
  129.                       0);
  130.         XtManageChild(m_textFs[i]);
  131.     }/* else */
  132.  
  133.     if (i == 0) {
  134.         XtVaSetValues(stripForm[i], 
  135.                       XmNleftAttachment, XmATTACH_FORM,
  136.                       XmNrightAttachment, XmATTACH_FORM,
  137.                       XmNtopAttachment, XmATTACH_FORM,
  138.                       0);
  139. #if 0 /* out for 5.0 
  140.        */
  141.         ac = 0;
  142.         addr2TextFForm = XmCreateForm(topForm, "strip", av, ac);
  143.  
  144.         /* TextF
  145.          */
  146.         ac = 0;
  147.         m_addr2TextF = fe_CreateTextField(addr2TextFForm, 
  148.                                         "addr2TextF",
  149.                                         av, ac);
  150.         XtVaSetValues(m_addr2TextF,
  151.                       XmNleftAttachment, XmATTACH_FORM,
  152.                       XmNtopAttachment, XmATTACH_FORM,
  153.                       XmNrightAttachment, XmATTACH_FORM,
  154.                       XmNbottomAttachment, XmATTACH_FORM,
  155.                       0);
  156.         XtManageChild(m_addr2TextF);
  157.         XtVaSetValues(addr2TextFForm,
  158.                       XmNleftAttachment, XmATTACH_FORM,
  159.                       XmNrightAttachment, XmATTACH_FORM,
  160.                       XmNtopAttachment, XmATTACH_WIDGET,
  161.                       XmNtopWidget, stripForm[i],
  162.                       0);
  163.         XtManageChild(addr2TextFForm);
  164. #endif
  165.     }
  166.     else
  167.       XtVaSetValues(stripForm[i], 
  168.                     XmNleftAttachment, XmATTACH_FORM,
  169.                     XmNrightAttachment, XmATTACH_FORM,
  170.                     XmNtopAttachment, XmATTACH_WIDGET,
  171.                     XmNtopWidget, 
  172.                     stripForm[i-1],
  173.                     XmNtopOffset, (i == AB_WORKPHONE)?15:3,
  174.                     0);
  175.  
  176.     XtManageChild(stripForm[i]);
  177.   }/* for i*/
  178.  
  179.   for (i=0; i < AB_LAST; i++) {
  180.       XtVaSetValues(m_labels[i], 
  181.                     XmNwidth, m_labelWidth,
  182.                     0);
  183.   }/* for i */
  184. #if 0 
  185.   XtVaSetValues(m_addr2TextF, 
  186.                 XmNleftOffset, m_labelWidth,
  187.                 0);
  188. #endif
  189. }
  190.  
  191. XFE_ABNameConTabView::~XFE_ABNameConTabView()
  192. {
  193. }
  194.  
  195. void XFE_ABNameConTabView::setDlgValues()
  196. {
  197.   XFE_ABNameFolderDlg *dlg = (XFE_ABNameFolderDlg *)getToplevel();
  198. #if defined(USE_ABCOM)
  199.   XFE_PropertySheetView *folderView = (XFE_PropertySheetView *) getParent();
  200.   MSG_Pane *pane = folderView->getPane();
  201.  
  202.   uint16 numItems = AB_LAST;
  203.   AB_AttribID * attribs = (AB_AttribID *) XP_CALLOC(numItems, 
  204.                                                     sizeof(AB_AttribID));
  205.   attribs[AB_ADDRESS] = AB_attribStreetAddress;
  206.   attribs[AB_CITY] = AB_attribLocality;
  207.   attribs[AB_STATE] = AB_attribRegion;
  208.   attribs[AB_ZIP] = AB_attribZipCode;
  209.   attribs[AB_COUNTRY] = AB_attribCountry;
  210.   attribs[AB_WORKPHONE] = AB_attribWorkPhone;
  211.   attribs[AB_FAXPHONE] = AB_attribFaxPhone;
  212.   attribs[AB_HOMEPHONE] = AB_attribHomePhone;
  213.   attribs[AB_PAGER] = AB_attribPager;
  214.   attribs[AB_CELLULAR] = AB_attribCellularPhone; // cellular
  215.  
  216.   AB_AttributeValue *values = NULL;
  217.   int error = AB_GetPersonEntryAttributes(pane, 
  218.                                           attribs,
  219.                                           &values, 
  220.                                           &numItems);
  221.   char *tmp = NULL;
  222.  
  223.   for (int i=0; i < numItems; i++) {
  224.       switch (values[i].attrib) {
  225.       case AB_attribStreetAddress:
  226.           tmp = values[i].u.string;
  227.           fe_SetTextField(m_textFs[AB_ADDRESS], 
  228.                           tmp?tmp:"");
  229.           break;
  230.  
  231.       case AB_attribLocality:
  232.           tmp = values[i].u.string;
  233.           fe_SetTextField(m_textFs[AB_CITY], 
  234.                           tmp?tmp:"");
  235.           break;
  236.  
  237.       case AB_attribRegion:
  238.           tmp = values[i].u.string;
  239.           fe_SetTextField(m_textFs[AB_STATE], 
  240.                           tmp?tmp:"");
  241.           break;
  242.  
  243.       case AB_attribZipCode:
  244.           tmp = values[i].u.string;
  245.           fe_SetTextField(m_textFs[AB_ZIP], 
  246.                           tmp?tmp:"");
  247.           break;
  248.  
  249.       case AB_attribCountry:
  250.           tmp = values[i].u.string;
  251.           fe_SetTextField(m_textFs[AB_COUNTRY], 
  252.                           tmp?tmp:"");
  253.           break;
  254.  
  255.       case AB_attribWorkPhone:
  256.           tmp = values[i].u.string;
  257.           fe_SetTextField(m_textFs[AB_WORKPHONE], 
  258.                           tmp?tmp:"");
  259.           break;
  260.  
  261.       case AB_attribFaxPhone:
  262.           tmp = values[i].u.string;
  263.           fe_SetTextField(m_textFs[AB_FAXPHONE], 
  264.                           tmp?tmp:"");
  265.           break;
  266.  
  267.       case AB_attribHomePhone:
  268.           tmp = values[i].u.string;
  269.           fe_SetTextField(m_textFs[AB_HOMEPHONE], 
  270.                           tmp?tmp:"");
  271.           break;
  272.  
  273.       case AB_attribPager:
  274.           tmp = values[i].u.string;
  275.           fe_SetTextField(m_textFs[AB_PAGER], 
  276.                           tmp?tmp:"");
  277.           break;
  278.  
  279.       case AB_attribCellularPhone:
  280.           tmp = values[i].u.string;
  281.           fe_SetTextField(m_textFs[AB_CELLULAR], 
  282.                           tmp?tmp:"");
  283.           break;
  284.       }/* switch */
  285.   }/* for i */
  286.  
  287.   XP_FREEIF(attribs);
  288.   AB_FreeEntryAttributeValues(values, numItems);
  289. #else
  290.   PersonEntry& entry = dlg->getPersonEntry();
  291.  
  292.   /* We switch the sequence of displaying these two fields
  293.    * so that it won't appear in reverse order in vcard
  294.    */
  295.   fe_SetTextField(m_textFs[AB_ADDRESS],   entry.pPOAddress?entry.pPOAddress:"");
  296.   //fe_SetTextField(m_addr2TextF,           entry.pAddress?entry.pAddress:"");
  297.   fe_SetTextField(m_textFs[AB_CITY],      entry.pLocality?entry.pLocality:"");
  298.   fe_SetTextField(m_textFs[AB_STATE],     entry.pRegion?entry.pRegion:"");
  299.   fe_SetTextField(m_textFs[AB_ZIP],       entry.pZipCode?entry.pZipCode:"");
  300.   fe_SetTextField(m_textFs[AB_COUNTRY],   entry.pCountry?entry.pCountry:"");
  301.   fe_SetTextField(m_textFs[AB_WORKPHONE], entry.pWorkPhone?entry.pWorkPhone:"");
  302.   fe_SetTextField(m_textFs[AB_FAXPHONE],  entry.pFaxPhone?entry.pFaxPhone:"");
  303.   fe_SetTextField(m_textFs[AB_HOMEPHONE], entry.pHomePhone?entry.pHomePhone:"");
  304. #endif /* USE_ABCOM */
  305. }
  306.  
  307. void XFE_ABNameConTabView::apply()
  308. {
  309. }
  310.  
  311. void XFE_ABNameConTabView::getDlgValues()
  312. {
  313.   XFE_ABNameFolderDlg *dlg = (XFE_ABNameFolderDlg *)getToplevel();
  314. #if defined(USE_ABCOM)
  315.   XFE_PropertySheetView *folderView = (XFE_PropertySheetView *) getParent();
  316.   MSG_Pane *pane = folderView->getPane();
  317.  
  318.   uint16 numItems = AB_LAST;
  319.   AB_AttribID * attribs = (AB_AttribID *) XP_CALLOC(numItems, 
  320.                                                     sizeof(AB_AttribID));
  321.   AB_AttributeValue *values = 
  322.       (AB_AttributeValue *) XP_CALLOC(numItems, 
  323.                                       sizeof(AB_AttributeValue));
  324.   char *tmp = NULL;
  325.  
  326.   //
  327.   tmp = fe_GetTextField(m_textFs[AB_ADDRESS]);
  328.   values[AB_ADDRESS].attrib = AB_attribStreetAddress;
  329.   if (tmp && strlen(tmp))
  330.       values[AB_ADDRESS].u.string = tmp;
  331.   else
  332.       values[AB_ADDRESS].u.string = XP_STRDUP("");
  333.  
  334.  
  335.   //
  336.   tmp = fe_GetTextField(m_textFs[AB_CITY]);
  337.   values[AB_CITY].attrib = AB_attribLocality;
  338.   if (tmp && strlen(tmp))
  339.       values[AB_CITY].u.string = tmp;
  340.   else
  341.       values[AB_CITY].u.string = XP_STRDUP("");
  342.  
  343.   //
  344.   tmp = fe_GetTextField(m_textFs[AB_STATE]);
  345.   values[AB_STATE].attrib = AB_attribRegion;
  346.   if (tmp && strlen(tmp))
  347.       values[AB_STATE].u.string = tmp;
  348.   else
  349.       values[AB_STATE].u.string = XP_STRDUP("");
  350.  
  351.  
  352.   //
  353.   tmp = fe_GetTextField(m_textFs[AB_ZIP]);
  354.   values[AB_ZIP].attrib = AB_attribZipCode;
  355.   if (tmp && strlen(tmp))
  356.       values[AB_ZIP].u.string = tmp;
  357.   else
  358.       values[AB_ZIP].u.string = XP_STRDUP("");
  359.  
  360.  
  361.   //
  362.   tmp = fe_GetTextField(m_textFs[AB_COUNTRY]);
  363.   values[AB_COUNTRY].attrib = AB_attribCountry;
  364.   if (tmp && strlen(tmp))
  365.       values[AB_COUNTRY].u.string = tmp;
  366.   else
  367.       values[AB_COUNTRY].u.string = XP_STRDUP("");
  368.  
  369.  
  370.   //
  371.   tmp = fe_GetTextField(m_textFs[AB_WORKPHONE]);
  372.   values[AB_WORKPHONE].attrib = AB_attribWorkPhone;
  373.   if (tmp && strlen(tmp))
  374.       values[AB_WORKPHONE].u.string = tmp;
  375.   else
  376.       values[AB_WORKPHONE].u.string = XP_STRDUP("");
  377.  
  378.  
  379.   //
  380.   tmp = fe_GetTextField(m_textFs[AB_FAXPHONE]);
  381.   values[AB_FAXPHONE].attrib = AB_attribFaxPhone;
  382.   if (tmp && strlen(tmp))
  383.       values[AB_FAXPHONE].u.string = tmp;
  384.   else
  385.       values[AB_FAXPHONE].u.string = XP_STRDUP("");
  386.  
  387.  
  388.   //
  389.   tmp = fe_GetTextField(m_textFs[AB_HOMEPHONE]);
  390.   values[AB_HOMEPHONE].attrib = AB_attribHomePhone;
  391.   if (tmp && strlen(tmp))
  392.       values[AB_HOMEPHONE].u.string = tmp;
  393.   else
  394.       values[AB_HOMEPHONE].u.string = XP_STRDUP("");
  395.  
  396.  
  397.   //
  398.   tmp = fe_GetTextField(m_textFs[AB_PAGER]);
  399.   values[AB_PAGER].attrib = AB_attribPager;
  400.   if (tmp && strlen(tmp))
  401.       values[AB_PAGER].u.string = tmp;
  402.   else
  403.       values[AB_PAGER].u.string = XP_STRDUP("");
  404.  
  405.  
  406.   //
  407.   tmp = fe_GetTextField(m_textFs[AB_CELLULAR]);
  408.   values[AB_CELLULAR].attrib = AB_attribCellularPhone;
  409.   if (tmp && strlen(tmp))
  410.       values[AB_CELLULAR].u.string = tmp;
  411.   else
  412.       values[AB_CELLULAR].u.string = XP_STRDUP("");
  413.  
  414.  
  415.   int error = AB_SetPersonEntryAttributes(pane, 
  416.                                           values, 
  417.                                           numItems);
  418.  
  419.   AB_FreeEntryAttributeValues(values, numItems);
  420. #else
  421.   PersonEntry& entry = dlg->getPersonEntry();
  422.  
  423.   /* setting up the defaults 
  424.    */
  425.   char *tmp;
  426.   /* We switch the sequence of displaying these two fields
  427.    * so that it won't appear in reverse order in vcard
  428.    */
  429.   tmp = fe_GetTextField(m_textFs[AB_ADDRESS]);
  430.   if (tmp && strlen(tmp))
  431.       entry.pPOAddress = tmp;
  432.   else
  433.       entry.pPOAddress = XP_STRDUP("");
  434.   tmp = fe_GetTextField(m_textFs[AB_CITY]);
  435.   if (tmp && strlen(tmp))
  436.       entry.pLocality = tmp;
  437.   else
  438.       entry.pLocality = XP_STRDUP("");
  439.  
  440.   tmp = fe_GetTextField(m_textFs[AB_STATE]);
  441.   if (tmp && strlen(tmp))
  442.       entry.pRegion = tmp;
  443.   else
  444.       entry.pRegion = XP_STRDUP("");
  445.  
  446.   tmp = fe_GetTextField(m_textFs[AB_ZIP]);
  447.   if (tmp && strlen(tmp))
  448.       entry.pZipCode = tmp;
  449.   else
  450.       entry.pZipCode = XP_STRDUP("");
  451.  
  452.   tmp = fe_GetTextField(m_textFs[AB_COUNTRY]);
  453.   if (tmp && strlen(tmp))
  454.       entry.pCountry = tmp;
  455.   else
  456.       entry.pCountry = XP_STRDUP("");
  457.  
  458.   tmp = fe_GetTextField(m_textFs[AB_WORKPHONE]);
  459.   if (tmp && strlen(tmp))
  460.       entry.pWorkPhone = tmp;
  461.   else
  462.       entry.pWorkPhone = XP_STRDUP("");
  463.  
  464.   tmp = fe_GetTextField(m_textFs[AB_FAXPHONE]);
  465.   if (tmp && strlen(tmp))
  466.       entry.pFaxPhone = 
  467.           fe_GetTextField(m_textFs[AB_FAXPHONE]);
  468.   else
  469.       entry.pFaxPhone = XP_STRDUP("");
  470.  
  471.   tmp = fe_GetTextField(m_textFs[AB_HOMEPHONE]);
  472.   if (tmp && strlen(tmp))
  473.       entry.pHomePhone = tmp;
  474.   else
  475.       entry.pHomePhone = XP_STRDUP("");
  476.  
  477. #endif /* USE_ABCOM */
  478. }
  479.  
  480.