weld CompressGraphicsDialog
Change-Id: I593e6f0fe2e002c75ecd367a38dda96e7e6552f9
Reviewed-on: https://gerrit.libreoffice.org/53125
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/include/svx/compressgraphicdialog.hxx b/include/svx/compressgraphicdialog.hxx
index 03128ee..ca907ae 100644
--- a/include/svx/compressgraphicdialog.hxx
+++ b/include/svx/compressgraphicdialog.hxx
@@ -24,49 +24,36 @@
#include <tools/gen.hxx>
#include <tools/link.hxx>
#include <vcl/bitmap.hxx>
#include <vcl/dialog.hxx>
#include <vcl/weld.hxx>
#include <vcl/graph.hxx>
#include <vcl/vclptr.hxx>
namespace vcl { class Window; }
class Button;
class CheckBox;
class ComboBox;
class Edit;
class FixedText;
class ListBox;
class NumericField;
class PushButton;
class RadioButton;
class SdrGrafObj;
class SfxBindings;
class Slider;
class SvStream;
class SAL_WARN_UNUSED SVX_DLLPUBLIC CompressGraphicsDialog : public ModalDialog
class SAL_WARN_UNUSED SVX_DLLPUBLIC CompressGraphicsDialog : public weld::GenericDialogController
{
private:
VclPtr<FixedText> m_pLabelGraphicType;
VclPtr<FixedText> m_pFixedText2;
VclPtr<FixedText> m_pFixedText3;
VclPtr<FixedText> m_pFixedText5;
VclPtr<FixedText> m_pFixedText6;
std::unique_ptr<weld::Label> m_xLabelGraphicType;
std::unique_ptr<weld::Label> m_xFixedText2;
std::unique_ptr<weld::Label> m_xFixedText3;
std::unique_ptr<weld::Label> m_xFixedText5;
std::unique_ptr<weld::Label> m_xFixedText6;
VclPtr<CheckBox> m_pReduceResolutionCB;
VclPtr<NumericField> m_pMFNewWidth;
VclPtr<NumericField> m_pMFNewHeight;
VclPtr<ComboBox> m_pResolutionLB;
VclPtr<RadioButton> m_pLosslessRB;
VclPtr<RadioButton> m_pJpegCompRB;
VclPtr<NumericField> m_pCompressionMF;
VclPtr<Slider> m_pCompressionSlider;
VclPtr<NumericField> m_pQualityMF;
VclPtr<Slider> m_pQualitySlider;
VclPtr<PushButton> m_pBtnCalculate;
VclPtr<ListBox> m_pInterpolationCombo;
std::unique_ptr<weld::CheckButton> m_xReduceResolutionCB;
std::unique_ptr<weld::SpinButton> m_xMFNewWidth;
std::unique_ptr<weld::SpinButton> m_xMFNewHeight;
std::unique_ptr<weld::ComboBoxText> m_xResolutionLB;
std::unique_ptr<weld::RadioButton> m_xLosslessRB;
std::unique_ptr<weld::RadioButton> m_xJpegCompRB;
std::unique_ptr<weld::SpinButton> m_xCompressionMF;
std::unique_ptr<weld::Scale> m_xCompressionSlider;
std::unique_ptr<weld::SpinButton> m_xQualityMF;
std::unique_ptr<weld::Scale> m_xQualitySlider;
std::unique_ptr<weld::Button> m_xBtnCalculate;
std::unique_ptr<weld::ComboBoxText> m_xInterpolationCombo;
SdrGrafObj* m_pGraphicObj;
SdrGrafObj* m_xGraphicObj;
Graphic m_aGraphic;
Size m_aViewSize100mm;
tools::Rectangle m_aCropRectangle;
@@ -76,17 +63,17 @@ private:
void Initialize();
DECL_LINK( EndSlideHdl, Slider*, void );
DECL_LINK( NewInterpolationModifiedHdl, ListBox&, void );
DECL_LINK( NewQualityModifiedHdl, Edit&, void );
DECL_LINK( NewCompressionModifiedHdl, Edit&, void );
DECL_LINK( NewWidthModifiedHdl, Edit&, void );
DECL_LINK( NewHeightModifiedHdl, Edit&, void );
DECL_LINK( ResolutionModifiedHdl, Edit&, void );
DECL_LINK( ToggleCompressionRB, RadioButton&, void );
DECL_LINK( ToggleReduceResolutionRB, CheckBox&, void );
DECL_LINK( SlideHdl, weld::Scale&, void );
DECL_LINK( NewInterpolationModifiedHdl, weld::ComboBoxText&, void );
DECL_LINK( NewQualityModifiedHdl, weld::Entry&, void );
DECL_LINK( NewCompressionModifiedHdl, weld::Entry&, void );
DECL_LINK( NewWidthModifiedHdl, weld::Entry&, void );
DECL_LINK( NewHeightModifiedHdl, weld::Entry&, void );
DECL_LINK( ResolutionModifiedHdl, weld::ComboBoxText&, void );
DECL_LINK( ToggleCompressionRB, weld::ToggleButton&, void );
DECL_LINK( ToggleReduceResolutionRB, weld::ToggleButton&, void );
DECL_LINK( CalculateClickHdl, Button*, void );
DECL_LINK( CalculateClickHdl, weld::Button&, void );
void Update();
void UpdateNewWidthMF();
@@ -101,10 +88,9 @@ private:
BmpScaleFlag GetSelectedInterpolationType();
public:
CompressGraphicsDialog( vcl::Window* pParent, SdrGrafObj* pGraphicObj, SfxBindings& rBindings );
CompressGraphicsDialog( vcl::Window* pParent, Graphic const & rGraphic, Size rViewSize100mm, tools::Rectangle const & rCropRectangle, SfxBindings& rBindings );
CompressGraphicsDialog( weld::Window* pParent, SdrGrafObj* pGraphicObj, SfxBindings& rBindings );
CompressGraphicsDialog( weld::Window* pParent, Graphic const & rGraphic, Size rViewSize100mm, tools::Rectangle const & rCropRectangle, SfxBindings& rBindings );
virtual ~CompressGraphicsDialog() override;
virtual void dispose() override;
SdrGrafObj* GetCompressedSdrGrafObj();
Graphic GetCompressedGraphic();
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 4e0d91a..116e7c1 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -389,6 +389,20 @@ class VCL_DLLPUBLIC RadioButton : virtual public ToggleButton
{
};
class VCL_DLLPUBLIC Scale : virtual public Widget
{
protected:
Link<Scale&, void> m_aValueChangedHdl;
Link<Scale&, void> m_aOutputHdl;
void signal_value_changed() { m_aValueChangedHdl.Call(*this); }
public:
virtual void set_value(int value) = 0;
virtual int get_value() const = 0;
void connect_value_changed(const Link<Scale&, void>& rLink) { m_aValueChangedHdl = rLink; }
};
class VCL_DLLPUBLIC Entry : virtual public Widget
{
private:
@@ -724,6 +738,7 @@ public:
virtual TextView* weld_text_view(const OString& id, bool bTakeOwnership = false) = 0;
virtual Expander* weld_expander(const OString& id, bool bTakeOwnership = false) = 0;
virtual Entry* weld_entry(const OString& id, bool bTakeOwnership = false) = 0;
virtual Scale* weld_scale(const OString& id, bool bTakeOwnership = false) = 0;
virtual DrawingArea* weld_drawing_area(const OString& id, const a11yref& rA11yImpl = nullptr,
FactoryFunction pUITestFactoryFunction = nullptr,
void* pUserData = nullptr, bool bTakeOwnership = false)
diff --git a/sc/source/ui/drawfunc/graphsh.cxx b/sc/source/ui/drawfunc/graphsh.cxx
index 9855bee..6347519 100644
--- a/sc/source/ui/drawfunc/graphsh.cxx
+++ b/sc/source/ui/drawfunc/graphsh.cxx
@@ -202,10 +202,11 @@ void ScGraphicShell::ExecuteCompressGraphic( SAL_UNUSED_PARAMETER SfxRequest& )
if( pObj && dynamic_cast<const SdrGrafObj*>( pObj) != nullptr && static_cast<SdrGrafObj*>(pObj)->GetGraphicType() == GraphicType::Bitmap )
{
SdrGrafObj* pGraphicObj = static_cast<SdrGrafObj*>(pObj);
ScopedVclPtrInstance< CompressGraphicsDialog > dialog( GetViewData()->GetDialogParent(), pGraphicObj, GetViewData()->GetBindings() );
if ( dialog->Execute() == RET_OK )
vcl::Window* pWin = GetViewData()->GetDialogParent();
CompressGraphicsDialog dialog(pWin ? pWin->GetFrameWeld() : nullptr, pGraphicObj, GetViewData()->GetBindings());
if (dialog.run() == RET_OK)
{
SdrGrafObj* pNewObject = dialog->GetCompressedSdrGrafObj();
SdrGrafObj* pNewObject = dialog.GetCompressedSdrGrafObj();
SdrPageView* pPageView = pView->GetSdrPageView();
OUString aUndoString = pView->GetDescriptionOfMarkedObjects() + " Compress";
pView->BegUndo( aUndoString );
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index bbfd4e0..48d0bc8 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -1351,10 +1351,10 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
if( pObj && dynamic_cast< const SdrGrafObj *>( pObj ) != nullptr && static_cast<SdrGrafObj*>(pObj)->GetGraphicType() == GraphicType::Bitmap )
{
SdrGrafObj* pGraphicObj = static_cast<SdrGrafObj*>(pObj);
ScopedVclPtrInstance< CompressGraphicsDialog > dialog( GetParentWindow(), pGraphicObj, GetViewFrame()->GetBindings() );
if ( dialog->Execute() == RET_OK )
CompressGraphicsDialog dialog(GetFrameWeld(), pGraphicObj, GetViewFrame()->GetBindings() );
if (dialog.run() == RET_OK)
{
SdrGrafObj* pNewObject = dialog->GetCompressedSdrGrafObj();
SdrGrafObj* pNewObject = dialog.GetCompressedSdrGrafObj();
SdrPageView* pPageView = mpDrawView->GetSdrPageView();
OUString aUndoString = mpDrawView->GetDescriptionOfMarkedObjects();
aUndoString += " Compress";
diff --git a/svx/source/dialog/compressgraphicdialog.cxx b/svx/source/dialog/compressgraphicdialog.cxx
index 92edf6e7..72ee873 100644
--- a/svx/source/dialog/compressgraphicdialog.cxx
+++ b/svx/source/dialog/compressgraphicdialog.cxx
@@ -39,23 +39,23 @@
using namespace com::sun::star::uno;
using namespace com::sun::star::beans;
CompressGraphicsDialog::CompressGraphicsDialog( vcl::Window* pParent, SdrGrafObj* pGraphicObj, SfxBindings& rBindings ) :
ModalDialog ( pParent, "CompressGraphicDialog", "svx/ui/compressgraphicdialog.ui" ),
m_pGraphicObj ( pGraphicObj ),
CompressGraphicsDialog::CompressGraphicsDialog( weld::Window* pParent, SdrGrafObj* pGraphicObj, SfxBindings& rBindings ) :
GenericDialogController( pParent, "svx/ui/compressgraphicdialog.ui", "CompressGraphicDialog" ),
m_xGraphicObj ( pGraphicObj ),
m_aGraphic ( pGraphicObj->GetGraphicObject().GetGraphic() ),
m_aViewSize100mm ( pGraphicObj->GetLogicRect().GetSize() ),
m_rBindings ( rBindings ),
m_dResolution ( 96.0 )
{
const SdrGrafCropItem& rCrop = m_pGraphicObj->GetMergedItem(SDRATTR_GRAFCROP);
const SdrGrafCropItem& rCrop = m_xGraphicObj->GetMergedItem(SDRATTR_GRAFCROP);
m_aCropRectangle = tools::Rectangle(rCrop.GetLeft(), rCrop.GetTop(), rCrop.GetRight(), rCrop.GetBottom());
Initialize();
}
CompressGraphicsDialog::CompressGraphicsDialog( vcl::Window* pParent, Graphic const & rGraphic, Size rViewSize100mm, tools::Rectangle const & rCropRectangle, SfxBindings& rBindings ) :
ModalDialog ( pParent, "CompressGraphicDialog", "svx/ui/compressgraphicdialog.ui" ),
m_pGraphicObj ( nullptr ),
CompressGraphicsDialog::CompressGraphicsDialog( weld::Window* pParent, Graphic const & rGraphic, Size rViewSize100mm, tools::Rectangle const & rCropRectangle, SfxBindings& rBindings ) :
GenericDialogController( pParent, "svx/ui/compressgraphicdialog.ui", "CompressGraphicDialog" ),
m_xGraphicObj ( nullptr ),
m_aGraphic ( rGraphic ),
m_aViewSize100mm ( rViewSize100mm ),
m_aCropRectangle ( rCropRectangle ),
@@ -67,75 +67,50 @@ CompressGraphicsDialog::CompressGraphicsDialog( vcl::Window* pParent, Graphic co
CompressGraphicsDialog::~CompressGraphicsDialog()
{
disposeOnce();
}
void CompressGraphicsDialog::dispose()
{
m_pLabelGraphicType.clear();
m_pFixedText2.clear();
m_pFixedText3.clear();
m_pFixedText5.clear();
m_pFixedText6.clear();
m_pReduceResolutionCB.clear();
m_pMFNewWidth.clear();
m_pMFNewHeight.clear();
m_pResolutionLB.clear();
m_pLosslessRB.clear();
m_pJpegCompRB.clear();
m_pCompressionMF.clear();
m_pQualityMF.clear();
m_pBtnCalculate.clear();
m_pInterpolationCombo.clear();
m_pCompressionSlider.clear();
m_pQualitySlider.clear();
ModalDialog::dispose();
}
void CompressGraphicsDialog::Initialize()
{
get(m_pLabelGraphicType, "label-graphic-type");
get(m_pFixedText2, "label-original-size");
get(m_pFixedText3, "label-view-size");
get(m_pFixedText5, "label-image-capacity");
get(m_pFixedText6, "label-new-capacity");
get(m_pJpegCompRB, "radio-jpeg");
get(m_pCompressionMF, "spin-compression");
get(m_pCompressionSlider, "scale-compression");
get(m_pLosslessRB, "radio-lossless");
get(m_pQualityMF, "spin-quality");
get(m_pQualitySlider, "scale-quality");
get(m_pReduceResolutionCB, "checkbox-reduce-resolution");
get(m_pMFNewWidth, "spin-new-width");
get(m_pMFNewHeight, "spin-new-height");
get(m_pResolutionLB, "combo-resolution");
get(m_pBtnCalculate, "calculate");
get(m_pInterpolationCombo, "interpolation-method-combo");
m_xLabelGraphicType.reset(m_xBuilder->weld_label("label-graphic-type"));
m_xFixedText2.reset(m_xBuilder->weld_label("label-original-size"));
m_xFixedText3.reset(m_xBuilder->weld_label("label-view-size"));
m_xFixedText5.reset(m_xBuilder->weld_label("label-image-capacity"));
m_xFixedText6.reset(m_xBuilder->weld_label("label-new-capacity"));
m_xJpegCompRB.reset(m_xBuilder->weld_radio_button("radio-jpeg"));
m_xCompressionMF.reset(m_xBuilder->weld_spin_button("spin-compression"));
m_xCompressionSlider.reset(m_xBuilder->weld_scale("scale-compression"));
m_xLosslessRB.reset(m_xBuilder->weld_radio_button("radio-lossless"));
m_xQualityMF.reset(m_xBuilder->weld_spin_button("spin-quality"));
m_xQualitySlider.reset(m_xBuilder->weld_scale("scale-quality"));
m_xReduceResolutionCB.reset(m_xBuilder->weld_check_button("checkbox-reduce-resolution"));
m_xMFNewWidth.reset(m_xBuilder->weld_spin_button("spin-new-width"));
m_xMFNewHeight.reset(m_xBuilder->weld_spin_button("spin-new-height"));
m_xResolutionLB.reset(m_xBuilder->weld_combo_box_text("combo-resolution"));
m_xBtnCalculate.reset(m_xBuilder->weld_button("calculate"));
m_xInterpolationCombo.reset(m_xBuilder->weld_combo_box_text("interpolation-method-combo"));
m_pInterpolationCombo->SelectEntry( "Lanczos" );
m_xInterpolationCombo->set_active("Lanczos");
m_pInterpolationCombo->SetSelectHdl( LINK( this, CompressGraphicsDialog, NewInterpolationModifiedHdl ));
m_xInterpolationCombo->connect_changed(LINK(this, CompressGraphicsDialog, NewInterpolationModifiedHdl));
m_pMFNewWidth->SetModifyHdl( LINK( this, CompressGraphicsDialog, NewWidthModifiedHdl ));
m_pMFNewHeight->SetModifyHdl( LINK( this, CompressGraphicsDialog, NewHeightModifiedHdl ));
m_xMFNewWidth->connect_changed( LINK( this, CompressGraphicsDialog, NewWidthModifiedHdl ));
m_xMFNewHeight->connect_changed( LINK( this, CompressGraphicsDialog, NewHeightModifiedHdl ));
m_pResolutionLB->SetModifyHdl( LINK( this, CompressGraphicsDialog, ResolutionModifiedHdl ));
m_pBtnCalculate->SetClickHdl( LINK( this, CompressGraphicsDialog, CalculateClickHdl ) );
m_xResolutionLB->connect_changed( LINK( this, CompressGraphicsDialog, ResolutionModifiedHdl ));
m_xBtnCalculate->connect_clicked( LINK( this, CompressGraphicsDialog, CalculateClickHdl ) );
m_pLosslessRB->SetToggleHdl( LINK( this, CompressGraphicsDialog, ToggleCompressionRB ) );
m_pJpegCompRB->SetToggleHdl( LINK( this, CompressGraphicsDialog, ToggleCompressionRB ) );
m_xLosslessRB->connect_toggled( LINK( this, CompressGraphicsDialog, ToggleCompressionRB ) );
m_xJpegCompRB->connect_toggled( LINK( this, CompressGraphicsDialog, ToggleCompressionRB ) );
m_pReduceResolutionCB->SetToggleHdl( LINK( this, CompressGraphicsDialog, ToggleReduceResolutionRB ) );
m_xReduceResolutionCB->connect_toggled( LINK( this, CompressGraphicsDialog, ToggleReduceResolutionRB ) );
m_pQualitySlider->SetLinkedField(m_pQualityMF);
m_pQualitySlider->SetEndSlideHdl( LINK( this, CompressGraphicsDialog, EndSlideHdl ));
m_pCompressionSlider->SetLinkedField(m_pCompressionMF);
m_pCompressionSlider->SetEndSlideHdl( LINK( this, CompressGraphicsDialog, EndSlideHdl ));
m_pQualityMF->SetModifyHdl( LINK( this, CompressGraphicsDialog, NewQualityModifiedHdl ));
m_pCompressionMF->SetModifyHdl( LINK( this, CompressGraphicsDialog, NewCompressionModifiedHdl ));
m_xQualitySlider->connect_value_changed( LINK( this, CompressGraphicsDialog, SlideHdl ));
m_xCompressionSlider->connect_value_changed( LINK( this, CompressGraphicsDialog, SlideHdl ));
m_xQualityMF->connect_changed( LINK( this, CompressGraphicsDialog, NewQualityModifiedHdl ));
m_xCompressionMF->connect_changed( LINK( this, CompressGraphicsDialog, NewCompressionModifiedHdl ));
m_pJpegCompRB->Check();
m_pReduceResolutionCB->Check();
m_xJpegCompRB->set_active(true);
m_xReduceResolutionCB->set_active(true);
UpdateNewWidthMF();
UpdateNewHeightMF();
@@ -180,7 +155,7 @@ void CompressGraphicsDialog::Update()
aGraphicTypeString = SvxResId(STR_IMAGE_UNKNOWN);
break;
}
m_pLabelGraphicType->SetText(aGraphicTypeString);
m_xLabelGraphicType->set_label(aGraphicTypeString);
const FieldUnit eFieldUnit = m_rBindings.GetDispatcher()->GetModule()->GetFieldUnit();
const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
@@ -200,7 +175,7 @@ void CompressGraphicsDialog::Update()
aBitmapSizeString = aBitmapSizeString.replaceAll("$(HEIGHT)", aHeightString);
aBitmapSizeString = aBitmapSizeString.replaceAll("$(WIDTH_IN_PX)", OUString::number(aPixelSize.Width()));
aBitmapSizeString = aBitmapSizeString.replaceAll("$(HEIGHT_IN_PX)", OUString::number(aPixelSize.Height()));
m_pFixedText2->SetText(aBitmapSizeString);
m_xFixedText2->set_label(aBitmapSizeString);
int aValX = static_cast<int>(aPixelSize.Width() / GetViewWidthInch());
@@ -211,7 +186,7 @@ void CompressGraphicsDialog::Update()
aViewSizeString = aViewSizeString.replaceAll("$(WIDTH)", aWidthString);
aViewSizeString = aViewSizeString.replaceAll("$(HEIGHT)", aHeightString);
aViewSizeString = aViewSizeString.replaceAll("$(DPI)", OUString::number(aValX));
m_pFixedText3->SetText(aViewSizeString);
m_xFixedText3->set_label(aViewSizeString);
SvMemoryStream aMemStream;
aMemStream.SetVersion( SOFFICE_FILEFORMAT_CURRENT );
@@ -221,26 +196,26 @@ void CompressGraphicsDialog::Update()
OUString aNativeSizeString = SvxResId(STR_IMAGE_CAPACITY);
aNativeSizeString = aNativeSizeString.replaceAll("$(CAPACITY)", OUString::number(aNativeSize / 1024));
m_pFixedText5->SetText(aNativeSizeString);
m_xFixedText5->set_label(aNativeSizeString);
m_pFixedText6->SetText("??");
m_xFixedText6->set_label("??");
}
void CompressGraphicsDialog::UpdateNewWidthMF()
{
int nPixelX = static_cast<sal_Int32>( GetViewWidthInch() * m_dResolution );
m_pMFNewWidth->SetText( OUString::number( nPixelX ));
m_xMFNewWidth->set_value(nPixelX);
}
void CompressGraphicsDialog::UpdateNewHeightMF()
{
int nPixelY = static_cast<sal_Int32>( GetViewHeightInch() * m_dResolution );
m_pMFNewHeight->SetText( OUString::number( nPixelY ));
m_xMFNewHeight->set_value(nPixelY);
}
void CompressGraphicsDialog::UpdateResolutionLB()
{
m_pResolutionLB->SetText( OUString::number( static_cast<sal_Int32>(m_dResolution) ) );
m_xResolutionLB->set_entry_text( OUString::number( static_cast<sal_Int32>(m_dResolution) ) );
}
double CompressGraphicsDialog::GetViewWidthInch()
@@ -255,7 +230,7 @@ double CompressGraphicsDialog::GetViewHeightInch()
BmpScaleFlag CompressGraphicsDialog::GetSelectedInterpolationType()
{
OUString aSelectionText = m_pInterpolationCombo->GetSelectedEntry();
OUString aSelectionText = m_xInterpolationCombo->get_active_text();
if( aSelectionText == "Lanczos" ) {
return BmpScaleFlag::Lanczos;
@@ -272,7 +247,7 @@ BmpScaleFlag CompressGraphicsDialog::GetSelectedInterpolationType()
void CompressGraphicsDialog::Compress(SvStream& aStream)
{
BitmapEx aBitmap = m_aGraphic.GetBitmapEx();
if ( m_pReduceResolutionCB->IsChecked() )
if ( m_xReduceResolutionCB->get_active() )
{
long nPixelX = static_cast<long>( GetViewWidthInch() * m_dResolution );
long nPixelY = static_cast<long>( GetViewHeightInch() * m_dResolution );
@@ -286,88 +261,90 @@ void CompressGraphicsDialog::Compress(SvStream& aStream)
aFilterData[ 0 ].Name = "Interlaced";
aFilterData[ 0 ].Value <<= sal_Int32(0);
aFilterData[ 1 ].Name = "Compression";
aFilterData[ 1 ].Value <<= static_cast<sal_Int32>(m_pCompressionMF->GetValue());
aFilterData[ 1 ].Value <<= static_cast<sal_Int32>(m_xCompressionMF->get_value());
aFilterData[ 2 ].Name = "Quality";
aFilterData[ 2 ].Value <<= static_cast<sal_Int32>(m_pQualityMF->GetValue());
aFilterData[ 2 ].Value <<= static_cast<sal_Int32>(m_xQualityMF->get_value());
OUString aGraphicFormatName = m_pLosslessRB->IsChecked() ? OUString( "png" ) : OUString( "jpg" );
OUString aGraphicFormatName = m_xLosslessRB->get_active() ? OUString( "png" ) : OUString( "jpg" );
sal_uInt16 nFilterFormat = rFilter.GetExportFormatNumberForShortName( aGraphicFormatName );
rFilter.ExportGraphic( aScaledGraphic, "none", aStream, nFilterFormat, &aFilterData );
}
IMPL_LINK_NOARG( CompressGraphicsDialog, NewWidthModifiedHdl, Edit&, void )
IMPL_LINK_NOARG( CompressGraphicsDialog, NewWidthModifiedHdl, weld::Entry&, void )
{
fprintf(stderr, "NewWidthModifiedHdl\n");
m_dResolution = m_pMFNewWidth->GetValue() / GetViewWidthInch();
m_dResolution = m_xMFNewWidth->get_value() / GetViewWidthInch();
UpdateNewHeightMF();
UpdateResolutionLB();
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, EndSlideHdl, Slider*, void )
IMPL_LINK( CompressGraphicsDialog, SlideHdl, weld::Scale&, rScale, void )
{
if (&rScale == m_xQualitySlider.get())
m_xQualityMF->set_value(m_xQualitySlider->get_value());
else
m_xCompressionMF->set_value(m_xCompressionSlider->get_value());
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, NewInterpolationModifiedHdl, weld::ComboBoxText&, void )
{
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, NewInterpolationModifiedHdl, ListBox&, void )
IMPL_LINK_NOARG( CompressGraphicsDialog, NewQualityModifiedHdl, weld::Entry&, void )
{
m_xQualitySlider->set_value(m_xQualityMF->get_value());
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, NewQualityModifiedHdl, Edit&, void )
IMPL_LINK_NOARG( CompressGraphicsDialog, NewCompressionModifiedHdl, weld::Entry&, void )
{
m_pQualitySlider->SetThumbPos(m_pQualityMF->GetValue());
m_xCompressionSlider->set_value(m_xCompressionMF->get_value());
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, NewCompressionModifiedHdl, Edit&, void )
IMPL_LINK_NOARG( CompressGraphicsDialog, NewHeightModifiedHdl, weld::Entry&, void )
{
m_pCompressionSlider->SetThumbPos(m_pCompressionMF->GetValue());
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, NewHeightModifiedHdl, Edit&, void )
{
m_dResolution = m_pMFNewHeight->GetValue() / GetViewHeightInch();
m_dResolution = m_xMFNewHeight->get_value() / GetViewHeightInch();
UpdateNewWidthMF();
UpdateResolutionLB();
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, ResolutionModifiedHdl, Edit&, void )
IMPL_LINK_NOARG( CompressGraphicsDialog, ResolutionModifiedHdl, weld::ComboBoxText&, void )
{
m_dResolution = static_cast<double>(m_pResolutionLB->GetText().toInt32());
m_dResolution = static_cast<double>(m_xResolutionLB->get_active_text().toInt32());
UpdateNewWidthMF();
UpdateNewHeightMF();
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, ToggleCompressionRB, RadioButton&, void )
IMPL_LINK_NOARG( CompressGraphicsDialog, ToggleCompressionRB, weld::ToggleButton&, void )
{
bool choice = m_pLosslessRB->IsChecked();
m_pCompressionMF->Enable(choice);
m_pCompressionSlider->Enable(choice);
m_pQualityMF->Enable(!choice);
m_pQualitySlider->Enable(!choice);
bool choice = m_xLosslessRB->get_active();
m_xCompressionMF->set_sensitive(choice);
m_xCompressionSlider->set_sensitive(choice);
m_xQualityMF->set_sensitive(!choice);
m_xQualitySlider->set_sensitive(!choice);
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, ToggleReduceResolutionRB, CheckBox&, void )
IMPL_LINK_NOARG( CompressGraphicsDialog, ToggleReduceResolutionRB, weld::ToggleButton&, void )
{
bool choice = m_pReduceResolutionCB->IsChecked();
m_pMFNewWidth->Enable(choice);
m_pMFNewHeight->Enable(choice);
m_pResolutionLB->Enable(choice);
m_pInterpolationCombo->Enable(choice);
bool choice = m_xReduceResolutionCB->get_active();
m_xMFNewWidth->set_sensitive(choice);
m_xMFNewHeight->set_sensitive(choice);
m_xResolutionLB->set_sensitive(choice);
m_xInterpolationCombo->set_sensitive(choice);
Update();
}
IMPL_LINK_NOARG( CompressGraphicsDialog, CalculateClickHdl, Button*, void )
IMPL_LINK_NOARG( CompressGraphicsDialog, CalculateClickHdl, weld::Button&, void )
{
sal_Int32 aSize = 0;
@@ -386,13 +363,13 @@ IMPL_LINK_NOARG( CompressGraphicsDialog, CalculateClickHdl, Button*, void )
OUString aNewSizeString = SvxResId(STR_IMAGE_CAPACITY);
aNewSizeString = aNewSizeString.replaceAll("$(CAPACITY)", aSizeAsString);
m_pFixedText6->SetText(aNewSizeString);
m_xFixedText6->set_label(aNewSizeString);
}
}
tools::Rectangle CompressGraphicsDialog::GetScaledCropRectangle()
{
if ( m_pReduceResolutionCB->IsChecked() )
if ( m_xReduceResolutionCB->get_active() )
{
long nPixelX = static_cast<long>( GetViewWidthInch() * m_dResolution );
long nPixelY = static_cast<long>( GetViewHeightInch() * m_dResolution );
@@ -433,9 +410,9 @@ SdrGrafObj* CompressGraphicsDialog::GetCompressedSdrGrafObj()
{
if ( m_dResolution > 0.0 )
{
SdrGrafObj* pNewObject = m_pGraphicObj->Clone();
SdrGrafObj* pNewObject = m_xGraphicObj->Clone();
if ( m_pReduceResolutionCB->IsChecked() )
if ( m_xReduceResolutionCB->get_active() )
{
tools::Rectangle aScaledCropedRectangle = GetScaledCropRectangle();
SdrGrafCropItem aNewCrop(
diff --git a/svx/uiconfig/ui/compressgraphicdialog.ui b/svx/uiconfig/ui/compressgraphicdialog.ui
index 0f4a81a..14dd0a1 100644
--- a/svx/uiconfig/ui/compressgraphicdialog.ui
+++ b/svx/uiconfig/ui/compressgraphicdialog.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<!-- Generated with glade 3.20.4 -->
<interface domain="svx">
<requires lib="gtk+" version="3.18"/>
<object class="GtkAdjustment" id="compression-adjustment">
@@ -16,26 +16,6 @@
<property name="step_increment">100</property>
<property name="page_increment">100</property>
</object>
<object class="GtkListStore" id="interpolation-method-store">
<columns>
<!-- column-name scale-method-name -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes" context="compressgraphicdialog|interpolation-method-store">None</col>
</row>
<row>
<col id="0" translatable="yes" context="compressgraphicdialog|interpolation-method-store">Bilinear</col>
</row>
<row>
<col id="0" translatable="yes" context="compressgraphicdialog|interpolation-method-store">Bicubic</col>
</row>
<row>
<col id="0" translatable="yes" context="compressgraphicdialog|interpolation-method-store">Lanczos</col>
</row>
</data>
</object>
<object class="GtkAdjustment" id="quality-adjustment">
<property name="lower">1</property>
<property name="upper">99</property>
@@ -56,6 +36,8 @@
<property name="title" translatable="yes" context="compressgraphicdialog|CompressGraphicDialog">Compress Image</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="default_width">0</property>
<property name="default_height">9</property>
<property name="type_hint">dialog</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
@@ -151,8 +133,8 @@
<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="tooltip_text" translatable="yes" context="compressgraphicdialog|radio-jpeg|tooltip_text">Lossy compression</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<property name="group">radio-lossless</property>
@@ -168,8 +150,8 @@
<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="tooltip_text" translatable="yes" context="compressgraphicdialog|radio-lossless|tooltip_text">Lossless compression</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
@@ -209,7 +191,8 @@
<object class="GtkSpinButton" id="spin-quality">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="text" translatable="no">90</property>
<property name="activates_default">True</property>
<property name="text">90</property>
<property name="adjustment">quality-adjustment</property>
<property name="numeric">True</property>
<property name="value">90</property>
@@ -256,7 +239,8 @@
<object class="GtkSpinButton" id="spin-compression">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="text" translatable="no">9</property>
<property name="activates_default">True</property>
<property name="text">9</property>
<property name="adjustment">compression-adjustment</property>
<property name="numeric">True</property>
<property name="value">9</property>
@@ -393,7 +377,8 @@
<object class="GtkSpinButton" id="spin-new-width">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="text" translatable="no">1</property>
<property name="activates_default">True</property>
<property name="text">1</property>
<property name="adjustment">width-adjustment</property>
<property name="numeric">True</property>
<property name="value">1</property>
@@ -407,7 +392,8 @@
<object class="GtkSpinButton" id="spin-new-height">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="text" translatable="no">1</property>
<property name="activates_default">True</property>
<property name="text">1</property>
<property name="adjustment">height-adjustment</property>
<property name="numeric">True</property>
<property name="value">1</property>
@@ -434,6 +420,7 @@
<child internal-child="entry">
<object class="GtkEntry">
<property name="can_focus">True</property>
<property name="activates_default">True</property>
</object>
</child>
</object>
@@ -443,10 +430,15 @@
</packing>
</child>
<child>
<object class="GtkComboBox" id="interpolation-method-combo">
<object class="GtkComboBoxText" id="interpolation-method-combo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">interpolation-method-store</property>
<items>
<item translatable="yes" context="compressgraphicdialog|interpolation-method-store">None</item>
<item translatable="yes" context="compressgraphicdialog|interpolation-method-store">Bilinear</item>
<item translatable="yes" context="compressgraphicdialog|interpolation-method-store">Bicubic</item>
<item translatable="yes" context="compressgraphicdialog|interpolation-method-store">Lanczos</item>
</items>
</object>
<packing>
<property name="left_attach">1</property>
@@ -693,5 +685,8 @@
<action-widget response="-5">ok</action-widget>
<action-widget response="-6">cancel</action-widget>
</action-widgets>
<child>
<placeholder/>
</child>
</object>
</interface>
diff --git a/sw/source/uibase/shells/grfsh.cxx b/sw/source/uibase/shells/grfsh.cxx
index 683c8a7..cc31d9d 100644
--- a/sw/source/uibase/shells/grfsh.cxx
+++ b/sw/source/uibase/shells/grfsh.cxx
@@ -215,19 +215,19 @@ void SwGrfShell::Execute(SfxRequest &rReq)
Graphic aGraphic = Graphic( *pGraphic );
ScopedVclPtrInstance< CompressGraphicsDialog > aDialog( GetView().GetWindow(), aGraphic, aSize, aCropRectangle, GetView().GetViewFrame()->GetBindings() );
if( aDialog->Execute() == RET_OK )
CompressGraphicsDialog aDialog(GetView().GetFrameWeld(), aGraphic, aSize, aCropRectangle, GetView().GetViewFrame()->GetBindings());
if (aDialog.run() == RET_OK)
{
rSh.StartAllAction();
rSh.StartUndo(SwUndoId::START);
tools::Rectangle aScaledCropedRectangle = aDialog->GetScaledCropRectangle();
tools::Rectangle aScaledCropedRectangle = aDialog.GetScaledCropRectangle();
aCrop.SetLeft( convertMm100ToTwip( aScaledCropedRectangle.Left() ));
aCrop.SetTop( convertMm100ToTwip( aScaledCropedRectangle.Top() ));
aCrop.SetRight( convertMm100ToTwip( aScaledCropedRectangle.Right() ));
aCrop.SetBottom( convertMm100ToTwip( aScaledCropedRectangle.Bottom() ));
Graphic aCompressedGraphic( aDialog->GetCompressedGraphic() );
Graphic aCompressedGraphic( aDialog.GetCompressedGraphic() );
rSh.ReRead(OUString(), OUString(), const_cast<const Graphic*>(&aCompressedGraphic));
rSh.SetAttrItem(aCrop);
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 159fd97..fcfcdd9 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -36,6 +36,7 @@
#include <vcl/dialog.hxx>
#include <vcl/layout.hxx>
#include <vcl/menubtn.hxx>
#include <vcl/slider.hxx>
#include <vcl/tabctrl.hxx>
#include <vcl/tabpage.hxx>
#include <vcl/unowrap.hxx>
@@ -994,6 +995,41 @@ IMPL_LINK_NOARG(SalInstanceCheckButton, ToggleHdl, CheckBox&, void)
signal_toggled();
}
class SalInstanceScale : public SalInstanceWidget, public virtual weld::Scale
{
private:
VclPtr<Slider> m_xScale;
DECL_LINK(SlideHdl, Slider*, void);
public:
SalInstanceScale(Slider* pScale, bool bTakeOwnership)
: SalInstanceWidget(pScale, bTakeOwnership)
, m_xScale(pScale)
{
m_xScale->SetSlideHdl(LINK(this, SalInstanceScale, SlideHdl));
}
virtual void set_value(int value) override
{
m_xScale->SetThumbPos(value);
}
virtual int get_value() const override
{
return m_xScale->GetThumbPos();
}
virtual ~SalInstanceScale() override
{
m_xScale->SetSlideHdl(Link<Slider*, void>());
}
};
IMPL_LINK_NOARG(SalInstanceScale, SlideHdl, Slider*, void)
{
signal_value_changed();
}
class SalInstanceEntry : public SalInstanceWidget, public virtual weld::Entry
{
private:
@@ -1926,6 +1962,12 @@ public:
return pCheckButton ? new SalInstanceCheckButton(pCheckButton, bTakeOwnership) : nullptr;
}
virtual weld::Scale* weld_scale(const OString &id, bool bTakeOwnership) override
{
Slider* pSlider = m_xBuilder->get<Slider>(id);
return pSlider ? new SalInstanceScale(pSlider, bTakeOwnership) : nullptr;
}
virtual weld::Entry* weld_entry(const OString &id, bool bTakeOwnership) override
{
Edit* pEntry = m_xBuilder->get<Edit>(id);
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 14e8af0..20f9415 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -2629,6 +2629,55 @@ public:
}
};
class GtkInstanceScale : public GtkInstanceWidget, public virtual weld::Scale
{
private:
GtkScale* m_pScale;
gulong m_nValueChangedSignalId;
static void signalValueChanged(GtkScale*, gpointer widget)
{
GtkInstanceScale* pThis = static_cast<GtkInstanceScale*>(widget);
SolarMutexGuard aGuard;
pThis->signal_value_changed();
}
public:
GtkInstanceScale(GtkScale* pScale, bool bTakeOwnership)
: GtkInstanceWidget(GTK_WIDGET(pScale), bTakeOwnership)
, m_pScale(pScale)
, m_nValueChangedSignalId(g_signal_connect(m_pScale, "value-changed", G_CALLBACK(signalValueChanged), this))
{
}
virtual void disable_notify_events() override
{
g_signal_handler_block(m_pScale, m_nValueChangedSignalId);
GtkInstanceWidget::disable_notify_events();
}
virtual void enable_notify_events() override
{
GtkInstanceWidget::enable_notify_events();
g_signal_handler_unblock(m_pScale, m_nValueChangedSignalId);
}
virtual void set_value(int value) override
{
gtk_range_set_value(GTK_RANGE(m_pScale), value);
}
virtual int get_value() const override
{
return gtk_range_get_value(GTK_RANGE(m_pScale));
}
virtual ~GtkInstanceScale() override
{
g_signal_handler_disconnect(m_pScale, m_nValueChangedSignalId);
}
};
class GtkInstanceEntry : public GtkInstanceWidget, public virtual weld::Entry
{
private:
@@ -4365,6 +4414,15 @@ public:
return new GtkInstanceCheckButton(pCheckButton, bTakeOwnership);
}
virtual weld::Scale* weld_scale(const OString &id, bool bTakeOwnership) override
{
GtkScale* pScale = GTK_SCALE(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pScale)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pScale));
return new GtkInstanceScale(pScale, bTakeOwnership);
}
virtual weld::Entry* weld_entry(const OString &id, bool bTakeOwnership) override
{
GtkEntry* pEntry = GTK_ENTRY(gtk_builder_get_object(m_pBuilder, id.getStr()));