home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / src / ABDirGenTabView.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  9.6 KB  |  335 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.    ABDirGenTabView.cpp -- class definition for ABDirGenTabView
  20.    Created: Tao Cheng <tao@netscape.com>, 10-nov-97
  21.  */
  22.  
  23. #include "ABDirGenTabView.h"
  24. #include "ABDirPropertyDlg.h"
  25.  
  26. #include <Xm/Form.h>
  27. #include <Xm/TextF.h> 
  28. #include <Xm/Text.h> 
  29. #include <Xm/Separator.h>
  30. #include <Xm/SeparatoG.h>
  31.  
  32. #include <Xm/ToggleB.h>
  33. #include <Xm/LabelG.h> 
  34.  
  35. #include "felocale.h"
  36. #include "xpgetstr.h"
  37.  
  38. extern int XFE_AB_NAME_GENERAL_TAB;
  39.  
  40. extern int XFE_ABDIR_DESCRIPT;
  41. extern int XFE_ABDIR_SERVER;
  42. extern int XFE_ABDIR_SERVER_ROOT;
  43. extern int XFE_ABDIR_PORT_NUM;
  44. extern int XFE_ABDIR_MAX_HITS;
  45. extern int XFE_ABDIR_SECURE;
  46. extern int XFE_ABDIR_USE_PASSWD;
  47. extern int XFE_ABDIR_SAVE_PASSWD;
  48.  
  49. extern "C" Widget fe_CreateTextField(Widget parent, const char *name,
  50.                                      Arg *av, int ac);
  51.  
  52. XFE_ABDirGenTabView::XFE_ABDirGenTabView(XFE_Component *top,
  53.                                          XFE_View *view):
  54.     XFE_PropertyTabView(top, view, XFE_AB_NAME_GENERAL_TAB)
  55. {
  56.  
  57.     int    ac, 
  58.            numForms = ABDIR_LAST+ABDIR_SECLAST;
  59.     Arg    av[20];
  60.     Widget topForm = getBaseWidget(),
  61.            label = NULL,
  62.            stripForm[ABDIR_LAST+ABDIR_SECLAST];
  63.     char  *genTabLabels[ABDIR_LAST+ABDIR_SECLAST];
  64.     Dimension width,
  65.               m_labelWidth = 0;
  66.  
  67.     genTabLabels[ABDIR_DESCRIPTION] = XP_GetString(XFE_ABDIR_DESCRIPT);
  68.     genTabLabels[ABDIR_LDAPSERVER] = XP_GetString(XFE_ABDIR_SERVER);
  69.     genTabLabels[ABDIR_SEARCHROOT] = XP_GetString(XFE_ABDIR_SERVER_ROOT);
  70.     genTabLabels[ABDIR_PORTNUMBER] = XP_GetString(XFE_ABDIR_PORT_NUM);
  71.     genTabLabels[ABDIR_MAXHITS] = XP_GetString(XFE_ABDIR_MAX_HITS);
  72.     genTabLabels[ABDIR_LAST + ABDIR_SECUR] = XP_GetString(XFE_ABDIR_SECURE);
  73.     genTabLabels[ABDIR_LAST + ABDIR_USEPASSWD] = 
  74.         XP_GetString(XFE_ABDIR_USE_PASSWD);
  75.     genTabLabels[ABDIR_LAST + ABDIR_SAVEPASSWD] = 
  76.         XP_GetString(XFE_ABDIR_SAVE_PASSWD);
  77.  
  78.     int i; // for use in multiple for loops... 
  79.     // without breaking newer ANSI C++ rules
  80.     Widget sep = NULL;
  81.     for (i=0; i < numForms; i++) {
  82.         sep = NULL;
  83.         if (i == ABDIR_PORTNUMBER ||
  84.             i == ABDIR_LAST) {
  85.             sep = XtVaCreateManagedWidget("sep",
  86.                                           xmSeparatorGadgetClass, topForm,
  87.                                           XmNleftAttachment, XmATTACH_FORM,
  88.                                           XmNtopAttachment, XmATTACH_WIDGET,
  89.                                           XmNtopWidget, stripForm[i-1],
  90.                                           XmNtopOffset, 3,
  91.                                           XmNrightAttachment, XmATTACH_FORM,
  92.                                           XmNbottomAttachment, XmATTACH_NONE,
  93.                                           0);
  94.         }/* if */
  95.  
  96.         ac = 0;
  97.         stripForm[i] = XmCreateForm(topForm, "strip", av, ac);
  98.         if (i < ABDIR_LAST) {
  99.             /* label/textF
  100.              */
  101.             /* Create labels
  102.              */
  103.             label = XtVaCreateManagedWidget(genTabLabels[i],
  104.                                             xmLabelGadgetClass, stripForm[i],
  105.                                             XmNalignment, XmALIGNMENT_BEGINNING, 
  106.                                             NULL);
  107.             m_labels[i] = label;
  108.             XtVaSetValues(label, 
  109.                           XmNleftAttachment, XmATTACH_FORM,
  110.                           XmNtopAttachment, XmATTACH_FORM,
  111.                           XmNrightAttachment, XmATTACH_NONE,
  112.                           XmNbottomAttachment, XmATTACH_FORM,
  113.                           0);
  114.             XtVaGetValues(label, 
  115.                           XmNwidth, &width,
  116.                           0);
  117.             
  118.             if (m_labelWidth < width)
  119.                 m_labelWidth = width;
  120.             
  121.             /* TextF
  122.              */
  123.             ac = 0;
  124.             m_textFs[i] = fe_CreateTextField(stripForm[i], 
  125.                                              (char *) genTabLabels[i],
  126.                                              av, ac);
  127.             XtVaSetValues(m_textFs[i], 
  128.                           XmNleftAttachment, XmATTACH_WIDGET,
  129.                           XmNleftWidget, label,
  130.                           XmNtopAttachment, XmATTACH_FORM,
  131.                           XmNrightAttachment, XmATTACH_FORM,
  132.                           XmNbottomAttachment, XmATTACH_FORM,
  133.                           0);
  134.             XtManageChild(m_textFs[i]);
  135.         }/* if */
  136.         else {
  137.             /* the toggle */
  138.             XmString xmstr;
  139.             xmstr = XmStringCreate(genTabLabels[i],
  140.                                    XmFONTLIST_DEFAULT_TAG);
  141.             ac = 0;
  142.             XtSetArg (av[ac], XmNlabelString, xmstr); ac++;
  143.             m_toggles[i-ABDIR_LAST] = 
  144.                 XmCreateToggleButton(stripForm[i], genTabLabels[i], 
  145.                                      av, ac);
  146.             XtVaSetValues(m_toggles[i-ABDIR_LAST], 
  147.                           XmNleftAttachment, XmATTACH_FORM,
  148.                           // XmNleftOffset, m_labelWidth,
  149.                           XmNtopAttachment, XmATTACH_FORM,
  150.                           XmNrightAttachment, XmATTACH_NONE,
  151.                           XmNbottomAttachment, XmATTACH_FORM,
  152.                           0);
  153.             if (i == (ABDIR_LAST+ABDIR_USEPASSWD)) {
  154.                 XtAddCallback(m_toggles[i-ABDIR_LAST], 
  155.                               XmNvalueChangedCallback, 
  156.                               XFE_ABDirGenTabView::usePasswdCallback, this);
  157.                 
  158.             }/* if */
  159.             XtManageChild(m_toggles[i-ABDIR_LAST]);
  160.             
  161.         }/* else */
  162.         
  163.         if (i == 0)
  164.             XtVaSetValues(stripForm[i], 
  165.                           XmNleftAttachment, XmATTACH_FORM,
  166.                           XmNrightAttachment, XmATTACH_FORM,
  167.                           XmNtopAttachment, XmATTACH_FORM,
  168.                           XmNtopOffset, 10,
  169.                           XmNleftOffset, 3,
  170.                           XmNrightOffset, 3,
  171.                           0);
  172.         else if (sep)
  173.             XtVaSetValues(stripForm[i], 
  174.                           XmNleftAttachment, XmATTACH_FORM,
  175.                           XmNrightAttachment, XmATTACH_FORM,
  176.                           XmNtopAttachment, XmATTACH_WIDGET,
  177.                           XmNtopWidget, sep,
  178.                           XmNtopOffset, 3,
  179.                           XmNleftOffset, 3,
  180.                           XmNrightOffset, 3,
  181.                           0);
  182.         else
  183.             XtVaSetValues(stripForm[i], 
  184.                           XmNleftAttachment, XmATTACH_FORM,
  185.                           XmNrightAttachment, XmATTACH_FORM,
  186.                           XmNtopAttachment, XmATTACH_WIDGET,
  187.                           XmNtopWidget, stripForm[i-1],
  188.                           XmNtopOffset, 3,
  189.                           XmNleftOffset, i==(ABDIR_LAST+ABDIR_SAVEPASSWD)?25:3,
  190.                           XmNrightOffset, 3,
  191.                           0);
  192.         
  193.         XtManageChild(stripForm[i]);
  194.         
  195.         if (i == ABDIR_SEARCHROOT) {
  196.             for (int j=0; j <= ABDIR_SEARCHROOT;j++)
  197.                 XtVaSetValues(m_labels[j], 
  198.                               XmNwidth, m_labelWidth,
  199.                               0);
  200.             m_labelWidth = 0;
  201.         }/* if */
  202.         else if (i == ABDIR_MAXHITS)
  203.             for (int j=ABDIR_PORTNUMBER; j <= ABDIR_MAXHITS; j++)
  204.                 XtVaSetValues(m_labels[j], 
  205.                               XmNwidth, m_labelWidth,
  206.                               0);
  207.     }/* for i */
  208. }
  209.  
  210. XFE_ABDirGenTabView::~XFE_ABDirGenTabView()
  211. {
  212. }
  213.  
  214. void 
  215. XFE_ABDirGenTabView::usePasswdCallback(Widget w, XtPointer clientData, 
  216.                                        XtPointer callData)
  217. {
  218.     XFE_ABDirGenTabView *obj = (XFE_ABDirGenTabView *) clientData;
  219.     obj->usePasswdCB(w, callData);
  220. }
  221.  
  222. void
  223. XFE_ABDirGenTabView::usePasswdCB(Widget, XtPointer callData)
  224. {
  225.     XmToggleButtonCallbackStruct *cdata = 
  226.         (XmToggleButtonCallbackStruct *) callData;
  227.  
  228.     XtSetSensitive(m_toggles[ABDIR_SAVEPASSWD], cdata->set);
  229. }
  230.  
  231. void
  232. XFE_ABDirGenTabView::setDlgValues()
  233. {
  234.     XFE_ABDirPropertyDlg *dlg = (XFE_ABDirPropertyDlg *)getToplevel();
  235.     DIR_Server *dir = dlg->getDir();
  236.  
  237.     if (dir) {
  238.         /* set
  239.          */
  240.         fe_SetTextField(m_textFs[ABDIR_DESCRIPTION], 
  241.                         dir->description?dir->description:"");
  242.         fe_SetTextField(m_textFs[ABDIR_LDAPSERVER], 
  243.                         dir->serverName?dir->serverName:"");
  244.         fe_SetTextField(m_textFs[ABDIR_SEARCHROOT], 
  245.                         dir->searchBase?dir->searchBase:"");
  246.         char tmp[16];
  247.         XP_SAFE_SPRINTF(tmp, sizeof(tmp),
  248.                         "%d",
  249.                         dir->port);
  250.         fe_SetTextField(m_textFs[ABDIR_PORTNUMBER], 
  251.                         tmp);
  252.         
  253.         XP_SAFE_SPRINTF(tmp, sizeof(tmp),
  254.                         "%d",
  255.                         dir->maxHits);
  256.         fe_SetTextField(m_textFs[ABDIR_MAXHITS], 
  257.                         tmp);
  258.  
  259.         XmToggleButtonSetState(m_toggles[ABDIR_SECUR], dir->isSecure, 
  260.                                FALSE);
  261.         XmToggleButtonSetState(m_toggles[ABDIR_SAVEPASSWD], dir->savePassword,
  262.                                FALSE);        
  263.         XmToggleButtonSetState(m_toggles[ABDIR_USEPASSWD], dir->enableAuth, 
  264.                                TRUE);        
  265.         XtSetSensitive(m_toggles[ABDIR_SAVEPASSWD], dir->enableAuth);
  266.  
  267.     }/* if */
  268.     else {
  269.         /* clear
  270.          */
  271.         fe_SetTextField(m_textFs[ABDIR_DESCRIPTION], 
  272.                         "");
  273.         fe_SetTextField(m_textFs[ABDIR_LDAPSERVER], 
  274.                         "");
  275.         fe_SetTextField(m_textFs[ABDIR_SEARCHROOT], 
  276.                         "");
  277.         fe_SetTextField(m_textFs[ABDIR_PORTNUMBER], 
  278.                         "");
  279.         fe_SetTextField(m_textFs[ABDIR_MAXHITS], 
  280.                         "");
  281.  
  282.         XmToggleButtonSetState(m_toggles[ABDIR_SECUR], False, FALSE);
  283.         XmToggleButtonSetState(m_toggles[ABDIR_SAVEPASSWD], False, FALSE);    
  284.         XmToggleButtonSetState(m_toggles[ABDIR_USEPASSWD], False, TRUE);
  285.         XtSetSensitive(m_toggles[ABDIR_SAVEPASSWD], False);
  286.     }/* else */
  287. }
  288.  
  289. void 
  290. XFE_ABDirGenTabView::getDlgValues()
  291. {
  292.     XFE_ABDirPropertyDlg *dlg = (XFE_ABDirPropertyDlg *)getToplevel();
  293.     DIR_Server *dir = dlg->getDir();
  294.  
  295.     /* setting up the defaults 
  296.      */
  297.     char *tmp;
  298.  
  299.     tmp = fe_GetTextField(m_textFs[ABDIR_DESCRIPTION]);
  300.     if (tmp && strlen(tmp))
  301.         dir->description = tmp;
  302.     else
  303.         dir->description = NULL;
  304.  
  305.     tmp = fe_GetTextField(m_textFs[ABDIR_LDAPSERVER]);
  306.     if (tmp && strlen(tmp))
  307.         dir->serverName = tmp;
  308.     else
  309.         dir->serverName = NULL;
  310.  
  311.     tmp = fe_GetTextField(m_textFs[ABDIR_SEARCHROOT]);
  312.     if (tmp && strlen(tmp))
  313.         dir->searchBase = tmp;
  314.     else
  315.         dir->searchBase = NULL;
  316.  
  317.  
  318.     tmp = fe_GetTextField(m_textFs[ABDIR_PORTNUMBER]);
  319.     if (tmp && strlen(tmp))
  320.         sscanf(tmp, "%d", &(dir->port));
  321.     else
  322.         dir->port = 0;
  323.  
  324.  
  325.     tmp = fe_GetTextField(m_textFs[ABDIR_MAXHITS]);
  326.     if (tmp && strlen(tmp))
  327.         sscanf(tmp, "%d", &(dir->maxHits));
  328.     else
  329.         dir->maxHits = 0;
  330.  
  331.     dir->isSecure = XmToggleButtonGetState(m_toggles[ABDIR_SECUR]);
  332.     dir->enableAuth = XmToggleButtonGetState(m_toggles[ABDIR_USEPASSWD]);
  333.     dir->savePassword = XmToggleButtonGetState(m_toggles[ABDIR_SAVEPASSWD]);
  334. }
  335.