diff --git a/generators/poppler/CMakeLists.txt b/generators/poppler/CMakeLists.txt index 956cd9086..1e3dbccb5 100644 --- a/generators/poppler/CMakeLists.txt +++ b/generators/poppler/CMakeLists.txt @@ -14,6 +14,17 @@ int main() " POPPLER_HAVE_PSCONVERTER_SETOUTPUTDEVICE) macro_bool_to_01(POPPLER_HAVE_PSCONVERTER_SETOUTPUTDEVICE _POPPLER_HAVE_PSCONVERTER_SETOUTPUTDEVICE) +check_cxx_source_compiles(" +#include +#include +int main() +{ + Poppler::FormFieldButton * button = 0; + return 0; +} +" POPPLER_HAVE_FORMFIELDBUTTON) +macro_bool_to_01(POPPLER_HAVE_FORMFIELDBUTTON _POPPLER_HAVE_FORMFIELDBUTTON) + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config-okular-poppler.h.cmake diff --git a/generators/poppler/config-okular-poppler.h.cmake b/generators/poppler/config-okular-poppler.h.cmake index b526da9ed..99abccb22 100644 --- a/generators/poppler/config-okular-poppler.h.cmake +++ b/generators/poppler/config-okular-poppler.h.cmake @@ -3,3 +3,6 @@ /* Defined if Poppler::PSConverter has setOutputDevice */ #define POPPLER_HAVE_PSCONVERTER_SETOUTPUTDEVICE ${_POPPLER_HAVE_PSCONVERTER_SETOUTPUTDEVICE} + +/* Defined if Poppler::FormFieldButton is available */ +#define POPPLER_HAVE_FORMFIELDBUTTON ${_POPPLER_HAVE_FORMFIELDBUTTON} diff --git a/generators/poppler/formfields.cpp b/generators/poppler/formfields.cpp index 68e9a3e64..6b4037895 100644 --- a/generators/poppler/formfields.cpp +++ b/generators/poppler/formfields.cpp @@ -9,6 +9,84 @@ #include "formfields.h" +#ifdef POPPLER_HAVE_FORMFIELDBUTTON +PopplerFormFieldButton::PopplerFormFieldButton( Poppler::FormFieldButton * field ) + : Okular::FormFieldButton(), m_field( field ) +{ + m_rect = Okular::NormalizedRect::fromQRectF( m_field->rect() ); +} + +PopplerFormFieldButton::~PopplerFormFieldButton() +{ + delete m_field; +} + +Okular::NormalizedRect PopplerFormFieldButton::rect() const +{ + return m_rect; +} + +int PopplerFormFieldButton::id() const +{ + return m_field->id(); +} + +QString PopplerFormFieldButton::name() const +{ + return m_field->name(); +} + +QString PopplerFormFieldButton::uiName() const +{ + return m_field->uiName(); +} + +bool PopplerFormFieldButton::isReadOnly() const +{ + return m_field->isReadOnly(); +} + +bool PopplerFormFieldButton::isVisible() const +{ + return m_field->isVisible(); +} + +Okular::FormFieldButton::ButtonType PopplerFormFieldButton::buttonType() const +{ + switch ( m_field->buttonType() ) + { + case Poppler::FormFieldButton::Push: + return Okular::FormFieldButton::Push; + case Poppler::FormFieldButton::CheckBox: + return Okular::FormFieldButton::CheckBox; + case Poppler::FormFieldButton::Radio: + return Okular::FormFieldButton::Radio; + } + return Okular::FormFieldButton::Push; +} + +QString PopplerFormFieldButton::caption() const +{ + return m_field->caption(); +} + +bool PopplerFormFieldButton::state() const +{ + return m_field->state(); +} + +void PopplerFormFieldButton::setState( bool state ) +{ + m_field->setState( state ); +} + +QList< int > PopplerFormFieldButton::siblings() const +{ + return m_field->siblings(); +} +#endif + + PopplerFormFieldText::PopplerFormFieldText( Poppler::FormFieldText * field ) : Okular::FormFieldText(), m_field( field ) { diff --git a/generators/poppler/formfields.h b/generators/poppler/formfields.h index fbd2c841b..d10afa994 100644 --- a/generators/poppler/formfields.h +++ b/generators/poppler/formfields.h @@ -13,6 +13,37 @@ #include #include "core/form.h" +#include + +#ifdef POPPLER_HAVE_FORMFIELDBUTTON +class PopplerFormFieldButton : public Okular::FormFieldButton +{ + public: + PopplerFormFieldButton( Poppler::FormFieldButton * field ); + virtual ~PopplerFormFieldButton(); + + // inherited from Okular::FormField + virtual Okular::NormalizedRect rect() const; + virtual int id() const; + virtual QString name() const; + virtual QString uiName() const; + virtual bool isReadOnly() const; + virtual bool isVisible() const; + + // inherited from Okular::FormFieldButton + virtual ButtonType buttonType() const; + virtual QString caption() const; + virtual bool state() const; + virtual void setState( bool state ); + virtual QList< int > siblings() const; + + private: + Poppler::FormFieldButton * m_field; + Okular::NormalizedRect m_rect; + +}; +#endif + class PopplerFormFieldText : public Okular::FormFieldText { public: diff --git a/generators/poppler/generator_pdf.cpp b/generators/poppler/generator_pdf.cpp index 7e740c650..20e0d6beb 100644 --- a/generators/poppler/generator_pdf.cpp +++ b/generators/poppler/generator_pdf.cpp @@ -1386,6 +1386,11 @@ void PDFGenerator::addFormFields( Poppler::Page * popplerPage, Okular::Page * pa Okular::FormField * of = 0; switch ( f->type() ) { +#ifdef POPPLER_HAVE_FORMFIELDBUTTON + case Poppler::FormField::FormButton: + of = new PopplerFormFieldButton( static_cast( f ) ); + break; +#endif case Poppler::FormField::FormText: of = new PopplerFormFieldText( static_cast( f ) ); break;