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

  1. /* -*- Mode: C++; tab-width: 4; 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.    ABNameGenTabView.cpp -- class definition for ABNameGenTabView
  20.    Created: Tao Cheng <tao@netscape.com>, 12-nov-96
  21.  */
  22.  
  23. #include "PropertySheetView.h"
  24. #include "ABNameFolderDlg.h"
  25. #include "ABNameGenTab.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_CARD_FOR;
  40. extern int XFE_AB_NAME_NEW_CARD;
  41.  
  42. extern int XFE_AB_NAME_GENERAL_TAB;
  43. extern int XFE_AB_DISPLAYNAME;
  44. extern int XFE_AB_FIRSTNAME;
  45. extern int XFE_AB_LASTNAME;
  46. extern int XFE_AB_COMPANY;
  47. extern int XFE_AB_TITLE;
  48. extern int XFE_AB_EMAIL;
  49. extern int XFE_AB_NICKNAME;
  50. extern int XFE_AB_NOTES;
  51. extern int XFE_AB_PREFHTML;
  52.  
  53. XFE_ABNameGenTabView::XFE_ABNameGenTabView(XFE_Component *top,
  54.                        XFE_View *view):
  55.   XFE_PropertyTabView(top, view, XFE_AB_NAME_GENERAL_TAB)
  56. {
  57.  
  58.   int ac, numForms = AB_LAST+2;
  59.   Arg    av[20];
  60.   Widget topForm = getBaseWidget(),
  61.          label = NULL,
  62.          stripForm[AB_LAST+2];
  63.   char *genTabLabels[AB_LAST+1];
  64.   Dimension width;
  65.  
  66.   genTabLabels[AB_FIRST_NAME] = XP_GetString(XFE_AB_FIRSTNAME);
  67.   genTabLabels[AB_LAST_NAME] = XP_GetString(XFE_AB_LASTNAME);
  68.   genTabLabels[AB_DISPLAY_NAME] = XP_GetString(XFE_AB_DISPLAYNAME);
  69.  
  70.   genTabLabels[AB_EMAIL] = XP_GetString(XFE_AB_EMAIL);
  71.   genTabLabels[AB_NICKNAME] = XP_GetString(XFE_AB_NICKNAME);
  72.  
  73.   genTabLabels[AB_TITLE] = XP_GetString(XFE_AB_TITLE);
  74.   genTabLabels[AB_COMPANY_NAME] = XP_GetString(XFE_AB_COMPANY);
  75.   genTabLabels[AB_LAST] = XP_GetString(XFE_AB_NOTES);
  76.  
  77.   int i; // for use in multiple for loops... 
  78.          // without breaking newer ANSI C++ rules
  79.   for (i=0; i < numForms; i++) {
  80.     ac = 0;
  81.  
  82.     stripForm[i] = XmCreateForm(topForm, "strip", av, ac);
  83.     if (i < (AB_LAST+1)) {
  84.       /* Create labels
  85.        */
  86.       label = XtVaCreateManagedWidget (genTabLabels[i],
  87.                                        xmLabelGadgetClass, stripForm[i],
  88.                                        XmNalignment, XmALIGNMENT_END, 
  89.                                        NULL);
  90.       m_labels[i] = label;
  91.       XtVaSetValues(label, 
  92.                     XmNleftAttachment, XmATTACH_FORM,
  93.                     XmNtopAttachment, XmATTACH_FORM,
  94.                     XmNrightAttachment, XmATTACH_NONE,
  95.                     XmNbottomAttachment, XmATTACH_FORM,
  96.                     0);
  97.       XtVaGetValues(label, 
  98.                     XmNwidth, &width,
  99.                     0);
  100.  
  101.       m_labelWidth = (m_labelWidth < width)?width:m_labelWidth;
  102.  
  103.       /* TextF / Text
  104.        */
  105.       if (i < AB_LAST) {
  106.           /* TextF
  107.            */
  108.           ac = 0;
  109.           m_textFs[i] = fe_CreateTextField(stripForm[i], 
  110.                                           (char *) genTabLabels[i],
  111.                                           av, ac);
  112.           XtVaSetValues(m_textFs[i], 
  113.                         XmNleftAttachment, XmATTACH_WIDGET,
  114.                         XmNleftWidget, label,
  115.                         XmNtopAttachment, XmATTACH_FORM,
  116.                         XmNrightAttachment, XmATTACH_FORM,
  117.                         XmNbottomAttachment, XmATTACH_FORM,
  118.                         0);
  119.           XtManageChild(m_textFs[i]);
  120.       }/* if */
  121.       else {
  122.           /* Text
  123.            */
  124.           ac = 0;
  125.           XtSetArg (av[ac], XmNheight, 100); ac++;
  126.           XtSetArg (av[ac], XmNeditMode, XmMULTI_LINE_EDIT); ac++;
  127.           m_notesTxt = fe_CreateText(stripForm[i], "notesText", av, ac);
  128.           XtVaSetValues(m_notesTxt, 
  129.                         XmNleftAttachment, XmATTACH_WIDGET,
  130.                         XmNleftWidget, label,
  131.                         XmNtopAttachment, XmATTACH_FORM,
  132.                         XmNrightAttachment, XmATTACH_FORM,
  133.                         XmNbottomAttachment, XmATTACH_FORM,
  134.                         0);
  135.           XtManageChild(m_notesTxt);
  136.           
  137.       }/* else */
  138.     }/* if */
  139.     else {
  140.         /* the toggle */
  141.         XmString xmstr;
  142.         xmstr = XmStringCreate(XP_GetString(XFE_AB_PREFHTML),
  143.                                XmFONTLIST_DEFAULT_TAG);
  144.         ac = 0;
  145.         XtSetArg (av[ac], XmNlabelString, xmstr); ac++;
  146.         m_prefHTMLTog = XmCreateToggleButton(stripForm[i], "prefHTMLTog", 
  147.                                              av, ac);
  148.         XtVaSetValues(m_prefHTMLTog, 
  149.                       XmNleftAttachment, XmATTACH_FORM,
  150.                       XmNleftOffset, m_labelWidth,
  151.                       XmNtopAttachment, XmATTACH_FORM,
  152.                       XmNrightAttachment, XmATTACH_NONE,
  153.                       XmNbottomAttachment, XmATTACH_FORM,
  154.                       0);
  155.         XtManageChild(m_prefHTMLTog);
  156.         
  157.     }/* else */
  158.     if (i == 0)
  159.         XtVaSetValues(stripForm[i], 
  160.                       XmNleftAttachment, XmATTACH_FORM,
  161.                       XmNrightAttachment, XmATTACH_FORM,
  162.                       XmNtopAttachment, XmATTACH_FORM,
  163.                       XmNtopOffset, 10,
  164.                       0);
  165.     else
  166.         XtVaSetValues(stripForm[i], 
  167.                       XmNleftAttachment, XmATTACH_FORM,
  168.                       XmNrightAttachment, XmATTACH_FORM,
  169.                       XmNtopAttachment, XmATTACH_WIDGET,
  170.                       XmNtopWidget, stripForm[i-1],
  171.                       XmNtopOffset, (i == AB_TITLE || 
  172.                                      i == AB_EMAIL || 
  173.                                      i == AB_LAST)?10:3,
  174.                                      0);
  175.                       XtManageChild(stripForm[i]);
  176.   }/* for i */
  177.   for (i=0; i < (AB_LAST+1); i++) {
  178.       XtVaSetValues(m_labels[i], 
  179.                     XmNwidth, m_labelWidth,
  180.                     0);
  181.   }/* for i */
  182.  
  183. }
  184.  
  185. XFE_ABNameGenTabView::~XFE_ABNameGenTabView()
  186. {
  187. }
  188.  
  189. void XFE_ABNameGenTabView::setDlgValues()
  190. {
  191.   /* Get mode, entryid, and ab_view
  192.    */
  193.   XFE_ABNameFolderDlg *dlg = (XFE_ABNameFolderDlg *)getToplevel();
  194. #if defined(USE_ABCOM)
  195.   XFE_PropertySheetView *folderView = (XFE_PropertySheetView *) getParent();
  196.   MSG_Pane *pane = folderView->getPane();
  197.  
  198.   uint16 numItems = AB_LAST+2;
  199.   AB_AttribID * attribs = (AB_AttribID *) XP_CALLOC(numItems, 
  200.                                                     sizeof(AB_AttribID));
  201.   attribs[AB_FIRST_NAME] = AB_attribGivenName;
  202.   attribs[AB_LAST_NAME] = AB_attribFamilyName;
  203.   attribs[AB_DISPLAY_NAME] = AB_attribDisplayName;
  204.   attribs[AB_EMAIL] = AB_attribEmailAddress;
  205.   attribs[AB_NICKNAME] = AB_attribNickName;
  206.   attribs[AB_TITLE] = AB_attribTitle;
  207.   attribs[AB_COMPANY_NAME] = AB_attribCompanyName;
  208.   attribs[AB_LAST] = AB_attribInfo;
  209.   attribs[AB_LAST+1] = AB_attribHTMLMail;
  210.  
  211.   AB_AttributeValue *values = NULL;
  212.   int error = AB_GetPersonEntryAttributes(pane, 
  213.                                           attribs,
  214.                                           &values, 
  215.                                           &numItems);
  216.   char *tmp = NULL;
  217.   for (int i=0; i < numItems; i++) {
  218.       switch (values[i].attrib) {
  219.       case AB_attribGivenName:
  220.           tmp = values[i].u.string;
  221.           fe_SetTextField(m_textFs[AB_FIRST_NAME], 
  222.                           tmp?tmp:"");
  223.           break;
  224.  
  225.       case AB_attribFamilyName:
  226.           tmp = values[i].u.string;
  227.           fe_SetTextField(m_textFs[AB_LAST_NAME], 
  228.                       tmp?tmp:"");
  229.           break;
  230.           
  231.       case AB_attribDisplayName:
  232.           tmp = values[i].u.string;
  233.           fe_SetTextField(m_textFs[AB_DISPLAY_NAME], 
  234.                           tmp?tmp:"");
  235.           break;
  236.           
  237.       case AB_attribEmailAddress:
  238.           tmp = values[i].u.string;
  239.           fe_SetTextField(m_textFs[AB_EMAIL], 
  240.                           tmp?tmp:"");
  241.           break;
  242.           
  243.       case AB_attribNickName:
  244.           tmp = values[i].u.string;
  245.           fe_SetTextField(m_textFs[AB_NICKNAME], 
  246.                           tmp?tmp:"");
  247.           break;
  248.  
  249.       case AB_attribTitle:
  250.           tmp = values[i].u.string;
  251.           fe_SetTextField(m_textFs[AB_TITLE], 
  252.                           tmp?tmp:"");
  253.           break;
  254.           
  255.       case AB_attribCompanyName:
  256.           tmp = values[i].u.string;
  257.           fe_SetTextField(m_textFs[AB_COMPANY_NAME], 
  258.                           tmp?tmp:"");
  259.           break;
  260.           
  261.       case AB_attribInfo:
  262.           // AB_attribInfo
  263.           tmp = values[i].u.string;
  264.           fe_SetTextField(m_notesTxt, 
  265.                           tmp?tmp:"");
  266.           break;
  267.           
  268.       case AB_attribHTMLMail:
  269.           XmToggleButtonSetState(m_prefHTMLTog, 
  270.                                  values[i].u.boolValue, FALSE);
  271.           break;
  272.           
  273.       }/* switch */
  274.   }/* for i */
  275.  
  276.   XP_FREEIF(attribs);
  277.   AB_FreeEntryAttributeValues(values, numItems);
  278.  
  279. #else
  280.   PersonEntry& entry = dlg->getPersonEntry();
  281.   fe_SetTextField(m_textFs[AB_FIRST_NAME], 
  282.         entry.pGivenName?entry.pGivenName:"");
  283.   fe_SetTextField(m_textFs[AB_LAST_NAME], 
  284.         entry.pFamilyName?entry.pFamilyName:"");
  285.   fe_SetTextField(m_textFs[AB_COMPANY_NAME], 
  286.         entry.pCompanyName?entry.pCompanyName:"");
  287.   fe_SetTextField(m_textFs[AB_TITLE], entry.pTitle?entry.pTitle:"");
  288.   fe_SetTextField(m_textFs[AB_EMAIL], 
  289.         entry.pEmailAddress?entry.pEmailAddress:"");
  290.   fe_SetTextField(m_textFs[AB_NICKNAME], entry.pNickName?entry.pNickName:"");
  291.   fe_SetTextField(m_notesTxt, entry.pInfo?entry.pInfo:""); 
  292.   XmToggleButtonSetState(m_prefHTMLTog, entry.HTMLmail, FALSE);
  293. #endif /* USE_ABCOM */
  294. }
  295.  
  296. void XFE_ABNameGenTabView::getDlgValues()
  297. {
  298. #if defined(DEBUG_tao_)
  299.     printf("\n XFE_ABNameGenTabView::getDlgValues \n");
  300. #endif
  301.   XFE_ABNameFolderDlg *dlg = (XFE_ABNameFolderDlg *)getToplevel();
  302. #if defined(USE_ABCOM)
  303.   XFE_PropertySheetView *folderView = (XFE_PropertySheetView *) getParent();
  304.   MSG_Pane *pane = folderView->getPane();
  305.  
  306.   uint16 numItems = AB_LAST+1;
  307.   AB_AttributeValue *values = 
  308.       (AB_AttributeValue *) XP_CALLOC(numItems, 
  309.                                       sizeof(AB_AttributeValue));
  310.   char *tmp = NULL;
  311.  
  312.   //
  313.   tmp = fe_GetTextField(m_textFs[AB_FIRST_NAME]);
  314.   values[AB_FIRST_NAME].attrib = AB_attribGivenName;
  315.   if (tmp && strlen(tmp))
  316.       values[AB_FIRST_NAME].u.string = tmp;
  317.   else
  318.       values[AB_FIRST_NAME].u.string = XP_STRDUP("");
  319.  
  320.   //
  321.   tmp = fe_GetTextField(m_textFs[AB_LAST_NAME]);
  322.   values[AB_LAST_NAME].attrib = AB_attribFamilyName;
  323.   if (tmp && strlen(tmp))
  324.       values[AB_LAST_NAME].u.string = tmp;
  325.   else
  326.       values[AB_LAST_NAME].u.string = XP_STRDUP("");
  327.  
  328.   // AB_attribInfo
  329.   tmp = fe_GetTextField(m_notesTxt);
  330.   values[AB_DISPLAY_NAME].attrib = AB_attribInfo;
  331.   if (tmp && strlen(tmp))
  332.       values[AB_DISPLAY_NAME].u.string = tmp;
  333.   else
  334.       values[AB_DISPLAY_NAME].u.string = XP_STRDUP("");
  335.  
  336.   //
  337.   tmp = fe_GetTextField(m_textFs[AB_EMAIL]);
  338.   values[AB_EMAIL].attrib = AB_attribEmailAddress;
  339.   if (tmp && strlen(tmp))
  340.       values[AB_EMAIL].u.string = tmp;
  341.   else
  342.       values[AB_EMAIL].u.string = XP_STRDUP("");
  343.  
  344.   //
  345.   tmp = fe_GetTextField(m_textFs[AB_NICKNAME]);
  346.   values[AB_NICKNAME].attrib = AB_attribNickName;
  347.   if (tmp && strlen(tmp))
  348.       values[AB_NICKNAME].u.string = tmp;
  349.   else
  350.       values[AB_NICKNAME].u.string = XP_STRDUP("");
  351.  
  352.   //
  353.   tmp = fe_GetTextField(m_textFs[AB_TITLE]);
  354.   values[AB_TITLE].attrib = AB_attribTitle;
  355.   if (tmp && strlen(tmp))
  356.       values[AB_TITLE].u.string = tmp;
  357.   else
  358.       values[AB_TITLE].u.string = XP_STRDUP("");
  359.  
  360.   //
  361.   tmp = fe_GetTextField(m_textFs[AB_COMPANY_NAME]);
  362.   values[AB_COMPANY_NAME].attrib = AB_attribCompanyName;
  363.   if (tmp && strlen(tmp))
  364.       values[AB_COMPANY_NAME].u.string = tmp;
  365.   else
  366.       values[AB_COMPANY_NAME].u.string = XP_STRDUP("");
  367.  
  368.   //
  369.   values[AB_LAST].u.boolValue = XmToggleButtonGetState(m_prefHTMLTog);
  370.   values[AB_LAST].attrib = AB_attribHTMLMail;
  371.  
  372.   //set values 
  373.   int error = AB_SetPersonEntryAttributes(pane, 
  374.                                           values, 
  375.                                           numItems);
  376.   AB_FreeEntryAttributeValues(values, numItems);
  377.  
  378. #else
  379.   PersonEntry& entry = dlg->getPersonEntry();
  380.  
  381.   /* setting up the defaults 
  382.    */
  383.   char *tmp;
  384.  
  385.   tmp = fe_GetTextField(m_textFs[AB_NICKNAME]);
  386.   if (tmp && strlen(tmp))
  387.       entry.pNickName = tmp;
  388.   else
  389.       entry.pNickName = XP_STRDUP("");
  390.  
  391.   tmp = fe_GetTextField(m_textFs[AB_FIRST_NAME]);
  392.   if (tmp && strlen(tmp))
  393.       entry.pGivenName = tmp;
  394.   else
  395.       entry.pGivenName = XP_STRDUP("");
  396.  
  397.   tmp = fe_GetTextField(m_textFs[AB_LAST_NAME]);
  398.   if (tmp && strlen(tmp))
  399.       entry.pFamilyName = tmp;
  400.   else
  401.       entry.pFamilyName = XP_STRDUP("");
  402.  
  403.   tmp = fe_GetTextField(m_textFs[AB_COMPANY_NAME]);
  404.   if (tmp && strlen(tmp))
  405.       entry.pCompanyName = tmp;
  406.   else
  407.       entry.pCompanyName = XP_STRDUP("");
  408.  
  409.   tmp = fe_GetTextField(m_textFs[AB_TITLE]);
  410.   if (tmp && strlen(tmp))
  411.       entry.pTitle = tmp;
  412.   else
  413.       entry.pTitle = XP_STRDUP("");
  414.  
  415.   tmp = fe_GetTextField(m_textFs[AB_EMAIL]);
  416.   if (tmp && strlen(tmp))
  417.       entry.pEmailAddress = 
  418.           fe_GetTextField(m_textFs[AB_EMAIL]);
  419.   else
  420.       entry.pEmailAddress = XP_STRDUP("");
  421.  
  422.   tmp = fe_GetTextField(m_notesTxt);
  423.   if (tmp && strlen(tmp))
  424.       entry.pInfo = tmp;
  425.   else
  426.       entry.pInfo = XP_STRDUP("");
  427.  
  428.   entry.HTMLmail = XmToggleButtonGetState(m_prefHTMLTog);
  429. #endif /* USE_ABCOM */
  430.  
  431.   // set title
  432.   if (tmp = dlg->getFullname()) {
  433.       char tmp2[AB_MAX_STRLEN];
  434.       XP_SAFE_SPRINTF(tmp2, sizeof(tmp2),
  435.                       XP_GetString(XFE_AB_NAME_CARD_FOR),
  436.                       tmp);
  437.       dlg->setCardName(tmp2);
  438.       XP_FREE((char *) tmp);
  439.   }/* if */
  440.   else 
  441.       dlg->setCardName(XP_GetString(XFE_AB_NAME_NEW_CARD));
  442. }
  443.