You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
4.6 KiB
160 lines
4.6 KiB
/* |
|
SPDX-FileCopyrightText: 2018 Intevation GmbH <intevation@intevation.de> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#include "kjs_event_p.h" |
|
|
|
#include <kjs/kjsarguments.h> |
|
#include <kjs/kjsinterpreter.h> |
|
#include <kjs/kjsobject.h> |
|
#include <kjs/kjsprototype.h> |
|
|
|
#include "event_p.h" |
|
#include "kjs_field_p.h" |
|
|
|
using namespace Okular; |
|
|
|
static KJSPrototype *g_eventProto; |
|
|
|
// Event.name |
|
static KJSObject eventGetName(KJSContext *, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
return KJSString(event->name()); |
|
} |
|
|
|
// Event.type |
|
static KJSObject eventGetType(KJSContext *, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
return KJSString(event->type()); |
|
} |
|
|
|
// Event.targetName (getter) |
|
static KJSObject eventGetTargetName(KJSContext *, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
return KJSString(event->targetName()); |
|
} |
|
|
|
// Event.targetName (setter) |
|
static void eventSetTargetName(KJSContext *ctx, void *object, KJSObject value) |
|
{ |
|
Event *event = reinterpret_cast<Event *>(object); |
|
event->setTargetName(value.toString(ctx)); |
|
} |
|
|
|
// Event.shift |
|
static KJSObject eventGetShift(KJSContext *, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
return KJSBoolean(event->shiftModifier()); |
|
} |
|
|
|
// Event.source |
|
static KJSObject eventGetSource(KJSContext *ctx, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
if (event->eventType() == Event::FieldCalculate) { |
|
FormField *src = event->source(); |
|
if (src) { |
|
return JSField::wrapField(ctx, src, event->sourcePage()); |
|
} |
|
} |
|
return KJSUndefined(); |
|
} |
|
|
|
// Event.target |
|
static KJSObject eventGetTarget(KJSContext *ctx, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
switch (event->eventType()) { |
|
case Event::FieldCalculate: |
|
case Event::FieldFormat: |
|
case Event::FieldKeystroke: |
|
case Event::FieldFocus: |
|
case Event::FieldValidate: { |
|
FormField *target = static_cast<FormField *>(event->target()); |
|
if (target) { |
|
return JSField::wrapField(ctx, target, event->targetPage()); |
|
} |
|
break; |
|
} |
|
default: { |
|
} |
|
} |
|
return KJSUndefined(); |
|
} |
|
|
|
// Event.value (getter) |
|
static KJSObject eventGetValue(KJSContext *, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
return KJSString(event->value().toString()); |
|
} |
|
|
|
// Event.value (setter) |
|
static void eventSetValue(KJSContext *ctx, void *object, KJSObject value) |
|
{ |
|
Event *event = reinterpret_cast<Event *>(object); |
|
event->setValue(QVariant(value.toString(ctx))); |
|
} |
|
|
|
// Event.rc (getter) |
|
static KJSObject eventGetReturnCode(KJSContext *, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
return KJSBoolean(event->returnCode()); |
|
} |
|
|
|
// Event.rc (setter) |
|
static void eventSetReturnCode(KJSContext *ctx, void *object, KJSObject value) |
|
{ |
|
Event *event = reinterpret_cast<Event *>(object); |
|
event->setReturnCode(value.toBoolean(ctx)); |
|
} |
|
|
|
// Event.willCommit (getter) |
|
static KJSObject eventGetWillCommit(KJSContext *, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
return KJSBoolean(event->willCommit()); |
|
} |
|
|
|
// Event.change (getter) |
|
static KJSObject eventGetChange(KJSContext *, void *object) |
|
{ |
|
const Event *event = reinterpret_cast<Event *>(object); |
|
return KJSString(event->change()); |
|
} |
|
|
|
void JSEvent::initType(KJSContext *ctx) |
|
{ |
|
static bool initialized = false; |
|
if (initialized) { |
|
return; |
|
} |
|
initialized = true; |
|
|
|
if (!g_eventProto) { |
|
g_eventProto = new KJSPrototype(); |
|
} |
|
|
|
g_eventProto->defineProperty(ctx, QStringLiteral("name"), eventGetName); |
|
g_eventProto->defineProperty(ctx, QStringLiteral("type"), eventGetType); |
|
g_eventProto->defineProperty(ctx, QStringLiteral("targetName"), eventGetTargetName, eventSetTargetName); |
|
g_eventProto->defineProperty(ctx, QStringLiteral("shift"), eventGetShift); |
|
g_eventProto->defineProperty(ctx, QStringLiteral("source"), eventGetSource); |
|
g_eventProto->defineProperty(ctx, QStringLiteral("target"), eventGetTarget); |
|
g_eventProto->defineProperty(ctx, QStringLiteral("willCommit"), eventGetWillCommit); |
|
g_eventProto->defineProperty(ctx, QStringLiteral("value"), eventGetValue, eventSetValue); |
|
g_eventProto->defineProperty(ctx, QStringLiteral("rc"), eventGetReturnCode, eventSetReturnCode); |
|
g_eventProto->defineProperty(ctx, QStringLiteral("change"), eventGetChange); |
|
} |
|
|
|
KJSObject JSEvent::wrapEvent(KJSContext *ctx, Event *event) |
|
{ |
|
return g_eventProto->constructObject(ctx, event); |
|
}
|
|
|