Okular

kjs_event.cpp
1 /*
2  SPDX-FileCopyrightText: 2018 Intevation GmbH <[email protected]>
3 
4  SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "kjs_event_p.h"
8 
9 #include <kjs/kjsarguments.h>
10 #include <kjs/kjsinterpreter.h>
11 #include <kjs/kjsobject.h>
12 #include <kjs/kjsprototype.h>
13 
14 #include "event_p.h"
15 #include "kjs_field_p.h"
16 
17 using namespace Okular;
18 
19 static KJSPrototype *g_eventProto;
20 
21 // Event.name
22 static KJSObject eventGetName(KJSContext *, void *object)
23 {
24  const Event *event = reinterpret_cast<Event *>(object);
25  return KJSString(event->name());
26 }
27 
28 // Event.type
29 static KJSObject eventGetType(KJSContext *, void *object)
30 {
31  const Event *event = reinterpret_cast<Event *>(object);
32  return KJSString(event->type());
33 }
34 
35 // Event.targetName (getter)
36 static KJSObject eventGetTargetName(KJSContext *, void *object)
37 {
38  const Event *event = reinterpret_cast<Event *>(object);
39  return KJSString(event->targetName());
40 }
41 
42 // Event.targetName (setter)
43 static void eventSetTargetName(KJSContext *ctx, void *object, KJSObject value)
44 {
45  Event *event = reinterpret_cast<Event *>(object);
46  event->setTargetName(value.toString(ctx));
47 }
48 
49 // Event.shift
50 static KJSObject eventGetShift(KJSContext *, void *object)
51 {
52  const Event *event = reinterpret_cast<Event *>(object);
53  return KJSBoolean(event->shiftModifier());
54 }
55 
56 // Event.source
57 static KJSObject eventGetSource(KJSContext *ctx, void *object)
58 {
59  const Event *event = reinterpret_cast<Event *>(object);
60  if (event->eventType() == Event::FieldCalculate) {
61  FormField *src = event->source();
62  if (src) {
63  return JSField::wrapField(ctx, src, event->sourcePage());
64  }
65  }
66  return KJSUndefined();
67 }
68 
69 // Event.target
70 static KJSObject eventGetTarget(KJSContext *ctx, void *object)
71 {
72  const Event *event = reinterpret_cast<Event *>(object);
73  switch (event->eventType()) {
74  case Event::FieldCalculate:
75  case Event::FieldFormat:
76  case Event::FieldKeystroke:
77  case Event::FieldFocus:
78  case Event::FieldValidate: {
79  FormField *target = static_cast<FormField *>(event->target());
80  if (target) {
81  return JSField::wrapField(ctx, target, event->targetPage());
82  }
83  break;
84  }
85  default: {
86  }
87  }
88  return KJSUndefined();
89 }
90 
91 // Event.value (getter)
92 static KJSObject eventGetValue(KJSContext *, void *object)
93 {
94  const Event *event = reinterpret_cast<Event *>(object);
95  return KJSString(event->value().toString());
96 }
97 
98 // Event.value (setter)
99 static void eventSetValue(KJSContext *ctx, void *object, KJSObject value)
100 {
101  Event *event = reinterpret_cast<Event *>(object);
102  event->setValue(QVariant(value.toString(ctx)));
103 }
104 
105 // Event.rc (getter)
106 static KJSObject eventGetReturnCode(KJSContext *, void *object)
107 {
108  const Event *event = reinterpret_cast<Event *>(object);
109  return KJSBoolean(event->returnCode());
110 }
111 
112 // Event.rc (setter)
113 static void eventSetReturnCode(KJSContext *ctx, void *object, KJSObject value)
114 {
115  Event *event = reinterpret_cast<Event *>(object);
116  event->setReturnCode(value.toBoolean(ctx));
117 }
118 
119 // Event.willCommit (getter)
120 static KJSObject eventGetWillCommit(KJSContext *, void *object)
121 {
122  const Event *event = reinterpret_cast<Event *>(object);
123  return KJSBoolean(event->willCommit());
124 }
125 
126 // Event.change (getter)
127 static KJSObject eventGetChange(KJSContext *, void *object)
128 {
129  const Event *event = reinterpret_cast<Event *>(object);
130  return KJSString(event->change());
131 }
132 
133 void JSEvent::initType(KJSContext *ctx)
134 {
135  static bool initialized = false;
136  if (initialized) {
137  return;
138  }
139  initialized = true;
140 
141  if (!g_eventProto) {
142  g_eventProto = new KJSPrototype();
143  }
144 
145  g_eventProto->defineProperty(ctx, QStringLiteral("name"), eventGetName);
146  g_eventProto->defineProperty(ctx, QStringLiteral("type"), eventGetType);
147  g_eventProto->defineProperty(ctx, QStringLiteral("targetName"), eventGetTargetName, eventSetTargetName);
148  g_eventProto->defineProperty(ctx, QStringLiteral("shift"), eventGetShift);
149  g_eventProto->defineProperty(ctx, QStringLiteral("source"), eventGetSource);
150  g_eventProto->defineProperty(ctx, QStringLiteral("target"), eventGetTarget);
151  g_eventProto->defineProperty(ctx, QStringLiteral("willCommit"), eventGetWillCommit);
152  g_eventProto->defineProperty(ctx, QStringLiteral("value"), eventGetValue, eventSetValue);
153  g_eventProto->defineProperty(ctx, QStringLiteral("rc"), eventGetReturnCode, eventSetReturnCode);
154  g_eventProto->defineProperty(ctx, QStringLiteral("change"), eventGetChange);
155 }
156 
157 KJSObject JSEvent::wrapEvent(KJSContext *ctx, Event *event)
158 {
159  return g_eventProto->constructObject(ctx, event);
160 }
bool toBoolean(KJSContext *ctx)
The base interface of a form field.
Definition: form.h:39
The documentation to the global Okular namespace.
Definition: action.h:16
void defineProperty(KJSContext *ctx, const QString &name, PropertyGetter getter, PropertySetter setter=nullptr)
AKONADI_CALENDAR_EXPORT KCalendarCore::Event::Ptr event(const Akonadi::Item &item)
KJSObject constructObject(KJSContext *ctx, void *internalValue=nullptr)
QString toString(KJSContext *ctx)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Thu Mar 23 2023 04:04:24 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.