/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/



// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_xmloff.hxx"
#include "formevents.hxx"
#include "xmloff/xmlnmspe.hxx"
#include <xmloff/xmlevent.hxx>

//.........................................................................
namespace xmloff
{
//.........................................................................

	//=====================================================================
	//= event translation table
	//=====================================================================
	static const XMLEventNameTranslation aEventTranslations[] =
	{
		{ "XApproveActionListener::approveAction",		XML_NAMESPACE_FORM, "approveaction" }, // "on-approveaction"
		{ "XActionListener::actionPerformed",			XML_NAMESPACE_FORM, "performaction" }, // "on-performaction"
		{ "XChangeListener::changed",					XML_NAMESPACE_DOM, "change" }, // "on-change"
		{ "XTextListener::textChanged",					XML_NAMESPACE_FORM, "textchange" }, // "on-textchange"
		{ "XItemListener::itemStateChanged",			XML_NAMESPACE_FORM, "itemstatechange" }, // "on-itemstatechange"
		{ "XFocusListener::focusGained",				XML_NAMESPACE_DOM, "DOMFocusIn" }, // "on-focus"
		{ "XFocusListener::focusLost",					XML_NAMESPACE_DOM, "DOMFocusOut" }, // "on-blur"
		{ "XKeyListener::keyPressed",					XML_NAMESPACE_DOM, "keydown" }, // "on-keydown"
		{ "XKeyListener::keyReleased",					XML_NAMESPACE_DOM, "keyup" }, // "on-keyup"
		{ "XMouseListener::mouseEntered",				XML_NAMESPACE_DOM, "mouseover" }, // "on-mouseover"
		{ "XMouseMotionListener::mouseDragged",			XML_NAMESPACE_FORM, "mousedrag" }, // "on-mousedrag"
		{ "XMouseMotionListener::mouseMoved",			XML_NAMESPACE_DOM, "mousemove" }, // "on-mousemove"
		{ "XMouseListener::mousePressed",				XML_NAMESPACE_DOM, "mousedown" }, // "on-mousedown"
		{ "XMouseListener::mouseReleased",				XML_NAMESPACE_DOM, "mouseup" }, // "on-mouseup"
		{ "XMouseListener::mouseExited",				XML_NAMESPACE_DOM, "mouseout" }, // "on-mouseout"
		{ "XResetListener::approveReset",				XML_NAMESPACE_FORM, "approvereset" }, // "on-approvereset"
		{ "XResetListener::resetted",					XML_NAMESPACE_DOM, "reset" }, // "on-reset"
		{ "XSubmitListener::approveSubmit",				XML_NAMESPACE_DOM, "submit" }, // "on-submit"
		{ "XUpdateListener::approveUpdate",				XML_NAMESPACE_FORM, "approveupdate" }, // "on-approveupdate"
		{ "XUpdateListener::updated",					XML_NAMESPACE_FORM, "update" }, // "on-update"
		{ "XLoadListener::loaded",						XML_NAMESPACE_DOM, "load" }, // "on-load"
		{ "XLoadListener::reloading",					XML_NAMESPACE_FORM, "startreload" }, // "on-startreload"
		{ "XLoadListener::reloaded",					XML_NAMESPACE_FORM, "reload" }, // "on-reload"
		{ "XLoadListener::unloading",					XML_NAMESPACE_FORM, "startunload" }, // "on-startunload"
		{ "XLoadListener::unloaded",					XML_NAMESPACE_DOM, "unload" }, // "on-unload"
		{ "XConfirmDeleteListener::confirmDelete",		XML_NAMESPACE_FORM, "confirmdelete" }, // "on-confirmdelete"
		{ "XRowSetApproveListener::approveRowChange",	XML_NAMESPACE_FORM, "approverowchange" }, // "on-approverowchange"
		{ "XRowSetListener::rowChanged",				XML_NAMESPACE_FORM, "rowchange" }, // "on-rowchange"
		{ "XRowSetApproveListener::approveCursorMove",	XML_NAMESPACE_FORM, "approvecursormove" }, // "on-approvecursormove"
		{ "XRowSetListener::cursorMoved",				XML_NAMESPACE_FORM, "cursormove" }, // "on-cursormove"
		{ "XDatabaseParameterListener::approveParameter",XML_NAMESPACE_FORM, "supplyparameter" }, // "on-supplyparameter"
		{ "XSQLErrorListener::errorOccured",			XML_NAMESPACE_DOM, "error" }, // "on-error"
		{ "XAdjustmentListener::adjustmentValueChanged",XML_NAMESPACE_FORM, "adjust" }, // "on-adjust"
		{ 0, 0, 0 }
	};

	const XMLEventNameTranslation* g_pFormsEventTranslation = aEventTranslations;

//.........................................................................
}	// namespace xmloff
//.........................................................................
