home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / xfe / src / BookmarkFindDialog.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  7.1 KB  |  244 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.    BookmarkFindDialog.cpp -- dialog for finding bookmarks (duh).
  20.    Created: Chris Toshok <toshok@netscape.com>, 12-Mar-97.
  21.  */
  22.  
  23.  
  24.  
  25. #include "structs.h"
  26. #include "xp_core.h"
  27.  
  28. #include "BookmarkFrame.h"
  29. #include "BookmarkFindDialog.h"
  30. #include <Xm/XmP.h>
  31. #include <Xm/LabelG.h>
  32. #include <Xm/ToggleBG.h>
  33.  
  34. #include <Xfe/Xfe.h>
  35.  
  36. #include "xfe.h"
  37. #include "felocale.h"
  38.  
  39. /* we only have one instance of the bookmark find dialog up at at any given time. */
  40. static XFE_BookmarkFindDialog *theDialog = NULL;
  41.  
  42. XFE_BookmarkFindDialog::XFE_BookmarkFindDialog(Widget parent,
  43.                                                BM_FindInfo *info)
  44.     : XFE_Dialog(parent,
  45.                  "findDialog",
  46.                  TRUE,     // ok
  47.                  TRUE,     // cancel
  48.                  FALSE,    // help
  49.                  TRUE,     //apply
  50.                  TRUE,     //separator
  51.                  FALSE     // modal
  52.                  )
  53. {
  54.     Widget form;
  55.     Arg av[10];
  56.     int ac;
  57.     Widget findlabel, lookinlabel, helplabel;
  58.  
  59.     m_findInfo = info;
  60.  
  61.     form = XmCreateForm(m_chrome, "bmFindForm", NULL, 0);
  62.  
  63.     XtManageChild(form);
  64.  
  65.     XtAddCallback(m_chrome, XmNokCallback, find_cb, this);
  66.     XtAddCallback(m_chrome, XmNcancelCallback, cancel_cb, this);
  67.     XtAddCallback(m_chrome, XmNapplyCallback, clear_cb, this);
  68.  
  69.     findlabel = XtCreateManagedWidget("findLabel",
  70.                                       xmLabelGadgetClass,
  71.                                       form,
  72.                                       NULL, 0);
  73.  
  74.     m_findText = fe_CreateTextField(form, "findText", NULL, 0);
  75.     XtManageChild(m_findText);
  76.  
  77.     lookinlabel = XtCreateManagedWidget("lookinLabel",
  78.                                         xmLabelGadgetClass,
  79.                                         form,
  80.                                         NULL, 0);
  81.  
  82.     if (XfeWidth(findlabel) < XfeWidth(lookinlabel))
  83.         XtVaSetValues (findlabel, XmNwidth, XfeWidth(lookinlabel), 0);
  84.     else
  85.         XtVaSetValues (lookinlabel, XmNwidth, XfeWidth(findlabel), 0);
  86.  
  87.     ac = 0;
  88.     XtSetArg(av[ac], XmNindicatorType, XmN_OF_MANY); ac++;
  89.     m_nameToggle = XtCreateManagedWidget("nameToggle",
  90.                                          xmToggleButtonGadgetClass, form, av, ac);
  91.     m_locationToggle = XtCreateManagedWidget("locationToggle",
  92.                                              xmToggleButtonGadgetClass, form, av, ac);
  93.     m_descriptionToggle = XtCreateManagedWidget("descriptionToggle",
  94.                                                 xmToggleButtonGadgetClass, form, av, ac);
  95.     m_caseToggle = XtCreateManagedWidget("caseSensitive",
  96.                                          xmToggleButtonGadgetClass, form, av, ac);
  97.     m_wordToggle = XtCreateManagedWidget("wordToggle",
  98.                                          xmToggleButtonGadgetClass, form, av, ac);
  99.  
  100.     ac = 0;
  101.     XtSetArg(av[ac], XmNentryAlignment, XmALIGNMENT_CENTER); ac++;
  102.  
  103.     helplabel = XtCreateManagedWidget("helptext",
  104.                                       xmLabelGadgetClass, form, av, ac);
  105.  
  106.     /* Attachments */
  107.     XtVaSetValues(findlabel, XmNleftAttachment, XmATTACH_FORM,
  108.                   XmNtopAttachment, XmATTACH_FORM, 0);
  109.  
  110.     XtVaSetValues(m_findText, XmNleftAttachment, XmATTACH_WIDGET,
  111.                   XmNleftWidget, findlabel,
  112.                   XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
  113.                   XmNtopWidget, findlabel,
  114.                   XmNrightAttachment, XmATTACH_FORM, 0);
  115.     
  116.     XtVaSetValues(lookinlabel, XmNleftAttachment, XmATTACH_FORM,
  117.                   XmNtopAttachment, XmATTACH_WIDGET,
  118.                   XmNtopWidget, m_findText, 0);
  119.     
  120.     XtVaSetValues(m_nameToggle, XmNleftAttachment, XmATTACH_WIDGET,
  121.                   XmNleftWidget, lookinlabel,
  122.                   XmNtopAttachment, XmATTACH_WIDGET,
  123.                   XmNtopWidget, m_findText, 0);
  124.  
  125.     XtVaSetValues(m_locationToggle, XmNleftAttachment, XmATTACH_WIDGET,
  126.                   XmNleftWidget, m_nameToggle,
  127.                   XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
  128.                   XmNtopWidget, m_nameToggle, 0);
  129.  
  130.     XtVaSetValues(m_descriptionToggle, XmNleftAttachment, XmATTACH_WIDGET,
  131.                   XmNleftWidget, m_locationToggle,
  132.                   XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET,
  133.                   XmNtopWidget, m_nameToggle, 0);
  134.  
  135.     XtVaSetValues(m_caseToggle, XmNleftAttachment, XmATTACH_WIDGET,
  136.                   XmNleftWidget, lookinlabel,
  137.                   XmNtopAttachment, XmATTACH_WIDGET,
  138.                   XmNtopWidget, m_nameToggle, 0);
  139.  
  140.     XtVaSetValues(m_wordToggle, XmNleftAttachment, XmATTACH_WIDGET,
  141.                   XmNleftWidget, lookinlabel,
  142.                   XmNtopAttachment, XmATTACH_WIDGET,
  143.                   XmNtopWidget, m_caseToggle, 0);
  144.     
  145.     XtVaSetValues(helplabel, XmNleftAttachment, XmATTACH_FORM,
  146.                   XmNrightAttachment, XmATTACH_FORM,
  147.                   XmNtopAttachment, XmATTACH_WIDGET,
  148.                   XmNtopWidget, m_wordToggle, 0);
  149.  
  150.     XtVaSetValues (m_chrome, XmNinitialFocus, m_findText, 0);
  151.  
  152.     setValues();
  153. }
  154.  
  155. XFE_BookmarkFindDialog::~XFE_BookmarkFindDialog()
  156. {
  157.     theDialog = NULL;
  158. }
  159.  
  160. void
  161. XFE_BookmarkFindDialog::getValues()
  162. {
  163.   /* Should we free findInfo->textToFind */
  164.   XP_FREE(m_findInfo->textToFind);
  165.   m_findInfo->textToFind = fe_GetTextField(m_findText);
  166.  
  167.   XtVaGetValues(m_nameToggle, XmNset, &m_findInfo->checkName, 0);
  168.   XtVaGetValues(m_locationToggle, XmNset, &m_findInfo->checkLocation, 0);
  169.   XtVaGetValues(m_descriptionToggle, XmNset, &m_findInfo->checkDescription, 0);
  170.   XtVaGetValues(m_caseToggle, XmNset, &m_findInfo->matchCase, 0);
  171.   XtVaGetValues(m_wordToggle, XmNset, &m_findInfo->matchWholeWord, 0);
  172. }
  173.  
  174. void
  175. XFE_BookmarkFindDialog::setValues()
  176. {
  177.     fe_SetTextField(m_findText, m_findInfo->textToFind);
  178.  
  179.     XtVaSetValues(m_nameToggle, XmNset, m_findInfo->checkName, 0);
  180.     XtVaSetValues(m_locationToggle, XmNset, m_findInfo->checkLocation, 0);
  181.     XtVaSetValues(m_descriptionToggle, XmNset, m_findInfo->checkDescription, 0);
  182.     XtVaSetValues(m_caseToggle, XmNset, m_findInfo->matchCase, 0);
  183.     XtVaSetValues(m_wordToggle, XmNset, m_findInfo->matchWholeWord, 0);
  184. }
  185.  
  186. void
  187. XFE_BookmarkFindDialog::find()
  188. {
  189.     getValues();
  190.     hide();
  191.  
  192.     BM_DoFindBookmark(XFE_BookmarkFrame::main_bm_context, m_findInfo);
  193. }
  194.  
  195. void
  196. XFE_BookmarkFindDialog::clear()
  197. {
  198.     if (m_findInfo->textToFind)
  199.         m_findInfo->textToFind[0] = '\0';
  200.     fe_SetTextField(m_findText, m_findInfo->textToFind);
  201.     XmProcessTraversal (m_findText, XmTRAVERSE_CURRENT);
  202. }
  203.  
  204. void
  205. XFE_BookmarkFindDialog::cancel()
  206. {
  207.     hide();
  208. }
  209.  
  210. void
  211. XFE_BookmarkFindDialog::find_cb(Widget, XtPointer clientData, XtPointer)
  212. {
  213.     XFE_BookmarkFindDialog *obj = (XFE_BookmarkFindDialog*)clientData;
  214.  
  215.     obj->find();
  216. }
  217.  
  218. void
  219. XFE_BookmarkFindDialog::clear_cb(Widget, XtPointer clientData, XtPointer)
  220. {
  221.     XFE_BookmarkFindDialog *obj = (XFE_BookmarkFindDialog*)clientData;
  222.  
  223.     obj->clear();
  224. }
  225.  
  226. void
  227. XFE_BookmarkFindDialog::cancel_cb(Widget, XtPointer clientData, XtPointer)
  228. {
  229.     XFE_BookmarkFindDialog *obj = (XFE_BookmarkFindDialog*)clientData;
  230.  
  231.     obj->cancel();
  232. }
  233.  
  234. extern "C" void
  235. fe_showBMFindDialog(Widget parent, BM_FindInfo *info)
  236. {
  237.     if (!theDialog)
  238.         {
  239.             theDialog = new XFE_BookmarkFindDialog(parent, info);
  240.         }
  241.  
  242.     theDialog->show();
  243. }
  244.