home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / src / ABNameCTalkTab.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  11.8 KB  |  410 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.    PropertyTabView.cpp -- class definition for PropertyTabView
  20.    Created: Tao Cheng <tao@netscape.com>, 12-nov-96
  21.  */
  22.  
  23. #include "PropertySheetView.h"
  24. #include "ABNameFolderDlg.h"
  25. #include "ABNameCTalkTab.h"
  26.  
  27. #include "abcom.h"
  28.  
  29. #include <Xm/Form.h>
  30. #include <Xm/TextF.h> 
  31. #include <Xm/Separator.h>
  32.  
  33. #include <Xm/ToggleB.h>
  34. #include <Xm/LabelG.h> 
  35.  
  36. #include "DtWidgets/ComboBox.h"
  37.  
  38. #include "felocale.h"
  39. #include "xpgetstr.h"
  40. #include "xfe.h"
  41.  
  42. extern int XFE_AB_NAME_COOLTALK_TAB;
  43. extern int XFE_AB_COOLTALK_INFO;
  44. extern int XFE_AB_COOLTALK_DEF_SERVER;
  45. extern int XFE_AB_COOLTALK_SERVER_IK_HOST;
  46. extern int XFE_AB_COOLTALK_DIRECTIP;
  47. extern int XFE_AB_COOLTALK_ADDR_LABEL;
  48. extern int XFE_AB_COOLTALK_ADDR_EXAMPLE;
  49.  
  50. XFE_ABNameCTalkTabView::XFE_ABNameCTalkTabView(XFE_Component *top,
  51.                            XFE_View *view):
  52.   XFE_PropertyTabView(top, view, XFE_AB_NAME_COOLTALK_TAB)
  53. {
  54.  
  55.   int ac, numForms = 3;
  56.   Arg    av[20];
  57.   Widget topForm = getBaseWidget(),
  58.          label,
  59.          stripForm[4];
  60.  
  61.   XmString xmstr;
  62.  
  63.   for (int i=0; i < numForms; i++) {
  64.       ac = 0;
  65.       stripForm[i] = XmCreateForm(topForm, "strip", av, ac);
  66.  
  67.       if (i == 0) {
  68.           label = XtVaCreateManagedWidget("cTalkLabelInfo",
  69.                                           xmLabelGadgetClass, stripForm[i],
  70.                                           XmNalignment, XmALIGNMENT_BEGINNING, 
  71.                                           NULL);
  72.  
  73.           xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_INFO),
  74.                                     XmFONTLIST_DEFAULT_TAG);
  75.           XtVaSetValues(label,
  76.                         XmNlabelString, xmstr,
  77.                         XmNleftAttachment, XmATTACH_FORM,
  78.                         XmNrightAttachment, XmATTACH_FORM,
  79.                         XmNtopAttachment, XmATTACH_FORM,
  80.                         XmNbottomAttachment, XmATTACH_NONE,
  81.                         0);
  82.           XmStringFree(xmstr);
  83.  
  84.           XtVaSetValues(stripForm[i],
  85.                         XmNleftAttachment, XmATTACH_FORM,
  86.                         XmNrightAttachment, XmATTACH_FORM,
  87.                         XmNtopAttachment, XmATTACH_FORM,
  88.                         XmNbottomAttachment, XmATTACH_NONE,
  89.                         XmNtopOffset, 10,
  90.                         0);
  91.       
  92.       }/* if */
  93.       else if (i == 1) {
  94.           /* the select prompt label
  95.            */
  96.           xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_ADDR_LABEL),
  97.                                      XmFONTLIST_DEFAULT_TAG);
  98.           label = XtVaCreateManagedWidget("cTalkServerPrompt",
  99.                                           xmLabelGadgetClass, stripForm[i],
  100.                                           XmNlabelString, xmstr,
  101.                                           XmNalignment, XmALIGNMENT_BEGINNING, 
  102.                                           NULL);
  103.           XmStringFree(xmstr);
  104.  
  105.           /* The combo select
  106.            */
  107.           Visual   *v = 0;
  108.           Colormap  cmap = 0;
  109.           Cardinal  depth = 0;
  110.           XtVaGetValues (getToplevel()->getBaseWidget(), 
  111.                          XmNvisual, &v, 
  112.                          XmNcolormap, &cmap,
  113.                          XmNdepth, &depth, 
  114.                          NULL);
  115.  
  116.  
  117.           /* Create a combobox for storing directories 
  118.            */
  119.           XtSetArg (av[ac], XmNvisual, v); ac++;
  120.           XtSetArg (av[ac], XmNcolormap, cmap); ac++;
  121.           XtSetArg (av[ac], XmNdepth, depth); ac++;
  122.           XtSetArg (av[ac], XmNmoveSelectedItemUp, False); ac++;
  123.           XtSetArg (av[ac], XmNtype, XmDROP_DOWN_COMBO_BOX); ac++;
  124.           XtSetArg (av[ac], XmNvisibleItemCount, 3); ac++; 
  125.  
  126.           m_serverCombo = DtCreateComboBox(stripForm[i], 
  127.                                            "serverCombo", av,ac);
  128.           XtVaGetValues(m_serverCombo,
  129.                         XmNtextField, &(m_textFs[0]), 
  130.                         NULL);
  131.           XtVaSetValues(m_textFs[0],
  132.                         XmNeditable, False,
  133.                         0);
  134.  
  135.           // Add fake items to comboBox
  136.           int nServers = 3;
  137.           XmString xmstr;
  138.           for (int j = 0; j < nServers; j++) {
  139.               xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_DEF_SERVER+j), 
  140.                                          XmSTRING_DEFAULT_CHARSET);
  141.               DtComboBoxAddItem(m_serverCombo, xmstr, 1, True );
  142.               XmStringFree(xmstr);
  143.           }/* for j */
  144.           // attachment
  145.           XtVaSetValues(label,
  146.                         XmNleftAttachment, XmATTACH_FORM,
  147.                         XmNrightAttachment, XmATTACH_NONE,
  148.                         XmNtopAttachment, XmATTACH_FORM,
  149.                         XmNbottomAttachment, XmATTACH_FORM,
  150.                         0);
  151.  
  152.           XtVaSetValues(m_serverCombo,
  153.                         XmNleftAttachment, XmATTACH_WIDGET,
  154.                         XmNleftWidget, label,
  155.                         XmNrightAttachment, XmATTACH_FORM,
  156.                         XmNtopAttachment, XmATTACH_FORM,
  157.                         XmNbottomAttachment, XmATTACH_FORM,
  158.                         0);
  159.  
  160.           XtManageChild(m_serverCombo);
  161.           XtAddCallback(m_serverCombo, 
  162.                         XmNselectionCallback, 
  163.                         XFE_ABNameCTalkTabView::comboSelCallback, 
  164.                         this);
  165.  
  166.           //
  167.           XtVaSetValues(stripForm[i], 
  168.                         XmNleftAttachment, XmATTACH_FORM,
  169.                         XmNrightAttachment, XmATTACH_FORM,
  170.                         XmNtopAttachment, XmATTACH_WIDGET,
  171.                         XmNtopWidget, stripForm[i-1],
  172.                         XmNtopOffset, 20,
  173.                         0);
  174.           XtVaGetValues(label, 
  175.                         XmNwidth, &m_labelWidth,
  176.                         0);
  177.  
  178.           m_labelWidth += 10;
  179.           XtVaSetValues(label,
  180.                         XmNwidth, m_labelWidth,
  181.                         0);
  182.       }/* else if */
  183.       else if (i == 2) {
  184.           /* type in text
  185.            */
  186.           ac = 0;
  187.           m_textFs[1] = fe_CreateTextField(stripForm[i], "serverName",
  188.                                           av, ac);
  189.           /* example label
  190.            */
  191.           xmstr = XmStringCreateLtoR(" ",
  192.                                      XmFONTLIST_DEFAULT_TAG);
  193.           m_serverExample = XtVaCreateManagedWidget("cTalkServerPrompt",
  194.                                                     xmLabelGadgetClass, stripForm[i],
  195.                                                     XmNlabelString, xmstr,
  196.                                                     XmNalignment, XmALIGNMENT_BEGINNING,
  197.                                                     NULL);
  198.           XmStringFree(xmstr);
  199.  
  200.           //
  201.           XtVaSetValues(m_textFs[1],
  202.                         XmNleftAttachment, XmATTACH_FORM,
  203.                         XmNrightAttachment, XmATTACH_FORM,
  204.                         XmNtopAttachment, XmATTACH_FORM,
  205.                         XmNbottomAttachment, XmATTACH_NONE,
  206.                         XmNleftOffset, m_labelWidth,
  207.                         0);
  208.           XtVaSetValues(m_serverExample,
  209.                         XmNleftAttachment, XmATTACH_FORM,
  210.                         XmNrightAttachment, XmATTACH_FORM,
  211.                         XmNtopAttachment, XmATTACH_WIDGET,
  212.                         XmNtopWidget, m_textFs[1],
  213.                         XmNleftOffset, m_labelWidth,
  214.                         XmNbottomAttachment, XmATTACH_FORM,
  215.                         0);
  216.           XtVaSetValues(stripForm[i], 
  217.                         XmNleftAttachment, XmATTACH_FORM,
  218.                         XmNrightAttachment, XmATTACH_FORM,
  219.                         XmNtopAttachment, XmATTACH_WIDGET,
  220.                         XmNtopWidget, stripForm[i-1],
  221.                         XmNtopOffset, 10,
  222.                         XmNbottomOffset, 10,
  223.                         0);
  224.           XtManageChild(m_textFs[1]);
  225.           XtSetSensitive(stripForm[i], False);
  226.           m_typeinTextForm = stripForm[i];
  227.       }/* else */
  228.  
  229.       XtManageChild(stripForm[i]);
  230.   }/* for i */
  231.   // setServerState(0, 0);
  232. }
  233.  
  234. XFE_ABNameCTalkTabView::~XFE_ABNameCTalkTabView()
  235. {
  236. }
  237.  
  238.  
  239. void XFE_ABNameCTalkTabView::comboSelCallback(Widget w, 
  240.                                               XtPointer clientData, 
  241.                                               XtPointer callData)
  242. {
  243.     XFE_ABNameCTalkTabView *obj = (XFE_ABNameCTalkTabView *) clientData;
  244.     obj->comboSelCB(w, callData);
  245. }
  246.  
  247. void
  248. XFE_ABNameCTalkTabView::comboSelCB(Widget /* w */, XtPointer callData)
  249. {
  250.   DtComboBoxCallbackStruct *cbData = (DtComboBoxCallbackStruct *)callData;
  251.   if (cbData->reason == XmCR_SELECT ) {
  252.       char* text = 0;
  253.       XmString str = cbData->item_or_text;
  254.       
  255.       XmStringGetLtoR(str, XmSTRING_DEFAULT_CHARSET, &text);
  256.       if (*text ) {
  257.           XmString xmstr;
  258.           char tmp[128];
  259.  
  260.           tmp[0] = '\0';
  261.           if (XP_STRCMP(text, "Netscape Conference DLS Server") == 0) {
  262.               XP_SAFE_SPRINTF(tmp, sizeof(tmp),
  263.                               "%s",
  264.                               "");
  265.               m_serverType = kDefaultDLS;
  266.               XtSetSensitive(m_typeinTextForm, False);
  267.           }/* if */
  268.           else if (XP_STRCMP(text, "Specific DLS Server") == 0) {
  269.               XP_SAFE_SPRINTF(tmp, sizeof(tmp),
  270.                               XP_GetString(XFE_AB_COOLTALK_ADDR_EXAMPLE),
  271.                               "servername.domain.com");
  272.  
  273.               m_serverType = kSpecificDLS;
  274.               XtSetSensitive(m_typeinTextForm, True);
  275.           }/* if */
  276.           else if (XP_STRCMP(text, "Hostname or IP Address") == 0) {
  277.               XP_SAFE_SPRINTF(tmp, sizeof(tmp),
  278.                               XP_GetString(XFE_AB_COOLTALK_ADDR_EXAMPLE),
  279.                               "name.domain.com or 123.45.678.90");
  280.  
  281.               m_serverType = kHostOrIPAddress;
  282.               XtSetSensitive(m_typeinTextForm, True);
  283.           }/* if */
  284.           xmstr = XmStringCreateLtoR(tmp,
  285.                                      XmFONTLIST_DEFAULT_TAG);
  286.           XtVaSetValues(m_serverExample,
  287.                         XmNlabelString, xmstr,
  288.                         NULL);
  289.           XmStringFree(xmstr);
  290.  
  291.           XtFree(text);
  292.       }/* if text */
  293.   }/* if */
  294. }
  295.  
  296. void XFE_ABNameCTalkTabView::setDlgValues()
  297. {
  298.   XFE_ABNameFolderDlg *dlg = (XFE_ABNameFolderDlg *)getToplevel();
  299. #if defined(USE_ABCOM)
  300.   XFE_PropertySheetView *folderView = (XFE_PropertySheetView *) getParent();
  301.   MSG_Pane *pane = folderView->getPane();
  302.  
  303.   uint16 numItems = 2;
  304.   AB_AttribID * attribs = (AB_AttribID *) XP_CALLOC(numItems, 
  305.                                                     sizeof(AB_AttribID));
  306.   attribs[0] = AB_attribUseServer;
  307.   attribs[1] = AB_attribCoolAddress;
  308.  
  309.   AB_AttributeValue *values = NULL;
  310.   int error = AB_GetPersonEntryAttributes(pane, 
  311.                                           attribs,
  312.                                           &values, 
  313.                                           &numItems);
  314.   int16 shortValue = kDefaultDLS;
  315.   char *tmp = NULL;
  316.   for (int i=0; i < numItems; i++) {
  317.       switch (values[i].attrib) {
  318.       case AB_attribUseServer:
  319.           shortValue = values[i].u.shortValue;
  320.           break;
  321.  
  322.       case AB_attribCoolAddress:
  323.           tmp = values[i].u.string;
  324.           break;
  325.       }/* switch */
  326.   }/* for i */
  327.  
  328.   setServerState(shortValue, 
  329.                  tmp);
  330.  
  331.   XP_FREEIF(attribs);
  332.   AB_FreeEntryAttributeValues(values, numItems);
  333. #else
  334.   PersonEntry& entry = dlg->getPersonEntry();
  335.   setServerState(entry.UseServer, 
  336.                  entry.pCoolAddress);
  337. #endif /* USE_ABCOM */
  338. }
  339.  
  340. void XFE_ABNameCTalkTabView::apply()
  341. {
  342. }
  343.  
  344. void XFE_ABNameCTalkTabView::getDlgValues()
  345. {
  346.   XFE_ABNameFolderDlg *dlg = (XFE_ABNameFolderDlg *)getToplevel();
  347. #if defined(USE_ABCOM)
  348.   XFE_PropertySheetView *folderView = (XFE_PropertySheetView *) getParent();
  349.   MSG_Pane *pane = folderView->getPane();
  350.  
  351.   uint16 numItems = 2;
  352.   AB_AttributeValue *values = 
  353.       (AB_AttributeValue *) XP_CALLOC(numItems, 
  354.                                       sizeof(AB_AttributeValue));
  355.   char *tmp = NULL;
  356.  
  357.   values[0].attrib = AB_attribUseServer;
  358.   values[0].u.shortValue = m_serverType;
  359.  
  360.   tmp = fe_GetTextField(m_textFs[1]);
  361.   values[1].attrib = AB_attribCoolAddress;
  362.   if (tmp && strlen(tmp))
  363.       values[1].u.string = tmp;
  364.   else
  365.       values[1].u.string = XP_STRDUP("");
  366.  
  367.   int error = AB_SetPersonEntryAttributes(pane, 
  368.                                           values, 
  369.                                           numItems);
  370.  
  371.   AB_FreeEntryAttributeValues(values, numItems);
  372. #else
  373.   PersonEntry& entry = dlg->getPersonEntry();
  374.  
  375.   char *tmp;
  376.   tmp = fe_GetTextField(m_textFs[1]);
  377.   if (tmp && strlen(tmp))
  378.       entry.pCoolAddress = tmp;
  379.   else
  380.       entry.pCoolAddress = XP_STRDUP("");
  381.   entry.UseServer = m_serverType;
  382. #endif /* USE_ABCOM */
  383. }
  384.  
  385. void XFE_ABNameCTalkTabView::setServerState(short serverType, char* serverName)
  386. {
  387.     XmString xmstr;
  388.     if (serverType == kDefaultDLS) {
  389.         fe_SetTextField(m_textFs[1], "");
  390.         xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_DEF_SERVER), 
  391.                                    XmSTRING_DEFAULT_CHARSET);
  392.         XtSetSensitive(m_typeinTextForm, False);
  393.     }/* if */
  394.     else if (serverType == kSpecificDLS) {
  395.         fe_SetTextField(m_textFs[1], serverName?serverName:"");
  396.         xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_SERVER_IK_HOST), 
  397.                                    XmSTRING_DEFAULT_CHARSET);
  398.         XtSetSensitive(m_typeinTextForm, True);
  399.     }/* if */
  400.     else {
  401.         fe_SetTextField(m_textFs[1], serverName?serverName:"");
  402.         xmstr = XmStringCreateLtoR(XP_GetString(XFE_AB_COOLTALK_DIRECTIP), 
  403.                                    XmSTRING_DEFAULT_CHARSET);
  404.         XtSetSensitive(m_typeinTextForm, True);
  405.     }/* else */
  406.     DtComboBoxSelectItem(m_serverCombo, xmstr);
  407.     XmStringFree(xmstr);
  408.     m_serverType = serverType;
  409. }
  410.