filter/source/pdf/impdialog.cxx                            |   70 ++++++++++++-
 filter/source/pdf/impdialog.hxx                            |    7 +
 officecfg/registry/schema/org/openoffice/Office/Common.xcs |    2 
 sc/qa/uitest/calc_tests4/exportToPDF.py                    |    4 
 sd/qa/uitest/impress_tests/exportToPDF.py                  |    4 
 sw/qa/uitest/writer_tests4/exportToPDF.py                  |    4 
 6 files changed, 81 insertions(+), 10 deletions(-)

New commits:
commit 529afed0ba3ca5e659cea661816e9164846630e8
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Tue Mar 14 15:20:22 2023 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Thu Mar 16 09:09:50 2023 +0000

    tdf#39667 filter,officecfg: PDF export dialog: set initial view to...
    
    ... Outline for PDF/UA.
    
    * change the dialog to disable the radio buttons if PDF/UA is enabled
    * also change the configuration to make Outline the default
    
    Change-Id: Iea8c5e0f8560c972dc250859198bea1cb9fc3597
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148883
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/filter/source/pdf/impdialog.cxx b/filter/source/pdf/impdialog.cxx
index b3314ba0df1d..a214e9d9cde9 100644
--- a/filter/source/pdf/impdialog.cxx
+++ b/filter/source/pdf/impdialog.cxx
@@ -93,7 +93,7 @@ ImpPDFTabDialog::ImpPDFTabDialog(weld::Window* pParent, const 
Sequence< Property
     mbOpenInFullScreenMode( false ),
     mbDisplayPDFDocumentTitle( false ),
     mnMagnification( 0 ),
-    mnInitialView( 0 ),
+    mnInitialView( 1 ),
     mnZoom( 0 ),
     mnInitialPage( 1 ),
     mnPageLayout( 0 ),
@@ -225,6 +225,7 @@ ImpPDFTabDialog::ImpPDFTabDialog(weld::Window* pParent, 
const Sequence< Property
     mbDisplayPDFDocumentTitle = maConfigItem.ReadBool( 
"DisplayPDFDocumentTitle", true );
 
     mnInitialView = maConfigItem.ReadInt32( "InitialView", 0 );
+    mnInitialViewUserSelection = mnInitialView;
     mnMagnification = maConfigItem.ReadInt32( "Magnification", 0 );
     mnZoom = maConfigItem.ReadInt32( "Zoom", 100 );
     mnPageLayout = maConfigItem.ReadInt32( "PageLayout", 0 );
@@ -288,6 +289,15 @@ ImpPDFTabSecurityPage* ImpPDFTabDialog::getSecurityPage() 
const
     return nullptr;
 }
 
+ImpPDFTabOpnFtrPage * ImpPDFTabDialog::getOpenPage() const
+{
+    SfxTabPage* pOpenPage = GetTabPage("initialview");
+    if (pOpenPage)
+    {
+        return static_cast<ImpPDFTabOpnFtrPage*>(pOpenPage);
+    }
+    return nullptr;
+}
 
 ImpPDFTabLinksPage* ImpPDFTabDialog::getLinksPage() const
 {
@@ -920,6 +930,12 @@ IMPL_LINK_NOARG(ImpPDFTabGeneralPage, 
TogglePDFVersionOrUniversalAccessibilityHa
     }
     mxCbExportBookmarks->set_sensitive(!bIsPDFUA);
 
+    ImpPDFTabOpnFtrPage *const pOpenPage(mpParent ? mpParent->getOpenPage() : 
nullptr);
+    if (pOpenPage)
+    {
+        pOpenPage->ToggleInitialView(*mpParent);
+    }
+
     // PDF/A doesn't allow launch action, so enable/disable the selection on 
the Link page
     ImpPDFTabLinksPage* pLinksPage = mpParent ? mpParent->getLinksPage() : 
nullptr;
     if (pLinksPage)
@@ -969,6 +985,10 @@ void ImpPDFTabOpnFtrPage::GetFilterConfigItem( 
ImpPDFTabDialog* pParent  )
         pParent->mnInitialView = 1;
     else if( mxRbOpnThumbs->get_active() )
         pParent->mnInitialView = 2;
+    if (!pParent->mbPDFUACompliance)
+    {
+        pParent->mnInitialViewUserSelection = pParent->mnInitialView;
+    }
 
     pParent->mnMagnification = 0;
     if( mxRbMagnFitWin->get_active() )
@@ -996,7 +1016,7 @@ void ImpPDFTabOpnFtrPage::GetFilterConfigItem( 
ImpPDFTabDialog* pParent  )
     pParent->mbFirstPageLeft = mbUseCTLFont && 
mxCbPgLyFirstOnLeft->get_active();
 }
 
-void ImpPDFTabOpnFtrPage::SetFilterConfigItem( const  ImpPDFTabDialog* pParent 
)
+void ImpPDFTabOpnFtrPage::SetFilterConfigItem(ImpPDFTabDialog *const pParent)
 {
     mbUseCTLFont = pParent->mbUseCTLFont;
     switch( pParent->mnPageLayout )
@@ -1066,6 +1086,52 @@ void ImpPDFTabOpnFtrPage::SetFilterConfigItem( const  
ImpPDFTabDialog* pParent )
         mxCbPgLyFirstOnLeft->set_active(pParent->mbFirstPageLeft);
         ToggleRbPgLyContinueFacingHdl();
     }
+
+    // The call from ImpPDFTabGeneralPage::SetFilterConfigItem() did not init
+    // the radio buttons correctly becuse ImpPDFTabOpnFtrPage did not yet 
exist.
+    ToggleInitialView(*pParent);
+}
+
+void ImpPDFTabOpnFtrPage::ToggleInitialView(ImpPDFTabDialog & rParent)
+{
+    bool const bIsPDFUA(rParent.getGeneralPage()->IsPdfUaSelected());
+    if (bIsPDFUA)
+    {   // only allow Outline for PDF/UA
+        if (mxRbOpnOutline->get_sensitive())
+        {
+            if (mxRbOpnPageOnly->get_active())
+            {
+                rParent.mnInitialViewUserSelection = 0;
+            }
+            else if (mxRbOpnOutline->get_active())
+            {
+                rParent.mnInitialViewUserSelection = 1;
+            }
+            else if (mxRbOpnThumbs->get_active())
+            {
+                rParent.mnInitialViewUserSelection = 2;
+            }
+            mxRbOpnOutline->set_active(true);
+        }
+    }
+    else
+    {
+        switch (rParent.mnInitialViewUserSelection)
+        {
+            case 0:
+                mxRbOpnPageOnly->set_active(true);
+                break;
+            case 1:
+                mxRbOpnOutline->set_active(true);
+                break;
+            case 2:
+                mxRbOpnThumbs->set_active(true);
+                break;
+        }
+    }
+    mxRbOpnPageOnly->set_sensitive(!bIsPDFUA);
+    mxRbOpnThumbs->set_sensitive(!bIsPDFUA);
+    mxRbOpnOutline->set_sensitive(!bIsPDFUA);
 }
 
 IMPL_LINK_NOARG(ImpPDFTabOpnFtrPage, ToggleRbPgLyContinueFacingHdl, 
weld::Toggleable&, void)
diff --git a/filter/source/pdf/impdialog.hxx b/filter/source/pdf/impdialog.hxx
index aac0185482b6..62ed7d580f44 100644
--- a/filter/source/pdf/impdialog.hxx
+++ b/filter/source/pdf/impdialog.hxx
@@ -111,6 +111,7 @@ class ImpPDFTabDialog final : public SfxTabDialogController
     bool                        mbDisplayPDFDocumentTitle;
     sal_Int32                   mnMagnification;
     sal_Int32                   mnInitialView;
+    sal_Int32                   mnInitialViewUserSelection;
     sal_Int32                   mnZoom;
     sal_Int32                   mnInitialPage;
 
@@ -163,6 +164,7 @@ public:
 
     Sequence< PropertyValue >   GetFilterData();
 
+    ImpPDFTabOpnFtrPage*        getOpenPage() const;
     ImpPDFTabSecurityPage*      getSecurityPage() const;
     ImpPDFTabLinksPage*         getLinksPage() const;
     ImpPDFTabGeneralPage*       getGeneralPage() const;
@@ -252,6 +254,8 @@ public:
 /// Class tab page viewer
 class ImpPDFTabOpnFtrPage : public SfxTabPage
 {
+    friend class ImpPDFTabGeneralPage;
+
     bool                        mbUseCTLFont;
 
     std::unique_ptr<weld::RadioButton> mxRbOpnPageOnly;
@@ -274,6 +278,7 @@ class ImpPDFTabOpnFtrPage : public SfxTabPage
     DECL_LINK(ToggleRbMagnHdl, weld::Toggleable&, void);
 
     void                        ToggleRbPgLyContinueFacingHdl();
+    void ToggleInitialView(ImpPDFTabDialog & rParent);
 
 public:
     ImpPDFTabOpnFtrPage(weld::Container* pPage, weld::DialogController* 
pController, const SfxItemSet& rSet);
@@ -282,7 +287,7 @@ public:
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
 
     void                        GetFilterConfigItem( ImpPDFTabDialog* 
paParent);
-    void                        SetFilterConfigItem( const ImpPDFTabDialog* 
paParent );
+    void                        SetFilterConfigItem(ImpPDFTabDialog* pParent);
 };
 
 /// Class tab page viewer
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs 
b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index d59cb26b01e7..fb262b8e7ab3 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -5267,7 +5267,7 @@
                 </info>
               </enumeration>
             </constraints>
-            <value>0</value>
+            <value>1</value>
           </prop>
           <prop oor:name="Magnification" oor:type="xs:int" 
oor:nillable="false">
             <info>
diff --git a/sc/qa/uitest/calc_tests4/exportToPDF.py 
b/sc/qa/uitest/calc_tests4/exportToPDF.py
index e44d80be0ef4..a635ee60a5d0 100644
--- a/sc/qa/uitest/calc_tests4/exportToPDF.py
+++ b/sc/qa/uitest/calc_tests4/exportToPDF.py
@@ -47,13 +47,13 @@ class exportToPDF(UITestCase):
                     for child in nonSelectedChildren:
                         self.assertEqual("false", 
get_state_as_dict(xDialog.getChild(child))['Selected'])
 
-                    checkedChildren = ['allbookmarks', 'changeany', 'default', 
'defaultlayout', 'fitdefault', 'jpegcompress', 'pageonly', 'printhigh', 
'selection']
+                    checkedChildren = ['allbookmarks', 'changeany', 'default', 
'defaultlayout', 'fitdefault', 'jpegcompress', 'outline', 'printhigh', 
'selection']
 
                     for child in checkedChildren:
                         self.assertEqual("true", 
get_state_as_dict(xDialog.getChild(child))['Checked'])
 
                     nonCheckedChildren = ['all', 'changecomment', 
'changeform', 'changeinsdel', 'changenone', 'contfacinglayout', 'contlayout', 
'fitvis', 'fitwidth',
-                            'fitwin', 'fitzoom', 'losslesscompress', 
'openinternet', 'openpdf', 'outline', 'printlow', 'printnone', 'range',
+                            'fitwin', 'fitzoom', 'losslesscompress', 
'openinternet', 'openpdf', 'pageonly', 'printlow', 'printnone', 'range',
                             'singlelayout', 'thumbs', 'visiblebookmark']
 
                     for child in nonCheckedChildren:
diff --git a/sd/qa/uitest/impress_tests/exportToPDF.py 
b/sd/qa/uitest/impress_tests/exportToPDF.py
index f1240fabf165..429e28df4f0d 100644
--- a/sd/qa/uitest/impress_tests/exportToPDF.py
+++ b/sd/qa/uitest/impress_tests/exportToPDF.py
@@ -49,13 +49,13 @@ class exportToPDF(UITestCase):
                     for child in nonSelectedChildren:
                         self.assertEqual("false", 
get_state_as_dict(xDialog.getChild(child))['Selected'])
 
-                    checkedChildren = ['all', 'allbookmarks', 'changeany', 
'default', 'defaultlayout', 'fitdefault', 'jpegcompress', 'pageonly', 
'printhigh']
+                    checkedChildren = ['all', 'allbookmarks', 'changeany', 
'default', 'defaultlayout', 'fitdefault', 'jpegcompress', 'outline', 
'printhigh']
 
                     for child in checkedChildren:
                         self.assertEqual("true", 
get_state_as_dict(xDialog.getChild(child))['Checked'])
 
                     nonCheckedChildren = ['changecomment', 'changeform', 
'changeinsdel', 'changenone', 'contfacinglayout', 'contlayout', 'fitvis',
-                            'fitwidth', 'fitwin', 'fitzoom', 
'losslesscompress', 'openinternet', 'openpdf', 'outline', 'printlow', 
'printnone', 'range',
+                            'fitwidth', 'fitwin', 'fitzoom', 
'losslesscompress', 'openinternet', 'openpdf', 'pageonly', 'printlow', 
'printnone', 'range',
                             'selection', 'singlelayout', 'thumbs', 
'visiblebookmark']
 
                     for child in nonCheckedChildren:
diff --git a/sw/qa/uitest/writer_tests4/exportToPDF.py 
b/sw/qa/uitest/writer_tests4/exportToPDF.py
index 18eb56c75615..ef628d4eea68 100644
--- a/sw/qa/uitest/writer_tests4/exportToPDF.py
+++ b/sw/qa/uitest/writer_tests4/exportToPDF.py
@@ -45,13 +45,13 @@ class exportToPDF(UITestCase):
                     for child in nonSelectedChildren:
                         self.assertEqual("false", 
get_state_as_dict(xDialog.getChild(child))['Selected'])
 
-                    checkedChildren = ['all', 'allbookmarks', 'changeany', 
'default', 'defaultlayout', 'fitdefault', 'jpegcompress', 'pageonly', 
'printhigh']
+                    checkedChildren = ['all', 'allbookmarks', 'changeany', 
'default', 'defaultlayout', 'fitdefault', 'jpegcompress', 'outline', 
'printhigh']
 
                     for child in checkedChildren:
                         self.assertEqual("true", 
get_state_as_dict(xDialog.getChild(child))['Checked'])
 
                     nonCheckedChildren = ['changecomment', 'changeform', 
'changeinsdel', 'changenone', 'contfacinglayout', 'contlayout', 'fitvis',
-                            'fitwidth', 'fitwin', 'fitzoom', 
'losslesscompress', 'openinternet', 'openpdf', 'outline', 'printlow', 
'printnone', 'range',
+                            'fitwidth', 'fitwin', 'fitzoom', 
'losslesscompress', 'openinternet', 'openpdf', 'pageonly', 'printlow', 
'printnone', 'range',
                             'selection', 'singlelayout', 'thumbs', 
'visiblebookmark']
 
                     for child in nonCheckedChildren:

Reply via email to