Resolves: tdf#121297 weld Presentation Minimizer
Change-Id: Ifdf1746bc9f6567a1aded233a4350f6828604c9e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143678
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/compilerplugins/clang/unusedenumconstants.writeonly.results b/compilerplugins/clang/unusedenumconstants.writeonly.results
index e22323c..bf474ef 100644
--- a/compilerplugins/clang/unusedenumconstants.writeonly.results
+++ b/compilerplugins/clang/unusedenumconstants.writeonly.results
@@ -3936,94 +3936,30 @@ sdext/source/minimizer/pppoptimizertoken.hxx:79
enum PPPOptimizerTokenEnum TK_Pages
sdext/source/minimizer/pppoptimizertoken.hxx:81
enum PPPOptimizerTokenEnum STR_SUN_OPTIMIZATION_WIZARD2
sdext/source/minimizer/pppoptimizertoken.hxx:82
enum PPPOptimizerTokenEnum STR_STEPS
sdext/source/minimizer/pppoptimizertoken.hxx:83
enum PPPOptimizerTokenEnum STR_BACK
sdext/source/minimizer/pppoptimizertoken.hxx:84
enum PPPOptimizerTokenEnum STR_NEXT
sdext/source/minimizer/pppoptimizertoken.hxx:85
enum PPPOptimizerTokenEnum STR_FINISH
sdext/source/minimizer/pppoptimizertoken.hxx:86
enum PPPOptimizerTokenEnum STR_CANCEL
sdext/source/minimizer/pppoptimizertoken.hxx:87
enum PPPOptimizerTokenEnum STR_INTRODUCTION
sdext/source/minimizer/pppoptimizertoken.hxx:88
enum PPPOptimizerTokenEnum STR_INTRODUCTION_T
sdext/source/minimizer/pppoptimizertoken.hxx:89
enum PPPOptimizerTokenEnum STR_CHOSE_SETTINGS
sdext/source/minimizer/pppoptimizertoken.hxx:90
enum PPPOptimizerTokenEnum STR_REMOVE
sdext/source/minimizer/pppoptimizertoken.hxx:91
enum PPPOptimizerTokenEnum STR_GRAPHIC_OPTIMIZATION
sdext/source/minimizer/pppoptimizertoken.hxx:92
enum PPPOptimizerTokenEnum STR_IMAGE_OPTIMIZATION
sdext/source/minimizer/pppoptimizertoken.hxx:93
enum PPPOptimizerTokenEnum STR_LOSSLESS_COMPRESSION
sdext/source/minimizer/pppoptimizertoken.hxx:94
enum PPPOptimizerTokenEnum STR_JPEG_COMPRESSION
sdext/source/minimizer/pppoptimizertoken.hxx:95
enum PPPOptimizerTokenEnum STR_QUALITY
sdext/source/minimizer/pppoptimizertoken.hxx:96
enum PPPOptimizerTokenEnum STR_REMOVE_CROP_AREA
sdext/source/minimizer/pppoptimizertoken.hxx:97
enum PPPOptimizerTokenEnum STR_IMAGE_RESOLUTION
sdext/source/minimizer/pppoptimizertoken.hxx:98
enum PPPOptimizerTokenEnum STR_IMAGE_RESOLUTION_0
sdext/source/minimizer/pppoptimizertoken.hxx:99
enum PPPOptimizerTokenEnum STR_IMAGE_RESOLUTION_1
sdext/source/minimizer/pppoptimizertoken.hxx:100
enum PPPOptimizerTokenEnum STR_IMAGE_RESOLUTION_2
sdext/source/minimizer/pppoptimizertoken.hxx:102
enum PPPOptimizerTokenEnum STR_EMBED_LINKED_GRAPHICS
sdext/source/minimizer/pppoptimizertoken.hxx:103
enum PPPOptimizerTokenEnum STR_OLE_OBJECTS
sdext/source/minimizer/pppoptimizertoken.hxx:104
enum PPPOptimizerTokenEnum STR_OLE_OPTIMIZATION
sdext/source/minimizer/pppoptimizertoken.hxx:105
enum PPPOptimizerTokenEnum STR_OLE_REPLACE
sdext/source/minimizer/pppoptimizertoken.hxx:106
enum PPPOptimizerTokenEnum STR_ALL_OLE_OBJECTS
sdext/source/minimizer/pppoptimizertoken.hxx:107
enum PPPOptimizerTokenEnum STR_ALIEN_OLE_OBJECTS_ONLY
sdext/source/minimizer/pppoptimizertoken.hxx:108
enum PPPOptimizerTokenEnum STR_OLE_OBJECTS_DESC
sdext/source/minimizer/pppoptimizertoken.hxx:109
enum PPPOptimizerTokenEnum STR_NO_OLE_OBJECTS_DESC
sdext/source/minimizer/pppoptimizertoken.hxx:110
enum PPPOptimizerTokenEnum STR_SLIDES
sdext/source/minimizer/pppoptimizertoken.hxx:111
enum PPPOptimizerTokenEnum STR_CHOOSE_SLIDES
sdext/source/minimizer/pppoptimizertoken.hxx:112
enum PPPOptimizerTokenEnum STR_DELETE_MASTER_PAGES
sdext/source/minimizer/pppoptimizertoken.hxx:113
enum PPPOptimizerTokenEnum STR_DELETE_NOTES_PAGES
sdext/source/minimizer/pppoptimizertoken.hxx:114
enum PPPOptimizerTokenEnum STR_DELETE_HIDDEN_SLIDES
sdext/source/minimizer/pppoptimizertoken.hxx:115
enum PPPOptimizerTokenEnum STR_CUSTOM_SHOW
sdext/source/minimizer/pppoptimizertoken.hxx:116
enum PPPOptimizerTokenEnum STR_SUMMARY
sdext/source/minimizer/pppoptimizertoken.hxx:117
enum PPPOptimizerTokenEnum STR_SUMMARY_TITLE
sdext/source/minimizer/pppoptimizertoken.hxx:118
enum PPPOptimizerTokenEnum STR_APPLY_TO_CURRENT
sdext/source/minimizer/pppoptimizertoken.hxx:119
enum PPPOptimizerTokenEnum STR_AUTOMATICALLY_OPEN
sdext/source/minimizer/pppoptimizertoken.hxx:120
enum PPPOptimizerTokenEnum STR_SAVE_SETTINGS
sdext/source/minimizer/pppoptimizertoken.hxx:121
enum PPPOptimizerTokenEnum STR_SAVE_AS
sdext/source/minimizer/pppoptimizertoken.hxx:122
enum PPPOptimizerTokenEnum STR_DELETE_SLIDES
sdext/source/minimizer/pppoptimizertoken.hxx:123
enum PPPOptimizerTokenEnum STR_OPTIMIZE_IMAGES
sdext/source/minimizer/pppoptimizertoken.hxx:124
enum PPPOptimizerTokenEnum STR_CREATE_REPLACEMENT
sdext/source/minimizer/pppoptimizertoken.hxx:125
enum PPPOptimizerTokenEnum STR_CURRENT_FILESIZE
sdext/source/minimizer/pppoptimizertoken.hxx:126
enum PPPOptimizerTokenEnum STR_ESTIMATED_FILESIZE
sdext/source/minimizer/pppoptimizertoken.hxx:127
enum PPPOptimizerTokenEnum STR_MY_SETTINGS
sdext/source/minimizer/pppoptimizertoken.hxx:128
diff --git a/officecfg/registry/data/org/openoffice/Office/PresentationMinimizer.xcu b/officecfg/registry/data/org/openoffice/Office/PresentationMinimizer.xcu
index a50b315..f1ac8d8 100644
--- a/officecfg/registry/data/org/openoffice/Office/PresentationMinimizer.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/PresentationMinimizer.xcu
@@ -22,92 +22,15 @@
<prop oor:name="STR_SUN_OPTIMIZATION_WIZARD2">
<value xml:lang="en-US">Presentation Minimizer</value>
</prop>
<prop oor:name="STR_STEPS">
<value xml:lang="en-US">Steps</value>
</prop>
<prop oor:name="STR_BACK">
<value xml:lang="en-US">< ~Back</value>
</prop>
<prop oor:name="STR_NEXT">
<value xml:lang="en-US">~Next ></value>
</prop>
<prop oor:name="STR_FINISH">
<value xml:lang="en-US">~Finish</value>
</prop>
<prop oor:name="STR_CANCEL">
<value xml:lang="en-US">Cancel</value>
</prop>
<prop oor:name="STR_INTRODUCTION">
<value xml:lang="en-US">Introduction</value>
</prop>
<prop oor:name="STR_INTRODUCTION_T">
<value xml:lang="en-US">The Presentation Minimizer is used to reduce the file size of the current presentation. Images will be compressed and data, that is no longer needed, will be removed.
At the last step of the wizard you can choose to apply the changes to the current presentation or to create an optimized new version of the presentation.</value>
</prop>
<prop oor:name="STR_CHOSE_SETTINGS">
<value xml:lang="en-US">~Choose settings for Presentation Minimizer</value>
</prop>
<prop oor:name="STR_REMOVE">
<value xml:lang="en-US">~Delete</value>
</prop>
<prop oor:name="STR_GRAPHIC_OPTIMIZATION">
<value xml:lang="en-US">Choose settings for optimizing images</value>
</prop>
<prop oor:name="STR_IMAGE_OPTIMIZATION">
<value xml:lang="en-US">Images</value>
</prop>
<prop oor:name="STR_LOSSLESS_COMPRESSION">
<value xml:lang="en-US">~Lossless compression</value>
</prop>
<prop oor:name="STR_JPEG_COMPRESSION">
<value xml:lang="en-US">~JPEG compression</value>
</prop>
<prop oor:name="STR_QUALITY">
<value xml:lang="en-US">~Quality in %</value>
</prop>
<prop oor:name="STR_REMOVE_CROP_AREA">
<value xml:lang="en-US">~Delete cropped image areas</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION">
<value xml:lang="en-US">Reduce ~image resolution</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_0">
<value xml:lang="en-US">0;<no change></value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_1">
<value xml:lang="en-US">96;96 DPI (screen resolution)</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_2">
<value xml:lang="en-US">150;150 DPI (projector resolution)</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_3">
<value xml:lang="en-US">250;250 DPI (print resolution)</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_4">
<value xml:lang="en-US">300;300 DPI (print resolution)</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_5">
<value xml:lang="en-US">600;600 DPI (print resolution)</value>
</prop>
<prop oor:name="STR_EMBED_LINKED_GRAPHICS">
<value xml:lang="en-US">~Embed external images</value>
</prop>
<prop oor:name="STR_OLE_OBJECTS">
<value xml:lang="en-US">OLE Objects</value>
</prop>
<prop oor:name="STR_OLE_OPTIMIZATION">
<value xml:lang="en-US">Choose settings for replacing OLE objects</value>
</prop>
<prop oor:name="STR_OLE_REPLACE">
<value xml:lang="en-US">Create static replacement images for OLE objects</value>
</prop>
<prop oor:name="STR_ALL_OLE_OBJECTS">
<value xml:lang="en-US">For ~all OLE objects</value>
</prop>
<prop oor:name="STR_ALIEN_OLE_OBJECTS_ONLY">
<value xml:lang="en-US">~For OLE objects not based on OpenDocument format</value>
</prop>
<prop oor:name="STR_OLE_OBJECTS_DESC">
<value xml:lang="en-US">Object Linking and Embedding (OLE) is a technology that allows embedding and linking to documents and other objects.
@@ -121,39 +44,12 @@ The current presentation contains no OLE objects.</value>
<prop oor:name="STR_SLIDES">
<value xml:lang="en-US">Slides</value>
</prop>
<prop oor:name="STR_CHOOSE_SLIDES">
<value xml:lang="en-US">Choose which slides to delete</value>
</prop>
<prop oor:name="STR_DELETE_MASTER_PAGES">
<value xml:lang="en-US">Delete unused ~master slides</value>
</prop>
<prop oor:name="STR_DELETE_NOTES_PAGES">
<value xml:lang="en-US">~Clear notes</value>
</prop>
<prop oor:name="STR_DELETE_HIDDEN_SLIDES">
<value xml:lang="en-US">Delete hidden ~slides</value>
</prop>
<prop oor:name="STR_CUSTOM_SHOW">
<value xml:lang="en-US">Delete slides that are not used for the ~custom slide show</value>
</prop>
<prop oor:name="STR_SUMMARY">
<value xml:lang="en-US">Summary</value>
</prop>
<prop oor:name="STR_SUMMARY_TITLE">
<value xml:lang="en-US">Choose where to apply the following changes</value>
</prop>
<prop oor:name="STR_APPLY_TO_CURRENT">
<value xml:lang="en-US">~Apply changes to current presentation</value>
</prop>
<prop oor:name="STR_AUTOMATICALLY_OPEN">
<value xml:lang="en-US">~Open newly created presentation</value>
</prop>
<prop oor:name="STR_SAVE_SETTINGS">
<value xml:lang="en-US">~Save settings as</value>
</prop>
<prop oor:name="STR_SAVE_AS">
<value xml:lang="en-US">~Duplicate presentation before applying changes</value>
</prop>
<prop oor:name="STR_DELETE_SLIDES">
<value xml:lang="en-US">Delete %SLIDES slides.</value>
</prop>
@@ -163,12 +59,6 @@ The current presentation contains no OLE objects.</value>
<prop oor:name="STR_CREATE_REPLACEMENT">
<value xml:lang="en-US">Create replacement images for %OLE objects.</value>
</prop>
<prop oor:name="STR_CURRENT_FILESIZE">
<value xml:lang="en-US">Current file size:</value>
</prop>
<prop oor:name="STR_ESTIMATED_FILESIZE">
<value xml:lang="en-US">Estimated new file size:</value>
</prop>
<prop oor:name="MY_SETTINGS">
<value xml:lang="en-US">My Settings </value>
</prop>
diff --git a/officecfg/registry/schema/org/openoffice/Office/PresentationMinimizer.xcs b/officecfg/registry/schema/org/openoffice/Office/PresentationMinimizer.xcs
index 4ed868a..d214880 100644
--- a/officecfg/registry/schema/org/openoffice/Office/PresentationMinimizer.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/PresentationMinimizer.xcs
@@ -129,120 +129,18 @@
<info><desc>String STR_SUN_OPTIMIZATION_WIZARD2</desc></info>
<value>Presentation Minimizer</value>
</prop>
<prop oor:name="STR_STEPS" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_STEPS.</desc></info>
<value>Steps</value>
</prop>
<prop oor:name="STR_BACK" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_BACK.</desc></info>
<value>< ~Back</value>
</prop>
<prop oor:name="STR_NEXT" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_NEXT.</desc></info>
<value>~Next ></value>
</prop>
<prop oor:name="STR_FINISH" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_FINISH.</desc></info>
<value>~Finish</value>
</prop>
<prop oor:name="STR_CANCEL" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_CANCEL.</desc></info>
<value>Cancel</value>
</prop>
<prop oor:name="STR_INTRODUCTION" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_INTRODUCTION.</desc></info>
<value>Introduction</value>
</prop>
<prop oor:name="STR_INTRODUCTION_T" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_INTRODUCTION_T.</desc></info>
<value>The Presentation Minimizer is used to reduce the file size of the current presentation. Images will be compressed and data, that is no longer needed, will be removed.
At the last step of the wizard you can choose to apply the changes to the current presentation or to create an optimized new version of the presentation.</value>
</prop>
<prop oor:name="STR_CHOSE_SETTINGS" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_CHOSE_SETTINGS.</desc></info>
<value>~Choose settings for the Presentation Minimization Wizard</value>
</prop>
<prop oor:name="STR_REMOVE" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_REMOVE.</desc></info>
<value>~Delete</value>
</prop>
<prop oor:name="STR_GRAPHIC_OPTIMIZATION" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_GRAPHIC_OPTIMIZATION.</desc></info>
<value>Choose settings for optimizing images</value>
</prop>
<prop oor:name="STR_IMAGE_OPTIMIZATION" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_IMAGE_OPTIMIZATION.</desc></info>
<value>Images</value>
</prop>
<prop oor:name="STR_LOSSLESS_COMPRESSION" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_LOSSLESS_COMPRESSION.</desc></info>
<value>~Lossless compression</value>
</prop>
<prop oor:name="STR_JPEG_COMPRESSION" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_JPEG_COMPRESSION.</desc></info>
<value>~JPEG compression</value>
</prop>
<prop oor:name="STR_QUALITY" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_QUALITY.</desc></info>
<value>~Quality</value>
</prop>
<prop oor:name="STR_REMOVE_CROP_AREA" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_REMOVE_CROP_AREA.</desc></info>
<value>~Delete cropped image areas</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_IMAGE_RESOLUTION.</desc></info>
<value>~Image Resolution</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_0" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_IMAGE_RESOLUTION_0.</desc></info>
<value>0;<no change></value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_1" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_IMAGE_RESOLUTION_1.</desc></info>
<value>96;96 DPI (screen resolution)</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_2" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_IMAGE_RESOLUTION_2.</desc></info>
<value>150;150 DPI (projector resolution)</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_3" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_IMAGE_RESOLUTION_3.</desc></info>
<value>250;250 DPI</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_4" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_IMAGE_RESOLUTION_4.</desc></info>
<value>300;300 DPI (print resolution)</value>
</prop>
<prop oor:name="STR_IMAGE_RESOLUTION_5" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_IMAGE_RESOLUTION_5.</desc></info>
<value>600;600 DPI</value>
</prop>
<prop oor:name="STR_EMBED_LINKED_GRAPHICS" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_EMBED_LINKED_GRAPHICS.</desc></info>
<value>~Embed external images</value>
</prop>
<prop oor:name="STR_OLE_OBJECTS" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_OLE_OBJECTS.</desc></info>
<value>OLE Objects</value>
</prop>
<prop oor:name="STR_OLE_OPTIMIZATION" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_OLE_OPTIMIZATION.</desc></info>
<value>Choose settings for replacing OLE objects</value>
</prop>
<prop oor:name="STR_OLE_REPLACE" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_OLE_REPLACE.</desc></info>
<value>Create static replacement images for OLE objects</value>
</prop>
<prop oor:name="STR_ALL_OLE_OBJECTS" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_ALL_OLE_OBJECTS.</desc></info>
<value>For ~all OLE objects</value>
</prop>
<prop oor:name="STR_ALIEN_OLE_OBJECTS_ONLY" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_ALIEN_OLE_OBJECTS_ONLY.</desc></info>
<value>~For OLE objects not based on OpenDocument format</value>
</prop>
<prop oor:name="STR_OLE_OBJECTS_DESC" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_OLE_OBJECTS_DESC.</desc></info>
<value>Object Linking and Embedding (OLE) is a technology that allows embedding and linking to documents and other objects.
@@ -259,50 +157,14 @@ The current presentation contains no OLE objects.</value>
<info><desc>String STR_SLIDES.</desc></info>
<value>Slides</value>
</prop>
<prop oor:name="STR_CHOOSE_SLIDES" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_CHOOSE_SLIDES.</desc></info>
<value>Choose which slides to delete</value>
</prop>
<prop oor:name="STR_DELETE_MASTER_PAGES" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_DELETE_MASTER_PAGES.</desc></info>
<value>Delete unused ~master pages</value>
</prop>
<prop oor:name="STR_DELETE_NOTES_PAGES" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_DELETE_NOTES_PAGES.</desc></info>
<value>~Clear notes</value>
</prop>
<prop oor:name="STR_DELETE_HIDDEN_SLIDES" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_DELETE_HIDDEN_SLIDES.</desc></info>
<value>Delete hidden ~slides</value>
</prop>
<prop oor:name="STR_CUSTOM_SHOW" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_CUSTOM_SHOW.</desc></info>
<value>Delete slides that are not used for the ~custom slide show</value>
</prop>
<prop oor:name="STR_SUMMARY" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_SUMMARY.</desc></info>
<value>Summary</value>
</prop>
<prop oor:name="STR_SUMMARY_TITLE" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_SUMMARY_TITLE.</desc></info>
<value>Choose where to apply the following changes</value>
</prop>
<prop oor:name="STR_APPLY_TO_CURRENT" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_APPLY_TO_CURRENT.</desc></info>
<value>~Apply changes to current presentation</value>
</prop>
<prop oor:name="STR_AUTOMATICALLY_OPEN" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_AUTOMATICALLY_OPEN.</desc></info>
<value>~Open newly created presentation</value>
</prop>
<prop oor:name="STR_SAVE_SETTINGS" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_SAVE_SETTINGS.</desc></info>
<value>~Save settings as</value>
</prop>
<prop oor:name="STR_SAVE_AS" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_SAVE_AS.</desc></info>
<value>~Duplicate presentation before applying changes</value>
</prop>
<prop oor:name="STR_DELETE_SLIDES" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_DELETE_SLIDES.</desc></info>
<value>Delete %SLIDES slides</value>
@@ -317,14 +179,6 @@ The current presentation contains no OLE objects.</value>
<info><desc>String STR_CREATE_REPLACEMENT.</desc></info>
<value>Create replacement images for %OLE objects.</value>
</prop>
<prop oor:name="STR_CURRENT_FILESIZE" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_CURRENT_FILESIZE.</desc></info>
<value>Current file size:</value>
</prop>
<prop oor:name="STR_ESTIMATED_FILESIZE" oor:type="xs:string" oor:localized="true">
<info><desc>String STR_ESTIMATED_FILESIZE.</desc></info>
<value>Estimated new file size:</value>
</prop>
<prop oor:name="MY_SETTINGS" oor:type="xs:string" oor:localized="true">
<info><desc>String MY_SETTINGS.</desc></info>
<value>My Settings</value>
diff --git a/sd/UIConfig_simpress.mk b/sd/UIConfig_simpress.mk
index 3476e40..d71e7ff 100644
--- a/sd/UIConfig_simpress.mk
+++ b/sd/UIConfig_simpress.mk
@@ -150,6 +150,11 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/simpress,\
sd/uiconfig/simpress/ui/optimpressgeneralpage \
sd/uiconfig/simpress/ui/pagesfieldbox \
sd/uiconfig/simpress/ui/photoalbum \
sd/uiconfig/simpress/ui/pmimagespage \
sd/uiconfig/simpress/ui/pmintropage \
sd/uiconfig/simpress/ui/pmobjectspage \
sd/uiconfig/simpress/ui/pmslidespage \
sd/uiconfig/simpress/ui/pmsummarypage \
sd/uiconfig/simpress/ui/presentationdialog \
sd/uiconfig/simpress/ui/prntopts \
sd/uiconfig/simpress/ui/publishingdialog \
diff --git a/sd/uiconfig/simpress/ui/pmimagespage.ui b/sd/uiconfig/simpress/ui/pmimagespage.ui
new file mode 100644
index 0000000..f3c6068
--- /dev/null
+++ b/sd/uiconfig/simpress/ui/pmimagespage.ui
@@ -0,0 +1,201 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface domain="sd">
<requires lib="gtk+" version="3.20"/>
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkBox" id="PMImagesPage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border-width">6</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label-xalign">0</property>
<property name="shadow-type">none</property>
<child>
<!-- n-columns=1 n-rows=6 -->
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">12</property>
<property name="margin-end">6</property>
<property name="margin-top">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="row-spacing">6</property>
<child>
<object class="GtkCheckButton" id="STR_REMOVE_CROP_AREA">
<property name="label" translatable="yes" context="pmimagespage|STR_REMOVE_CROP_AREA">_Delete cropped image areas</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="STR_EMBED_LINKED_GRAPHICS">
<property name="label" translatable="yes" context="pmimagespage|STR_EMBED_LINKED_GRAPHICS">_Embed external images</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">5</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel" id="STR_IMAGE_RESOLUTION">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="pmimagespage|STR_IMAGE_RESOLUTION">Reduce _image resolution</property>
<property name="use-underline">True</property>
<property name="mnemonic-widget">LB_RESOLUTION</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="LB_RESOLUTION">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item id="0" translatable="yes" context="pmimagespage|LB_RESOLUTION"><no change></item>
<item id="96" translatable="yes" context="pmimagespage|LB_RESOLUTION">96 DPI (screen resolution)</item>
<item id="150" translatable="yes" context="pmimagespage|LB_RESOLUTION">150 DPI (projector resolution)</item>
<item id="300" translatable="yes" context="pmimagespage|LB_RESOLUTION">300 DPI (print resolution)</item>
<item id="600" translatable="yes" context="pmimagespage|LB_RESOLUTION">600 DPI (print resolution)</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="STR_LOSSLESS_COMPRESSION">
<property name="label" translatable="yes" context="pmimagespage|STR_LOSSLESS_COMPRESSION">_Lossless compression</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="active">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="STR_JPEG_COMPRESSION">
<property name="label" translatable="yes" context="pmimagespage|STR_JPEG_COMPRESSION">_JPEG compression</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
<property name="group">STR_LOSSLESS_COMPRESSION</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">24</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel" id="STR_QUALITY">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="pmimagespage|STR_IMAGE_RESOLUTION">_Quality in %</property>
<property name="use-underline">True</property>
<property name="mnemonic-widget">SB_QUALITY</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="SB_QUALITY">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="adjustment">adjustment1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="STR_GRAPHIC_OPTIMIZATION">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="pmimagespages|STR_GRAPHIC_OPTIMIZATION">Choose settings for optimizing images</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</interface>
diff --git a/sd/uiconfig/simpress/ui/pmintropage.ui b/sd/uiconfig/simpress/ui/pmintropage.ui
new file mode 100644
index 0000000..6361cf3
--- /dev/null
+++ b/sd/uiconfig/simpress/ui/pmintropage.ui
@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface domain="sd">
<requires lib="gtk+" version="3.20"/>
<object class="GtkBox" id="PMIntroPage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border-width">6</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label-xalign">0</property>
<property name="shadow-type">none</property>
<child>
<!-- n-columns=1 n-rows=4 -->
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">12</property>
<property name="margin-end">6</property>
<property name="margin-top">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="row-spacing">6</property>
<child>
<object class="GtkLabel" id="STR_INTRODUCTION_T">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label" translatable="yes" context="pmintropage|STR_INTRODUCTION_T">The Presentation Minimizer is used to reduce the file size of the current presentation. Images will be compressed and data, that is no longer needed, will be removed.
At the last step of the wizard you can choose to apply the changes to the current presentation or to create an optimized new version of the presentation.</property>
<property name="wrap">True</property>
<property name="width-chars">58</property>
<property name="max-width-chars">58</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<!-- n-columns=2 n-rows=1 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkComboBoxText" id="LB_SETTINGS">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="STR_REMOVE">
<property name="label" translatable="yes" context="pmintropage:STR_REMOVE">_Delete</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="use-underline">True</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
</packing>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="STR_CHOSE_SETTINGS">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes" context="pmintropage|STR_CHOSE_SETTINGS">_Choose settings for Presentation Minimizer</property>
<property name="use-underline">True</property>
<property name="mnemonic-widget">LB_SETTINGS</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="STR_INTRODUCTION">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="pmintropage|STR_INTRODUCTION">Introduction</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</interface>
diff --git a/sd/uiconfig/simpress/ui/pmobjectspage.ui b/sd/uiconfig/simpress/ui/pmobjectspage.ui
new file mode 100644
index 0000000..3034321
--- /dev/null
+++ b/sd/uiconfig/simpress/ui/pmobjectspage.ui
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface domain="sd">
<requires lib="gtk+" version="3.20"/>
<object class="GtkBox" id="PMObjectsPage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border-width">6</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label-xalign">0</property>
<property name="shadow-type">none</property>
<child>
<!-- n-columns=1 n-rows=4 -->
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">12</property>
<property name="margin-end">6</property>
<property name="margin-top">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="row-spacing">6</property>
<child>
<object class="GtkCheckButton" id="STR_OLE_REPLACE">
<property name="label" translatable="yes" context="pmimagespage|STR_OLE_REPLACE">Create static replacement images for OLE objects</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="active">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="STR_ALL_OLE_OBJECTS">
<property name="label" translatable="yes" context="pmobjectspage|STR_ALL_OLE_OBJECTS">For _all OLE objects</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="margin-start">18</property>
<property name="use-underline">True</property>
<property name="active">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="STR_ALIEN_OLE_OBJECTS_ONLY">
<property name="label" translatable="yes" context="pmobjectspage|STR_ALIEN_OLE_OBJECTS_ONLY">_For OLE objects not based on OpenDocument format</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="margin-start">18</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
<property name="group">STR_ALL_OLE_OBJECTS</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="STR_OLE_OBJECTS_DESC">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">6</property>
<property name="margin-top">12</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="wrap">True</property>
<property name="width-chars">58</property>
<property name="max-width-chars">58</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">3</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="STR_OLE_OPTIMIZATION">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="pmobjectspages|STR_OLE_OPTIMIZATION">Choose settings for replacing OLE objects</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</interface>
diff --git a/sd/uiconfig/simpress/ui/pmslidespage.ui b/sd/uiconfig/simpress/ui/pmslidespage.ui
new file mode 100644
index 0000000..fdc9fa5
--- /dev/null
+++ b/sd/uiconfig/simpress/ui/pmslidespage.ui
@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface domain="sd">
<requires lib="gtk+" version="3.20"/>
<object class="GtkBox" id="PMSlidesPage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border-width">6</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label-xalign">0</property>
<property name="shadow-type">none</property>
<child>
<!-- n-columns=1 n-rows=5 -->
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">12</property>
<property name="margin-end">6</property>
<property name="margin-top">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="row-spacing">6</property>
<child>
<object class="GtkCheckButton" id="STR_DELETE_MASTER_PAGES">
<property name="label" translatable="yes" context="pmslidespage|STR_DELETE_MASTER_PAGES">Delete unused _master slides</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="STR_DELETE_HIDDEN_SLIDES">
<property name="label" translatable="yes" context="pmslidespage|STR_DELETE_HIDDEN_SLIDES">Delete hidden _slides</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="STR_CUSTOM_SHOW">
<property name="label" translatable="yes" context="pmslidespage|STR_CUSTOM_SHOW">Delete slides that are not used for the _custom slide show</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
<accessibility>
<relation type="label-for" target="LB_SLIDES"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="LB_SLIDES">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="margin-start">12</property>
<accessibility>
<relation type="labelled-by" target="STR_CUSTOM_SHOW"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="STR_DELETE_NOTES_PAGES">
<property name="label" translatable="yes" context="pmslidespage|STR_DELETE_NOTES_PAGES">_Clear notes</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">4</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="STR_CHOOSE_SLIDES">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="pmslidespages|STR_CHOOSE_SLIDES">Choose which slides to delete</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</interface>
diff --git a/sd/uiconfig/simpress/ui/pmsummarypage.ui b/sd/uiconfig/simpress/ui/pmsummarypage.ui
new file mode 100644
index 0000000..51ec684
--- /dev/null
+++ b/sd/uiconfig/simpress/ui/pmsummarypage.ui
@@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface domain="sd">
<requires lib="gtk+" version="3.20"/>
<object class="GtkBox" id="PMSummaryPage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border-width">6</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label-xalign">0</property>
<property name="shadow-type">none</property>
<child>
<!-- n-columns=1 n-rows=10 -->
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">12</property>
<property name="margin-end">6</property>
<property name="margin-top">6</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="row-spacing">6</property>
<child>
<object class="GtkLabel" id="LABEL1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="STR_APPLY_TO_CURRENT">
<property name="label" translatable="yes" context="pmsummarypage|STR_APPLY_TO_CURRENT">_Apply changes to current presentation</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="margin-top">12</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
<property name="group">STR_SAVE_AS</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="STR_SAVE_AS">
<property name="label" translatable="yes" context="pmsummarypage|STR_SAVE_AS">_Duplicate presentation before applying changes</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">5</property>
</packing>
</child>
<child>
<object class="GtkProgressBar" id="PROGRESS">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">7</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">8</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">12</property>
<child>
<object class="GtkCheckButton" id="STR_SAVE_SETTINGS">
<property name="label" translatable="yes" context="pmsummarypage|STR_SAVE_SETTINGS">_Save settings as</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="use-underline">True</property>
<property name="draw-indicator">True</property>
<accessibility>
<relation type="label-for" target="MY_SETTINGS"/>
</accessibility>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="MY_SETTINGS">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="has-entry">True</property>
<child internal-child="entry">
<object class="GtkEntry">
<property name="can-focus">False</property>
</object>
</child>
<accessibility>
<relation type="labelled-by" target="STR_SAVE_SETTINGS"/>
</accessibility>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">9</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="LABEL2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="LABEL3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<!-- n-columns=2 n-rows=2 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">18</property>
<property name="row-spacing">6</property>
<property name="column-spacing">12</property>
<child>
<object class="GtkLabel" id="STR_CURRENT_FILESIZE">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="pmsummarypage|STR_CURRENT_FILESIZE">Current file size:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="STR_ESTIMATED_FILESIZE">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="pmsummarypage|STR_ESTIMATED_FILESIZE">Estimated new file size:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="CURRENT_FILESIZE">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="ESTIMATED_FILESIZE">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">1</property>
</packing>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="STR_STATUS">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">12</property>
<property name="use-underline">True</property>
<property name="mnemonic-widget">PROGRESS</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">6</property>
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="STR_SUMMARY_TITLE">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes" context="pmsummarypages|STR_SUMMARY_TITLE">Choose where to apply the following changes</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
</interface>
diff --git a/sdext/source/minimizer/configurationaccess.cxx b/sdext/source/minimizer/configurationaccess.cxx
index 8373e1f..55e60c5 100644
--- a/sdext/source/minimizer/configurationaccess.cxx
+++ b/sdext/source/minimizer/configurationaccess.cxx
@@ -140,10 +140,8 @@ bool OptimizerSettings::operator==( const OptimizerSettings& rOptimizerSettings
&& ( rOptimizerSettings.mbDeleteUnusedMasterPages == mbDeleteUnusedMasterPages )
&& ( rOptimizerSettings.mbDeleteHiddenSlides == mbDeleteHiddenSlides )
&& ( rOptimizerSettings.mbDeleteNotesPages == mbDeleteNotesPages );
// && ( rOptimizerSettings.mbOpenNewDocument == mbOpenNewDocument );
}
ConfigurationAccess::ConfigurationAccess( const Reference< uno::XComponentContext >& rxContext ) :
mxContext( rxContext )
{
diff --git a/sdext/source/minimizer/configurationaccess.hxx b/sdext/source/minimizer/configurationaccess.hxx
index d4d4c4d..5cf884f 100644
--- a/sdext/source/minimizer/configurationaccess.hxx
+++ b/sdext/source/minimizer/configurationaccess.hxx
@@ -96,14 +96,14 @@ class ConfigurationAccess
std::vector< OptimizerSettings >& GetOptimizerSettings() { return maSettings; };
std::vector< OptimizerSettings >::iterator GetOptimizerSettingsByName( const OUString& rName );
private:
protected:
css::uno::Reference< css::uno::XComponentContext > mxContext;
private:
std::map < PPPOptimizerTokenEnum, OUString > maStrings;
std::vector< OptimizerSettings > maSettings;
css::uno::Reference< css::uno::XComponentContext > mxContext;
void LoadStrings();
void LoadConfiguration();
css::uno::Reference< css::uno::XInterface > OpenConfiguration( bool bReadOnly );
diff --git a/sdext/source/minimizer/optimizerdialog.cxx b/sdext/source/minimizer/optimizerdialog.cxx
index 3112c6f..15ce1c3 100644
--- a/sdext/source/minimizer/optimizerdialog.cxx
+++ b/sdext/source/minimizer/optimizerdialog.cxx
@@ -55,164 +55,220 @@ using namespace ::com::sun::star::frame;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::container;
IntroPage::IntroPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog)
: vcl::OWizardPage(pPage, &rOptimizerDialog, "modules/simpress/ui/pmintropage.ui", "PMIntroPage")
, mrOptimizerDialog(rOptimizerDialog)
, mxComboBox(m_xBuilder->weld_combo_box("LB_SETTINGS"))
, mxButton(m_xBuilder->weld_button("STR_REMOVE"))
{
mxComboBox->connect_changed(LINK(this, IntroPage, ComboBoxActionPerformed));
mxButton->connect_clicked(LINK(this, IntroPage, ButtonActionPerformed));
}
void IntroPage::UpdateControlStates(const std::vector<OUString>& rItemList, int nSelectedItem, bool bRemoveButtonEnabled)
{
mxComboBox->clear();
for (const auto& a : rItemList)
mxComboBox->append_text(a);
mxComboBox->set_active(nSelectedItem);
mxButton->set_sensitive(bRemoveButtonEnabled);
}
SlidesPage::SlidesPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog)
: vcl::OWizardPage(pPage, &rOptimizerDialog, "modules/simpress/ui/pmslidespage.ui", "PMSlidesPage")
, mrOptimizerDialog(rOptimizerDialog)
, mxMasterSlides(m_xBuilder->weld_check_button("STR_DELETE_MASTER_PAGES"))
, mxHiddenSlides(m_xBuilder->weld_check_button("STR_DELETE_HIDDEN_SLIDES"))
, mxUnusedSlides(m_xBuilder->weld_check_button("STR_CUSTOM_SHOW"))
, mxComboBox(m_xBuilder->weld_combo_box("LB_SLIDES"))
, mxClearNodes(m_xBuilder->weld_check_button("STR_DELETE_NOTES_PAGES"))
{
mxMasterSlides->connect_toggled(LINK(this, SlidesPage, UnusedMasterPagesActionPerformed));
mxHiddenSlides->connect_toggled(LINK(this, SlidesPage, UnusedHiddenSlidesActionPerformed));
mxUnusedSlides->connect_toggled(LINK(this, SlidesPage, UnusedSlidesActionPerformed));
mxClearNodes->connect_toggled(LINK(this, SlidesPage, DeleteNotesActionPerformed));
}
void SlidesPage::Init(const css::uno::Sequence<OUString>& rCustomShowList)
{
mxComboBox->clear();
for (const auto& a : rCustomShowList)
mxComboBox->append_text(a);
mxUnusedSlides->set_sensitive(rCustomShowList.hasElements());
}
void SlidesPage::UpdateControlStates(bool bDeleteUnusedMasterPages, bool bDeleteHiddenSlides, bool bDeleteNotesPages)
{
mxMasterSlides->set_active(bDeleteUnusedMasterPages);
mxHiddenSlides->set_active(bDeleteHiddenSlides);
mxClearNodes->set_active(bDeleteNotesPages);
mxComboBox->set_sensitive(mxUnusedSlides->get_sensitive());
}
ImagesPage::ImagesPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog)
: vcl::OWizardPage(pPage, &rOptimizerDialog, "modules/simpress/ui/pmimagespage.ui", "PMImagesPage")
, mrOptimizerDialog(rOptimizerDialog)
, m_xLossLessCompression(m_xBuilder->weld_radio_button("STR_LOSSLESS_COMPRESSION"))
, m_xQualityLabel(m_xBuilder->weld_label("STR_QUALITY"))
, m_xQuality(m_xBuilder->weld_spin_button("SB_QUALITY"))
, m_xJpegCompression(m_xBuilder->weld_radio_button("STR_JPEG_COMPRESSION"))
, m_xResolution(m_xBuilder->weld_combo_box("LB_RESOLUTION"))
, m_xRemoveCropArea(m_xBuilder->weld_check_button("STR_REMOVE_CROP_AREA"))
, m_xEmbedLinkedGraphics(m_xBuilder->weld_check_button("STR_EMBED_LINKED_GRAPHICS"))
{
m_xRemoveCropArea->connect_toggled(LINK(this, ImagesPage, RemoveCropAreaActionPerformed));
m_xEmbedLinkedGraphics->connect_toggled(LINK(this, ImagesPage, EmbedLinkedGraphicsActionPerformed));
m_xResolution->connect_changed(LINK(this, ImagesPage, ComboBoxActionPerformed));
m_xQuality->connect_value_changed(LINK(this, ImagesPage, SpinButtonActionPerformed));
m_xJpegCompression->connect_toggled(LINK(this, ImagesPage, CompressionActionPerformed));
m_xLossLessCompression->connect_toggled(LINK(this, ImagesPage, CompressionActionPerformed));
}
void ImagesPage::UpdateControlStates(bool bJPEGCompression, int nJPEGQuality, bool bRemoveCropArea,
int nResolution, bool bEmbedLinkedGraphics)
{
m_xLossLessCompression->set_active(!bJPEGCompression);
m_xJpegCompression->set_active(bJPEGCompression);
m_xQualityLabel->set_sensitive(bJPEGCompression);
m_xQuality->set_sensitive(bJPEGCompression);
m_xQuality->set_value(nJPEGQuality);
m_xResolution->set_active_id(OUString::number(nResolution));
m_xRemoveCropArea->set_active(bRemoveCropArea);
m_xEmbedLinkedGraphics->set_active(bEmbedLinkedGraphics);
}
ObjectsPage::ObjectsPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog)
: vcl::OWizardPage(pPage, &rOptimizerDialog, "modules/simpress/ui/pmobjectspage.ui", "PMObjectsPage")
, mrOptimizerDialog(rOptimizerDialog)
, m_xCreateStaticImage(m_xBuilder->weld_check_button("STR_OLE_REPLACE"))
, m_xAllOLEObjects(m_xBuilder->weld_radio_button("STR_ALL_OLE_OBJECTS"))
, m_xForeignOLEObjects(m_xBuilder->weld_radio_button("STR_ALIEN_OLE_OBJECTS_ONLY"))
, m_xLabel(m_xBuilder->weld_label("STR_OLE_OBJECTS_DESC"))
{
m_xCreateStaticImage->connect_toggled(LINK(this, ObjectsPage, OLEOptimizationActionPerformed));
m_xAllOLEObjects->connect_toggled(LINK(this, ObjectsPage, OLEActionPerformed));
m_xForeignOLEObjects->connect_toggled(LINK(this, ObjectsPage, OLEActionPerformed));
}
void ObjectsPage::Init(const OUString& rDesc)
{
m_xLabel->set_label(rDesc);
}
void ObjectsPage::UpdateControlStates(bool bConvertOLEObjects, int nOLEOptimizationType)
{
m_xCreateStaticImage->set_active(bConvertOLEObjects);
m_xAllOLEObjects->set_sensitive(bConvertOLEObjects);
m_xForeignOLEObjects->set_sensitive(bConvertOLEObjects);
m_xAllOLEObjects->set_active(nOLEOptimizationType == 0);
m_xForeignOLEObjects->set_active(nOLEOptimizationType == 1);
}
SummaryPage::SummaryPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog)
: vcl::OWizardPage(pPage, &rOptimizerDialog, "modules/simpress/ui/pmsummarypage.ui", "PMSummaryPage")
, mrOptimizerDialog(rOptimizerDialog)
, m_xLabel1(m_xBuilder->weld_label("LABEL1"))
, m_xLabel2(m_xBuilder->weld_label("LABEL2"))
, m_xLabel3(m_xBuilder->weld_label("LABEL3"))
, m_xCurrentSize(m_xBuilder->weld_label("CURRENT_FILESIZE"))
, m_xEstimatedSize(m_xBuilder->weld_label("ESTIMATED_FILESIZE"))
, m_xStatus(m_xBuilder->weld_label("STR_STATUS"))
, m_xProgress(m_xBuilder->weld_progress_bar("PROGRESS"))
, m_xApplyToCurrent(m_xBuilder->weld_radio_button("STR_APPLY_TO_CURRENT"))
, m_xSaveToNew(m_xBuilder->weld_radio_button("STR_SAVE_AS"))
, m_xComboBox(m_xBuilder->weld_combo_box("MY_SETTINGS"))
, m_xSaveSettings(m_xBuilder->weld_check_button("STR_SAVE_SETTINGS"))
{
m_xApplyToCurrent->connect_toggled(LINK(this, SummaryPage, SaveAsNewActionPerformed));
m_xSaveToNew->connect_toggled(LINK(this, SummaryPage, SaveAsNewActionPerformed));
m_xSaveSettings->connect_toggled(LINK(this, SummaryPage, SaveSettingsActionPerformed));
}
void SummaryPage::Init(const OUString& rSettingsName, bool bIsReadonly)
{
m_xComboBox->set_entry_text(rSettingsName);
m_xApplyToCurrent->set_sensitive(!bIsReadonly);
m_xSaveToNew->set_sensitive(!bIsReadonly);
}
void SummaryPage::UpdateControlStates(bool bSaveAs, bool bSaveSettingsEnabled,
const std::vector<OUString>& rItemList,
const std::vector<OUString>& rSummaryStrings,
const OUString& rCurrentFileSize,
const OUString& rEstimatedFileSize)
{
m_xApplyToCurrent->set_active(!bSaveAs);
m_xSaveToNew->set_active(bSaveAs);
for (const auto& a : rItemList)
m_xComboBox->append_text(a);
m_xSaveSettings->set_sensitive(bSaveSettingsEnabled);
m_xComboBox->set_sensitive(bSaveSettingsEnabled && m_xSaveSettings->get_active());
assert(rSummaryStrings.size() == 3);
m_xLabel1->set_label(rSummaryStrings[0]);
m_xLabel2->set_label(rSummaryStrings[1]);
m_xLabel3->set_label(rSummaryStrings[2]);
m_xCurrentSize->set_label(rCurrentFileSize);
m_xEstimatedSize->set_label(rEstimatedFileSize);
}
void SummaryPage::UpdateStatusLabel(const OUString& rStatus)
{
m_xStatus->set_label(rStatus);
}
void SummaryPage::UpdateProgressValue(int nProgress)
{
m_xProgress->set_percentage(nProgress);
}
void OptimizerDialog::InitDialog()
{
// setting the dialog properties
OUString pNames[] = {
OUString("Closeable"),
OUString("Height"),
OUString("Moveable"),
OUString("PositionX"),
OUString("PositionY"),
OUString("Title"),
OUString("Width") };
Any pValues[] = {
Any( true ),
Any( sal_Int32( DIALOG_HEIGHT ) ),
Any( true ),
Any( sal_Int32( 200 ) ),
Any( sal_Int32( 52 ) ),
Any( getString( STR_SUN_OPTIMIZATION_WIZARD2 ) ),
Any( sal_Int32( OD_DIALOG_WIDTH ) ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
setPropertyValues(aNames, aValues);
set_title(getString(STR_SUN_OPTIMIZATION_WIZARD2));
}
void OptimizerDialog::InitRoadmap()
{
try
{
OUString pNames[] = {
OUString("Height"),
OUString("PositionX"),
OUString("PositionY"),
OUString("Step"),
OUString("TabIndex"),
OUString("Width") };
declarePath(
0,
{ITEM_ID_INTRODUCTION,
ITEM_ID_SLIDES,
ITEM_ID_GRAPHIC_OPTIMIZATION,
ITEM_ID_OLE_OPTIMIZATION,
ITEM_ID_SUMMARY}
);
Any pValues[] = {
Any( sal_Int32( DIALOG_HEIGHT - 26 ) ),
Any( sal_Int32( 0 ) ),
Any( sal_Int32( 0 ) ),
Any( sal_Int32( 0 ) ),
Any( mnTabIndex++ ),
Any( sal_Int32( 85 ) ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
mxRoadmapControlModel = insertControlModel( "com.sun.star.awt.UnoControlRoadmapModel",
"rdmNavi", aNames, aValues );
Reference< XPropertySet > xPropertySet( mxRoadmapControlModel, UNO_QUERY_THROW );
xPropertySet->setPropertyValue( "Name", Any( OUString("rdmNavi") ) );
mxRoadmapControl = getControl( "rdmNavi" );
InsertRoadmapItem( 0, getString( STR_INTRODUCTION ), ITEM_ID_INTRODUCTION );
InsertRoadmapItem( 1, getString( STR_SLIDES ), ITEM_ID_SLIDES );
InsertRoadmapItem( 2, getString( STR_IMAGE_OPTIMIZATION ), ITEM_ID_GRAPHIC_OPTIMIZATION );
InsertRoadmapItem( 3, getString( STR_OLE_OBJECTS ), ITEM_ID_OLE_OPTIMIZATION );
InsertRoadmapItem( 4, getString( STR_SUMMARY ), ITEM_ID_SUMMARY );
xPropertySet->setPropertyValue( "ImageURL", Any( OUString("private:graphicrepository/" BMP_PRESENTATION_MINIMIZER) ) );
xPropertySet->setPropertyValue( "Activated", Any( true ) );
xPropertySet->setPropertyValue( "Complete", Any( true ) );
xPropertySet->setPropertyValue( "CurrentItemID", Any( sal_Int16(ITEM_ID_INTRODUCTION) ) );
xPropertySet->setPropertyValue( "Text", Any( getString( STR_STEPS ) ) );
}
catch( Exception& )
{
}
#if 0
xPropertySet->setPropertyValue( "ImageURL", Any( OUString("private:graphicrepository/" BMP_PRESENTATION_MINIMIZER) ) );
#endif
}
void OptimizerDialog::InsertRoadmapItem( const sal_Int32 nIndex, const OUString& rLabel, const sal_Int32 nItemID )
{
try
{
Reference< XSingleServiceFactory > xSFRoadmap( mxRoadmapControlModel, UNO_QUERY_THROW );
Reference< XIndexContainer > aIndexContainerRoadmap( mxRoadmapControlModel, UNO_QUERY_THROW );
Reference< XInterface > xRoadmapItem( xSFRoadmap->createInstance(), UNO_SET_THROW );
Reference< XPropertySet > xPropertySet( xRoadmapItem, UNO_QUERY_THROW );
xPropertySet->setPropertyValue( "Label", Any( rLabel ) );
xPropertySet->setPropertyValue( "Enabled", Any( true ) );
xPropertySet->setPropertyValue( "ID", Any( nItemID ) );
aIndexContainerRoadmap->insertByIndex( nIndex, Any( xRoadmapItem ) );
}
catch( Exception& )
{
}
}
void OptimizerDialog::UpdateConfiguration()
{
sal_Int16 nInt16 = 0;
Any aAny;
Sequence< sal_Int16 > aSelectedItems;
Sequence< OUString > aStringItemList;
// page0
aAny = getControlProperty( "ListBox0Pg0", "SelectedItems" );
if ( aAny >>= aSelectedItems )
{
if ( aSelectedItems.hasElements() )
{
sal_Int16 nSelectedItem = aSelectedItems[ 0 ];
aAny = getControlProperty( "ListBox0Pg0", "StringItemList" );
if ( aAny >>= aStringItemList )
{
if ( aStringItemList.getLength() > nSelectedItem )
SetConfigProperty( TK_Name, Any( aStringItemList[ nSelectedItem ] ) );
}
}
}
OUString sTKName(mpPage0->Get_TK_Name());
if (!sTKName.isEmpty())
SetConfigProperty(TK_Name, Any(sTKName));
aAny = getControlProperty( "CheckBox3Pg3", "State" );
if ( !((aAny >>= nInt16) && nInt16) )
return;
aAny = getControlProperty( "ListBox0Pg3", "SelectedItems" );
if ( !(aAny >>= aSelectedItems) )
return;
if ( aSelectedItems.hasElements() )
{
sal_Int16 nSelectedItem = aSelectedItems[ 0 ];
aAny = getControlProperty( "ListBox0Pg3", "StringItemList" );
if ( aAny >>= aStringItemList )
{
if ( aStringItemList.getLength() > nSelectedItem )
SetConfigProperty( TK_CustomShowName, Any( aStringItemList[ nSelectedItem ] ) );
}
}
// page1
OUString sTKCustomShowName(mpPage1->Get_TK_CustomShowName());
if (!sTKCustomShowName.isEmpty())
SetConfigProperty(TK_CustomShowName, Any(sTKCustomShowName));
}
OptimizerDialog::OptimizerDialog( const Reference< XComponentContext > &rxContext, Reference< XFrame > const & rxFrame, Reference< XDispatch > const & rxStatusDispatcher ) :
UnoDialog( rxContext, rxFrame ),
ConfigurationAccess( rxContext ),
mnCurrentStep( 0 ),
mnTabIndex( 0 ),
mxFrame( rxFrame ),
mxItemListener( new ItemListener( *this ) ),
mxActionListener( new ActionListener( *this ) ),
mxActionListenerListBox0Pg0( new ActionListenerListBox0Pg0( *this ) ),
mxTextListenerFormattedField0Pg1( new TextListenerFormattedField0Pg1( *this ) ),
mxTextListenerComboBox0Pg1( new TextListenerComboBox0Pg1( *this ) ),
mxSpinListenerFormattedField0Pg1( new SpinListenerFormattedField0Pg1( *this ) ),
mxStatusDispatcher( rxStatusDispatcher )
OptimizerDialog::OptimizerDialog( const Reference< XComponentContext > &rxContext, Reference< XFrame > const & rxFrame, Reference< XDispatch > const & rxStatusDispatcher )
: vcl::RoadmapWizardMachine(Application::GetFrameWeld(rxFrame->getComponentWindow()))
, ConfigurationAccess(rxContext)
, mnCurrentStep(0)
, mnTabIndex(0)
, mnEndStatus(RET_CANCEL)
, mxFrame(rxFrame)
, mxController(rxFrame->getController())
, mxStatusDispatcher(rxStatusDispatcher)
{
Reference< XStorable > xStorable( mxController->getModel(), UNO_QUERY_THROW );
mbIsReadonly = xStorable->isReadonly();
@@ -225,7 +281,9 @@ OptimizerDialog::OptimizerDialog( const Reference< XComponentContext > &rxContex
InitPage2();
InitPage3();
InitPage4();
ActivatePage( 0 );
ActivatePage();
m_xAssistant->set_current_page(0);
OptimizationStats aStats;
aStats.InitializeStatusValuesFromDocument( mxController->getModel() );
@@ -233,48 +291,71 @@ OptimizerDialog::OptimizerDialog( const Reference< XComponentContext > &rxContex
UpdateStatus( aStatusSequence );
}
OUString OptimizerDialog::getStateDisplayName(vcl::WizardTypes::WizardState nState) const
{
switch (nState)
{
case ITEM_ID_INTRODUCTION:
return getString(STR_INTRODUCTION);
case ITEM_ID_SLIDES:
return getString(STR_SLIDES);
case ITEM_ID_GRAPHIC_OPTIMIZATION:
return getString(STR_IMAGE_OPTIMIZATION);
case ITEM_ID_OLE_OPTIMIZATION:
return getString(STR_OLE_OBJECTS);
case ITEM_ID_SUMMARY:
return getString(STR_SUMMARY);
}
return OUString();
}
std::unique_ptr<BuilderPage> OptimizerDialog::createPage(vcl::WizardTypes::WizardState nState)
{
OString sIdent(OString::number(nState));
weld::Container* pPageContainer = m_xAssistant->append_page(sIdent);
std::unique_ptr<vcl::OWizardPage> xRet;
switch (nState)
{
case ITEM_ID_INTRODUCTION:
xRet.reset(new IntroPage(pPageContainer, *this));
mpPage0 = static_cast<IntroPage*>(xRet.get());
break;
case ITEM_ID_SLIDES:
xRet.reset(new SlidesPage(pPageContainer, *this));
mpPage1 = static_cast<SlidesPage*>(xRet.get());
break;
case ITEM_ID_GRAPHIC_OPTIMIZATION:
xRet.reset(new ImagesPage(pPageContainer, *this));
mpPage2 = static_cast<ImagesPage*>(xRet.get());
break;
case ITEM_ID_OLE_OPTIMIZATION:
xRet.reset(new ObjectsPage(pPageContainer, *this));
mpPage3 = static_cast<ObjectsPage*>(xRet.get());
break;
case ITEM_ID_SUMMARY:
xRet.reset(new SummaryPage(pPageContainer, *this));
mpPage4 = static_cast<SummaryPage*>(xRet.get());
break;
};
m_xAssistant->set_page_title(sIdent, getStateDisplayName(nState));
return xRet;
}
OptimizerDialog::~OptimizerDialog()
{
// not saving configuration if the dialog has been finished via cancel or close window
if ( endStatus() )
if (mnEndStatus == RET_OK)
SaveConfiguration();
}
void OptimizerDialog::execute()
{
Reference< XItemEventBroadcaster > xRoadmapBroadcaster( mxRoadmapControl, UNO_QUERY_THROW );
xRoadmapBroadcaster->addItemListener( mxItemListener );
UnoDialog::execute();
mnEndStatus = run();
UpdateConfiguration(); // taking actual control settings for the configuration
xRoadmapBroadcaster->removeItemListener( mxItemListener );
}
void OptimizerDialog::SwitchPage( sal_Int16 nNewStep )
{
if ( !(( nNewStep != mnCurrentStep ) && ( nNewStep <= MAX_STEP ) && ( nNewStep >= 0 )) )
return;
sal_Int16 nOldStep = mnCurrentStep;
if ( nNewStep == 0 )
disableControl( "btnNavBack" );
else if ( nOldStep == 0 )
enableControl( "btnNavBack" );
if ( nNewStep == MAX_STEP )
disableControl( "btnNavNext" );
else if ( nOldStep == MAX_STEP )
enableControl( "btnNavNext" );
setControlProperty( "rdmNavi", "CurrentItemID", Any( nNewStep ) );
DeactivatePage( nOldStep );
UpdateControlStates( nNewStep );
ActivatePage( nNewStep );
mnCurrentStep = nNewStep;
}
void OptimizerDialog::UpdateControlStates( sal_Int16 nPage )
@@ -297,27 +378,6 @@ void OptimizerDialog::UpdateControlStates( sal_Int16 nPage )
}
}
OUString OptimizerDialog::GetSelectedString( OUString const & token )
{
OUString aSelectedItem;
Sequence< sal_Int16 > sSelectedItems;
Sequence< OUString > sItemList;
if ( ( getControlProperty( token, "SelectedItems" ) >>= sSelectedItems ) &&
( getControlProperty( token, "StringItemList" ) >>= sItemList ) )
{
if ( sSelectedItems.getLength() == 1 )
{
sal_Int16 nSelectedItem = sSelectedItems[ 0 ];
if ( nSelectedItem < sItemList.getLength() )
aSelectedItem = sItemList[ nSelectedItem ];
}
}
return aSelectedItem;
}
void OptimizerDialog::UpdateStatus( const css::uno::Sequence< css::beans::PropertyValue >& rStatus )
{
maStats.InitializeStatusValues( rStatus );
@@ -327,8 +387,7 @@ void OptimizerDialog::UpdateStatus( const css::uno::Sequence< css::beans::Proper
OUString sStatus;
if ( *pVal >>= sStatus )
{
setControlProperty( "FixedText1Pg4", "Enabled", Any( true ) );
setControlProperty( "FixedText1Pg4", "Label", Any( getString( TKGet( sStatus ) ) ) );
mpPage4->UpdateStatusLabel(getString(TKGet(sStatus)));
}
}
pVal = maStats.GetStatusValue( TK_Progress );
@@ -336,445 +395,284 @@ void OptimizerDialog::UpdateStatus( const css::uno::Sequence< css::beans::Proper
{
sal_Int32 nProgress = 0;
if ( *pVal >>= nProgress )
setControlProperty( "Progress", "ProgressValue", Any( nProgress ) );
mpPage4->UpdateProgressValue(nProgress);
}
pVal = maStats.GetStatusValue( TK_OpenNewDocument );
if ( pVal )
SetConfigProperty( TK_OpenNewDocument, *pVal );
reschedule();
Application::Reschedule(true);
}
void ItemListener::itemStateChanged( const ItemEvent& Event )
IMPL_LINK(SummaryPage, SaveAsNewActionPerformed, weld::Toggleable&, rBox, void)
{
try
if (!rBox.get_active())
return;
const bool bSaveToNew = &rBox == m_xSaveToNew.get();
mrOptimizerDialog.SetConfigProperty( TK_SaveAs, Any(bSaveToNew) );
}
IMPL_LINK(SummaryPage, SaveSettingsActionPerformed, weld::Toggleable&, rBox, void)
{
m_xComboBox->set_sensitive(rBox.get_active());
}
IMPL_LINK(ObjectsPage, OLEActionPerformed, weld::Toggleable&, rBox, void)
{
if (!rBox.get_active())
return;
const bool bALLOles = &rBox == m_xAllOLEObjects.get();
sal_Int16 nInt16 = bALLOles ? 0 : 1;
mrOptimizerDialog.SetConfigProperty( TK_OLEOptimizationType, Any( nInt16 ) );
}
IMPL_LINK(ObjectsPage, OLEOptimizationActionPerformed, weld::Toggleable&, rBox, void)
{
const bool bOLEOptimization = rBox.get_active();
mrOptimizerDialog.SetConfigProperty( TK_OLEOptimization, Any(bOLEOptimization) );
m_xAllOLEObjects->set_sensitive(bOLEOptimization);
m_xForeignOLEObjects->set_sensitive(bOLEOptimization);
}
IMPL_LINK(ImagesPage, CompressionActionPerformed, weld::Toggleable&, rBox, void)
{
if (!rBox.get_active())
return;
const bool bJPEGCompression = &rBox == m_xJpegCompression.get();
mrOptimizerDialog.SetConfigProperty(TK_JPEGCompression, Any(bJPEGCompression));
m_xQualityLabel->set_sensitive(bJPEGCompression);
m_xQuality->set_sensitive(bJPEGCompression);
}
IMPL_LINK(ImagesPage, RemoveCropAreaActionPerformed, weld::Toggleable&, rBox, void)
{
mrOptimizerDialog.SetConfigProperty(TK_RemoveCropArea, Any(rBox.get_active()));
}
IMPL_LINK(ImagesPage, EmbedLinkedGraphicsActionPerformed, weld::Toggleable&, rBox, void)
{
mrOptimizerDialog.SetConfigProperty(TK_EmbedLinkedGraphics, Any(rBox.get_active()));
}
IMPL_LINK(SlidesPage, UnusedHiddenSlidesActionPerformed, weld::Toggleable&, rBox, void)
{
mrOptimizerDialog.SetConfigProperty(TK_DeleteHiddenSlides, Any(rBox.get_active()));
}
IMPL_LINK(SlidesPage, UnusedMasterPagesActionPerformed, weld::Toggleable&, rBox, void)
{
mrOptimizerDialog.SetConfigProperty(TK_DeleteUnusedMasterPages, Any(rBox.get_active()));
}
IMPL_LINK(SlidesPage, DeleteNotesActionPerformed, weld::Toggleable&, rBox, void)
{
mrOptimizerDialog.SetConfigProperty(TK_DeleteNotesPages, Any(rBox.get_active()));
}
IMPL_LINK(SlidesPage, UnusedSlidesActionPerformed, weld::Toggleable&, rBox, void)
{
mxComboBox->set_sensitive(rBox.get_active());
}
bool OptimizerDialog::onFinish()
{
UpdateConfiguration();
ShowPage(ITEM_ID_SUMMARY);
m_xPrevPage->set_sensitive(false);
m_xNextPage->set_sensitive(false);
m_xFinish->set_sensitive(false);
m_xCancel->set_sensitive(false);
// check if we have to open the FileDialog
bool bSuccessfullyExecuted = true;
if (mpPage4->GetSaveAsNew())
{
sal_Int16 nState;
Reference< XControl > xControl;
Any aSource( Event.Source );
if ( aSource >>= xControl )
// Duplicate presentation before applying changes
OUString aSaveAsURL;
FileOpenDialog aFileOpenDialog(mxContext);
// generating default file name
OUString aName;
Reference< XStorable > xStorable( mxController->getModel(), UNO_QUERY );
if ( xStorable.is() && xStorable->hasLocation() )
{
Reference< XPropertySet > xPropertySet( xControl->getModel(), UNO_QUERY_THROW );
OUString aControlName;
xPropertySet->getPropertyValue( "Name" ) >>= aControlName;
PPPOptimizerTokenEnum eControl( TKGet( aControlName ) );
switch( eControl )
INetURLObject aURLObj( xStorable->getLocation() );
if ( !aURLObj.hasFinalSlash() )
{
case TK_rdmNavi :
{
mrOptimizerDialog.SwitchPage( static_cast< sal_Int16 >( Event.ItemId ) );
}
break;
case TK_CheckBox1Pg1 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
mrOptimizerDialog.SetConfigProperty( TK_RemoveCropArea, Any( nState != 0 ) );
}
break;
case TK_CheckBox2Pg1 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
mrOptimizerDialog.SetConfigProperty( TK_EmbedLinkedGraphics, Any( nState != 0 ) );
}
break;
case TK_CheckBox0Pg2 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
{
mrOptimizerDialog.SetConfigProperty( TK_OLEOptimization, Any( nState != 0 ) );
mrOptimizerDialog.setControlProperty( "RadioButton0Pg2", "Enabled", Any( nState != 0 ) );
mrOptimizerDialog.setControlProperty( "RadioButton1Pg2", "Enabled", Any( nState != 0 ) );
}
}
break;
case TK_RadioButton0Pg1 :
{
sal_Int16 nInt16 = 0;
if ( xPropertySet->getPropertyValue( "State" ) >>= nInt16 )
{
nInt16 ^= 1;
mrOptimizerDialog.SetConfigProperty( TK_JPEGCompression, Any( nInt16 != 0 ) );
mrOptimizerDialog.setControlProperty( "FixedText1Pg1", "Enabled", Any( nInt16 != 0 ) );
mrOptimizerDialog.setControlProperty( "FormattedField0Pg1", "Enabled", Any( nInt16 != 0 ) );
}
}
break;
case TK_RadioButton1Pg1 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
{
mrOptimizerDialog.SetConfigProperty( TK_JPEGCompression, Any( nState != 0 ) );
mrOptimizerDialog.setControlProperty( "FixedText1Pg1", "Enabled", Any( nState != 0 ) );
mrOptimizerDialog.setControlProperty( "FormattedField0Pg1", "Enabled", Any( nState != 0 ) );
}
}
break;
case TK_RadioButton0Pg2 :
{
sal_Int16 nInt16;
if ( xPropertySet->getPropertyValue( "State" ) >>= nInt16 )
{
nInt16 ^= 1;
mrOptimizerDialog.SetConfigProperty( TK_OLEOptimizationType, Any( nInt16 ) );
}
}
break;
case TK_RadioButton1Pg2 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
mrOptimizerDialog.SetConfigProperty( TK_OLEOptimizationType, Any( nState ) );
}
break;
case TK_CheckBox0Pg3 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
mrOptimizerDialog.SetConfigProperty( TK_DeleteUnusedMasterPages, Any( nState != 0 ) );
}
break;
case TK_CheckBox1Pg3 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
mrOptimizerDialog.SetConfigProperty( TK_DeleteNotesPages, Any( nState != 0 ) );
}
break;
case TK_CheckBox2Pg3 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
mrOptimizerDialog.SetConfigProperty( TK_DeleteHiddenSlides, Any( nState != 0 ) );
}
break;
case TK_CheckBox3Pg3 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
mrOptimizerDialog.setControlProperty( "ListBox0Pg3", "Enabled", Any( nState != 0 ) );
}
break;
case TK_CheckBox1Pg4 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
mrOptimizerDialog.setControlProperty( "ComboBox0Pg4", "Enabled", Any( nState != 0 ) );
}
break;
case TK_RadioButton0Pg4 :
case TK_RadioButton1Pg4 :
{
if ( xPropertySet->getPropertyValue( "State" ) >>= nState )
mrOptimizerDialog.SetConfigProperty( TK_SaveAs, Any( eControl == TK_RadioButton1Pg4 ? nState != 0 : nState == 0 ) );
}
break;
default:
break;
// tdf#105382 uri-decode file name
aURLObj.removeExtension(INetURLObject::LAST_SEGMENT, false);
aName = aURLObj.getName(INetURLObject::LAST_SEGMENT, false,
INetURLObject::DecodeMechanism::WithCharset);
}
}
else
{
// If no filename, try to use model title ("Untitled 1" or something like this)
Reference<XTitle> xTitle(
GetFrame()->getController()->getModel(), UNO_QUERY);
aName = xTitle->getTitle();
}
if (!aName.isEmpty())
{
aName += " " + getString(STR_FILENAME_SUFFIX);
aFileOpenDialog.setDefaultName(aName);
}
if (aFileOpenDialog.execute() == dialogs::ExecutableDialogResults::OK)
{
aSaveAsURL = aFileOpenDialog.getURL();
SetConfigProperty( TK_SaveAsURL, Any( aSaveAsURL ) );
SetConfigProperty( TK_FilterName, Any( aFileOpenDialog.getFilterName() ) );
}
if ( aSaveAsURL.isEmpty() )
{
// something goes wrong...
bSuccessfullyExecuted = false;
}
// waiting for 500ms
Application::Reschedule(true);
for ( sal_uInt32 i = osl_getGlobalTimer(); ( i + 500 ) > ( osl_getGlobalTimer() ); )
Application::Reschedule(true);
}
else
{
// Apply changes to current presentation
Reference<XModifiable> xModifiable(mxController->getModel(),
UNO_QUERY_THROW );
if ( xModifiable->isModified() )
{
SolarMutexGuard aSolarGuard;
std::unique_ptr<weld::MessageDialog> popupDlg(Application::CreateMessageDialog(
m_xAssistant.get(), VclMessageType::Question, VclButtonsType::YesNo,
getString(STR_WARN_UNSAVED_PRESENTATION)));
if (popupDlg->run() != RET_YES)
{
// Selected not "yes" ("no" or dialog was cancelled) so return to previous step
m_xPrevPage->set_sensitive(true);
m_xNextPage->set_sensitive(true);
m_xFinish->set_sensitive(true);
m_xCancel->set_sensitive(true);
return false;
}
}
}
catch ( Exception& )
if ( bSuccessfullyExecuted )
{
}
}
void ItemListener::disposing( const css::lang::EventObject& /* Source */ )
{
}
void ActionListener::actionPerformed( const ActionEvent& rEvent )
{
switch( TKGet( rEvent.ActionCommand ) )
{
case TK_btnNavBack : mrOptimizerDialog.SwitchPage( mrOptimizerDialog.mnCurrentStep - 1 ); break;
case TK_btnNavNext : mrOptimizerDialog.SwitchPage( mrOptimizerDialog.mnCurrentStep + 1 ); break;
case TK_btnNavFinish :
// now check if we have to store a session template
const bool bSaveSettings = mpPage4->GetSaveSettings();
OUString aSettingsName = mpPage4->GetSettingsName();
if (bSaveSettings && !aSettingsName.isEmpty())
{
mrOptimizerDialog.UpdateConfiguration();
mrOptimizerDialog.SwitchPage( ITEM_ID_SUMMARY );
mrOptimizerDialog.DisablePage( ITEM_ID_SUMMARY );
mrOptimizerDialog.setControlProperty( "btnNavBack", "Enabled", Any( false ) );
mrOptimizerDialog.setControlProperty( "btnNavNext", "Enabled", Any( false ) );
mrOptimizerDialog.setControlProperty( "btnNavFinish", "Enabled", Any( false ) );
mrOptimizerDialog.setControlProperty( "btnNavCancel", "Enabled", Any( false ) );
mrOptimizerDialog.setControlProperty( "FixedText0Pg4", "Enabled", Any( true ) );
// check if we have to open the FileDialog
bool bSuccessfullyExecuted = true;
sal_Int16 nInt16 = 0;
mrOptimizerDialog.getControlProperty( "RadioButton1Pg4", "State" ) >>= nInt16;
if ( nInt16 )
{
// Duplicate presentation before applying changes
OUString aSaveAsURL;
FileOpenDialog aFileOpenDialog( mrOptimizerDialog.GetComponentContext() );
// generating default file name
OUString aName;
Reference< XStorable > xStorable( mrOptimizerDialog.controller()->getModel(), UNO_QUERY );
if ( xStorable.is() && xStorable->hasLocation() )
{
INetURLObject aURLObj( xStorable->getLocation() );
if ( !aURLObj.hasFinalSlash() )
{
// tdf#105382 uri-decode file name
aURLObj.removeExtension(INetURLObject::LAST_SEGMENT, false);
aName = aURLObj.getName(INetURLObject::LAST_SEGMENT, false,
INetURLObject::DecodeMechanism::WithCharset);
}
}
else
{
// If no filename, try to use model title ("Untitled 1" or something like this)
Reference<XTitle> xTitle(
mrOptimizerDialog.GetFrame()->getController()->getModel(), UNO_QUERY);
aName = xTitle->getTitle();
}
if (!aName.isEmpty())
{
aName += " " + mrOptimizerDialog.getString(STR_FILENAME_SUFFIX);
aFileOpenDialog.setDefaultName(aName);
}
if (aFileOpenDialog.execute() == dialogs::ExecutableDialogResults::OK)
{
aSaveAsURL = aFileOpenDialog.getURL();
mrOptimizerDialog.SetConfigProperty( TK_SaveAsURL, Any( aSaveAsURL ) );
mrOptimizerDialog.SetConfigProperty( TK_FilterName, Any( aFileOpenDialog.getFilterName() ) );
}
if ( aSaveAsURL.isEmpty() )
{
// something goes wrong...
bSuccessfullyExecuted = false;
}
// waiting for 500ms
mrOptimizerDialog.reschedule();
for ( sal_uInt32 i = osl_getGlobalTimer(); ( i + 500 ) > ( osl_getGlobalTimer() ); )
mrOptimizerDialog.reschedule();
}
std::vector< OptimizerSettings >::iterator aIter( GetOptimizerSettingsByName( aSettingsName ) );
std::vector< OptimizerSettings >& rSettings( GetOptimizerSettings() );
OptimizerSettings aNewSettings( rSettings[ 0 ] );
aNewSettings.maName = aSettingsName;
if ( aIter == rSettings.end() )
rSettings.push_back( aNewSettings );
else
{
// Apply changes to current presentation
Reference<XModifiable> xModifiable(mrOptimizerDialog.controller()->getModel(),
UNO_QUERY_THROW );
if ( xModifiable->isModified() )
{
SolarMutexGuard aSolarGuard;
std::unique_ptr<weld::MessageDialog> popupDlg(Application::CreateMessageDialog(
nullptr, VclMessageType::Question, VclButtonsType::YesNo,
mrOptimizerDialog.getString(STR_WARN_UNSAVED_PRESENTATION)));
if (popupDlg->run() != RET_YES)
{
// Selected not "yes" ("no" or dialog was cancelled) so return to previous step
mrOptimizerDialog.setControlProperty("btnNavBack", "Enabled",
Any(true));
mrOptimizerDialog.setControlProperty("btnNavNext", "Enabled", Any(false));
mrOptimizerDialog.setControlProperty("btnNavFinish", "Enabled", Any(true));
mrOptimizerDialog.setControlProperty("btnNavCancel", "Enabled", Any(true));
mrOptimizerDialog.EnablePage(ITEM_ID_SUMMARY);
return;
}
}
}
if ( bSuccessfullyExecuted )
{ // now check if we have to store a session template
nInt16 = 0;
OUString aSettingsName;
mrOptimizerDialog.getControlProperty( "CheckBox1Pg4", "State" ) >>= nInt16;
mrOptimizerDialog.getControlProperty( "ComboBox0Pg4", "Text" ) >>= aSettingsName;
if ( nInt16 && !aSettingsName.isEmpty() )
{
std::vector< OptimizerSettings >::iterator aIter( mrOptimizerDialog.GetOptimizerSettingsByName( aSettingsName ) );
std::vector< OptimizerSettings >& rSettings( mrOptimizerDialog.GetOptimizerSettings() );
OptimizerSettings aNewSettings( rSettings[ 0 ] );
aNewSettings.maName = aSettingsName;
if ( aIter == rSettings.end() )
rSettings.push_back( aNewSettings );
else
*aIter = aNewSettings;
}
}
if ( bSuccessfullyExecuted )
{
URL aURL;
aURL.Protocol = "vnd.com.sun.star.comp.PPPOptimizer:";
aURL.Path = "optimize";
Sequence< PropertyValue > lArguments{
comphelper::makePropertyValue("Settings", mrOptimizerDialog.GetConfigurationSequence()),
comphelper::makePropertyValue("StatusDispatcher", mrOptimizerDialog.GetStatusDispatcher()),
comphelper::makePropertyValue("InformationDialog", mrOptimizerDialog.GetFrame())
};
ErrCode errorCode;
try
{
ImpOptimizer aOptimizer(
mrOptimizerDialog.GetComponentContext(),
mrOptimizerDialog.GetFrame()->getController()->getModel());
aOptimizer.Optimize(lArguments);
}
catch (css::io::IOException&)
{
// We always receive just ERRCODE_IO_CANTWRITE in case of problems, so no need to bother
// about extracting error code from exception text
errorCode = ERRCODE_IO_CANTWRITE;
}
catch (css::uno::Exception&)
{
// Other general exception
errorCode = ERRCODE_IO_GENERAL;
}
if (errorCode != ERRCODE_NONE)
{
// Restore wizard controls
mrOptimizerDialog.maStats.SetStatusValue(TK_Progress,
Any(static_cast<sal_Int32>(0)));
mrOptimizerDialog.setControlProperty("btnNavBack", "Enabled", Any(true));
mrOptimizerDialog.setControlProperty("btnNavNext", "Enabled", Any(false));
mrOptimizerDialog.setControlProperty("btnNavFinish", "Enabled", Any(true));
mrOptimizerDialog.setControlProperty("btnNavCancel", "Enabled", Any(true));
OUString aFileName;
mrOptimizerDialog.GetConfigProperty(TK_SaveAsURL) >>= aFileName;
SfxErrorContext aEc(ERRCTX_SFX_SAVEASDOC, aFileName);
ErrorHandler::HandleError(errorCode);
break;
}
mrOptimizerDialog.endExecute( bSuccessfullyExecuted );
}
else
{
mrOptimizerDialog.setControlProperty( "btnNavBack", "Enabled", Any( true ) );
mrOptimizerDialog.setControlProperty( "btnNavNext", "Enabled", Any( false ) );
mrOptimizerDialog.setControlProperty( "btnNavFinish", "Enabled", Any( true ) );
mrOptimizerDialog.setControlProperty( "btnNavCancel", "Enabled", Any( true ) );
mrOptimizerDialog.EnablePage( ITEM_ID_SUMMARY );
}
*aIter = aNewSettings;
}
break;
case TK_btnNavCancel : mrOptimizerDialog.endExecute( false ); break;
case TK_Button0Pg0 : // delete configuration
}
if ( bSuccessfullyExecuted )
{
URL aURL;
aURL.Protocol = "vnd.com.sun.star.comp.PPPOptimizer:";
aURL.Path = "optimize";
Sequence< PropertyValue > lArguments{
comphelper::makePropertyValue("Settings", GetConfigurationSequence()),
comphelper::makePropertyValue("StatusDispatcher", GetStatusDispatcher()),
comphelper::makePropertyValue("InformationDialog", GetFrame())
};
ErrCode errorCode;
try
{
OUString aSelectedItem( mrOptimizerDialog.GetSelectedString( "ListBox0Pg0" ) );
if ( !aSelectedItem.isEmpty() )
{
std::vector< OptimizerSettings >::iterator aIter( mrOptimizerDialog.GetOptimizerSettingsByName( aSelectedItem ) );
std::vector< OptimizerSettings >& rList( mrOptimizerDialog.GetOptimizerSettings() );
if ( aIter != rList.end() )
{
rList.erase( aIter );
mrOptimizerDialog.UpdateControlStates();
}
}
ImpOptimizer aOptimizer(mxContext, GetFrame()->getController()->getModel());
aOptimizer.Optimize(lArguments);
}
break;
default: break;
catch (css::io::IOException&)
{
// We always receive just ERRCODE_IO_CANTWRITE in case of problems, so no need to bother
// about extracting error code from exception text
errorCode = ERRCODE_IO_CANTWRITE;
}
catch (css::uno::Exception&)
{
// Other general exception
errorCode = ERRCODE_IO_GENERAL;
}
if (errorCode != ERRCODE_NONE)
{
// Restore wizard controls
maStats.SetStatusValue(TK_Progress, Any(static_cast<sal_Int32>(0)));
m_xPrevPage->set_sensitive(true);
m_xNextPage->set_sensitive(false);
m_xFinish->set_sensitive(true);
m_xCancel->set_sensitive(true);
OUString aFileName;
GetConfigProperty(TK_SaveAsURL) >>= aFileName;
SfxErrorContext aEc(ERRCTX_SFX_SAVEASDOC, aFileName);
ErrorHandler::HandleError(errorCode);
return false;
}
}
else
{
m_xPrevPage->set_sensitive(true);
m_xNextPage->set_sensitive(false);
m_xFinish->set_sensitive(true);
m_xCancel->set_sensitive(true);
}
return vcl::RoadmapWizardMachine::onFinish();
}
IMPL_LINK_NOARG(IntroPage, ButtonActionPerformed, weld::Button&, void)
{
// delete configuration
OUString aSelectedItem(mxComboBox->get_active_text());
if ( !aSelectedItem.isEmpty() )
{
std::vector< OptimizerSettings >::iterator aIter( mrOptimizerDialog.GetOptimizerSettingsByName( aSelectedItem ) );
std::vector< OptimizerSettings >& rList( mrOptimizerDialog.GetOptimizerSettings() );
if ( aIter != rList.end() )
{
rList.erase( aIter );
mrOptimizerDialog.UpdateControlStates();
}
}
}
void ActionListener::disposing( const css::lang::EventObject& /* Source */ )
{
}
void ActionListenerListBox0Pg0::actionPerformed( const ActionEvent& rEvent )
IMPL_LINK(IntroPage, ComboBoxActionPerformed, weld::ComboBox&, rBox, void)
{
if ( !rEvent.ActionCommand.isEmpty() )
OUString sActionCommand(rBox.get_active_text());
if (!sActionCommand.isEmpty())
{
std::vector< OptimizerSettings >::iterator aIter( mrOptimizerDialog.GetOptimizerSettingsByName( rEvent.ActionCommand ) );
std::vector< OptimizerSettings >::iterator aIter( mrOptimizerDialog.GetOptimizerSettingsByName(sActionCommand) );
std::vector< OptimizerSettings >& rList( mrOptimizerDialog.GetOptimizerSettings() );
if ( aIter != rList.end() )
rList[ 0 ] = *aIter;
}
mrOptimizerDialog.UpdateControlStates();
}
void ActionListenerListBox0Pg0::disposing( const css::lang::EventObject& /* Source */ )
IMPL_LINK(ImagesPage, SpinButtonActionPerformed, weld::SpinButton&, rBox, void)
{
mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( static_cast<sal_Int32>(rBox.get_value()) ) );
}
void TextListenerFormattedField0Pg1::textChanged( const TextEvent& /* rEvent */ )
IMPL_LINK_NOARG(ImagesPage, ComboBoxActionPerformed, weld::ComboBox&, void)
{
double fDouble = 0;
Any aAny = mrOptimizerDialog.getControlProperty( "FormattedField0Pg1", "EffectiveValue" );
if ( aAny >>= fDouble )
mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( static_cast<sal_Int32>(fDouble) ) );
}
void TextListenerFormattedField0Pg1::disposing( const css::lang::EventObject& /* Source */ )
{
}
namespace
{
bool lcl_mapResolution(OUString& rResolution, std::u16string_view rImageResolution)
{
if (o3tl::getToken(rImageResolution, 1, ';')!=rResolution)
return false;
rResolution = o3tl::getToken(rImageResolution, 0, ';');
return true;
}
}
void TextListenerComboBox0Pg1::textChanged( const TextEvent& /* rEvent */ )
{
OUString aString;
Any aAny = mrOptimizerDialog.getControlProperty( "ComboBox0Pg1", "Text" );
if ( !(aAny >>= aString) )
return;
for (int nIR{ STR_IMAGE_RESOLUTION_0 }; nIR <= STR_IMAGE_RESOLUTION_3; ++nIR)
{
if (lcl_mapResolution(aString, mrOptimizerDialog.getString(static_cast<PPPOptimizerTokenEnum>(nIR))))
break;
}
mrOptimizerDialog.SetConfigProperty( TK_ImageResolution, Any( aString.toInt32() ) );
}
void TextListenerComboBox0Pg1::disposing( const css::lang::EventObject& /* Source */ )
{
}
void SpinListenerFormattedField0Pg1::up( const SpinEvent& /* rEvent */ )
{
double fDouble;
Any aAny = mrOptimizerDialog.getControlProperty( "FormattedField0Pg1", "EffectiveValue" );
if ( aAny >>= fDouble )
{
fDouble += 9;
if ( fDouble > 100 )
fDouble = 100;
mrOptimizerDialog.setControlProperty( "FormattedField0Pg1", "EffectiveValue", Any( fDouble ) );
mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( static_cast<sal_Int32>(fDouble) ) );
}
}
void SpinListenerFormattedField0Pg1::down( const SpinEvent& /* rEvent */ )
{
double fDouble;
Any aAny = mrOptimizerDialog.getControlProperty( "FormattedField0Pg1", "EffectiveValue" );
if ( aAny >>= fDouble )
{
fDouble -= 9;
if ( fDouble < 0 )
fDouble = 0;
mrOptimizerDialog.setControlProperty( "FormattedField0Pg1", "EffectiveValue", Any( fDouble ) );
mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( static_cast<sal_Int32>(fDouble) ) );
}
}
void SpinListenerFormattedField0Pg1::first( const SpinEvent& /* rEvent */ )
{
mrOptimizerDialog.setControlProperty( "FormattedField0Pg1", "EffectiveValue", Any( static_cast< double >( 0 ) ) );
mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( sal_Int32(0) ) );
}
void SpinListenerFormattedField0Pg1::last( const SpinEvent& /* rEvent */ )
{
mrOptimizerDialog.setControlProperty( "FormattedField0Pg1", "EffectiveValue", Any( static_cast< double >( 100 ) ) );
mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( sal_Int32(100) ) );
}
void SpinListenerFormattedField0Pg1::disposing( const css::lang::EventObject& /* Source */ )
{
mrOptimizerDialog.SetConfigProperty( TK_ImageResolution, Any( m_xResolution->get_active_id().toInt32() ) );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sdext/source/minimizer/optimizerdialog.hxx b/sdext/source/minimizer/optimizerdialog.hxx
index 4ea28eb..2e9ad3f 100644
--- a/sdext/source/minimizer/optimizerdialog.hxx
+++ b/sdext/source/minimizer/optimizerdialog.hxx
@@ -17,19 +17,17 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SDEXT_SOURCE_MINIMIZER_OPTIMIZERDIALOG_HXX
#define INCLUDED_SDEXT_SOURCE_MINIMIZER_OPTIMIZERDIALOG_HXX
#pragma once
#include <vector>
#include "unodialog.hxx"
#include "optimizationstats.hxx"
#include "configurationaccess.hxx"
#include <com/sun/star/awt/XItemListener.hpp>
#include <com/sun/star/awt/XSpinListener.hpp>
#include <com/sun/star/awt/XTextListener.hpp>
#include <com/sun/star/uno/Sequence.h>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/frame/XDispatch.hpp>
#include <cppuhelper/implbase.hxx>
#include <vcl/roadmapwizard.hxx>
#define MAX_STEP 4
#define OD_DIALOG_WIDTH 330
@@ -48,36 +46,167 @@
#define ITEM_ID_OLE_OPTIMIZATION 3
#define ITEM_ID_SUMMARY 4
class OptimizerDialog : public UnoDialog, public ConfigurationAccess
class OptimizerDialog;
class IntroPage : public vcl::OWizardPage
{
private:
OptimizerDialog& mrOptimizerDialog;
std::unique_ptr<weld::ComboBox> mxComboBox;
std::unique_ptr<weld::Button> mxButton;
DECL_LINK(ComboBoxActionPerformed, weld::ComboBox&, void);
DECL_LINK(ButtonActionPerformed, weld::Button&, void);
public:
IntroPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog);
void UpdateControlStates(const std::vector<OUString>& rItemList, int nSelectedItem, bool bRemoveButtonEnabled);
OUString Get_TK_Name() const
{
return mxComboBox->get_active_text();
}
};
class SlidesPage : public vcl::OWizardPage
{
private:
OptimizerDialog& mrOptimizerDialog;
std::unique_ptr<weld::CheckButton> mxMasterSlides;
std::unique_ptr<weld::CheckButton> mxHiddenSlides;
std::unique_ptr<weld::CheckButton> mxUnusedSlides;
std::unique_ptr<weld::ComboBox> mxComboBox;
std::unique_ptr<weld::CheckButton> mxClearNodes;
DECL_LINK(UnusedMasterPagesActionPerformed, weld::Toggleable&, void);
DECL_LINK(UnusedHiddenSlidesActionPerformed, weld::Toggleable&, void);
DECL_LINK(UnusedSlidesActionPerformed, weld::Toggleable&, void);
DECL_LINK(DeleteNotesActionPerformed, weld::Toggleable&, void);
public:
SlidesPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog);
void Init(const css::uno::Sequence<OUString>& rCustomShowList);
void UpdateControlStates(bool bDeleteUnusedMasterPages, bool bDeleteHiddenSlides, bool bDeleteNotesPages);
OUString Get_TK_CustomShowName() const
{
if (!mxUnusedSlides->get_sensitive())
return OUString();
return mxComboBox->get_active_text();
}
};
class ImagesPage : public vcl::OWizardPage
{
private:
OptimizerDialog& mrOptimizerDialog;
std::unique_ptr<weld::RadioButton> m_xLossLessCompression;
std::unique_ptr<weld::Label> m_xQualityLabel;
std::unique_ptr<weld::SpinButton> m_xQuality;
std::unique_ptr<weld::RadioButton> m_xJpegCompression;
std::unique_ptr<weld::ComboBox> m_xResolution;
std::unique_ptr<weld::CheckButton> m_xRemoveCropArea;
std::unique_ptr<weld::CheckButton> m_xEmbedLinkedGraphics;
DECL_LINK(EmbedLinkedGraphicsActionPerformed, weld::Toggleable&, void);
DECL_LINK(RemoveCropAreaActionPerformed, weld::Toggleable&, void);
DECL_LINK(ComboBoxActionPerformed, weld::ComboBox&, void);
DECL_LINK(CompressionActionPerformed, weld::Toggleable&, void);
DECL_LINK(SpinButtonActionPerformed, weld::SpinButton&, void);
public:
ImagesPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog);
void UpdateControlStates(bool bJPEGCompression, int nJPEGQuality, bool bRemoveCropArea,
int nResolution, bool bEmbedLinkedGraphics);
};
class ObjectsPage : public vcl::OWizardPage
{
private:
OptimizerDialog& mrOptimizerDialog;
std::unique_ptr<weld::CheckButton> m_xCreateStaticImage;
std::unique_ptr<weld::RadioButton> m_xAllOLEObjects;
std::unique_ptr<weld::RadioButton> m_xForeignOLEObjects;
std::unique_ptr<weld::Label> m_xLabel;
DECL_LINK(OLEOptimizationActionPerformed, weld::Toggleable&, void);
DECL_LINK(OLEActionPerformed, weld::Toggleable&, void);
public:
ObjectsPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog);
void Init(const OUString& rDesc);
void UpdateControlStates(bool bConvertOLEObjects, int nOLEOptimizationType);
};
class SummaryPage : public vcl::OWizardPage
{
private:
OptimizerDialog& mrOptimizerDialog;
std::unique_ptr<weld::Label> m_xLabel1;
std::unique_ptr<weld::Label> m_xLabel2;
std::unique_ptr<weld::Label> m_xLabel3;
std::unique_ptr<weld::Label> m_xCurrentSize;
std::unique_ptr<weld::Label> m_xEstimatedSize;
std::unique_ptr<weld::Label> m_xStatus;
std::unique_ptr<weld::ProgressBar> m_xProgress;
std::unique_ptr<weld::RadioButton> m_xApplyToCurrent;
std::unique_ptr<weld::RadioButton> m_xSaveToNew;
std::unique_ptr<weld::ComboBox> m_xComboBox;
std::unique_ptr<weld::CheckButton> m_xSaveSettings;
DECL_LINK(SaveSettingsActionPerformed, weld::Toggleable&, void);
DECL_LINK(SaveAsNewActionPerformed, weld::Toggleable&, void);
public:
SummaryPage(weld::Container* pPage, OptimizerDialog& rOptimizerDialog);
void Init(const OUString& rSettingsName, bool bIsReadonly);
void UpdateControlStates(bool bSaveAs, bool bSaveSettingsEnabled,
const std::vector<OUString>& rItemList,
const std::vector<OUString>& rSummaryStrings,
const OUString& rCurrentFileSize,
const OUString& rEstimatedFileSize);
void UpdateStatusLabel(const OUString& rStatus);
void UpdateProgressValue(int nProgress);
bool GetSaveAsNew() const { return m_xSaveToNew->get_active(); }
bool GetSaveSettings() const { return m_xSaveSettings->get_active(); }
OUString GetSettingsName() const { return m_xComboBox->get_active_text(); }
};
class OptimizerDialog : public vcl::RoadmapWizardMachine, public ConfigurationAccess
{
public:
OptimizerDialog( const css::uno::Reference< css::uno::XComponentContext >& rxContext, css::uno::Reference< css::frame::XFrame > const & rxFrame,
css::uno::Reference< css::frame::XDispatch > const & rxStatusDispatcher );
std::unique_ptr<BuilderPage> createPage(vcl::WizardTypes::WizardState nState) override;
~OptimizerDialog();
void execute();
sal_Int16 mnCurrentStep;
sal_Int16 mnTabIndex;
sal_Int16 mnCurrentStep;
sal_Int16 mnTabIndex;
short mnEndStatus;
bool mbIsReadonly;
private:
css::uno::Reference< css::frame::XFrame > mxFrame;
css::uno::Reference< css::frame::XController > mxController;
css::uno::Reference< css::uno::XInterface > mxRoadmapControl;
css::uno::Reference< css::uno::XInterface > mxRoadmapControlModel;
css::uno::Reference< css::awt::XItemListener > mxItemListener;
css::uno::Reference< css::awt::XActionListener > mxActionListener;
css::uno::Reference< css::awt::XActionListener > mxActionListenerListBox0Pg0;
css::uno::Reference< css::awt::XTextListener > mxTextListenerFormattedField0Pg1;
css::uno::Reference< css::awt::XTextListener > mxTextListenerComboBox0Pg1;
css::uno::Reference< css::awt::XSpinListener > mxSpinListenerFormattedField0Pg1;
css::uno::Reference< css::frame::XDispatch > mxStatusDispatcher;
std::vector< std::vector< OUString > > maControlPages;
IntroPage* mpPage0;
SlidesPage* mpPage1;
ImagesPage* mpPage2;
ObjectsPage* mpPage3;
SummaryPage* mpPage4;
void InitDialog();
void InitRoadmap();
void InitNavigationBar();
@@ -92,9 +221,9 @@ private:
void UpdateControlStatesPage3();
void UpdateControlStatesPage4();
void ActivatePage( sal_Int16 nStep );
void DeactivatePage( sal_Int16 nStep );
void InsertRoadmapItem( const sal_Int32 nIndex, const OUString& rLabel, const sal_Int32 nItemID );
virtual OUString getStateDisplayName(vcl::WizardTypes::WizardState nState) const override;
virtual bool onFinish() override;
public:
@@ -105,99 +234,10 @@ public:
// the ConfigurationAccess is updated to actual control settings
void UpdateConfiguration();
void EnablePage( sal_Int16 nStep );
void DisablePage( sal_Int16 nStep );
void SwitchPage( sal_Int16 nNewStep );
void UpdateControlStates( sal_Int16 nStep = -1 );
OUString GetSelectedString( OUString const & token );
css::uno::Reference< css::frame::XDispatch >& GetStatusDispatcher() { return mxStatusDispatcher; };
css::uno::Reference< css::frame::XFrame>& GetFrame() { return mxFrame; };
const css::uno::Reference< css::uno::XComponentContext >& GetComponentContext() const { return UnoDialog::mxContext; };
};
class ItemListener : public ::cppu::WeakImplHelper< css::awt::XItemListener >
{
public:
explicit ItemListener( OptimizerDialog& rOptimizerDialog ) : mrOptimizerDialog( rOptimizerDialog ){}
virtual void SAL_CALL itemStateChanged( const css::awt::ItemEvent& Event ) override;
virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
private:
OptimizerDialog& mrOptimizerDialog;
};
class ActionListener : public ::cppu::WeakImplHelper< css::awt::XActionListener >
{
public:
explicit ActionListener( OptimizerDialog& rOptimizerDialog ) : mrOptimizerDialog( rOptimizerDialog ){}
virtual void SAL_CALL actionPerformed( const css::awt::ActionEvent& Event ) override;
virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
private:
OptimizerDialog& mrOptimizerDialog;
};
class ActionListenerListBox0Pg0 : public ::cppu::WeakImplHelper< css::awt::XActionListener >
{
public:
explicit ActionListenerListBox0Pg0( OptimizerDialog& rOptimizerDialog ) : mrOptimizerDialog( rOptimizerDialog ){}
virtual void SAL_CALL actionPerformed( const css::awt::ActionEvent& Event ) override;
virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
private:
OptimizerDialog& mrOptimizerDialog;
};
class TextListenerFormattedField0Pg1 : public ::cppu::WeakImplHelper< css::awt::XTextListener >
{
public:
explicit TextListenerFormattedField0Pg1( OptimizerDialog& rOptimizerDialog ) : mrOptimizerDialog( rOptimizerDialog ){}
virtual void SAL_CALL textChanged( const css::awt::TextEvent& Event ) override;
virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
private:
OptimizerDialog& mrOptimizerDialog;
};
class TextListenerComboBox0Pg1 : public ::cppu::WeakImplHelper< css::awt::XTextListener >
{
public:
explicit TextListenerComboBox0Pg1( OptimizerDialog& rOptimizerDialog ) : mrOptimizerDialog( rOptimizerDialog ){}
virtual void SAL_CALL textChanged( const css::awt::TextEvent& Event ) override;
virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
private:
OptimizerDialog& mrOptimizerDialog;
};
class SpinListenerFormattedField0Pg1 : public ::cppu::WeakImplHelper< css::awt::XSpinListener >
{
public:
explicit SpinListenerFormattedField0Pg1( OptimizerDialog& rOptimizerDialog ) : mrOptimizerDialog( rOptimizerDialog ){}
virtual void SAL_CALL up( const css::awt::SpinEvent& Event ) override;
virtual void SAL_CALL down( const css::awt::SpinEvent& Event ) override;
virtual void SAL_CALL first( const css::awt::SpinEvent& Event ) override;
virtual void SAL_CALL last( const css::awt::SpinEvent& Event ) override;
virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
private:
OptimizerDialog& mrOptimizerDialog;
};
#endif // INCLUDED_SDEXT_SOURCE_MINIMIZER_OPTIMIZERDIALOG_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sdext/source/minimizer/optimizerdialogcontrols.cxx b/sdext/source/minimizer/optimizerdialogcontrols.cxx
index 4ab29d9..5ed2dd9 100644
--- a/sdext/source/minimizer/optimizerdialogcontrols.cxx
+++ b/sdext/source/minimizer/optimizerdialogcontrols.cxx
@@ -47,357 +47,21 @@ using namespace ::com::sun::star::drawing;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::presentation;
static void SetBold( OptimizerDialog& rOptimizerDialog, const OUString& rControl )
{
FontDescriptor aFontDescriptor;
if ( rOptimizerDialog.getControlProperty( rControl, "FontDescriptor" ) >>= aFontDescriptor )
{
aFontDescriptor.Weight = com::sun::star::awt::FontWeight::BOLD;
rOptimizerDialog.setControlProperty( rControl, "FontDescriptor", Any( aFontDescriptor ) );
}
}
static OUString InsertSeparator( OptimizerDialog& rOptimizerDialog, const OUString& rControlName, sal_Int32 nOrientation,
sal_Int32 nPosX, sal_Int32 nPosY, sal_Int32 nWidth, sal_Int32 nHeight )
{
OUString pNames[] = {
OUString("Height"),
OUString("Orientation"),
OUString("PositionX"),
OUString("PositionY"),
OUString("Step"),
OUString("Width") };
Any pValues[] = {
Any( nHeight ),
Any( nOrientation ),
Any( nPosX ),
Any( nPosY ),
Any( sal_Int16( 0 ) ),
Any( nWidth ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
rOptimizerDialog.insertControlModel( "com.sun.star.awt.UnoControlFixedLineModel",
rControlName, aNames, aValues );
return rControlName;
}
static OUString InsertButton( OptimizerDialog& rOptimizerDialog, const OUString& rControlName, Reference< XActionListener > const & xActionListener,
sal_Int32 nXPos, sal_Int32 nYPos, sal_Int32 nWidth, sal_Int16 nTabIndex, bool bEnabled, PPPOptimizerTokenEnum nResID, css::awt::PushButtonType nPushButtonType )
{
sal_Int32 nHeight = BUTTON_HEIGHT;
OUString pNames[] = {
OUString("Enabled"),
OUString("Height"),
OUString("Label"),
OUString("PositionX"),
OUString("PositionY"),
OUString("PushButtonType"),
OUString("Step"),
OUString("TabIndex"),
OUString("Width") };
Any pValues[] = {
Any( bEnabled ),
Any( nHeight ),
Any( rOptimizerDialog.getString( nResID ) ),
Any( nXPos ),
Any( nYPos ),
Any( static_cast< sal_Int16 >(nPushButtonType) ),
Any( sal_Int16(0) ),
Any( nTabIndex ),
Any( nWidth ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
rOptimizerDialog.insertButton( rControlName, xActionListener, aNames, aValues );
return rControlName;
}
static OUString InsertFixedText( OptimizerDialog& rOptimizerDialog, const OUString& rControlName, const OUString& rLabel,
sal_Int32 nXPos, sal_Int32 nYPos, sal_Int32 nWidth, sal_Int32 nHeight, bool bMultiLine, bool bBold, sal_Int16 nTabIndex )
{
OUString pNames[] = {
OUString("Height"),
OUString("Label"),
OUString("MultiLine"),
OUString("PositionX"),
OUString("PositionY"),
OUString("Step"),
OUString("TabIndex"),
OUString("Width") };
Any pValues[] = {
Any( nHeight ),
Any( rLabel ),
Any( bMultiLine ),
Any( nXPos ),
Any( nYPos ),
Any( sal_Int16(0) ),
Any( nTabIndex ),
Any( nWidth ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
rOptimizerDialog.insertFixedText( rControlName, aNames, aValues );
if ( bBold )
SetBold( rOptimizerDialog, rControlName );
return rControlName;
}
static OUString InsertCheckBox( OptimizerDialog& rOptimizerDialog, const OUString& rControlName,
const Reference< XItemListener >& xItemListener, const OUString& rLabel,
sal_Int32 nXPos, sal_Int32 nYPos, sal_Int32 nWidth, sal_Int16 nTabIndex )
{
sal_Int32 nHeight = 8;
OUString pNames[] = {
OUString("Enabled"),
OUString("Height"),
OUString("Label"),
OUString("PositionX"),
OUString("PositionY"),
OUString("Step"),
OUString("TabIndex"),
OUString("Width") };
Any pValues[] = {
Any( true ),
Any( nHeight ),
Any( rLabel ),
Any( nXPos ),
Any( nYPos ),
Any( sal_Int16(0) ),
Any( nTabIndex ),
Any( nWidth ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
Reference< XCheckBox > xCheckBox( rOptimizerDialog.insertCheckBox( rControlName, aNames, aValues ) );
if ( xItemListener.is() )
xCheckBox->addItemListener( xItemListener );
return rControlName;
}
static OUString InsertFormattedField( OptimizerDialog& rOptimizerDialog, const OUString& rControlName,
const Reference< XTextListener >& xTextListener, const Reference< XSpinListener >& xSpinListener, sal_Int32 nXPos, sal_Int32 nYPos,
double fEffectiveMin, double fEffectiveMax, sal_Int16 nTabIndex )
{
sal_Int32 nWidth = 50;
OUString pNames[] = {
OUString("EffectiveMax"),
OUString("EffectiveMin"),
OUString("Enabled"),
OUString("Height"),
OUString("PositionX"),
OUString("PositionY"),
OUString("Repeat"),
OUString("Spin"),
OUString("Step"),
OUString("TabIndex"),
OUString("Width") };
Any pValues[] = {
Any( fEffectiveMax ),
Any( fEffectiveMin ),
Any( true ),
Any( sal_Int32(12) ),
Any( nXPos ),
Any( nYPos ),
Any( true ),
Any( true ),
Any( sal_Int16(0) ),
Any( nTabIndex ),
Any( nWidth ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
Reference< XTextComponent > xTextComponent( rOptimizerDialog.insertFormattedField( rControlName, aNames, aValues ), UNO_QUERY_THROW );
if ( xTextListener.is() )
xTextComponent->addTextListener( xTextListener );
if ( xSpinListener.is() )
{
Reference< XSpinField > xSpinField( xTextComponent, UNO_QUERY_THROW );
xSpinField->addSpinListener( xSpinListener );
}
return rControlName;
}
static OUString InsertComboBox( OptimizerDialog& rOptimizerDialog, const OUString& rControlName,
const Reference< XTextListener >& rTextListener, const bool bEnabled, const Sequence< OUString >& rItemList,
sal_Int32 nXPos, sal_Int32 nYPos, sal_Int16 nTabIndex )
{
sal_Int32 nHeight = 12;
sal_Int32 nWidth = 100;
OUString pNames[] = {
OUString("Dropdown"),
OUString("Enabled"),
OUString("Height"),
OUString("LineCount"),
OUString("PositionX"),
OUString("PositionY"),
OUString("Step"),
OUString("StringItemList"),
OUString("TabIndex"),
OUString("Width") };
Any pValues[] = {
Any( true ),
Any( bEnabled ),
Any( nHeight ),
Any( sal_Int16(8)),
Any( nXPos ),
Any( nYPos ),
Any( sal_Int16(0) ),
Any( rItemList ),
Any( nTabIndex ),
Any( nWidth ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
Reference< XTextComponent > xTextComponent( rOptimizerDialog.insertComboBox( rControlName, aNames, aValues ), UNO_QUERY_THROW );
if ( rTextListener.is() )
xTextComponent->addTextListener( rTextListener );
return rControlName;
}
static OUString InsertRadioButton( OptimizerDialog& rOptimizerDialog, const OUString& rControlName, const Reference< XItemListener >& rItemListener,
const OUString& rLabel, sal_Int32 nXPos, sal_Int32 nYPos, sal_Int32 nWidth, sal_Int16 nTabIndex )
{
sal_Int32 nHeight = 8;
OUString pNames[] = {
OUString("Height"),
OUString("Label"),
OUString("MultiLine"),
OUString("PositionX"),
OUString("PositionY"),
OUString("Step"),
OUString("TabIndex"),
OUString("Width") };
Any pValues[] = {
Any( nHeight ),
Any( rLabel ),
Any( false ), // bMultiLine
Any( nXPos ),
Any( nYPos ),
Any( sal_Int16(0) ),
Any( nTabIndex ),
Any( nWidth ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
Reference< XRadioButton > xRadioButton( rOptimizerDialog.insertRadioButton( rControlName, aNames, aValues ) );
if ( rItemListener.is() )
xRadioButton->addItemListener( rItemListener );
return rControlName;
}
static OUString InsertListBox( OptimizerDialog& rOptimizerDialog, const OUString& rControlName,
const Reference< XActionListener >& rActionListener, const bool bEnabled, const Sequence< OUString >& rItemList,
sal_Int32 nXPos, sal_Int32 nYPos, sal_Int32 nWidth, sal_Int16 nTabIndex )
{
sal_Int32 nHeight = 12;
OUString pNames[] = {
OUString("Dropdown"),
OUString("Enabled"),
OUString("Height"),
OUString("LineCount"),
OUString("MultiSelection"),
OUString("PositionX"),
OUString("PositionY"),
OUString("Step"),
OUString("StringItemList"),
OUString("TabIndex"),
OUString("Width") };
Any pValues[] = {
Any( true ),
Any( bEnabled ),
Any( nHeight ),
Any( sal_Int16(8)),
Any( false ),
Any( nXPos ),
Any( nYPos ),
Any( sal_Int16(0) ),
Any( rItemList ),
Any( nTabIndex ),
Any( nWidth ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
Reference< XListBox > xListBox( rOptimizerDialog.insertListBox( rControlName, aNames, aValues ) );
if ( xListBox.is() )
xListBox->addActionListener( rActionListener );
return rControlName;
}
void OptimizerDialog::InitNavigationBar()
{
sal_Int32 nCancelPosX = OD_DIALOG_WIDTH - BUTTON_WIDTH - 6;
sal_Int32 nFinishPosX = nCancelPosX - 6 - BUTTON_WIDTH;
sal_Int32 nNextPosX = nFinishPosX - 6 - BUTTON_WIDTH;
sal_Int32 nBackPosX = nNextPosX - 3 - BUTTON_WIDTH;
InsertSeparator( *this, "lnNavSep1", 0, 0, DIALOG_HEIGHT - 26, OD_DIALOG_WIDTH, 1 );
InsertSeparator( *this, "lnNavSep2", 1, 85, 0, 1, BUTTON_POS_Y - 6 );
InsertButton( *this, "btnNavBack", mxActionListener, nBackPosX, BUTTON_POS_Y, BUTTON_WIDTH, mnTabIndex++, false, STR_BACK, PushButtonType_STANDARD );
InsertButton( *this, "btnNavNext", mxActionListener, nNextPosX, BUTTON_POS_Y, BUTTON_WIDTH, mnTabIndex++, true, STR_NEXT, PushButtonType_STANDARD );
InsertButton( *this, "btnNavFinish", mxActionListener, nFinishPosX, BUTTON_POS_Y, BUTTON_WIDTH, mnTabIndex++, true, STR_FINISH, PushButtonType_STANDARD );
InsertButton( *this, "btnNavCancel", mxActionListener, nCancelPosX, BUTTON_POS_Y, BUTTON_WIDTH, mnTabIndex++, true, STR_CANCEL, PushButtonType_STANDARD );
setControlProperty( "btnNavNext", "DefaultButton", Any( true ) );
m_xHelp->hide();
}
void OptimizerDialog::UpdateControlStatesPage0()
{
short nSelectedItem = -1;
Sequence< OUString > aItemList;
int nSelectedItem = -1;
std::vector<OUString> aItemList;
const std::vector< OptimizerSettings >& rList( GetOptimizerSettings() );
if ( rList.size() > 1 ) // the first session in the list is the actual one -> skipping first one
{
aItemList.realloc( rList.size() - 1 );
auto pItemList = aItemList.getArray();
for ( std::vector<OptimizerSettings>::size_type i = 1; i < rList.size(); i++ )
{
pItemList[ i - 1 ] = rList[ i ].maName;
aItemList.push_back(rList[i].maName);
if ( nSelectedItem < 0 )
{
if ( rList[ i ] == rList[ 0 ] )
@@ -406,45 +70,27 @@ void OptimizerDialog::UpdateControlStatesPage0()
}
}
bool bRemoveButtonEnabled = false;
Sequence< short > aSelectedItems;
if ( nSelectedItem >= 0 )
{
aSelectedItems = { nSelectedItem };
if ( nSelectedItem > 2 ) // only allowing to delete custom themes, the first can|t be deleted
bRemoveButtonEnabled = true;
}
setControlProperty( "ListBox0Pg0", "StringItemList", Any( aItemList ) );
setControlProperty( "ListBox0Pg0", "SelectedItems", Any( aSelectedItems ) );
setControlProperty( "Button0Pg0", "Enabled", Any( bRemoveButtonEnabled ) );
}
void OptimizerDialog::InitPage0()
{
Sequence< OUString > aItemList;
std::vector< OUString > aControlList
{
InsertFixedText( *this, "FixedText0Pg0", getString( STR_INTRODUCTION ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, false, true, mnTabIndex++ ),
InsertFixedText( *this, "FixedText1Pg0", getString( STR_INTRODUCTION_T ), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, 100, true, false, mnTabIndex++ ),
InsertSeparator( *this, "Separator1Pg0", 0, PAGE_POS_X + 6, DIALOG_HEIGHT - 66, PAGE_WIDTH - 12, 1 ),
InsertFixedText( *this, "FixedText2Pg0", getString( STR_CHOSE_SETTINGS ), PAGE_POS_X + 6, DIALOG_HEIGHT - 60, PAGE_WIDTH - 12, 8, true, false, mnTabIndex++ ),
InsertListBox( *this, "ListBox0Pg0", mxActionListenerListBox0Pg0, true, aItemList, PAGE_POS_X + 6, DIALOG_HEIGHT - 48, ( OD_DIALOG_WIDTH - 50 ) - ( PAGE_POS_X + 6 ), mnTabIndex++ ),
InsertButton( *this, "Button0Pg0", mxActionListener, OD_DIALOG_WIDTH - 46, DIALOG_HEIGHT - 49, 40, mnTabIndex++, true, STR_REMOVE, PushButtonType_STANDARD )
};
maControlPages.push_back( aControlList );
DeactivatePage( 0 );
UpdateControlStatesPage0();
mpPage0->UpdateControlStates(aItemList, nSelectedItem, bRemoveButtonEnabled);
}
void OptimizerDialog::InitPage0()
{
UpdateControlStatesPage0();
}
void OptimizerDialog::UpdateControlStatesPage1()
{
bool bDeleteUnusedMasterPages( GetConfigProperty( TK_DeleteUnusedMasterPages, false ) );
bool bDeleteHiddenSlides( GetConfigProperty( TK_DeleteHiddenSlides, false ) );
bool bDeleteNotesPages( GetConfigProperty( TK_DeleteNotesPages, false ) );
setControlProperty( "CheckBox0Pg3", "State", Any( static_cast<sal_Int16>(bDeleteUnusedMasterPages) ) );
setControlProperty( "CheckBox1Pg3", "State", Any( static_cast<sal_Int16>(bDeleteNotesPages) ) );
setControlProperty( "CheckBox2Pg3", "State", Any( static_cast<sal_Int16>(bDeleteHiddenSlides) ) );
mpPage1->UpdateControlStates(bDeleteUnusedMasterPages, bDeleteHiddenSlides, bDeleteNotesPages);
}
void OptimizerDialog::InitPage1()
{
Sequence< OUString > aCustomShowList;
@@ -456,104 +102,35 @@ void OptimizerDialog::InitPage1()
if ( aXCont.is() )
aCustomShowList = aXCont->getElementNames();
}
std::vector< OUString > aControlList
{
InsertFixedText( *this, "FixedText0Pg3", getString( STR_CHOOSE_SLIDES ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, false, true, mnTabIndex++ ),
InsertCheckBox( *this, "CheckBox0Pg3", mxItemListener, getString( STR_DELETE_MASTER_PAGES ), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, mnTabIndex++ ),
InsertCheckBox( *this, "CheckBox2Pg3", mxItemListener, getString( STR_DELETE_HIDDEN_SLIDES ), PAGE_POS_X + 6, PAGE_POS_Y + 28, PAGE_WIDTH - 12, mnTabIndex++ ),
InsertCheckBox( *this, "CheckBox3Pg3", mxItemListener, getString( STR_CUSTOM_SHOW ), PAGE_POS_X + 6, PAGE_POS_Y + 42, PAGE_WIDTH - 12, mnTabIndex++ ),
InsertListBox( *this, "ListBox0Pg3", mxActionListener, true, aCustomShowList, PAGE_POS_X + 14, PAGE_POS_Y + 54, 150, mnTabIndex++ ),
InsertCheckBox( *this, "CheckBox1Pg3", mxItemListener, getString( STR_DELETE_NOTES_PAGES ), PAGE_POS_X + 6, PAGE_POS_Y + 70, PAGE_WIDTH - 12, mnTabIndex++ )
};
maControlPages.push_back( aControlList );
DeactivatePage( 1 );
setControlProperty( "CheckBox3Pg3", "State", Any( false ) );
setControlProperty( "CheckBox3Pg3", "Enabled", Any( aCustomShowList.hasElements() ) );
setControlProperty( "ListBox0Pg3", "Enabled", Any( false ) );
mpPage1->Init(aCustomShowList);
UpdateControlStatesPage1();
}
namespace
{
bool lcl_getResolutionText(OUString& rResolutionText, std::u16string_view rImageResolution, sal_Int32 nTargetRes)
{
sal_Int32 nIdx{ 0 };
if (o3tl::toInt32(o3tl::getToken(rImageResolution, 0, ';', nIdx))!=nTargetRes)
return false;
rResolutionText = o3tl::getToken(rImageResolution, 0, ';', nIdx);
return true;
}
}
void OptimizerDialog::UpdateControlStatesPage2()
{
bool bJPEGCompression( GetConfigProperty( TK_JPEGCompression, false ) );
bool bRemoveCropArea( GetConfigProperty( TK_RemoveCropArea, false ) );
bool bEmbedLinkedGraphics( GetConfigProperty( TK_EmbedLinkedGraphics, true ) );
sal_Int32 nJPEGQuality( GetConfigProperty( TK_JPEGQuality, sal_Int32(90) ) );
sal_Int32 nImageResolution( GetConfigProperty( TK_ImageResolution, sal_Int32(0) ) );
OUString aResolutionText;
for (int nIR{ STR_IMAGE_RESOLUTION_0 }; nIR<=STR_IMAGE_RESOLUTION_3; ++nIR)
{
if (lcl_getResolutionText(aResolutionText, getString(static_cast<PPPOptimizerTokenEnum>(nIR)), nImageResolution))
break;
}
if ( aResolutionText.isEmpty() )
aResolutionText = OUString::number( nImageResolution );
setControlProperty( "RadioButton0Pg1", "State", Any( static_cast<sal_Int16>( !bJPEGCompression ) ) );
setControlProperty( "RadioButton1Pg1", "State", Any( static_cast<sal_Int16>(bJPEGCompression) ) );
setControlProperty( "FixedText1Pg1", "Enabled", Any( bJPEGCompression ) );
setControlProperty( "FormattedField0Pg1", "Enabled", Any( bJPEGCompression ) );
setControlProperty( "FormattedField0Pg1", "EffectiveValue", Any( static_cast<double>(nJPEGQuality) ) );
setControlProperty( "CheckBox1Pg1", "State", Any( static_cast<sal_Int16>(bRemoveCropArea) ) );
setControlProperty( "ComboBox0Pg1", "Text", Any( aResolutionText ) );
setControlProperty( "CheckBox2Pg1", "State", Any( static_cast<sal_Int16>(bEmbedLinkedGraphics) ) );
mpPage2->UpdateControlStates(bJPEGCompression, nJPEGQuality, bRemoveCropArea, nImageResolution, bEmbedLinkedGraphics);
}
void OptimizerDialog::InitPage2()
{
Sequence< OUString > aResolutionItemList{
getString( STR_IMAGE_RESOLUTION_0 ).getToken( 1, ';' ),
getString( STR_IMAGE_RESOLUTION_1 ).getToken( 1, ';' ),
getString( STR_IMAGE_RESOLUTION_2 ).getToken( 1, ';' ),
getString( STR_IMAGE_RESOLUTION_3 ).getToken( 1, ';' )
};
std::vector< OUString > aControlList
{
InsertFixedText( *this, "FixedText0Pg1", getString( STR_GRAPHIC_OPTIMIZATION ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, false, true, mnTabIndex++ ),
InsertRadioButton( *this, "RadioButton0Pg1", mxItemListener, getString( STR_LOSSLESS_COMPRESSION ), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, mnTabIndex++ ),
InsertRadioButton( *this, "RadioButton1Pg1", mxItemListener, getString( STR_JPEG_COMPRESSION ), PAGE_POS_X + 6, PAGE_POS_Y + 28, PAGE_WIDTH - 12, mnTabIndex++ ),
InsertFixedText( *this, "FixedText1Pg1", getString( STR_QUALITY ), PAGE_POS_X + 20, PAGE_POS_Y + 40, 72, 8, false, false, mnTabIndex++ ),
InsertFormattedField( *this, "FormattedField0Pg1", mxTextListenerFormattedField0Pg1, mxSpinListenerFormattedField0Pg1, PAGE_POS_X + 106, PAGE_POS_Y + 38, 0, 100, mnTabIndex++ ),
InsertFixedText( *this, "FixedText2Pg1", getString( STR_IMAGE_RESOLUTION ), PAGE_POS_X + 6, PAGE_POS_Y + 54, 94, 8, false, false, mnTabIndex++ ),
InsertComboBox( *this, "ComboBox0Pg1", mxTextListenerComboBox0Pg1, true, aResolutionItemList, PAGE_POS_X + 106, PAGE_POS_Y + 52, mnTabIndex++ ),
InsertCheckBox( *this, "CheckBox1Pg1", mxItemListener, getString( STR_REMOVE_CROP_AREA ), PAGE_POS_X + 6, PAGE_POS_Y + 68, PAGE_WIDTH - 12, mnTabIndex++ ),
InsertCheckBox( *this, "CheckBox2Pg1", mxItemListener, getString( STR_EMBED_LINKED_GRAPHICS ), PAGE_POS_X + 6, PAGE_POS_Y + 82, PAGE_WIDTH - 12, mnTabIndex++ )
};
maControlPages.push_back( aControlList );
DeactivatePage( 2 );
UpdateControlStatesPage2();
}
void OptimizerDialog::UpdateControlStatesPage3()
{
bool bConvertOLEObjects( GetConfigProperty( TK_OLEOptimization, false ) );
sal_Int16 nOLEOptimizationType( GetConfigProperty( TK_OLEOptimizationType, sal_Int16(0) ) );
setControlProperty( "CheckBox0Pg2", "State", Any( static_cast<sal_Int16>(bConvertOLEObjects) ) );
setControlProperty( "RadioButton0Pg2", "Enabled", Any( bConvertOLEObjects ) );
setControlProperty( "RadioButton0Pg2", "State", Any( static_cast<sal_Int16>( nOLEOptimizationType == 0 ) ) );
setControlProperty( "RadioButton1Pg2", "Enabled", Any( bConvertOLEObjects ) );
setControlProperty( "RadioButton1Pg2", "State", Any( static_cast<sal_Int16>( nOLEOptimizationType == 1 ) ) );
mpPage3->UpdateControlStates(bConvertOLEObjects, nOLEOptimizationType);
}
void OptimizerDialog::InitPage3()
{
int nOLECount = 0;
@@ -571,20 +148,11 @@ void OptimizerDialog::InitPage3()
}
}
std::vector< OUString > aControlList
{
InsertFixedText( *this, "FixedText0Pg2", getString( STR_OLE_OPTIMIZATION ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, false, true, mnTabIndex++ ),
InsertCheckBox( *this, "CheckBox0Pg2", mxItemListener, getString( STR_OLE_REPLACE ), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, mnTabIndex++ ),
InsertRadioButton( *this, "RadioButton0Pg2", mxItemListener, getString( STR_ALL_OLE_OBJECTS ), PAGE_POS_X + 14, PAGE_POS_Y + 28, PAGE_WIDTH - 22, mnTabIndex++ ),
InsertRadioButton( *this, "RadioButton1Pg2", mxItemListener, getString( STR_ALIEN_OLE_OBJECTS_ONLY ), PAGE_POS_X + 14, PAGE_POS_Y + 40, PAGE_WIDTH - 22, mnTabIndex++ ),
InsertFixedText( *this, "FixedText1Pg2", nOLECount ? getString( STR_OLE_OBJECTS_DESC ) : getString( STR_NO_OLE_OBJECTS_DESC ), PAGE_POS_X + 6, PAGE_POS_Y + 64, PAGE_WIDTH - 22, 50, true, false, mnTabIndex++ )
};
maControlPages.push_back( aControlList );
DeactivatePage( 3 );
mpPage3->Init(nOLECount ? getString(STR_OLE_OBJECTS_DESC) : getString(STR_NO_OLE_OBJECTS_DESC));
UpdateControlStatesPage3();
}
static OUString ImpValueOfInMB( sal_Int64 rVal, sal_Unicode nSeparator )
{
double fVal( static_cast<double>( rVal ) );
@@ -605,27 +173,15 @@ void OptimizerDialog::UpdateControlStatesPage4()
{
bool bSaveAs( GetConfigProperty( TK_SaveAs, true ) );
if ( mbIsReadonly )
{
setControlProperty( "RadioButton0Pg4", "State", Any( sal_Int16(false) ) );
setControlProperty( "RadioButton1Pg4", "State", Any( sal_Int16(true) ) );
}
else
{
setControlProperty( "RadioButton0Pg4", "State", Any( static_cast<sal_Int16>( !bSaveAs ) ) );
setControlProperty( "RadioButton1Pg4", "State", Any( static_cast<sal_Int16>(bSaveAs) ) );
}
setControlProperty( "ComboBox0Pg4", "Enabled", Any( false ) );
bSaveAs = true;
Sequence< OUString > aItemList;
std::vector<OUString> aItemList;
const std::vector< OptimizerSettings >& rList( GetOptimizerSettings() );
if ( rList.size() > 1 ) // the first session in the list is the actual one -> skipping first one
{
aItemList.realloc( rList.size() - 1 );
auto pItemList = aItemList.getArray();
for ( std::vector<OptimizerSettings>::size_type w = 1; w < rList.size(); w++ )
pItemList[ w - 1 ] = rList[ w ].maName;
aItemList.push_back(rList[ w ].maName);
}
setControlProperty( "ComboBox0Pg4", "StringItemList", Any( aItemList ) );
// now check if it is sensible to enable the combo box
bool bSaveSettingsEnabled = true;
@@ -640,37 +196,14 @@ void OptimizerDialog::UpdateControlStatesPage4()
}
}
}
sal_Int16 nInt16 = 0;
getControlProperty( "CheckBox1Pg4", "State" ) >>= nInt16;
setControlProperty( "CheckBox1Pg4", "Enabled", Any( bSaveSettingsEnabled ) );
setControlProperty( "ComboBox0Pg4", "Enabled", Any( bSaveSettingsEnabled && nInt16 ) );
std::vector< OUString > aSummaryStrings;
// taking care of deleted slides
sal_Int32 nDeletedSlides = 0;
if ( getControlProperty( "CheckBox3Pg3", "State" ) >>= nInt16 )
{
if ( nInt16 )
{
Sequence< short > aSelectedItems;
Sequence< OUString > aStringItemList;
Any aAny = getControlProperty( "ListBox0Pg3", "SelectedItems" );
if ( aAny >>= aSelectedItems )
{
if ( aSelectedItems.hasElements() )
{
sal_Int16 nSelectedItem = aSelectedItems[ 0 ];
aAny = getControlProperty( "ListBox0Pg3", "StringItemList" );
if ( aAny >>= aStringItemList )
{
if ( aStringItemList.getLength() > nSelectedItem )
SetConfigProperty( TK_CustomShowName, Any( aStringItemList[ nSelectedItem ] ) );
}
}
}
}
}
OUString sTKCustomShowName(mpPage1->Get_TK_CustomShowName());
if (!sTKCustomShowName.isEmpty())
SetConfigProperty(TK_CustomShowName, Any(sTKCustomShowName));
if ( GetConfigProperty( TK_DeleteHiddenSlides, false ) )
{
Reference< XDrawPagesSupplier > xDrawPagesSupplier( mxController->getModel(), UNO_QUERY_THROW );
@@ -714,7 +247,7 @@ void OptimizerDialog::UpdateControlStatesPage4()
sal_Int32 nImageResolution( GetConfigProperty( TK_ImageResolution, sal_Int32(0) ) );
GraphicSettings aGraphicSettings( bJPEGCompression, nJPEGQuality, GetConfigProperty( TK_RemoveCropArea, false ),
nImageResolution, GetConfigProperty( TK_EmbedLinkedGraphics, true ) );
GraphicCollector::CountGraphics( UnoDialog::mxContext, mxController->getModel(), aGraphicSettings, nGraphics );
GraphicCollector::CountGraphics( mxContext, mxController->getModel(), aGraphicSettings, nGraphics );
if ( nGraphics > 1 )
{
OUString aStr( getString( STR_OPTIMIZE_IMAGES ) );
@@ -763,9 +296,6 @@ void OptimizerDialog::UpdateControlStatesPage4()
}
while( aSummaryStrings.size() < 3 )
aSummaryStrings.emplace_back( );
setControlProperty( "FixedText4Pg4", "Label", Any( aSummaryStrings[ 0 ] ) );
setControlProperty( "FixedText5Pg4", "Label", Any( aSummaryStrings[ 1 ] ) );
setControlProperty( "FixedText6Pg4", "Label", Any( aSummaryStrings[ 2 ] ) );
sal_Int64 nCurrentFileSize = 0;
sal_Int64 nEstimatedFileSize = 0;
@@ -793,71 +323,15 @@ void OptimizerDialog::UpdateControlStatesPage4()
OUString aStr( getString( STR_FILESIZESEPARATOR ) );
if ( !aStr.isEmpty() )
nSeparator = aStr[ 0 ];
setControlProperty( "FixedText7Pg4", "Label", Any( ImpValueOfInMB( nCurrentFileSize, nSeparator ) ) );
setControlProperty( "FixedText8Pg4", "Label", Any( ImpValueOfInMB( nEstimatedFileSize, nSeparator ) ) );
mpPage4->UpdateControlStates(bSaveAs, bSaveSettingsEnabled, aItemList,
aSummaryStrings,
ImpValueOfInMB(nCurrentFileSize, nSeparator),
ImpValueOfInMB(nEstimatedFileSize, nSeparator));
SetConfigProperty( TK_EstimatedFileSize, Any( nEstimatedFileSize ) );
}
void OptimizerDialog::InitPage4()
{
{ // creating progress bar:
OUString pNames[] = {
OUString("Height"),
OUString("Name"),
OUString("PositionX"),
OUString("PositionY"),
OUString("ProgressValue"),
OUString("ProgressValueMax"),
OUString("ProgressValueMin"),
OUString("Width") };
Any pValues[] = {
Any( sal_Int32(12) ),
Any( OUString("STR_SAVE_AS") ),
Any( sal_Int32( PAGE_POS_X + 6 ) ),
Any( sal_Int32( DIALOG_HEIGHT - 75 ) ),
Any( sal_Int32(0) ),
Any( sal_Int32(100) ),
Any( sal_Int32(0) ),
Any( sal_Int32( PAGE_WIDTH - 12 ) ) };
sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
Sequence< OUString > aNames( pNames, nCount );
Sequence< Any > aValues( pValues, nCount );
insertControlModel( "com.sun.star.awt.UnoControlProgressBarModel",
"Progress", aNames, aValues );
}
Reference< XTextListener > xTextListener;
Sequence< OUString > aItemList;
std::vector< OUString > aControlList
{
InsertFixedText( *this, "FixedText0Pg4", getString( STR_SUMMARY_TITLE ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, false, true, mnTabIndex++ ),
// InsertSeparator( *this, "Separator0Pg4", 0, PAGE_POS_X + 6, PAGE_POS_Y + 90, PAGE_WIDTH - 12, 1 ),
InsertFixedText( *this, "FixedText4Pg4", OUString(), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, 8, false, false, mnTabIndex++ ),
InsertFixedText( *this, "FixedText5Pg4", OUString(), PAGE_POS_X + 6, PAGE_POS_Y + 22, PAGE_WIDTH - 12, 8, false, false, mnTabIndex++ ),
InsertFixedText( *this, "FixedText6Pg4", OUString(), PAGE_POS_X + 6, PAGE_POS_Y + 30, PAGE_WIDTH - 12, 8, false, false, mnTabIndex++ ),
InsertFixedText( *this, "FixedText2Pg4", getString( STR_CURRENT_FILESIZE ), PAGE_POS_X + 6, PAGE_POS_Y + 50, 88, 8, false, false, mnTabIndex++ ),
InsertFixedText( *this, "FixedText7Pg4", OUString(), PAGE_POS_X + 100, PAGE_POS_Y + 50, 30, 8, false, false, mnTabIndex++ )
};
setControlProperty( "FixedText7Pg4", "Align", Any( static_cast< short >( 2 ) ) );
aControlList.push_back( InsertFixedText( *this, "FixedText3Pg4", getString( STR_ESTIMATED_FILESIZE ), PAGE_POS_X + 6, PAGE_POS_Y + 58, 88, 8, false, false, mnTabIndex++ ) );
aControlList.push_back( InsertFixedText( *this, "FixedText8Pg4", OUString(), PAGE_POS_X + 100, PAGE_POS_Y + 58, 30, 8, false, false, mnTabIndex++ ) );
setControlProperty( "FixedText8Pg4", "Align", Any( static_cast< short >( 2 ) ) );
aControlList.push_back( InsertRadioButton( *this, "RadioButton0Pg4", mxItemListener, getString( STR_APPLY_TO_CURRENT ), PAGE_POS_X + 6, PAGE_POS_Y + 78, PAGE_WIDTH - 12, mnTabIndex++ ) );
aControlList.push_back( InsertRadioButton( *this, "RadioButton1Pg4", mxItemListener, getString( STR_SAVE_AS ), PAGE_POS_X + 6, PAGE_POS_Y + 90, PAGE_WIDTH - 12, mnTabIndex++ ) );
aControlList.push_back( InsertFixedText( *this, "FixedText1Pg4", OUString(), PAGE_POS_X + 6, DIALOG_HEIGHT - 87, PAGE_WIDTH - 12, 8, true, false, mnTabIndex++ ) );
aControlList.emplace_back("Progress" );
aControlList.push_back( InsertSeparator( *this, "Separator1Pg4", 0, PAGE_POS_X + 6, DIALOG_HEIGHT - 58, PAGE_WIDTH - 12, 1 ) );
aControlList.push_back( InsertCheckBox( *this, "CheckBox1Pg4", mxItemListener, getString( STR_SAVE_SETTINGS ), PAGE_POS_X + 6, DIALOG_HEIGHT - 47, 100, mnTabIndex++ ) );
aControlList.push_back( InsertComboBox( *this, "ComboBox0Pg4", xTextListener, true, aItemList, PAGE_POS_X + 106, DIALOG_HEIGHT - 48, mnTabIndex++ ) );
maControlPages.push_back( aControlList );
DeactivatePage( 4 );
// creating a default session name that hasn't been used yet
OUString aSettingsName;
OUString aDefault( getString( STR_MY_SETTINGS ) );
@@ -877,33 +351,9 @@ void OptimizerDialog::InitPage4()
}
while( aSettingsName.isEmpty() );
setControlProperty( "ComboBox0Pg4", "Text", Any( aSettingsName ) );
setControlProperty( "RadioButton0Pg4", "Enabled", Any( !mbIsReadonly ) );
setControlProperty( "RadioButton1Pg4", "Enabled", Any( !mbIsReadonly ) );
mpPage4->Init(aSettingsName, mbIsReadonly);
UpdateControlStatesPage4();
}
void OptimizerDialog::EnablePage( sal_Int16 nStep )
{
for( const auto& rItem : maControlPages[ nStep ] )
setControlProperty( rItem, "Enabled", Any( true ) );
}
void OptimizerDialog::DisablePage( sal_Int16 nStep )
{
for( const auto& rItem : maControlPages[ nStep ] )
setControlProperty( rItem, "Enabled", Any( false ) );
}
void OptimizerDialog::ActivatePage( sal_Int16 nStep )
{
for( const auto& rItem : maControlPages[ nStep ] )
setVisible( rItem, true );
}
void OptimizerDialog::DeactivatePage( sal_Int16 nStep )
{
for( const auto& rItem : maControlPages[ nStep ] )
setVisible( rItem, false );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sdext/source/minimizer/pppoptimizerdialog.cxx b/sdext/source/minimizer/pppoptimizerdialog.cxx
index 74a89bf..9ad72b7 100644
--- a/sdext/source/minimizer/pppoptimizerdialog.cxx
+++ b/sdext/source/minimizer/pppoptimizerdialog.cxx
@@ -125,6 +125,7 @@ void SAL_CALL PPPOptimizerDialog::dispatch( const URL& rURL,
}
else if ( rURL.Path == "statusupdate" )
{
fprintf(stderr, "statusupdate\n");
if ( mpOptimizerDialog )
mpOptimizerDialog->UpdateStatus( rArguments );
}
diff --git a/sdext/source/minimizer/pppoptimizertoken.cxx b/sdext/source/minimizer/pppoptimizertoken.cxx
index c21880e..6062efa 100644
--- a/sdext/source/minimizer/pppoptimizertoken.cxx
+++ b/sdext/source/minimizer/pppoptimizertoken.cxx
@@ -45,27 +45,7 @@ struct TokenTable
const TokenTable pTokenTableArray[] =
{
{ "rdmNavi", TK_rdmNavi },
{ "btnNavBack", TK_btnNavBack },
{ "btnNavNext", TK_btnNavNext },
{ "btnNavFinish", TK_btnNavFinish },
{ "btnNavCancel", TK_btnNavCancel },
{ "Button0Pg0", TK_Button0Pg0 },
{ "RadioButton0Pg1", TK_RadioButton0Pg1 },
{ "RadioButton1Pg1", TK_RadioButton1Pg1 },
{ "CheckBox1Pg1", TK_CheckBox1Pg1 },
{ "CheckBox2Pg1", TK_CheckBox2Pg1 },
{ "CheckBox0Pg2", TK_CheckBox0Pg2 },
{ "RadioButton0Pg2", TK_RadioButton0Pg2 },
{ "RadioButton1Pg2", TK_RadioButton1Pg2 },
{ "CheckBox0Pg3", TK_CheckBox0Pg3 },
{ "CheckBox1Pg3", TK_CheckBox1Pg3 },
{ "CheckBox2Pg3", TK_CheckBox2Pg3 },
{ "CheckBox3Pg3", TK_CheckBox3Pg3 },
{ "RadioButton0Pg4", TK_RadioButton0Pg4 },
{ "RadioButton1Pg4", TK_RadioButton1Pg4 },
{ "CheckBox1Pg4", TK_CheckBox1Pg4 },
{ "DocumentService", TK_DocumentService },
{ "FileSizeDestination",TK_FileSizeDestination },
@@ -100,51 +80,17 @@ const TokenTable pTokenTableArray[] =
{ "Pages", TK_Pages },
{ "STR_SUN_OPTIMIZATION_WIZARD2",STR_SUN_OPTIMIZATION_WIZARD2 },
{ "STR_STEPS", STR_STEPS },
{ "STR_BACK", STR_BACK },
{ "STR_NEXT", STR_NEXT },
{ "STR_FINISH", STR_FINISH },
{ "STR_CANCEL", STR_CANCEL },
{ "STR_INTRODUCTION", STR_INTRODUCTION },
{ "STR_INTRODUCTION_T", STR_INTRODUCTION_T },
{ "STR_CHOSE_SETTINGS", STR_CHOSE_SETTINGS },
{ "STR_REMOVE", STR_REMOVE },
{ "STR_GRAPHIC_OPTIMIZATION", STR_GRAPHIC_OPTIMIZATION },
{ "STR_IMAGE_OPTIMIZATION", STR_IMAGE_OPTIMIZATION },
{ "STR_LOSSLESS_COMPRESSION", STR_LOSSLESS_COMPRESSION },
{ "STR_JPEG_COMPRESSION", STR_JPEG_COMPRESSION },
{ "STR_QUALITY", STR_QUALITY },
{ "STR_REMOVE_CROP_AREA", STR_REMOVE_CROP_AREA },
{ "STR_IMAGE_RESOLUTION", STR_IMAGE_RESOLUTION },
{ "STR_IMAGE_RESOLUTION_0", STR_IMAGE_RESOLUTION_0 },
{ "STR_IMAGE_RESOLUTION_1", STR_IMAGE_RESOLUTION_1 },
{ "STR_IMAGE_RESOLUTION_2", STR_IMAGE_RESOLUTION_2 },
{ "STR_IMAGE_RESOLUTION_3", STR_IMAGE_RESOLUTION_3 },
{ "STR_EMBED_LINKED_GRAPHICS", STR_EMBED_LINKED_GRAPHICS },
{ "STR_OLE_OBJECTS", STR_OLE_OBJECTS },
{ "STR_OLE_OPTIMIZATION", STR_OLE_OPTIMIZATION },
{ "STR_OLE_REPLACE", STR_OLE_REPLACE },
{ "STR_ALL_OLE_OBJECTS", STR_ALL_OLE_OBJECTS },
{ "STR_ALIEN_OLE_OBJECTS_ONLY", STR_ALIEN_OLE_OBJECTS_ONLY },
{ "STR__OLE_OBJECTS_DESC", STR_OLE_OBJECTS_DESC },
{ "STR_OLE_OBJECTS_DESC", STR_OLE_OBJECTS_DESC },
{ "STR_NO_OLE_OBJECTS_DESC", STR_NO_OLE_OBJECTS_DESC },
{ "STR_SLIDES", STR_SLIDES },
{ "STR_CHOOSE_SLIDES", STR_CHOOSE_SLIDES },
{ "STR_DELETE_MASTER_PAGES", STR_DELETE_MASTER_PAGES },
{ "STR_DELETE_NOTES_PAGES", STR_DELETE_NOTES_PAGES },
{ "STR_DELETE_HIDDEN_SLIDES", STR_DELETE_HIDDEN_SLIDES },
{ "STR_CUSTOM_SHOW", STR_CUSTOM_SHOW },
{ "STR_SUMMARY", STR_SUMMARY },
{ "STR_SUMMARY_TITLE", STR_SUMMARY_TITLE },
{ "STR_APPLY_TO_CURRENT", STR_APPLY_TO_CURRENT },
{ "STR_AUTOMATICALLY_OPEN", STR_AUTOMATICALLY_OPEN },
{ "STR_SAVE_SETTINGS", STR_SAVE_SETTINGS },
{ "STR_SAVE_AS", STR_SAVE_AS },
{ "STR_DELETE_SLIDES", STR_DELETE_SLIDES },
{ "STR_OPTIMIZE_IMAGES", STR_OPTIMIZE_IMAGES },
{ "STR_CREATE_REPLACEMENT", STR_CREATE_REPLACEMENT },
{ "STR_CURRENT_FILESIZE", STR_CURRENT_FILESIZE },
{ "STR_ESTIMATED_FILESIZE", STR_ESTIMATED_FILESIZE },
{ "MY_SETTINGS", STR_MY_SETTINGS },
{ "STR_OK", STR_OK },
{ "STR_INFO_1", STR_INFO_1 },
diff --git a/sdext/source/minimizer/pppoptimizertoken.hxx b/sdext/source/minimizer/pppoptimizertoken.hxx
index 3f946fc..4f74e73 100644
--- a/sdext/source/minimizer/pppoptimizertoken.hxx
+++ b/sdext/source/minimizer/pppoptimizertoken.hxx
@@ -24,27 +24,7 @@
enum PPPOptimizerTokenEnum
{
TK_rdmNavi,
TK_btnNavBack,
TK_btnNavNext,
TK_btnNavFinish,
TK_btnNavCancel,
TK_Button0Pg0,
TK_RadioButton0Pg1,
TK_RadioButton1Pg1,
TK_CheckBox1Pg1,
TK_CheckBox2Pg1,
TK_CheckBox0Pg2,
TK_RadioButton0Pg2,
TK_RadioButton1Pg2,
TK_CheckBox0Pg3,
TK_CheckBox1Pg3,
TK_CheckBox2Pg3,
TK_CheckBox3Pg3,
TK_RadioButton0Pg4,
TK_RadioButton1Pg4,
TK_CheckBox1Pg4,
TK_DocumentService,
TK_FileSizeDestination,
@@ -79,51 +59,17 @@ enum PPPOptimizerTokenEnum
TK_Pages,
STR_SUN_OPTIMIZATION_WIZARD2,
STR_STEPS,
STR_BACK,
STR_NEXT,
STR_FINISH,
STR_CANCEL,
STR_INTRODUCTION,
STR_INTRODUCTION_T,
STR_CHOSE_SETTINGS,
STR_REMOVE,
STR_GRAPHIC_OPTIMIZATION,
STR_IMAGE_OPTIMIZATION,
STR_LOSSLESS_COMPRESSION,
STR_JPEG_COMPRESSION,
STR_QUALITY,
STR_REMOVE_CROP_AREA,
STR_IMAGE_RESOLUTION,
STR_IMAGE_RESOLUTION_0,
STR_IMAGE_RESOLUTION_1,
STR_IMAGE_RESOLUTION_2,
STR_IMAGE_RESOLUTION_3,
STR_EMBED_LINKED_GRAPHICS,
STR_OLE_OBJECTS,
STR_OLE_OPTIMIZATION,
STR_OLE_REPLACE,
STR_ALL_OLE_OBJECTS,
STR_ALIEN_OLE_OBJECTS_ONLY,
STR_OLE_OBJECTS_DESC,
STR_NO_OLE_OBJECTS_DESC,
STR_SLIDES,
STR_CHOOSE_SLIDES,
STR_DELETE_MASTER_PAGES,
STR_DELETE_NOTES_PAGES,
STR_DELETE_HIDDEN_SLIDES,
STR_CUSTOM_SHOW,
STR_SUMMARY,
STR_SUMMARY_TITLE,
STR_APPLY_TO_CURRENT,
STR_AUTOMATICALLY_OPEN,
STR_SAVE_SETTINGS,
STR_SAVE_AS,
STR_DELETE_SLIDES,
STR_OPTIMIZE_IMAGES,
STR_CREATE_REPLACEMENT,
STR_CURRENT_FILESIZE,
STR_ESTIMATED_FILESIZE,
STR_MY_SETTINGS,
STR_OK,
STR_INFO_1,