Resolves tdf#146929 - Remember user input for the compress dialog
Change-Id: I23a0cd10b6936de920a294901f860620fc2af0a9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129894
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/include/svx/compressgraphicdialog.hxx b/include/svx/compressgraphicdialog.hxx
index 1ef8d38..87556ec 100644
--- a/include/svx/compressgraphicdialog.hxx
+++ b/include/svx/compressgraphicdialog.hxx
@@ -51,6 +51,7 @@ private:
std::unique_ptr<weld::Scale> m_xQualitySlider;
std::unique_ptr<weld::Button> m_xBtnCalculate;
std::unique_ptr<weld::ComboBox> m_xInterpolationCombo;
std::unique_ptr<weld::Button> m_xBtnOkay;
SdrGrafObj* m_xGraphicObj;
Graphic m_aGraphic;
@@ -62,6 +63,7 @@ private:
sal_Int32 m_aNativeSize;
void Initialize();
void recallParameter();
DECL_DLLPRIVATE_LINK( SlideHdl, weld::Scale&, void );
DECL_DLLPRIVATE_LINK( NewInterpolationModifiedHdl, weld::ComboBox&, void );
@@ -74,6 +76,7 @@ private:
DECL_DLLPRIVATE_LINK( ToggleReduceResolutionRB, weld::Toggleable&, void );
DECL_DLLPRIVATE_LINK( CalculateClickHdl, weld::Button&, void );
DECL_DLLPRIVATE_LINK( OkayClickHdl, weld::Button&, void );
void Update();
void UpdateNewWidthMF();
diff --git a/svx/source/dialog/compressgraphicdialog.cxx b/svx/source/dialog/compressgraphicdialog.cxx
index 1eb6a32..7c9a8a4 100644
--- a/svx/source/dialog/compressgraphicdialog.cxx
+++ b/svx/source/dialog/compressgraphicdialog.cxx
@@ -39,6 +39,23 @@
#include <tools/stream.hxx>
#include <unotools/localedatawrapper.hxx>
// tdf#146929 - remember user settings within the currect session
// memp is filled in dtor and restored after initialization
namespace
{
struct memParam {
bool ReduceResolutionCB = false;
int MFNewWidth = 1;
int MFNewHeight = 1;
bool LosslessRB = true;
bool JpegCompRB = false;
int CompressionMF = 6;
int QualityMF = 80;
int InterpolationCombo = 3;
};
memParam memp;
}
using namespace com::sun::star::uno;
using namespace com::sun::star::beans;
@@ -66,12 +83,31 @@ CompressGraphicsDialog::CompressGraphicsDialog( weld::Window* pParent, Graphic c
m_dResolution ( 300 )
{
Initialize();
recallParameter();
}
CompressGraphicsDialog::~CompressGraphicsDialog()
{
}
void CompressGraphicsDialog::recallParameter()
{
m_xReduceResolutionCB->set_active( memp.ReduceResolutionCB );
if (memp.ReduceResolutionCB && (memp.MFNewWidth > 1))
m_xMFNewWidth->set_value( memp.MFNewWidth );
if (memp.ReduceResolutionCB && (memp.MFNewHeight > 1))
m_xMFNewHeight->set_value( memp.MFNewHeight );
m_xLosslessRB->set_active( memp.LosslessRB );
m_xJpegCompRB->set_active( memp.JpegCompRB );
m_xCompressionMF->set_value( memp.CompressionMF );
m_xCompressionSlider->set_value( memp.CompressionMF );
m_xQualityMF->set_value( memp.QualityMF );
m_xQualitySlider->set_value( memp.QualityMF );
m_xInterpolationCombo->set_active( memp.InterpolationCombo );
}
void CompressGraphicsDialog::Initialize()
{
m_xLabelGraphicType = m_xBuilder->weld_label("label-graphic-type");
@@ -91,6 +127,7 @@ void CompressGraphicsDialog::Initialize()
m_xResolutionLB = m_xBuilder->weld_combo_box("combo-resolution");
m_xBtnCalculate = m_xBuilder->weld_button("calculate");
m_xInterpolationCombo = m_xBuilder->weld_combo_box("interpolation-method-combo");
m_xBtnOkay = m_xBuilder->weld_button("ok");
m_xInterpolationCombo->set_active_text("Lanczos");
@@ -115,6 +152,7 @@ void CompressGraphicsDialog::Initialize()
m_xJpegCompRB->set_active(true);
m_xReduceResolutionCB->set_active(true);
m_xBtnOkay->connect_clicked( LINK( this, CompressGraphicsDialog, OkayClickHdl ) );
UpdateNewWidthMF();
UpdateNewHeightMF();
UpdateResolutionLB();
@@ -235,6 +273,19 @@ void CompressGraphicsDialog::Compress(SvStream& aStream)
rFilter.ExportGraphic( aScaledGraphic, "none", aStream, nFilterFormat, &aFilterData );
}
IMPL_LINK_NOARG( CompressGraphicsDialog, OkayClickHdl, weld::Button&, void )
{
memp.ReduceResolutionCB = m_xReduceResolutionCB->get_active();
memp.MFNewWidth = m_xMFNewWidth->get_value();
memp.MFNewHeight = m_xMFNewHeight->get_value();
memp.LosslessRB = m_xLosslessRB->get_active();
memp.JpegCompRB = m_xJpegCompRB->get_active();
memp.CompressionMF = m_xCompressionMF->get_value();
memp.QualityMF = m_xQualityMF->get_value();
memp.InterpolationCombo = m_xInterpolationCombo->get_active();
CompressGraphicsDialog::response(RET_OK);
}
IMPL_LINK_NOARG( CompressGraphicsDialog, NewWidthModifiedHdl, weld::Entry&, void )
{
m_dResolution = m_xMFNewWidth->get_value() / GetViewWidthInch();