diff --git a/core/form.h b/core/form.h --- a/core/form.h +++ b/core/form.h @@ -98,6 +98,13 @@ */ virtual bool isVisible() const; + /** + * Whether the field is visible. + * + * @since 1.5 + */ + virtual void setVisible( bool value ); + Action* activationAction() const; /** diff --git a/core/form.cpp b/core/form.cpp --- a/core/form.cpp +++ b/core/form.cpp @@ -64,6 +64,10 @@ return true; } +void FormField::setVisible( bool ) +{ +} + Action* FormField::activationAction() const { Q_D( const FormField ); diff --git a/core/script/kjs_field.cpp b/core/script/kjs_field.cpp --- a/core/script/kjs_field.cpp +++ b/core/script/kjs_field.cpp @@ -207,6 +207,23 @@ } } +// Field.hidden (getter) +static KJSObject fieldGetHidden( KJSContext *, void *object ) +{ + const FormField *field = reinterpret_cast< FormField * >( object ); + return KJSBoolean( !field->isVisible() ); +} + +// Field.hidden (setter) +static void fieldSetHidden( KJSContext *context, void *object, KJSObject value ) +{ + FormField *field = reinterpret_cast< FormField * >( object ); + bool b = value.toBoolean( context ); + field->setVisible( !b ); + + updateField( field ); +} + void JSField::initType( KJSContext *ctx ) { static bool initialized = false; @@ -223,6 +240,7 @@ fieldGetReadOnly, fieldSetReadOnly ); g_fieldProto->defineProperty( ctx, QStringLiteral("type"), fieldGetType ); g_fieldProto->defineProperty( ctx, QStringLiteral("value"), fieldGetValue, fieldSetValue ); + g_fieldProto->defineProperty( ctx, QStringLiteral("hidden"), fieldGetHidden, fieldSetHidden ); } KJSObject JSField::wrapField( KJSContext *ctx, FormField *field, Page *page ) diff --git a/generators/poppler/CMakeLists.txt b/generators/poppler/CMakeLists.txt --- a/generators/poppler/CMakeLists.txt +++ b/generators/poppler/CMakeLists.txt @@ -79,6 +79,7 @@ { Poppler::FormField *f; f->setReadOnly(true); + f->setVisible(true); } " HAVE_POPPLER_0_64) diff --git a/generators/poppler/formfields.h b/generators/poppler/formfields.h --- a/generators/poppler/formfields.h +++ b/generators/poppler/formfields.h @@ -27,6 +27,7 @@ bool isReadOnly() const override; void setReadOnly( bool value ) override; bool isVisible() const override; + void setVisible( bool value ) override; // inherited from Okular::FormFieldButton ButtonType buttonType() const override; @@ -56,6 +57,7 @@ bool isReadOnly() const override; void setReadOnly( bool value ) override; bool isVisible() const override; + void setVisible( bool value ) override; // inherited from Okular::FormFieldText Okular::FormFieldText::TextType textType() const override; @@ -88,6 +90,7 @@ bool isReadOnly() const override; void setReadOnly( bool value ) override; bool isVisible() const override; + void setVisible( bool value ) override; // inherited from Okular::FormFieldChoice ChoiceType choiceType() const override; diff --git a/generators/poppler/formfields.cpp b/generators/poppler/formfields.cpp --- a/generators/poppler/formfields.cpp +++ b/generators/poppler/formfields.cpp @@ -81,6 +81,15 @@ return m_field->isVisible(); } +void PopplerFormFieldButton::setVisible( bool value ) +{ +#ifdef HAVE_POPPLER_0_64 + m_field->setVisible( value ); +#else + Q_UNUSED( value ); +#endif +} + Okular::FormFieldButton::ButtonType PopplerFormFieldButton::buttonType() const { switch ( m_field->buttonType() ) @@ -168,6 +177,15 @@ return m_field->isVisible(); } +void PopplerFormFieldText::setVisible( bool value ) +{ +#ifdef HAVE_POPPLER_0_64 + m_field->setVisible( value ); +#else + Q_UNUSED( value ); +#endif +} + Okular::FormFieldText::TextType PopplerFormFieldText::textType() const { switch ( m_field->textType() ) @@ -270,6 +288,15 @@ return m_field->isVisible(); } +void PopplerFormFieldChoice::setVisible( bool value ) +{ +#ifdef HAVE_POPPLER_0_64 + m_field->setVisible( value ); +#else + Q_UNUSED( value ); +#endif +} + Okular::FormFieldChoice::ChoiceType PopplerFormFieldChoice::choiceType() const { switch ( m_field->choiceType() ) diff --git a/generators/poppler/generator_pdf.cpp b/generators/poppler/generator_pdf.cpp --- a/generators/poppler/generator_pdf.cpp +++ b/generators/poppler/generator_pdf.cpp @@ -446,6 +446,20 @@ link = movieAction; } break; + +#ifdef HAVE_POPPLER_0_64 + case Poppler::Link::Hide: + { + const Poppler::LinkHide * l = static_cast( popplerLink ); + QStringList scripts; + for ( const QString &target: l->targets() ) + { + scripts << QStringLiteral( "getField(\"%1\").hidden = %2;" ).arg( target ).arg( l->isShowAction() ? QLatin1String( "false" ) : QLatin1String( "true" ) ); + } + link = new Okular::ScriptAction( Okular::JavaScript, scripts.join( QLatin1Char( '\n' ) ) ); + } + break; +#endif } if ( deletePopplerLink )