C++程序  |  380行  |  7.75 KB

// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
 
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "../../include/javascript/JavaScript.h"
#include "../../include/javascript/IJavaScript.h"
#include "../../include/javascript/JS_Define.h"
#include "../../include/javascript/JS_Object.h"
#include "../../include/javascript/JS_Value.h"
#include "../../include/javascript/JS_EventHandler.h"
//#include "../include/JS_ResMgr.h"
#include "../../include/javascript/JS_Context.h"
#include "../../include/javascript/event.h"
#include "../../include/javascript/Field.h"

/* -------------------------- event -------------------------- */

BEGIN_JS_STATIC_CONST(CJS_Event)
END_JS_STATIC_CONST()

BEGIN_JS_STATIC_PROP(CJS_Event)
	JS_STATIC_PROP_ENTRY(change)
	JS_STATIC_PROP_ENTRY(changeEx)
	JS_STATIC_PROP_ENTRY(commitKey)
	JS_STATIC_PROP_ENTRY(fieldFull)
	JS_STATIC_PROP_ENTRY(keyDown)
	JS_STATIC_PROP_ENTRY(modifier)
	JS_STATIC_PROP_ENTRY(name)
	JS_STATIC_PROP_ENTRY(rc)
	JS_STATIC_PROP_ENTRY(richChange)
	JS_STATIC_PROP_ENTRY(richChangeEx)
	JS_STATIC_PROP_ENTRY(richValue)
	JS_STATIC_PROP_ENTRY(selEnd)
	JS_STATIC_PROP_ENTRY(selStart)
	JS_STATIC_PROP_ENTRY(shift)
	JS_STATIC_PROP_ENTRY(source)
	JS_STATIC_PROP_ENTRY(target)
	JS_STATIC_PROP_ENTRY(targetName)
	JS_STATIC_PROP_ENTRY(type)
	JS_STATIC_PROP_ENTRY(value)
	JS_STATIC_PROP_ENTRY(willCommit)
END_JS_STATIC_PROP()

BEGIN_JS_STATIC_METHOD(CJS_Event)  
END_JS_STATIC_METHOD()

IMPLEMENT_JS_CLASS(CJS_Event,event)

event::event(CJS_Object * pJsObject) : CJS_EmbedObj(pJsObject)                           
{
}

event::~event(void)
{
}

FX_BOOL event::change(OBJ_PROP_PARAMS)
{
	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	CFX_WideString &wChange = pEvent->Change();
	if (vp.IsSetting())
	{
		if (vp.GetType() == VT_string)
			vp >> wChange;
	}
	else
	{
		vp << wChange;
	}
	return TRUE;
}

FX_BOOL event::changeEx(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	vp << pEvent->ChangeEx();
	return TRUE;	
}

FX_BOOL event::commitKey(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	vp << pEvent->CommitKey();
	return TRUE;
}

FX_BOOL event::fieldFull(OBJ_PROP_PARAMS)
{	
	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	if (!vp.IsGetting() && wcscmp((const wchar_t*)pEvent->Name(),L"Keystroke") != 0)
		return FALSE;

	if (pEvent->FieldFull())
		vp << TRUE;
	else
		vp << FALSE;
	return TRUE;
}

FX_BOOL event::keyDown(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	if (pEvent->KeyDown())
		vp << TRUE;
	else
		vp << FALSE;
	return TRUE;
}

FX_BOOL event::modifier(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	if (pEvent->Modifier())
		vp << TRUE;
	else
		vp << FALSE;
	return TRUE;
}

FX_BOOL event::name(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	vp << pEvent->Name();
	return TRUE;
}

FX_BOOL event::rc(OBJ_PROP_PARAMS)
{
	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

    FX_BOOL &bRc = pEvent->Rc();
	if (vp.IsSetting())
	{
		vp>>bRc;
	}
	else
	{
		vp<<bRc;
	}
	return TRUE;
}

FX_BOOL event::richChange(OBJ_PROP_PARAMS)
{
	return TRUE;
	if (vp.IsSetting())
	{
	}
	else
	{
		;
	}
	return TRUE;
}

FX_BOOL event::richChangeEx(OBJ_PROP_PARAMS)
{
	return TRUE;
	if (vp.IsSetting())
	{
	}
	else
	{
		;
	}
	return TRUE;
}


FX_BOOL event::richValue(OBJ_PROP_PARAMS)
{
	return TRUE;
	if (vp.IsSetting())
	{
	}
	else
	{
		;
	}
	return TRUE;
}

FX_BOOL event::selEnd(OBJ_PROP_PARAMS)
{
	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	if (wcscmp((const wchar_t*)pEvent->Name(),L"Keystroke") != 0)
	{
		return TRUE;
	}

	int &iSelEnd = pEvent->SelEnd();
	if (vp.IsSetting())
	{
		vp >> iSelEnd;
	}
	else
	{
		vp << iSelEnd;
	}
	return TRUE;
}

FX_BOOL event::selStart(OBJ_PROP_PARAMS)
{	
	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	if (wcscmp((const wchar_t*)pEvent->Name(),L"Keystroke") != 0)
	{
		return TRUE;
	}
	int &iSelStart = pEvent->SelStart();
	if (vp.IsSetting())
	{
		vp >> iSelStart;
	}
	else
	{
		vp << iSelStart;
	}
	return TRUE;
}

FX_BOOL event::shift(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	if (pEvent->Shift())
		vp << TRUE;
	else
		vp << FALSE;
	return TRUE;
}

FX_BOOL event::source(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;	

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	vp << pEvent->Source()->GetJSObject();
	return TRUE;
}

FX_BOOL event::target(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	vp<<pEvent->Target_Field()->GetJSObject();
	return TRUE;
}

FX_BOOL event::targetName(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	vp << pEvent->TargetName();
	return TRUE;
}

FX_BOOL event::type(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	vp << pEvent->Type();
	return TRUE;
}

FX_BOOL event::value(OBJ_PROP_PARAMS)
{
	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	if (wcscmp((const wchar_t*)pEvent->Type(),L"Field") != 0)
		return FALSE;
	if(!pEvent->m_pValue)
		return FALSE;
	CFX_WideString & val = pEvent->Value();
	if (vp.IsSetting())
	{
		val = vp;
	}
	else
	{
		vp << val;
	}
	return TRUE;
}

FX_BOOL event::willCommit(OBJ_PROP_PARAMS)
{
	if (!vp.IsGetting())return FALSE;

	CJS_Context* pContext = (CJS_Context*)cc;
	ASSERT(pContext != NULL);
	CJS_EventHandler* pEvent = pContext->GetEventHandler();
	ASSERT(pEvent != NULL);

	if (pEvent->WillCommit())
		vp << TRUE;
	else
		vp << FALSE;
	return TRUE;
}