зеркало из https://github.com/mozilla/pjs.git
297 строки
8.3 KiB
C
297 строки
8.3 KiB
C
|
/* -*- Mode: C++; tab-width: 8; 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.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
gnomeform.c --- stub functions dealing with front-end
|
||
|
handling of form elements.
|
||
|
*/
|
||
|
|
||
|
#include "g-util.h"
|
||
|
#include "g-html-view.h"
|
||
|
#include "gnome-form.h"
|
||
|
|
||
|
/*
|
||
|
** FE_GetFormElementInfo - create the FE representation of a form
|
||
|
** element.
|
||
|
**
|
||
|
** Note : This method can be called more than once for the same front
|
||
|
** end form element.
|
||
|
**
|
||
|
** In those cases we don't reallocate the FEData*, and also don't
|
||
|
** recreate the widget, but we do set the form and context pointers in
|
||
|
** FEData, and we call the get_size method.
|
||
|
**
|
||
|
** Two cases I know of where layout calls this function more than once
|
||
|
** are: 1) when laying out a table with form elements in it -- layout
|
||
|
** moves our fe data over to a new LO_FormElementStruct. So, you
|
||
|
** should always sync up pointers to the LO_FormElementStruct
|
||
|
** contained in your fe data. 2) when we're on a page with frames in
|
||
|
** it and the user goes back and forth. In this case, the context is
|
||
|
** different, so you always need to sync that up as well.
|
||
|
**
|
||
|
** Also, layout could have told us to hide the widget without freeing
|
||
|
** our fe_data* (this happens when hide is TRUE in
|
||
|
** FE_GetFormElementValue.) In this case, we need to do anything
|
||
|
** necessary to show the widget again.
|
||
|
**
|
||
|
** Also, this routine is responsible for setting the initial value of
|
||
|
** the form element.
|
||
|
**
|
||
|
** yuck. :)
|
||
|
*/
|
||
|
void
|
||
|
GNOMEFE_GetFormElementInfo (MWContext * context,
|
||
|
LO_FormElementStruct * form_element)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_get_form_element_info(view,
|
||
|
form_element);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
** FE_GetFormElementValue - copy the value inside the fe
|
||
|
** representation into the FormElementStruct.
|
||
|
**
|
||
|
** if hide is TRUE, hide the form element after doing the copy. In
|
||
|
** the XFE, hide is taken to mean "delete" - so, if hide is TRUE, the
|
||
|
** XFE deletes the form element widget. This is not strictly
|
||
|
** necessary, as you are guaranteed to have FE_FreeFormElement if the
|
||
|
** form element is *really* going away.
|
||
|
**
|
||
|
** But, given that this is called with hide == TRUE in the face of
|
||
|
** going back and forth in frame documents, it's probably safer to
|
||
|
** always delete the widget when hide == TRUE, as the widget's parent
|
||
|
** is destroyed and recreated.
|
||
|
*/
|
||
|
void
|
||
|
GNOMEFE_GetFormElementValue (MWContext * context,
|
||
|
LO_FormElementStruct * form_element,
|
||
|
XP_Bool hide)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_get_form_element_value(view,
|
||
|
form_element,
|
||
|
hide);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** FE_ResetFormElement - reset the value of the form element to the default
|
||
|
** value stored in the LO_FormElementStruct.
|
||
|
*/
|
||
|
void
|
||
|
GNOMEFE_ResetFormElement (MWContext * context,
|
||
|
LO_FormElementStruct * form_element)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_reset_form_element(view,
|
||
|
form_element);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** FE_SetFormElementToggle - set the toggle or radio button's state to
|
||
|
** the toggle parameter.
|
||
|
**
|
||
|
** only called on CHECKBOX and RADIO form elements.
|
||
|
*/
|
||
|
void
|
||
|
GNOMEFE_SetFormElementToggle (MWContext * context,
|
||
|
LO_FormElementStruct * form_element,
|
||
|
XP_Bool toggle)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_set_form_element_toggle(view,
|
||
|
form_element,
|
||
|
toggle);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
GNOMEFE_DisplayFormElement (MWContext * context,
|
||
|
int iLocation,
|
||
|
LO_FormElementStruct * form_element)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_display_form_element(view,
|
||
|
form_element);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
** FE_FreeFormElement - free up all memory associated with the front
|
||
|
** end representation for this form element.
|
||
|
*/
|
||
|
void
|
||
|
FE_FreeFormElement(MWContext *context,
|
||
|
LO_FormElementData *form)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_free_form_element(view,
|
||
|
form);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** FE_BlurInputElement - force input to be defocused from the given
|
||
|
** element. It's ok if the element didn't have the input focus.
|
||
|
*/
|
||
|
void
|
||
|
FE_BlurInputElement(MWContext *context,
|
||
|
LO_Element *element)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_blur_input_element(view,
|
||
|
(LO_FormElementStruct*)element);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** FE_FocusInputElement - force input to be focused on the given element.
|
||
|
** It's ok if the element already has the input focus.
|
||
|
*/
|
||
|
void
|
||
|
FE_FocusInputElement(MWContext *context,
|
||
|
LO_Element *element)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_focus_input_element(view,
|
||
|
(LO_FormElementStruct*)element);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** FE_SelectInputElement - select the contents of a form element.
|
||
|
**
|
||
|
** Only called on TEXT, TEXTAREA, PASSWORD, and FILE form elements (anything
|
||
|
** with text in it.)
|
||
|
**
|
||
|
** This function should select the entire text contained in the FE widget.
|
||
|
*/
|
||
|
void
|
||
|
FE_SelectInputElement(MWContext *context,
|
||
|
LO_Element *element)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_select_input_element(view,
|
||
|
(LO_FormElementStruct*)element);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** FE_ClickInputElement - Simulate a click on a form element.
|
||
|
**
|
||
|
** Note: This function also handles clicks on HREF anchored LO_IMAGE
|
||
|
** and LO_TEXT LO_Elements. In these cases, this function should
|
||
|
** simulate a user clicking on the LO_Element in question.
|
||
|
*/
|
||
|
void
|
||
|
FE_ClickInputElement(MWContext *context,
|
||
|
LO_Element *element)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_click_input_element(view,
|
||
|
(LO_FormElementStruct*)element);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** FE_ChangeInputElement - handle change in form element value(s)
|
||
|
**
|
||
|
** This function should update the front end value for a given form
|
||
|
** element, including (in the case of TEXT-like elements) just the
|
||
|
** value, or (in the case of SELECT elements) both the list of
|
||
|
** allowable values as well as the selected value.
|
||
|
*/
|
||
|
void
|
||
|
FE_ChangeInputElement(MWContext *context,
|
||
|
LO_Element *element)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_change_input_element(view,
|
||
|
(LO_FormElementStruct*)element);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
** FE_SubmitInputElement -
|
||
|
**
|
||
|
** Tell the FE that a form is being submitted without a UI gesture indicating
|
||
|
** that fact, i.e., in a Mocha-automated fashion ("document.myform.submit()").
|
||
|
** The FE is responsible for emulating whatever happens when the user hits the
|
||
|
** submit button, or auto-submits by typing Enter in a single-field form.
|
||
|
*/
|
||
|
void
|
||
|
FE_SubmitInputElement(MWContext *context,
|
||
|
LO_Element *element)
|
||
|
{
|
||
|
MozHTMLView *view = find_html_view(context);
|
||
|
|
||
|
XP_ASSERT(view);
|
||
|
if (!view) return; /* XXX */
|
||
|
|
||
|
moz_html_view_submit_input_element(view,
|
||
|
(LO_FormElementStruct*)element);
|
||
|
}
|
||
|
|
||
|
int
|
||
|
FE_ClickAnyElement(MWContext *context,
|
||
|
LO_Element *element,
|
||
|
int haveXY,
|
||
|
int32 xx,
|
||
|
int32 yy)
|
||
|
{
|
||
|
printf ("GNOMEFE_ClickAnyElement\n");
|
||
|
}
|