/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla XForms support. * * The Initial Developer of the Original Code is * IBM Corporation. * Portions created by the Initial Developer are Copyright (C) 2004 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Brian Ryner * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsIXFormsModelElement.idl" interface nsIXFormsControl; interface nsISchemaType; interface nsIInstanceElementPrivate; interface nsIDOMNode; interface nsISchemaBuiltinType; /** * Private interface implemented by the model element for other * elements to use. */ [uuid(3d94c3a4-e8d4-466c-a753-3cc65a338954)] interface nsIModelElementPrivate : nsIXFormsModelElement { /** * Called by form control elements when they are bound to or unbound from * this model. These form controls will be refreshed when refresh() is * called on the model. */ void addFormControl(in nsIXFormsControl control, in nsIXFormsControl parent); void removeFormControl(in nsIXFormsControl control); /** * Notification that an instance element has started or finished loading * its instance data. Model construction cannot complete until all of * the instances have loaded their data. */ void instanceLoadStarted(); void instanceLoadFinished(in boolean success); /** * Locate the instance element child with the given id. */ nsIInstanceElementPrivate findInstanceElement(in AString id); /** * Set the value of an instance node. * * If doRefresh is true, the function will request xforms-recalculate, * xforms-revalidate, and xforms-refresh to be dispatched to the model. * * @param instanceNode The node to set the value for * @param nodeValue The value to set * @param doRefresh Request value-changed event sequence * @param nodeChanged Return whether the node was actually changed */ void setNodeValue(in nsIDOMNode instanceNode, in AString nodeValue, in boolean doRefresh, out boolean nodeChanged); /** * Insert a set of nodes underneath an instance node. * * If doRebuild is true, the function will request * xforms-rebuild, xforms-recalculate, xforms-revalidate, and * xforms-refresh to be dispatched to the model. * * @param node The instance node * @param content Node that holds the contents to insert under * the instance node * @param doRebuild Request rebuild event sequence */ void setNodeContent(in nsIDOMNode node, in nsIDOMNode content, in boolean doRebuild); /** * Validates the instance node against the schemas loaded by the model. */ PRBool validateNode(in nsIDOMNode aInstanceNode); const unsigned short SUBMIT_SERIALIZE_NODE = 1; const unsigned short SUBMIT_SKIP_NODE = 2; const unsigned short SUBMIT_ABORT_SUBMISSION = 3; /** * Handles an instance data node and returns one of the above 3 values. */ unsigned short handleInstanceDataNode(in nsIDOMNode aInstanceDataNode); /** * Set MIP states for given control bound to the given bound node. * @param aControl The control * @param aBoundNode The node the control is bound to */ void setStates(in nsIXFormsControl aControl, in nsIDOMNode aBoundNode); /** * Add an instance element to the model's instance list * @param aInstanceElement The instance element to add to the list */ void addInstanceElement(in nsIInstanceElementPrivate aInstanceElement); /** * Remove an instance element from the model's instance list * @param aInstanceElement The instance element to remove from the list */ void removeInstanceElement(in nsIInstanceElementPrivate aInstanceElement); /** * This attribute is set when the model's instance was lazy authored */ readonly attribute boolean lazyAuthored; /** * This attribute is set when the model handled xforms-ready event */ readonly attribute boolean isReady; /** * Retrieves the type for an instance data node * * @param aInstanceData The instance data node * @param aType The type of the node * @param aNSURI The namespace of the type */ void getTypeFromNode(in nsIDOMNode aInstanceData, out AString aType, out AString aNSUri); /** * Notification that all of the external message loads have finished loading. * Model contstruction cannot complete until all of the external messages * have loaded their data. */ void messageLoadFinished(); /** * Request an xforms-rebuild. * * If a previous request (of this or one of the 3 following events) is * already being handled, the event will be queued, and sent after that. If * multiple events are queued, they will be dispatched FIFO order. */ void requestRebuild(); /** * Request an xforms-recalculate */ void requestRecalculate(); /** * Request an xforms-revalidate */ void requestRevalidate(); /** * Request an xforms-refresh */ void requestRefresh(); /** * Returns true when the model has been notified that the DOMContentLoaded * event has been fired on the XForms document. */ readonly attribute boolean hasDOMContentFired; /** * Force rebinding (and refreshing) of a control. Also handles rebinding and * refreshing of child controls, if necessary. * * @param control The control to rebind. */ void forceRebind(in nsIXFormsControl control); /** * Determine the type for a form control based on the schema included by * this model. */ nsISchemaType getTypeForControl(in nsIXFormsControl control); /** * Return builtin type name for a form control based on the schema included by * this model. */ AString getBuiltinTypeNameForControl(in nsIXFormsControl control); /** * This function takes an instance data node, finds the type bound to it, and * returns the separated out type and namespace URI. If no type is set for * the node, then it returns the defaults: "http://www.w3.org/2001/XMLSchema" * and "string" */ void getTypeAndNSFromNode(in nsIDOMNode instancenode, out AString type, out AString namespaceURI); /** * Retrieves the list of datatypes that the original type is derived from * or is an extension of * * @param aType The original type * @param aNamespace The original namespace URI * @param aTypeList The returned space-delimited list * * Returns NS_ERROR_XFORMS_UNION_TYPE if a schema union datatype was * encounterd while trying to build the type list. Will also return an * error if we encounter a complex type that comes from complex content * extension or restriction. */ void getDerivedTypeList(in AString aType, in AString aNamespace, out AString aTypeList); /** * Retrieves the primative builtin type that the original type derives from * * @param aType The original type * @param aBuiltinType The returned builtin type (defined in nsISchema) * * Returns NS_ERROR_XFORMS_UNION_TYPE if a schema union datatype was * encounterd while trying to build the type list. Will also return an * error if we encounter a complex type that comes from complex content * extension or restriction. */ void GetRootBuiltinType(in nsISchemaType aType, out unsigned short aBuiltinType); };