Home
Phabricator
Search
Log In
Files
F5741409
0001-reimplementing-the-reset-option-using-formfields.patch
ahmadosama (Ahmad Osama)
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Author
ahmadosama
Created
Mar 5 2018, 1:16 PM
Size
10 KB
Mime Type
text/x-diff
Engine
blob
Format
Raw Data
Handle
3506120
Attached To
D10932: [Okular] Option to reset forms
0001-reimplementing-the-reset-option-using-formfields.patch
View Options
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>&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
Log In to Comment