188 lines
5.9 KiB
C++
188 lines
5.9 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
/*
|
|
AdvSearchDialog.cpp -- dialog for specifying options to message search
|
|
Created: Akkana Peck <akkana@netscape.com>, 21-Oct-97.
|
|
*/
|
|
|
|
|
|
|
|
#include "AdvSearchDialog.h"
|
|
|
|
#include <Xm/Form.h>
|
|
#include <Xm/Frame.h>
|
|
#include <Xm/RowColumn.h>
|
|
#include <Xm/LabelG.h>
|
|
#include <Xm/ToggleBG.h>
|
|
|
|
#include "prefapi.h"
|
|
|
|
// we will need this in the post() method.
|
|
extern "C" void fe_EventLoop();
|
|
|
|
XFE_AdvSearchDialog::XFE_AdvSearchDialog(Widget parent, char *name,
|
|
XFE_Frame *frame)
|
|
: XFE_Dialog(parent,
|
|
name,
|
|
TRUE, // ok
|
|
TRUE, // cancel
|
|
FALSE, // help
|
|
FALSE, // apply
|
|
TRUE, // separator
|
|
TRUE // modal
|
|
)
|
|
{
|
|
m_frame = frame;
|
|
|
|
Widget form = XtCreateManagedWidget("form",
|
|
xmFormWidgetClass,
|
|
m_chrome,
|
|
NULL, 0);
|
|
|
|
m_subfolderToggle = XtVaCreateManagedWidget("subfolderToggle",
|
|
xmToggleButtonGadgetClass,
|
|
form,
|
|
XmNleftAttachment,
|
|
XmATTACH_FORM,
|
|
XmNtopAttachment,
|
|
XmATTACH_FORM,
|
|
0);
|
|
XtAddCallback(m_subfolderToggle, XmNvalueChangedCallback, toggle_cb, this);
|
|
|
|
Widget framew = XtVaCreateManagedWidget("frame",
|
|
xmFrameWidgetClass,
|
|
form,
|
|
XmNleftAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, m_subfolderToggle,
|
|
0);
|
|
XtVaCreateManagedWidget("whenOnlineSearch",
|
|
xmLabelGadgetClass,
|
|
framew,
|
|
XmNchildType, XmFRAME_TITLE_CHILD,
|
|
0);
|
|
Arg av[3];
|
|
int ac=0;
|
|
XtSetArg(av[ac], XmNchildType, XmFRAME_WORKAREA_CHILD); ++ac;
|
|
XtSetArg(av[ac], XmNorientation, XmVERTICAL); ++ac;
|
|
Widget rc = XmCreateRadioBox(framew, "radiobox", av, ac);
|
|
|
|
m_searchLocalToggle = XtVaCreateManagedWidget("searchLocalToggle",
|
|
xmToggleButtonGadgetClass,
|
|
rc,
|
|
0);
|
|
m_searchServerToggle = XtVaCreateManagedWidget("searchServerToggle",
|
|
xmToggleButtonGadgetClass,
|
|
rc,
|
|
0);
|
|
XtManageChild(rc);
|
|
|
|
XtAddCallback(m_chrome, XmNokCallback, ok_cb, this);
|
|
XtAddCallback(m_chrome, XmNcancelCallback, cancel_cb, this);
|
|
}
|
|
|
|
XFE_AdvSearchDialog::~XFE_AdvSearchDialog()
|
|
{
|
|
// nothing needed (that I'm aware of) yet.
|
|
}
|
|
|
|
XP_Bool
|
|
XFE_AdvSearchDialog::post()
|
|
{
|
|
// Set the toggle button states:
|
|
// Note that we're assuming here that XP_Bool is the same as Boolean!
|
|
XP_Bool searchSubfolders, searchServer;
|
|
PREF_GetBoolPref("mailnews.searchSubFolders", &searchSubfolders);
|
|
XmToggleButtonGadgetSetState(m_subfolderToggle, searchSubfolders, FALSE);
|
|
PREF_GetBoolPref("mailnews.searchServer", &searchServer);
|
|
if (searchServer)
|
|
XmToggleButtonGadgetSetState(m_searchServerToggle, TRUE, TRUE);
|
|
else
|
|
XmToggleButtonGadgetSetState(m_searchLocalToggle, TRUE, TRUE);
|
|
|
|
m_doneWithLoop = False;
|
|
|
|
XtVaSetValues(m_chrome,
|
|
XmNdeleteResponse, XmUNMAP,
|
|
NULL);
|
|
|
|
show();
|
|
|
|
while(!m_doneWithLoop)
|
|
fe_EventLoop();
|
|
|
|
return m_retVal;
|
|
}
|
|
|
|
void
|
|
XFE_AdvSearchDialog::ok()
|
|
{
|
|
m_doneWithLoop = True;
|
|
m_retVal = True;
|
|
|
|
Boolean searchSubfolders = XmToggleButtonGadgetGetState(m_subfolderToggle);
|
|
Boolean searchServer = XmToggleButtonGadgetGetState(m_searchServerToggle);
|
|
|
|
// Note that we're assuming here that XP_Bool is the same as Boolean!
|
|
PREF_SetBoolPref("mailnews.searchSubFolders", searchSubfolders);
|
|
PREF_SetBoolPref("mailnews.searchServer", searchServer);
|
|
|
|
hide();
|
|
}
|
|
|
|
void
|
|
XFE_AdvSearchDialog::cancel()
|
|
{
|
|
m_doneWithLoop = True;
|
|
m_retVal = False;
|
|
|
|
hide();
|
|
}
|
|
|
|
void
|
|
XFE_AdvSearchDialog::toggle()
|
|
{
|
|
// do something with value of m_subfolderToggle here
|
|
}
|
|
|
|
void
|
|
XFE_AdvSearchDialog::toggle_cb(Widget, XtPointer clientData, XtPointer)
|
|
{
|
|
XFE_AdvSearchDialog *obj = (XFE_AdvSearchDialog*)clientData;
|
|
|
|
obj->toggle();
|
|
}
|
|
|
|
void
|
|
XFE_AdvSearchDialog::ok_cb(Widget, XtPointer clientData, XtPointer)
|
|
{
|
|
XFE_AdvSearchDialog *obj = (XFE_AdvSearchDialog*)clientData;
|
|
|
|
obj->ok();
|
|
}
|
|
|
|
void
|
|
XFE_AdvSearchDialog::cancel_cb(Widget, XtPointer clientData, XtPointer)
|
|
{
|
|
XFE_AdvSearchDialog *obj = (XFE_AdvSearchDialog*)clientData;
|
|
|
|
obj->cancel();
|
|
}
|
|
|