0001-reimplementing-the-reset-option-using-formfields.patch

File Metadata

Author
ahmadosama
Created
Mar 5 2018, 1:16 PM

0001-reimplementing-the-reset-option-using-formfields.patch

From 3ecaa383e518a4e91a02591ff9f3952e281c771d Mon Sep 17 00:00:00 2001
From: AhmadOsama <ahmad.osama.moh@gmail.com>
Date: Wed, 28 Feb 2018 23:36:15 +0200
Subject: [PATCH] reimplementing the reset option using formfields
---
part.cpp | 1 +
part.rc | 1 +
ui/pageview.cpp | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ui/pageview.h | 14 ++++++
4 files changed, 161 insertions(+)
diff --git a/part.cpp b/part.cpp
index dbe0a1e..9460277 100644
--- a/part.cpp
+++ b/part.cpp
@@ -3342,6 +3342,7 @@ void Part::unsetDummyMode()
// attach the actions of the children widgets too
m_formsMessage->addAction( m_pageView->toggleFormsAction() );
+ m_formsMessage->addAction( m_pageView->resetFormsAction() );
// ensure history actions are in the correct state
updateViewActions();
diff --git a/part.rc b/part.rc
index 4eba35d..f17bc78 100644
--- a/part.rc
+++ b/part.rc
@@ -47,6 +47,7 @@
<Action name="view_trim_mode"/>
<Separator/>
<Action name="view_toggle_forms"/>
+ <Action name="view_reset_forms"/>
</Menu>
<Menu name="go"><text>&amp;Go</text>
<Action name="go_previous"/>
diff --git a/ui/pageview.cpp b/ui/pageview.cpp
index 87aed00..57f47b7 100644
--- a/ui/pageview.cpp
+++ b/ui/pageview.cpp
@@ -229,6 +229,7 @@ public:
KToggleAction * aViewContinuous;
QAction * aPrevAction;
QAction * aToggleForms;
+ QAction * aResetForms;
QAction * aSpeakDoc;
QAction * aSpeakPage;
QAction * aSpeakStop;
@@ -351,6 +352,7 @@ PageView::PageView( QWidget *parent, Okular::Document *document )
d->aViewContinuous = nullptr;
d->aPrevAction = nullptr;
d->aToggleForms = nullptr;
+ d->aResetForms = nullptr;
d->aSpeakDoc = nullptr;
d->aSpeakPage = nullptr;
d->aSpeakStop = nullptr;
@@ -722,6 +724,12 @@ void PageView::setupActions( KActionCollection * ac )
d->aToggleForms->setEnabled( false );
toggleFormWidgets( false );
+ d->aResetForms = new QAction( this );
+ ac->addAction( QStringLiteral("view_reset_forms"), d->aResetForms );
+ connect( d->aResetForms, &QAction::triggered, this, &PageView::slotResetForms );
+ d->aResetForms->setEnabled( false );
+ resetFormWidgets( false );
+
// Setup undo and redo actions
QAction *kundo = KStandardAction::create( KStandardAction::Undo, d->document, SLOT(undo()), ac );
QAction *kredo = KStandardAction::create( KStandardAction::Redo, d->document, SLOT(redo()), ac );
@@ -865,6 +873,11 @@ QAction *PageView::toggleFormsAction() const
return d->aToggleForms;
}
+QAction *PageView::resetFormsAction() const
+{
+ return d->aResetForms;
+}
+
int PageView::contentAreaWidth() const
{
return horizontalScrollBar()->maximum() + viewport()->width();
@@ -1215,6 +1228,12 @@ void PageView::updateActionState( bool haspages, bool documentChanged, bool hasf
{ // may be null if dummy mode is on
d->aToggleForms->setEnabled( haspages && hasformwidgets );
}
+
+ if ( d->aResetForms )
+ {
+ d->aResetForms->setEnabled( haspages && hasformwidgets );
+ }
+
bool allowAnnotations = d->document->isAllowed( Okular::AllowNotes );
if ( d->annotator )
{
@@ -4309,6 +4328,127 @@ void PageView::toggleFormWidgets( bool on )
}
}
+void PageView::resetFormWidgets(bool on)
+{
+ if(d->aResetForms)
+ d->aResetForms->setText( i18n( "Reset Forms" ) );
+ if( d->aResetForms && on)
+ {
+ Okular::Document *document = d->document;
+
+ for(int i = 0; i < (int)document->pages(); i++)
+ {
+ // ith page in the document
+ const Okular::Page *page = document->page( i );
+ // get form fields in this page
+ QLinkedList<Okular::FormField*> pageFields = page->formFields();
+
+ QList<Okular::FormFieldButton*> m_checkBoxForms, m_radioButtonForms;
+ QList <bool> newCheckButtonStates, newRadioButtonStates;
+
+ QLinkedList< Okular::FormField * >::const_iterator ffIt = pageFields.constBegin(), ffEnd = pageFields.constEnd();
+
+ for ( ; ffIt != ffEnd; ++ffIt )
+ {
+ Okular::FormField * ff = *ffIt;
+ ff->type();
+
+ switch ( ff->type() )
+ {
+ case Okular::FormField::FormButton:
+ {
+ Okular::FormFieldButton * ffb = static_cast< Okular::FormFieldButton * >( ff );
+ switch ( ffb->buttonType() )
+ {
+ case Okular::FormFieldButton::Push:
+ break;
+ case Okular::FormFieldButton::CheckBox:
+ m_checkBoxForms.append(ffb);
+ newCheckButtonStates.append( false );
+ break;
+ case Okular::FormFieldButton::Radio:
+ m_radioButtonForms.append(ffb);
+ newRadioButtonStates.append( false );
+ break;
+ default: ;
+ }
+ break;
+ }
+ case Okular::FormField::FormText:
+ {
+ Okular::FormFieldText * fft = static_cast< Okular::FormFieldText * >( ff );
+ switch ( fft->textType() )
+ {
+ case Okular::FormFieldText::Multiline:
+ resetFormFieldText( i, document, fft );
+ break;
+ case Okular::FormFieldText::Normal:
+ resetFormFieldText( i, document, fft );
+ break;
+ case Okular::FormFieldText::FileSelect:
+ resetFormFieldText( i, document, fft );
+ break;
+ }
+ break;
+ }
+ case Okular::FormField::FormChoice:
+ {
+ Okular::FormFieldChoice * ffc = static_cast< Okular::FormFieldChoice * >( ff );
+ switch ( ffc->choiceType() )
+ {
+ case Okular::FormFieldChoice::ListBox:
+ resetListEdit(i, document, ffc);
+ break;
+ case Okular::FormFieldChoice::ComboBox:
+ resetComboForms(i, document, ffc);
+ break;
+ }
+ break;
+ }
+ default: ;
+ }
+ }
+
+ if(m_checkBoxForms.size())
+ {
+ resetCheckBoxForms( i, document, m_checkBoxForms, newCheckButtonStates);
+ }
+ if(m_radioButtonForms.size())
+ {
+ newRadioButtonStates[0] = true;
+ resetRadioButtonForms( i, document, m_radioButtonForms, newRadioButtonStates);
+ }
+ }
+
+ }
+}
+
+void PageView::resetFormFieldText( int pageNumber, Okular::Document *document, Okular::FormFieldText *form )
+{
+ int prevCursorPos = form->text().size();
+ document->editFormText(pageNumber, form, QStringLiteral(""), 0, prevCursorPos, prevCursorPos);
+}
+
+void PageView::resetCheckBoxForms( int pageNumber, Okular::Document *document, const QList< Okular::FormFieldButton* >& formButtons, const QList< bool >& newButtonStates )
+{
+ document->editFormButtons( pageNumber, formButtons, newButtonStates);
+}
+
+void PageView::resetComboForms(int pageNumber, Okular::Document *document, Okular::FormFieldChoice *m_comboEdit)
+{
+ document->editFormCombo( pageNumber, m_comboEdit, QStringLiteral(""), 0, 0, 0);
+}
+
+void PageView::resetListEdit(int pageNumber, Okular::Document *document, Okular::FormFieldChoice *m_listEdit)
+{
+ document->editFormList( pageNumber, m_listEdit, QList<int>());
+}
+
+void PageView::resetRadioButtonForms( int pageNumber, Okular::Document *document, const QList< Okular::FormFieldButton* >& formButtons, const QList< bool >& newButtonStates )
+{
+ document->editFormButtons( pageNumber, formButtons, newButtonStates);
+}
+
void PageView::resizeContentArea( const QSize & newSize )
{
const QSize vs = viewport()->size();
@@ -5338,6 +5478,11 @@ void PageView::slotToggleForms()
toggleFormWidgets( !d->m_formsVisible );
}
+void PageView::slotResetForms()
+{
+ resetFormWidgets( d->m_formsVisible );
+}
+
void PageView::slotFormChanged( int pageNumber )
{
if ( !d->refreshTimer )
diff --git a/ui/pageview.h b/ui/pageview.h
index d0d015b..7e24d26 100644
--- a/ui/pageview.h
+++ b/ui/pageview.h
@@ -35,6 +35,9 @@ class KActionCollection;
namespace Okular {
class Action;
class Document;
+class FormFieldText;
+class FormFieldButton;
+class FormFieldChoice;
class DocumentViewport;
class Annotation;
class MovieAction;
@@ -103,6 +106,15 @@ Q_OBJECT
KActionCollection *actionCollection() const;
QAction *toggleFormsAction() const;
+ QAction *resetFormsAction() const;
+
+ //Reset Functions for different widgets
+ void resetFormFieldText( int pageNumber, Okular::Document *document, Okular::FormFieldText *form );
+ void resetCheckBoxForms( int pageNumber, Okular::Document *document, const QList< Okular::FormFieldButton* >& formButtons, const QList< bool >& newButtonStates );
+ void resetComboForms(int pageNumber, Okular::Document *document, Okular::FormFieldChoice *m_comboEdit);
+ void resetListEdit(int pageNumber, Okular::Document *document, Okular::FormFieldChoice *m_listEdit);
+ void resetRadioButtonForms( int pageNumber, Okular::Document *document, const QList< Okular::FormFieldButton* >& formButtons, const QList< bool >& newButtonStates );
+
int contentAreaWidth() const;
int contentAreaHeight() const;
QPoint contentAreaPosition() const;
@@ -187,6 +199,7 @@ Q_OBJECT
void scrollTo( int x, int y );
void toggleFormWidgets( bool on );
+ void resetFormWidgets( bool on );
void resizeContentArea( const QSize & newSize );
void updatePageStep();
@@ -257,6 +270,7 @@ Q_OBJECT
void slotTrimMarginsToggled( bool );
void slotTrimToSelectionToggled( bool );
void slotToggleForms();
+ void slotResetForms();
void slotFormChanged( int pageNumber );
void slotRefreshPage();
#ifdef HAVE_SPEECH
--
2.7.4