LibreOffice Module svx (master)  1
compressgraphicdialog.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include "dlgunit.hxx"
21 #include <vcl/fieldvalues.hxx>
22 #include <vcl/graph.hxx>
23 #include <vcl/graphicfilter.hxx>
24 #include <vcl/virdev.hxx>
25 #include <vcl/svapp.hxx>
26 #include <vcl/settings.hxx>
27 #include <vcl/weld.hxx>
28 #include <svx/strings.hrc>
29 #include <svx/svdograf.hxx>
30 #include <svx/sdgcpitm.hxx>
31 #include <svx/dialmgr.hxx>
32 #include <svx/graphichelper.hxx>
34 #include <sfx2/dispatch.hxx>
35 #include <sfx2/module.hxx>
36 #include <comphelper/fileformat.h>
38 #include <com/sun/star/uno/Sequence.hxx>
39 #include <tools/stream.hxx>
41 
42 // tdf#146929 - remember user settings within the current session
43 // memp is filled in dtor and restored after initialization
44 namespace
45 {
46  struct memParam {
47  bool ReduceResolutionCB = false;
48  int MFNewWidth = 1;
49  int MFNewHeight = 1;
50  bool LosslessRB = true;
51  bool JpegCompRB = false;
52  int CompressionMF = 6;
53  int QualityMF = 80;
54  int InterpolationCombo = 3;
55  };
56  memParam memp;
57 }
58 
59 using namespace com::sun::star::uno;
60 using namespace com::sun::star::beans;
61 
63  GenericDialogController( pParent, "svx/ui/compressgraphicdialog.ui", "CompressGraphicDialog" ),
64  m_xGraphicObj ( pGraphicObj ),
65  m_aGraphic ( pGraphicObj->GetGraphicObject().GetGraphic() ),
66  m_aViewSize100mm ( pGraphicObj->GetLogicRect().GetSize() ),
67  m_rBindings ( rBindings ),
68  m_dResolution ( 300 )
69 {
70  const SdrGrafCropItem& rCrop = m_xGraphicObj->GetMergedItem(SDRATTR_GRAFCROP);
71  m_aCropRectangle = tools::Rectangle(rCrop.GetLeft(), rCrop.GetTop(), rCrop.GetRight(), rCrop.GetBottom());
72 
73  Initialize();
75 }
76 
77 CompressGraphicsDialog::CompressGraphicsDialog( weld::Window* pParent, Graphic const & rGraphic, Size rViewSize100mm, tools::Rectangle const & rCropRectangle, SfxBindings& rBindings ) :
78  GenericDialogController( pParent, "svx/ui/compressgraphicdialog.ui", "CompressGraphicDialog" ),
79  m_xGraphicObj ( nullptr ),
80  m_aGraphic ( rGraphic ),
81  m_aViewSize100mm ( rViewSize100mm ),
82  m_aCropRectangle ( rCropRectangle ),
83  m_rBindings ( rBindings ),
84  m_dResolution ( 300 )
85 {
86  Initialize();
88 }
89 
91 {
92 }
93 
95 {
96  m_xReduceResolutionCB->set_active( memp.ReduceResolutionCB );
97  if (memp.ReduceResolutionCB && (memp.MFNewWidth > 1))
98  m_xMFNewWidth->set_value( memp.MFNewWidth );
99  if (memp.ReduceResolutionCB && (memp.MFNewHeight > 1))
100  m_xMFNewHeight->set_value( memp.MFNewHeight );
101 
102  m_xLosslessRB->set_active( memp.LosslessRB );
103  m_xJpegCompRB->set_active( memp.JpegCompRB );
104  m_xCompressionMF->set_value( memp.CompressionMF );
105  m_xCompressionSlider->set_value( memp.CompressionMF );
106  m_xQualityMF->set_value( memp.QualityMF );
107  m_xQualitySlider->set_value( memp.QualityMF );
108 
109  m_xInterpolationCombo->set_active( memp.InterpolationCombo );
110 }
111 
113 {
114  m_xLabelGraphicType = m_xBuilder->weld_label("label-graphic-type");
115  m_xFixedText2 = m_xBuilder->weld_label("label-original-size");
116  m_xFixedText3 = m_xBuilder->weld_label("label-view-size");
117  m_xFixedText5 = m_xBuilder->weld_label("label-image-capacity");
118  m_xFixedText6 = m_xBuilder->weld_label("label-new-capacity");
119  m_xJpegCompRB = m_xBuilder->weld_radio_button("radio-jpeg");
120  m_xCompressionMF = m_xBuilder->weld_spin_button("spin-compression");
121  m_xCompressionSlider = m_xBuilder->weld_scale("scale-compression");
122  m_xLosslessRB = m_xBuilder->weld_radio_button("radio-lossless");
123  m_xQualityMF = m_xBuilder->weld_spin_button("spin-quality");
124  m_xQualitySlider = m_xBuilder->weld_scale("scale-quality");
125  m_xReduceResolutionCB = m_xBuilder->weld_check_button("checkbox-reduce-resolution");
126  m_xMFNewWidth = m_xBuilder->weld_spin_button("spin-new-width");
127  m_xMFNewHeight = m_xBuilder->weld_spin_button("spin-new-height");
128  m_xResolutionLB = m_xBuilder->weld_combo_box("combo-resolution");
129  m_xBtnCalculate = m_xBuilder->weld_button("calculate");
130  m_xInterpolationCombo = m_xBuilder->weld_combo_box("interpolation-method-combo");
131  m_xBtnOkay = m_xBuilder->weld_button("ok");
132 
133  m_xInterpolationCombo->set_active_text("Lanczos");
134 
135  m_xInterpolationCombo->connect_changed(LINK(this, CompressGraphicsDialog, NewInterpolationModifiedHdl));
136 
137  m_xMFNewWidth->connect_changed( LINK( this, CompressGraphicsDialog, NewWidthModifiedHdl ));
138  m_xMFNewHeight->connect_changed( LINK( this, CompressGraphicsDialog, NewHeightModifiedHdl ));
139 
140  m_xResolutionLB->connect_changed( LINK( this, CompressGraphicsDialog, ResolutionModifiedHdl ));
141  m_xBtnCalculate->connect_clicked( LINK( this, CompressGraphicsDialog, CalculateClickHdl ) );
142 
143  m_xLosslessRB->connect_toggled( LINK( this, CompressGraphicsDialog, ToggleCompressionRB ) );
144  m_xJpegCompRB->connect_toggled( LINK( this, CompressGraphicsDialog, ToggleCompressionRB ) );
145 
146  m_xReduceResolutionCB->connect_toggled( LINK( this, CompressGraphicsDialog, ToggleReduceResolutionRB ) );
147 
148  m_xQualitySlider->connect_value_changed( LINK( this, CompressGraphicsDialog, SlideHdl ));
149  m_xCompressionSlider->connect_value_changed( LINK( this, CompressGraphicsDialog, SlideHdl ));
150  m_xQualityMF->connect_changed( LINK( this, CompressGraphicsDialog, NewQualityModifiedHdl ));
151  m_xCompressionMF->connect_changed( LINK( this, CompressGraphicsDialog, NewCompressionModifiedHdl ));
152 
153  m_xJpegCompRB->set_active(true);
154  m_xReduceResolutionCB->set_active(true);
155 
156  m_xBtnOkay->connect_clicked( LINK( this, CompressGraphicsDialog, OkayClickHdl ) );
160  Update();
161 }
162 
164 {
165  auto pGfxLink = m_aGraphic.GetSharedGfxLink();
166 
167  m_xLabelGraphicType->set_label(GraphicHelper::GetImageType(m_aGraphic));
168 
169  const FieldUnit eFieldUnit = m_rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
171  sal_Unicode cSeparator = rLocaleWrapper.getNumDecimalSep()[0];
172 
174  pDummyVDev->EnableOutput( false );
175  pDummyVDev->SetMapMode( m_aGraphic.GetPrefMapMode() );
176 
177  Size aPixelSize = m_aGraphic.GetSizePixel();
178  Size aOriginalSize100mm(pDummyVDev->PixelToLogic(m_aGraphic.GetSizePixel(), MapMode(MapUnit::Map100thMM)));
179 
180  OUString aBitmapSizeString = SvxResId(STR_IMAGE_ORIGINAL_SIZE);
181  OUString aWidthString = GetUnitString( aOriginalSize100mm.Width(), eFieldUnit, cSeparator );
182  OUString aHeightString = GetUnitString( aOriginalSize100mm.Height(), eFieldUnit, cSeparator );
183  aBitmapSizeString = aBitmapSizeString.replaceAll("$(WIDTH)", aWidthString);
184  aBitmapSizeString = aBitmapSizeString.replaceAll("$(HEIGHT)", aHeightString);
185  aBitmapSizeString = aBitmapSizeString.replaceAll("$(WIDTH_IN_PX)", OUString::number(aPixelSize.Width()));
186  aBitmapSizeString = aBitmapSizeString.replaceAll("$(HEIGHT_IN_PX)", OUString::number(aPixelSize.Height()));
187  m_xFixedText2->set_label(aBitmapSizeString);
188 
189  int aValX = static_cast<int>(aPixelSize.Width() / GetViewWidthInch());
190 
191  OUString aViewSizeString = SvxResId(STR_IMAGE_VIEW_SIZE);
192 
193  aWidthString = GetUnitString( m_aViewSize100mm.Width(), eFieldUnit, cSeparator );
194  aHeightString = GetUnitString( m_aViewSize100mm.Height(), eFieldUnit, cSeparator );
195  aViewSizeString = aViewSizeString.replaceAll("$(WIDTH)", aWidthString);
196  aViewSizeString = aViewSizeString.replaceAll("$(HEIGHT)", aHeightString);
197  aViewSizeString = aViewSizeString.replaceAll("$(DPI)", OUString::number(aValX));
198  m_xFixedText3->set_label(aViewSizeString);
199 
200  m_aNativeSize = pGfxLink ? pGfxLink->GetDataSize() : 0;
201 
202  OUString aNativeSizeString = SvxResId(STR_IMAGE_CAPACITY);
203  aNativeSizeString = aNativeSizeString.replaceAll("$(CAPACITY)", OUString::number( m_aNativeSize / 1024 ));
204  m_xFixedText5->set_label(aNativeSizeString);
205 
206  m_xFixedText6->set_label("??");
207 }
208 
210 {
211  int nPixelX = static_cast<sal_Int32>( GetViewWidthInch() * m_dResolution );
212  m_xMFNewWidth->set_value(nPixelX);
213 }
214 
216 {
217  int nPixelY = static_cast<sal_Int32>( GetViewHeightInch() * m_dResolution );
218  m_xMFNewHeight->set_value(nPixelY);
219 }
220 
222 {
223  m_xResolutionLB->set_entry_text( OUString::number( static_cast<sal_Int32>(m_dResolution) ) );
224 }
225 
227 {
228  return static_cast<double>(vcl::ConvertValue(m_aViewSize100mm.Width(), 2, MapUnit::Map100thMM, FieldUnit::INCH)) / 100.0;
229 }
230 
232 {
233  return static_cast<double>(vcl::ConvertValue(m_aViewSize100mm.Height(), 2, MapUnit::Map100thMM, FieldUnit::INCH)) / 100.0;
234 }
235 
237 {
238  OUString aSelectionText = m_xInterpolationCombo->get_active_text();
239 
240  if( aSelectionText == "Lanczos" ) {
241  return BmpScaleFlag::Lanczos;
242  } else if( aSelectionText == "Bilinear" ) {
243  return BmpScaleFlag::BiLinear;
244  } else if( aSelectionText == "Bicubic" ) {
245  return BmpScaleFlag::BiCubic;
246  } else if ( aSelectionText == "None" ) {
247  return BmpScaleFlag::Fast;
248  }
249  return BmpScaleFlag::BestQuality;
250 }
251 
253 {
254  BitmapEx aBitmap = m_aGraphic.GetBitmapEx();
255  if ( m_xReduceResolutionCB->get_active() )
256  {
257  tools::Long nPixelX = static_cast<tools::Long>( GetViewWidthInch() * m_dResolution );
258  tools::Long nPixelY = static_cast<tools::Long>( GetViewHeightInch() * m_dResolution );
259 
260  aBitmap.Scale( Size( nPixelX, nPixelY ), GetSelectedInterpolationType() );
261  }
262  Graphic aScaledGraphic( aBitmap );
264 
265  Sequence< PropertyValue > aFilterData{
266  comphelper::makePropertyValue("Interlaced", sal_Int32(0)),
267  comphelper::makePropertyValue("Compression", static_cast<sal_Int32>(m_xCompressionMF->get_value())),
268  comphelper::makePropertyValue("Quality", static_cast<sal_Int32>(m_xQualityMF->get_value()))
269  };
270 
271  OUString aGraphicFormatName = m_xLosslessRB->get_active() ? OUString( "png" ) : OUString( "jpg" );
272 
273  sal_uInt16 nFilterFormat = rFilter.GetExportFormatNumberForShortName( aGraphicFormatName );
274  rFilter.ExportGraphic( aScaledGraphic, u"none", aStream, nFilterFormat, &aFilterData );
275 }
276 
278 {
279  memp.ReduceResolutionCB = m_xReduceResolutionCB->get_active();
280  memp.MFNewWidth = m_xMFNewWidth->get_value();
281  memp.MFNewHeight = m_xMFNewHeight->get_value();
282  memp.LosslessRB = m_xLosslessRB->get_active();
283  memp.JpegCompRB = m_xJpegCompRB->get_active();
284  memp.CompressionMF = m_xCompressionMF->get_value();
285  memp.QualityMF = m_xQualityMF->get_value();
286  memp.InterpolationCombo = m_xInterpolationCombo->get_active();
288 }
289 
290 IMPL_LINK_NOARG( CompressGraphicsDialog, NewWidthModifiedHdl, weld::Entry&, void )
291 {
292  m_dResolution = m_xMFNewWidth->get_value() / GetViewWidthInch();
293 
294  UpdateNewHeightMF();
295  UpdateResolutionLB();
296  Update();
297 }
298 
299 IMPL_LINK( CompressGraphicsDialog, SlideHdl, weld::Scale&, rScale, void )
300 {
301  if (&rScale == m_xQualitySlider.get())
302  m_xQualityMF->set_value(m_xQualitySlider->get_value());
303  else
304  m_xCompressionMF->set_value(m_xCompressionSlider->get_value());
305  Update();
306 }
307 
308 IMPL_LINK_NOARG( CompressGraphicsDialog, NewInterpolationModifiedHdl, weld::ComboBox&, void )
309 {
310  Update();
311 }
312 
313 IMPL_LINK_NOARG( CompressGraphicsDialog, NewQualityModifiedHdl, weld::Entry&, void )
314 {
315  m_xQualitySlider->set_value(m_xQualityMF->get_value());
316  Update();
317 }
318 
319 IMPL_LINK_NOARG( CompressGraphicsDialog, NewCompressionModifiedHdl, weld::Entry&, void )
320 {
321  m_xCompressionSlider->set_value(m_xCompressionMF->get_value());
322  Update();
323 }
324 
325 IMPL_LINK_NOARG( CompressGraphicsDialog, NewHeightModifiedHdl, weld::Entry&, void )
326 {
327  m_dResolution = m_xMFNewHeight->get_value() / GetViewHeightInch();
328 
329  UpdateNewWidthMF();
330  UpdateResolutionLB();
331  Update();
332 }
333 
334 IMPL_LINK_NOARG( CompressGraphicsDialog, ResolutionModifiedHdl, weld::ComboBox&, void )
335 {
336  m_dResolution = static_cast<double>(m_xResolutionLB->get_active_text().toInt32());
337 
338  UpdateNewWidthMF();
339  UpdateNewHeightMF();
340  Update();
341 }
342 
344 {
345  bool choice = m_xLosslessRB->get_active();
346  m_xCompressionMF->set_sensitive(choice);
347  m_xCompressionSlider->set_sensitive(choice);
348  m_xQualityMF->set_sensitive(!choice);
349  m_xQualitySlider->set_sensitive(!choice);
350  Update();
351 }
352 
353 IMPL_LINK_NOARG( CompressGraphicsDialog, ToggleReduceResolutionRB, weld::Toggleable&, void )
354 {
355  bool choice = m_xReduceResolutionCB->get_active();
356  m_xMFNewWidth->set_sensitive(choice);
357  m_xMFNewHeight->set_sensitive(choice);
358  m_xResolutionLB->set_sensitive(choice);
359  m_xInterpolationCombo->set_sensitive(choice);
360  Update();
361 }
362 
364 {
365  sal_Int32 aSize = 0;
366 
367  if ( m_dResolution > 0.0 )
368  {
369  SvMemoryStream aMemStream;
371  Compress( aMemStream );
372  aSize = aMemStream.TellEnd();
373  }
374 
375  if ( aSize > 0 )
376  {
377  OUString aSizeAsString = OUString::number(aSize / 1024);
378 
379  OUString aReductionSizeAsString = OUString::number( m_aNativeSize > 0 ? (m_aNativeSize - aSize) * 100 / m_aNativeSize : 0 );
380 
381  OUString aNewSizeString = SvxResId(STR_IMAGE_CAPACITY_WITH_REDUCTION);
382  aNewSizeString = aNewSizeString.replaceAll("$(CAPACITY)", aSizeAsString);
383  aNewSizeString = aNewSizeString.replaceAll("$(REDUCTION)", aReductionSizeAsString);
384  m_xFixedText6->set_label(aNewSizeString);
385  }
386 }
387 
389 {
390  if ( m_xReduceResolutionCB->get_active() )
391  {
392  tools::Long nPixelX = static_cast<tools::Long>( GetViewWidthInch() * m_dResolution );
393  tools::Long nPixelY = static_cast<tools::Long>( GetViewHeightInch() * m_dResolution );
395  double aScaleX = nPixelX / static_cast<double>(aSize.Width());
396  double aScaleY = nPixelY / static_cast<double>(aSize.Height());
397 
398  return tools::Rectangle(
399  m_aCropRectangle.Left() * aScaleX,
400  m_aCropRectangle.Top() * aScaleY,
401  m_aCropRectangle.Right() * aScaleX,
402  m_aCropRectangle.Bottom()* aScaleY);
403  }
404  else
405  {
406  return m_aCropRectangle;
407  }
408 }
409 
411 {
412  if ( m_dResolution > 0.0 )
413  {
414  SvMemoryStream aMemStream;
416  Compress( aMemStream );
417  aMemStream.Seek( STREAM_SEEK_TO_BEGIN );
418  Graphic aResultGraphic;
420  rFilter.ImportGraphic( aResultGraphic, u"import", aMemStream );
421 
422  return aResultGraphic;
423  }
424  return Graphic();
425 }
426 
428 {
429  if ( m_dResolution > 0.0 )
430  {
432 
433  if ( m_xReduceResolutionCB->get_active() )
434  {
435  tools::Rectangle aScaledCropedRectangle = GetScaledCropRectangle();
436  SdrGrafCropItem aNewCrop(
437  aScaledCropedRectangle.Left(),
438  aScaledCropedRectangle.Top(),
439  aScaledCropedRectangle.Right(),
440  aScaledCropedRectangle.Bottom());
441 
442  pNewObject->SetMergedItem(aNewCrop);
443  }
444  pNewObject->SetGraphic( GetCompressedGraphic() );
445 
446  return pNewObject;
447  }
448  return nullptr;
449 }
450 
451 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
std::unique_ptr< weld::Label > m_xFixedText5
FieldUnit
ErrCode ImportGraphic(Graphic &rGraphic, const INetURLObject &rPath, sal_uInt16 nFormat=GRFILTER_FORMAT_DONTKNOW, sal_uInt16 *pDeterminedFormat=nullptr, GraphicFilterImportFlags nImportFlags=GraphicFilterImportFlags::NONE)
std::unique_ptr< weld::Builder > m_xBuilder
Size GetSizePixel(const OutputDevice *pRefDevice=nullptr) const
constexpr tools::Long Left() const
std::unique_ptr< weld::Button > m_xBtnOkay
bool Scale(const Size &rNewSize, BmpScaleFlag nScaleFlag=BmpScaleFlag::Default)
long Long
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
static const AllSettings & GetSettings()
std::unique_ptr< weld::SpinButton > m_xMFNewWidth
#define SOFFICE_FILEFORMAT_CURRENT
std::unique_ptr< weld::RadioButton > m_xLosslessRB
sal_uInt64 Seek(sal_uInt64 nPos)
virtual ~CompressGraphicsDialog() override
std::unique_ptr< weld::RadioButton > m_xJpegCompRB
const std::shared_ptr< GfxLink > & GetSharedGfxLink() const
virtual sal_uInt64 TellEnd() override
constexpr tools::Long Width() const
std::unique_ptr< weld::Scale > m_xQualitySlider
SfxModule * GetModule() const
sal_uInt16 sal_Unicode
std::unique_ptr< weld::SpinButton > m_xQualityMF
OUString SvxResId(TranslateId aId)
Definition: dialmgr.cxx:24
void SetGraphic(const Graphic &rGrf)
Definition: svdograf.cxx:364
std::unique_ptr< weld::Button > m_xBtnCalculate
std::unique_ptr< weld::ComboBox > m_xInterpolationCombo
void Compress(SvStream &aStream)
sal_uInt16 GetExportFormatNumberForShortName(std::u16string_view rShortName)
BmpScaleFlag
CompressGraphicsDialog(weld::Window *pParent, SdrGrafObj *pGraphicObj, SfxBindings &rBindings)
std::unique_ptr< weld::Label > m_xLabelGraphicType
const OUString & getNumDecimalSep() const
OUString GetUnitString(tools::Long nVal_100, FieldUnit eFieldUnit, sal_Unicode cSep)
Definition: dlgunit.hxx:27
FieldUnit GetFieldUnit() const
tools::Rectangle GetScaledCropRectangle() const
#define STREAM_SEEK_TO_BEGIN
constexpr tools::Long Right() const
float u
SdrModel & getSdrModelFromSdrObject() const
Definition: svdobj.cxx:284
constexpr tools::Long Top() const
const LocaleDataWrapper & GetLocaleDataWrapper(LanguageType nLang)
void SetMergedItem(const SfxPoolItem &rItem)
Definition: svdobj.cxx:1987
BitmapEx GetBitmapEx(const GraphicConversionParameters &rParameters=GraphicConversionParameters()) const
const SfxPoolItem & GetMergedItem(const sal_uInt16 nWhich) const
Definition: svdobj.cxx:2012
void SetVersion(sal_Int32 n)
This class represents an embedded or linked bitmap graphic object.
Definition: svdograf.hxx:67
IMPL_LINK_NOARG(CompressGraphicsDialog, OkayClickHdl, weld::Button &, void)
std::unique_ptr< weld::Label > m_xFixedText3
constexpr TypedWhichId< SdrGrafCropItem > SDRATTR_GRAFCROP(SDRATTR_GRAF_FIRST+9)
ErrCode ExportGraphic(const Graphic &rGraphic, const INetURLObject &rPath, sal_uInt16 nFormat, const css::uno::Sequence< css::beans::PropertyValue > *pFilterData=nullptr)
std::unique_ptr< weld::Label > m_xFixedText6
void response(int nResponse)
constexpr tools::Long Bottom() const
IMPL_LINK(CompressGraphicsDialog, SlideHdl, weld::Scale &, rScale, void)
std::unique_ptr< weld::CheckButton > m_xReduceResolutionCB
MapMode GetPrefMapMode() const
constexpr tools::Long Height() const
RET_OK
virtual SdrGrafObj * CloneSdrObject(SdrModel &rTargetModel) const override
Definition: svdograf.cxx:773
BmpScaleFlag GetSelectedInterpolationType() const
std::unique_ptr< weld::Scale > m_xCompressionSlider
sal_Int64 ConvertValue(sal_Int64 nValue, sal_Int64 mnBaseValue, sal_uInt16 nDecDigits, FieldUnit eInUnit, FieldUnit eOutUnit)
std::unique_ptr< weld::Label > m_xFixedText2
SfxDispatcher * GetDispatcher() const
static GraphicFilter & GetGraphicFilter()
std::unique_ptr< weld::SpinButton > m_xCompressionMF
const Size & GetSizePixel() const
std::unique_ptr< weld::ComboBox > m_xResolutionLB
std::unique_ptr< weld::SpinButton > m_xMFNewHeight