File indexing completed on 2024-05-12 04:33:31

0001 /*
0002     SPDX-FileCopyrightText: 2018 Intevation GmbH <intevation@intevation.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "event_p.h"
0008 #include <QApplication>
0009 
0010 #include "../form.h"
0011 
0012 using namespace Okular;
0013 
0014 class Event::Private
0015 {
0016 public:
0017     explicit Private(EventType eventType)
0018         : m_target(nullptr)
0019         , m_targetPage(nullptr)
0020         , m_source(nullptr)
0021         , m_sourcePage(nullptr)
0022         , m_eventType(eventType)
0023         , m_returnCode(false)
0024         , m_shiftModifier(false)
0025         , m_willCommit(false)
0026     {
0027     }
0028 
0029     void *m_target;
0030     Page *m_targetPage;
0031     FormField *m_source;
0032     Page *m_sourcePage;
0033     EventType m_eventType;
0034     QString m_targetName;
0035     QVariant m_value;
0036     bool m_returnCode;
0037     bool m_shiftModifier;
0038     bool m_willCommit;
0039     QString m_change;
0040 };
0041 
0042 Event::Event()
0043     : d(new Private(UnknownEvent))
0044 {
0045 }
0046 
0047 Event::Event(EventType eventType)
0048     : d(new Private(eventType))
0049 {
0050 }
0051 
0052 Event::EventType Event::eventType() const
0053 {
0054     return d->m_eventType;
0055 }
0056 
0057 QString Event::name() const
0058 {
0059     switch (d->m_eventType) {
0060     case FieldCalculate:
0061         return QStringLiteral("Calculate");
0062     case FieldFormat:
0063         return QStringLiteral("Format");
0064     case FieldKeystroke:
0065         return QStringLiteral("Keystroke");
0066     case FieldFocus:
0067         return QStringLiteral("Focus");
0068     case FieldValidate:
0069         return QStringLiteral("Validate");
0070     case FieldMouseUp:
0071         return QStringLiteral("MouseUp");
0072     case UnknownEvent:
0073     default:
0074         return QStringLiteral("Unknown");
0075     }
0076 }
0077 
0078 QString Event::type() const
0079 {
0080     switch (d->m_eventType) {
0081     case FieldCalculate:
0082     case FieldFormat:
0083     case FieldKeystroke:
0084     case FieldFocus:
0085     case FieldValidate:
0086     case FieldMouseUp:
0087         return QStringLiteral("Field");
0088     case UnknownEvent:
0089     default:
0090         return QStringLiteral("Unknown");
0091     }
0092 }
0093 
0094 QString Event::targetName() const
0095 {
0096     if (!d->m_targetName.isNull()) {
0097         return d->m_targetName;
0098     }
0099 
0100     return QStringLiteral("JavaScript for: ") + type() + name();
0101 }
0102 
0103 void Event::setTargetName(const QString &val)
0104 {
0105     d->m_targetName = val;
0106 }
0107 
0108 FormField *Event::source() const
0109 {
0110     return d->m_source;
0111 }
0112 
0113 void Event::setSource(FormField *val)
0114 {
0115     d->m_source = val;
0116 }
0117 
0118 Page *Event::sourcePage() const
0119 {
0120     return d->m_sourcePage;
0121 }
0122 
0123 void Event::setSourcePage(Page *val)
0124 {
0125     d->m_sourcePage = val;
0126 }
0127 
0128 void *Event::target() const
0129 {
0130     return d->m_target;
0131 }
0132 
0133 void Event::setTarget(void *target)
0134 {
0135     d->m_target = target;
0136 }
0137 
0138 Page *Event::targetPage() const
0139 {
0140     return d->m_targetPage;
0141 }
0142 
0143 void Event::setTargetPage(Page *val)
0144 {
0145     d->m_targetPage = val;
0146 }
0147 
0148 QVariant Event::value() const
0149 {
0150     return d->m_value;
0151 }
0152 
0153 void Event::setValue(const QVariant &val)
0154 {
0155     d->m_value = val;
0156 }
0157 
0158 bool Event::returnCode() const
0159 {
0160     return d->m_returnCode;
0161 }
0162 
0163 void Event::setReturnCode(bool returnCode)
0164 {
0165     d->m_returnCode = returnCode;
0166 }
0167 
0168 bool Event::shiftModifier() const
0169 {
0170     return d->m_shiftModifier;
0171 }
0172 
0173 void Event::setShiftModifier(bool shiftModifier)
0174 {
0175     d->m_shiftModifier = shiftModifier;
0176 }
0177 
0178 bool Event::willCommit() const
0179 {
0180     return d->m_willCommit;
0181 }
0182 
0183 void Event::setWillCommit(bool willCommit)
0184 {
0185     d->m_willCommit = willCommit;
0186 }
0187 
0188 QString Event::change() const
0189 {
0190     return d->m_change;
0191 }
0192 
0193 void Event::setChange(const QString &change)
0194 {
0195     d->m_change = change;
0196 }
0197 
0198 // static
0199 std::shared_ptr<Event> Event::createFormCalculateEvent(FormField *target, Page *targetPage, FormField *source, Page *sourcePage, const QString &targetName)
0200 {
0201     std::shared_ptr<Event> ret(new Event(Event::FieldCalculate));
0202     ret->setSource(source);
0203     ret->setSourcePage(sourcePage);
0204     ret->setTarget(target);
0205     ret->setTargetPage(targetPage);
0206     ret->setTargetName(targetName);
0207 
0208     FormFieldText *fft = dynamic_cast<FormFieldText *>(target);
0209     if (fft) {
0210         ret->setValue(QVariant(fft->text()));
0211     }
0212     return ret;
0213 }
0214 
0215 // static
0216 std::shared_ptr<Event> Event::createFormatEvent(FormField *target, Page *targetPage, const QString &targetName)
0217 {
0218     std::shared_ptr<Event> ret(new Event(Event::FieldFormat));
0219     ret->setTarget(target);
0220     ret->setTargetPage(targetPage);
0221     ret->setTargetName(targetName);
0222 
0223     FormFieldText *fft = dynamic_cast<FormFieldText *>(target);
0224     if (fft) {
0225         ret->setValue(QVariant(fft->text()));
0226     }
0227     return ret;
0228 }
0229 
0230 // static
0231 std::shared_ptr<Event> Event::createKeystrokeEvent(FormField *target, Page *targetPage)
0232 {
0233     std::shared_ptr<Event> ret(new Event(Event::FieldKeystroke));
0234     ret->setTarget(target);
0235     ret->setTargetPage(targetPage);
0236 
0237     FormFieldText *fft = dynamic_cast<FormFieldText *>(target);
0238     if (fft) {
0239         ret->setReturnCode(true);
0240         ret->setValue(QVariant(fft->text()));
0241     }
0242     return ret;
0243 }
0244 
0245 std::shared_ptr<Event> Event::createFormFocusEvent(FormField *target, Page *targetPage, const QString &targetName)
0246 {
0247     std::shared_ptr<Event> ret(new Event(Event::FieldFocus));
0248     ret->setTarget(target);
0249     ret->setTargetPage(targetPage);
0250     ret->setTargetName(targetName);
0251     ret->setShiftModifier(QApplication::keyboardModifiers() & Qt::ShiftModifier);
0252 
0253     FormFieldText *fft = dynamic_cast<FormFieldText *>(target);
0254     if (fft) {
0255         ret->setValue(QVariant(fft->text()));
0256     }
0257     return ret;
0258 }
0259 
0260 std::shared_ptr<Event> Event::createFormValidateEvent(FormField *target, Page *targetPage, const QString &targetName)
0261 {
0262     std::shared_ptr<Event> ret(new Event(Event::FieldValidate));
0263     ret->setTarget(target);
0264     ret->setTargetPage(targetPage);
0265     ret->setTargetName(targetName);
0266     ret->setShiftModifier(QApplication::keyboardModifiers() & Qt::ShiftModifier);
0267 
0268     FormFieldText *fft = dynamic_cast<FormFieldText *>(target);
0269     if (fft) {
0270         ret->setValue(QVariant(fft->text()));
0271         ret->setReturnCode(true);
0272     }
0273     return ret;
0274 }
0275 
0276 std::shared_ptr<Event> Event::createFieldMouseUpEvent(FormField *target, Page *targetPage)
0277 {
0278     std::shared_ptr<Event> ret = std::make_shared<Event>(Event::FieldMouseUp);
0279     ret->setTarget(target);
0280     ret->setTargetPage(targetPage);
0281     ret->setShiftModifier(QApplication::keyboardModifiers() & Qt::ShiftModifier);
0282     return ret;
0283 }