weld PosSizePropertyPanel
Change-Id: I32bba3a698a4cc78d4159c6f373b312540478ab0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/85764
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/cui/uiconfig/ui/possizetabpage.ui b/cui/uiconfig/ui/possizetabpage.ui
index af4555c..56cd1eb 100644
--- a/cui/uiconfig/ui/possizetabpage.ui
+++ b/cui/uiconfig/ui/possizetabpage.ui
@@ -86,6 +86,7 @@
<object class="GtkSpinButton" id="MTR_FLD_POS_X">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">start</property>
<property name="activates_default">True</property>
<property name="adjustment">adjustmentPOS</property>
<property name="digits">2</property>
@@ -99,9 +100,10 @@
<object class="GtkSpinButton" id="MTR_FLD_POS_Y">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">start</property>
<property name="activates_default">True</property>
<property name="adjustment">adjustmentPOS1</property>
<property name="digits">2</property>
<property name="digits">4</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -132,7 +134,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">0</property>
</packing>
</child>
<child>
@@ -161,7 +163,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="position">2</property>
</packing>
</child>
</object>
@@ -249,6 +251,7 @@
<object class="GtkSpinButton" id="MTR_FLD_WIDTH">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">start</property>
<property name="activates_default">True</property>
<property name="adjustment">adjustmentSIZE</property>
<property name="digits">2</property>
@@ -262,6 +265,7 @@
<object class="GtkSpinButton" id="MTR_FLD_HEIGHT">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">start</property>
<property name="activates_default">True</property>
<property name="adjustment">adjustmentSIZE1</property>
<property name="digits">2</property>
@@ -311,7 +315,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">0</property>
</packing>
</child>
<child>
@@ -340,7 +344,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="position">1</property>
</packing>
</child>
</object>
diff --git a/include/svx/dialcontrol.hxx b/include/svx/dialcontrol.hxx
index 00b9bb5..07f95bb 100644
--- a/include/svx/dialcontrol.hxx
+++ b/include/svx/dialcontrol.hxx
@@ -179,6 +179,7 @@ public:
const OUString& GetText() const { return mpImpl->maText; }
void SetText(const OUString& rText) { mpImpl->maText = rText; }
void Init( const Size& rWinSize );
private:
struct DialControl_Impl
{
@@ -207,7 +208,6 @@ private:
void HandleEscapeEvent();
void Init( const Size& rWinSize, const vcl::Font& rWinFont );
void Init( const Size& rWinSize );
void InvalidateControl();
diff --git a/include/vcl/customweld.hxx b/include/vcl/customweld.hxx
index dc8fd57..330ab16 100644
--- a/include/vcl/customweld.hxx
+++ b/include/vcl/customweld.hxx
@@ -127,6 +127,7 @@ public:
void set_sensitive(bool bSensitive) { m_xDrawingArea->set_sensitive(bSensitive); }
bool get_sensitive() const { return m_xDrawingArea->get_sensitive(); }
bool get_visible() const { return m_xDrawingArea->get_visible(); }
void set_visible(bool bVisible) { m_xDrawingArea->set_visible(bVisible); }
void set_grid_left_attach(int nAttach) { m_xDrawingArea->set_grid_left_attach(nAttach); }
int get_grid_left_attach() const { return m_xDrawingArea->get_grid_left_attach(); }
void set_help_id(const OString& rHelpId) { m_xDrawingArea->set_help_id(rHelpId); }
diff --git a/solenv/sanitizers/ui/svx.suppr b/solenv/sanitizers/ui/svx.suppr
index 3cf4029..b2d33d3 100644
--- a/solenv/sanitizers/ui/svx.suppr
+++ b/solenv/sanitizers/ui/svx.suppr
@@ -71,15 +71,4 @@ svx/uiconfig/ui/sidebarline.ui://GtkLabel[@id='widthlabel'] orphan-label
svx/uiconfig/ui/sidebarline.ui://GtkLabel[@id='colorlabel'] orphan-label
svx/uiconfig/ui/sidebarline.ui://GtkLabel[@id='translabel'] orphan-label
svx/uiconfig/ui/sidebarline.ui://GtkSpinButton[@id='linetransparency:0%'] missing-label-for
svx/uiconfig/ui/sidebarpossize.ui://GtkLabel[@id='horizontallabel'] orphan-label
svx/uiconfig/ui/sidebarpossize.ui://GtkSpinButton[@id='horizontalpos:0in'] missing-label-for
svx/uiconfig/ui/sidebarpossize.ui://GtkLabel[@id='verticallabel'] orphan-label
svx/uiconfig/ui/sidebarpossize.ui://GtkSpinButton[@id='verticalpos:0in'] missing-label-for
svx/uiconfig/ui/sidebarpossize.ui://GtkLabel[@id='widthlabel'] orphan-label
svx/uiconfig/ui/sidebarpossize.ui://GtkSpinButton[@id='selectwidth:0in'] missing-label-for
svx/uiconfig/ui/sidebarpossize.ui://GtkLabel[@id='heightlabel'] orphan-label
svx/uiconfig/ui/sidebarpossize.ui://GtkSpinButton[@id='selectheight:0in'] missing-label-for
svx/uiconfig/ui/sidebarpossize.ui://GtkLabel[@id='rotationlabel'] orphan-label
svx/uiconfig/ui/sidebarpossize.ui://svxlo-SidebarDialControl[@id='orientationcontrol'] missing-label-for
svx/uiconfig/ui/sidebarpossize.ui://GtkLabel[@id='fliplabel'] orphan-label
svx/uiconfig/ui/textcharacterspacingcontrol.ui://GtkSpinButton[@id='kerning:0pt'] no-labelled-by
diff --git a/svx/source/dialog/dialcontrol.cxx b/svx/source/dialog/dialcontrol.cxx
index 83ae865..35eae0a 100644
--- a/svx/source/dialog/dialcontrol.cxx
+++ b/svx/source/dialog/dialcontrol.cxx
@@ -492,10 +492,11 @@ void SvxDialControl::SetDrawingArea(weld::DrawingArea* pDrawingArea)
//use same logic as DialControl_Impl::SetSize
int nDim = (std::min<int>(pDrawingArea->get_approximate_digit_width() * 12,
pDrawingArea->get_text_height() * 6) - 1) | 1;
pDrawingArea->set_size_request(nDim, nDim);
Size aSize(nDim, nDim);
pDrawingArea->set_size_request(aSize.Width(), aSize.Height());
mpImpl.reset(new DialControl_Impl(pDrawingArea->get_ref_device()));
//set size and use that
Init(GetOutputSizePixel());
Init(aSize);
}
void SvxDialControl::Resize()
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index 0dfc8a5..7d1982d 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
@@ -63,7 +63,26 @@ PosSizePropertyPanel::PosSizePropertyPanel(
const css::uno::Reference<css::frame::XFrame>& rxFrame,
SfxBindings* pBindings,
const css::uno::Reference<css::ui::XSidebar>& rxSidebar)
: PanelLayout(pParent, "PosSizePropertyPanel", "svx/ui/sidebarpossize.ui", rxFrame),
: PanelLayout(pParent, "PosSizePropertyPanel", "svx/ui/sidebarpossize.ui", rxFrame, true),
mxFtPosX(m_xBuilder->weld_label("horizontallabel")),
mxMtrPosX(m_xBuilder->weld_metric_spin_button("horizontalpos", FieldUnit::CM)),
mxFtPosY(m_xBuilder->weld_label("verticallabel")),
mxMtrPosY(m_xBuilder->weld_metric_spin_button("verticalpos", FieldUnit::CM)),
mxFtWidth(m_xBuilder->weld_label("widthlabel")),
mxMtrWidth(m_xBuilder->weld_metric_spin_button("selectwidth", FieldUnit::CM)),
mxFtHeight(m_xBuilder->weld_label("heightlabel")),
mxMtrHeight(m_xBuilder->weld_metric_spin_button("selectheight", FieldUnit::CM)),
mxCbxScale(m_xBuilder->weld_check_button("ratio")),
mxFtAngle(m_xBuilder->weld_label("rotationlabel")),
mxMtrAngle(m_xBuilder->weld_spin_button("rotation")),
mxCtrlDial(new SvxDialControl),
mxDial(new weld::CustomWeld(*m_xBuilder, "orientationcontrol", *mxCtrlDial)),
mxFtFlip(m_xBuilder->weld_label("fliplabel")),
mxFlipTbx(m_xBuilder->weld_toolbar("selectrotationtype")),
mxFlipDispatch(new ToolbarUnoDispatcher(*mxFlipTbx, rxFrame)),
mxArrangeTbx(m_xBuilder->weld_toolbar("arrangetoolbar")),
mxArrangeDispatch(new ToolbarUnoDispatcher(*mxArrangeTbx, rxFrame)),
mxBtnEditChart(m_xBuilder->weld_button("btnEditChart")),
maRect(),
mpView(nullptr),
mlOldWidth(1),
@@ -94,21 +113,6 @@ PosSizePropertyPanel::PosSizePropertyPanel(
mbAdjustEnabled(false),
mxSidebar(rxSidebar)
{
get( mpFtPosX, "horizontallabel" );
get( mpMtrPosX, "horizontalpos" );
get( mpFtPosY, "verticallabel" );
get( mpMtrPosY, "verticalpos" );
get( mpFtWidth, "widthlabel" );
get( mpMtrWidth, "selectwidth" );
get( mpFtHeight, "heightlabel" );
get( mpMtrHeight, "selectheight" );
get( mpCbxScale, "ratio" );
get( mpFtAngle, "rotationlabel" );
get( mpMtrAngle, "rotation" );
get( mpDial, "orientationcontrol" );
get( mpFtFlip, "fliplabel" );
get( mpFlipTbx, "selectrotationtype" );
get( mpBtnEditChart, "btnEditChart" );
Initialize();
mpBindings->Update( SID_ATTR_METRIC );
@@ -124,21 +128,25 @@ PosSizePropertyPanel::~PosSizePropertyPanel()
void PosSizePropertyPanel::dispose()
{
mpFtPosX.clear();
mpMtrPosX.clear();
mpFtPosY.clear();
mpMtrPosY.clear();
mpFtWidth.clear();
mpMtrWidth.clear();
mpFtHeight.clear();
mpMtrHeight.clear();
mpCbxScale.clear();
mpFtAngle.clear();
mpMtrAngle.clear();
mpDial.clear();
mpFtFlip.clear();
mpFlipTbx.clear();
mpBtnEditChart.clear();
mxFtPosX.reset();
mxMtrPosX.reset();
mxFtPosY.reset();
mxMtrPosY.reset();
mxFtWidth.reset();
mxMtrWidth.reset();
mxFtHeight.reset();
mxMtrHeight.reset();
mxCbxScale.reset();
mxFtAngle.reset();
mxMtrAngle.reset();
mxDial.reset();
mxCtrlDial.reset();
mxFtFlip.reset();
mxFlipDispatch.reset();
mxFlipTbx.reset();
mxArrangeTbx.reset();
mxArrangeDispatch.reset();
mxBtnEditChart.reset();
maTransfPosXControl.dispose();
maTransfPosYControl.dispose();
@@ -188,37 +196,31 @@ namespace
void PosSizePropertyPanel::Initialize()
{
//Position : Horizontal / Vertical
mpMtrPosX->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosXHdl ) );
mpMtrPosY->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangePosYHdl ) );
mxMtrPosX->connect_value_changed( LINK( this, PosSizePropertyPanel, ChangePosXHdl ) );
mxMtrPosY->connect_value_changed( LINK( this, PosSizePropertyPanel, ChangePosYHdl ) );
//Size : Width / Height
mpMtrWidth->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeWidthHdl ) );
mpMtrHeight->SetModifyHdl( LINK( this, PosSizePropertyPanel, ChangeHeightHdl ) );
mxMtrWidth->connect_value_changed( LINK( this, PosSizePropertyPanel, ChangeWidthHdl ) );
mxMtrHeight->connect_value_changed( LINK( this, PosSizePropertyPanel, ChangeHeightHdl ) );
//Size : Keep ratio
mpCbxScale->SetClickHdl( LINK( this, PosSizePropertyPanel, ClickAutoHdl ) );
mxCbxScale->connect_toggled( LINK( this, PosSizePropertyPanel, ClickAutoHdl ) );
//rotation:
mpMtrAngle->SetModifyHdl(LINK( this, PosSizePropertyPanel, AngleModifiedHdl));
mpMtrAngle->EnableAutocomplete( false );
mxMtrAngle->connect_value_changed(LINK( this, PosSizePropertyPanel, AngleModifiedHdl));
//rotation control
mpDial->SetModifyHdl(LINK( this, PosSizePropertyPanel, RotationHdl));
mxCtrlDial->SetLinkedField(mxMtrAngle.get());
//flip:
mpFlipTbx->SetSelectHdl( LINK( this, PosSizePropertyPanel, FlipHdl) );
//use same logic as DialControl_Impl::SetSize
weld::DrawingArea* pDrawingArea = mxCtrlDial->GetDrawingArea();
int nDim = (std::min<int>(pDrawingArea->get_approximate_digit_width() * 6,
pDrawingArea->get_text_height() * 3) - 1) | 1;
Size aSize(nDim, nDim);
pDrawingArea->set_size_request(aSize.Width(), aSize.Height());
mxCtrlDial->Init(aSize);
mpBtnEditChart->SetClickHdl( LINK( this, PosSizePropertyPanel, ClickChartEditHdl ) );
mpMtrAngle->InsertValue(0, FieldUnit::CUSTOM);
mpMtrAngle->InsertValue(4500, FieldUnit::CUSTOM);
mpMtrAngle->InsertValue(9000, FieldUnit::CUSTOM);
mpMtrAngle->InsertValue(13500, FieldUnit::CUSTOM);
mpMtrAngle->InsertValue(18000, FieldUnit::CUSTOM);
mpMtrAngle->InsertValue(22500, FieldUnit::CUSTOM);
mpMtrAngle->InsertValue(27000, FieldUnit::CUSTOM);
mpMtrAngle->InsertValue(31500, FieldUnit::CUSTOM);
mpMtrAngle->AdaptDropDownLineCountToMaximum();
mxBtnEditChart->connect_clicked( LINK( this, PosSizePropertyPanel, ClickChartEditHdl ) );
SfxViewShell* pCurSh = SfxViewShell::Current();
if ( pCurSh )
@@ -324,77 +326,77 @@ void PosSizePropertyPanel::HandleContextChange(
}
// Position
mpFtPosX->Show(bShowPosition);
mpMtrPosX->Show(bShowPosition);
mpFtPosY->Show(bShowPosition);
mpMtrPosY->Show(bShowPosition);
mxFtPosX->set_visible(bShowPosition);
mxMtrPosX->set_visible(bShowPosition);
mxFtPosY->set_visible(bShowPosition);
mxMtrPosY->set_visible(bShowPosition);
// Rotation
mpFtAngle->Show(bShowAngle);
mpMtrAngle->Show(bShowAngle);
mpDial->Show(bShowAngle);
mxFtAngle->set_visible(bShowAngle);
mxMtrAngle->set_visible(bShowAngle);
mxDial->set_visible(bShowAngle);
// Flip
mpFtFlip->Show(bShowFlip);
mpFlipTbx->Show(bShowFlip);
mxFtFlip->set_visible(bShowFlip);
mxFlipTbx->set_visible(bShowFlip);
// Edit Chart
mpBtnEditChart->Show(bShowEditChart);
mxBtnEditChart->set_visible(bShowEditChart);
if (mxSidebar.is())
mxSidebar->requestLayout();
}
IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeWidthHdl, Edit&, void )
IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeWidthHdl, weld::MetricSpinButton&, void )
{
if( mpCbxScale->IsChecked() &&
mpCbxScale->IsEnabled() )
if( mxCbxScale->get_active() &&
mxCbxScale->get_sensitive() )
{
long nHeight = static_cast<long>( (static_cast<double>(mlOldHeight) * static_cast<double>(mpMtrWidth->GetValue())) / static_cast<double>(mlOldWidth) );
if( nHeight <= mpMtrHeight->GetMax( FieldUnit::NONE ) )
long nHeight = static_cast<long>( (static_cast<double>(mlOldHeight) * static_cast<double>(mxMtrWidth->get_value(FieldUnit::NONE))) / static_cast<double>(mlOldWidth) );
if( nHeight <= mxMtrHeight->get_max( FieldUnit::NONE ) )
{
mpMtrHeight->SetUserValue( nHeight, FieldUnit::NONE );
mxMtrHeight->set_value( nHeight, FieldUnit::NONE );
}
else
{
nHeight = static_cast<long>(mpMtrHeight->GetMax( FieldUnit::NONE ));
mpMtrHeight->SetUserValue( nHeight );
nHeight = static_cast<long>(mxMtrHeight->get_max( FieldUnit::NONE ));
mxMtrHeight->set_value(nHeight, FieldUnit::NONE);
const long nWidth = static_cast<long>( (static_cast<double>(mlOldWidth) * static_cast<double>(nHeight)) / static_cast<double>(mlOldHeight) );
mpMtrWidth->SetUserValue( nWidth, FieldUnit::NONE );
mxMtrWidth->set_value( nWidth, FieldUnit::NONE );
}
}
executeSize();
}
IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeHeightHdl, Edit&, void )
IMPL_LINK_NOARG( PosSizePropertyPanel, ChangeHeightHdl, weld::MetricSpinButton&, void )
{
if( mpCbxScale->IsChecked() &&
mpCbxScale->IsEnabled() )
if( mxCbxScale->get_active() &&
mxCbxScale->get_sensitive() )
{
long nWidth = static_cast<long>( (static_cast<double>(mlOldWidth) * static_cast<double>(mpMtrHeight->GetValue())) / static_cast<double>(mlOldHeight) );
if( nWidth <= mpMtrWidth->GetMax( FieldUnit::NONE ) )
long nWidth = static_cast<long>( (static_cast<double>(mlOldWidth) * static_cast<double>(mxMtrHeight->get_value(FieldUnit::NONE))) / static_cast<double>(mlOldHeight) );
if( nWidth <= mxMtrWidth->get_max( FieldUnit::NONE ) )
{
mpMtrWidth->SetUserValue( nWidth, FieldUnit::NONE );
mxMtrWidth->set_value( nWidth, FieldUnit::NONE );
}
else
{
nWidth = static_cast<long>(mpMtrWidth->GetMax( FieldUnit::NONE ));
mpMtrWidth->SetUserValue( nWidth );
nWidth = static_cast<long>(mxMtrWidth->get_max( FieldUnit::NONE ));
mxMtrWidth->set_value( nWidth, FieldUnit::NONE );
const long nHeight = static_cast<long>( (static_cast<double>(mlOldHeight) * static_cast<double>(nWidth)) / static_cast<double>(mlOldWidth) );
mpMtrHeight->SetUserValue( nHeight, FieldUnit::NONE );
mxMtrHeight->set_value( nHeight, FieldUnit::NONE );
}
}
executeSize();
}
IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosXHdl, Edit&, void )
IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosXHdl, weld::MetricSpinButton&, void )
{
if ( mpMtrPosX->IsValueModified())
if ( mxMtrPosX->get_value_changed_from_saved())
{
long lX = GetCoreValue( *mpMtrPosX, mePoolUnit );
long lX = GetCoreValue( *mxMtrPosX, mePoolUnit );
Fraction aUIScale = mpView->GetModel()->GetUIScale();
lX = long( lX * aUIScale );
@@ -406,12 +408,11 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosXHdl, Edit&, void )
}
}
IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosYHdl, Edit&, void )
IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosYHdl, weld::MetricSpinButton&, void )
{
if ( mpMtrPosY->IsValueModified() )
if ( mxMtrPosY->get_value_changed_from_saved() )
{
long lY = GetCoreValue( *mpMtrPosY, mePoolUnit );
long lY = GetCoreValue( *mxMtrPosY, mePoolUnit );
Fraction aUIScale = mpView->GetModel()->GetUIScale();
lY = long( lY * aUIScale );
@@ -423,53 +424,22 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, ChangePosYHdl, Edit&, void )
}
}
IMPL_LINK_NOARG( PosSizePropertyPanel, ClickAutoHdl, Button*, void )
IMPL_LINK_NOARG( PosSizePropertyPanel, ClickAutoHdl, weld::ToggleButton&, void )
{
if ( mpCbxScale->IsChecked() )
if ( mxCbxScale->get_active() )
{
mlOldWidth = std::max( GetCoreValue( *mpMtrWidth, mePoolUnit ), 1L );
mlOldHeight = std::max( GetCoreValue( *mpMtrHeight, mePoolUnit ), 1L );
mlOldWidth = std::max(GetCoreValue(*mxMtrWidth, mePoolUnit), 1);
mlOldHeight = std::max(GetCoreValue(*mxMtrHeight, mePoolUnit), 1);
}
// mpCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog
// mxCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog
SvtViewOptions aPageOpt(EViewType::TabPage, "cui/ui/possizetabpage/PositionAndSize");
aPageOpt.SetUserItem( USERITEM_NAME, css::uno::makeAny( OUString::number( int(mpCbxScale->IsChecked()) ) ) );
aPageOpt.SetUserItem( USERITEM_NAME, css::uno::makeAny( OUString::number( int(mxCbxScale->get_active()) ) ) );
}
IMPL_LINK_NOARG( PosSizePropertyPanel, AngleModifiedHdl, Edit&, void )
IMPL_LINK_NOARG( PosSizePropertyPanel, AngleModifiedHdl, weld::SpinButton&, void )
{
OUString sTmp = mpMtrAngle->GetText();
if (sTmp.isEmpty())
return;
sal_Unicode nChar = sTmp[0];
if( nChar == '-' )
{
if (sTmp.getLength() < 2)
return;
nChar = sTmp[1];
}
if( (nChar < '0') || (nChar > '9') )
return;
const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
// Do not check that the entire string was parsed up to its end, there may
// be a degree symbol following the number. Note that this also means that
// the number recognized just stops at any non-matching character.
/* TODO: we could check for the degree symbol stop if there are no other
* cases with different symbol characters in any language? */
rtl_math_ConversionStatus eStatus;
double fTmp = rLocaleWrapper.stringToDouble( sTmp, false, &eStatus, nullptr);
if (eStatus != rtl_math_ConversionStatus_Ok)
return;
while (fTmp < 0)
fTmp += 360;
sal_Int64 nTmp = fTmp*100;
sal_Int64 nTmp = mxMtrAngle->get_value() * 100;
// #i123993# Need to take UIScale into account when executing rotations
const double fUIScale(mpView && mpView->GetModel() ? double(mpView->GetModel()->GetUIScale()) : 1.0);
@@ -482,9 +452,9 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, AngleModifiedHdl, Edit&, void )
}
IMPL_LINK_NOARG( PosSizePropertyPanel, RotationHdl, DialControl*, void )
IMPL_LINK_NOARG( PosSizePropertyPanel, RotationHdl, SvxDialControl*, void )
{
sal_Int32 nTmp = mpDial->GetRotation();
sal_Int32 nTmp = mxCtrlDial->GetRotation();
// #i123993# Need to take UIScale into account when executing rotations
const double fUIScale(mpView && mpView->GetModel() ? double(mpView->GetModel()->GetUIScale()) : 1.0);
@@ -496,26 +466,7 @@ IMPL_LINK_NOARG( PosSizePropertyPanel, RotationHdl, DialControl*, void )
SfxCallMode::RECORD, { &aAngleItem, &aRotXItem, &aRotYItem });
}
IMPL_LINK( PosSizePropertyPanel, FlipHdl, ToolBox*, pBox, void )
{
const OUString aCommand(pBox->GetItemCommand(pBox->GetCurItemId()));
if(aCommand == ".uno:FlipHorizontal")
{
SfxVoidItem aHoriItem(SID_FLIP_HORIZONTAL);
GetBindings()->GetDispatcher()->ExecuteList(SID_FLIP_HORIZONTAL,
SfxCallMode::RECORD, { &aHoriItem });
}
else if(aCommand == ".uno:FlipVertical")
{
SfxVoidItem aVertItem(SID_FLIP_VERTICAL);
GetBindings()->GetDispatcher()->ExecuteList(SID_FLIP_VERTICAL,
SfxCallMode::RECORD, { &aVertItem });
}
}
IMPL_STATIC_LINK_NOARG( PosSizePropertyPanel, ClickChartEditHdl, Button*, void )
IMPL_STATIC_LINK_NOARG( PosSizePropertyPanel, ClickChartEditHdl, weld::Button&, void )
{
SfxViewShell* pCurSh = SfxViewShell::Current();
if ( pCurSh)
@@ -524,17 +475,28 @@ IMPL_STATIC_LINK_NOARG( PosSizePropertyPanel, ClickChartEditHdl, Button*, void )
}
}
namespace
{
void limitWidth(weld::MetricSpinButton& rMetricSpinButton)
{
// space is limited in the sidebar, so limit MetricSpinButtons to a width of 7 digits
const int nMaxDigits = 7;
weld::SpinButton& rSpinButton = rMetricSpinButton.get_widget();
rSpinButton.set_width_chars(std::min(rSpinButton.get_width_chars(), nMaxDigits));
}
}
void PosSizePropertyPanel::NotifyItemUpdate(
sal_uInt16 nSID,
SfxItemState eState,
const SfxPoolItem* pState)
{
mpFtAngle->Enable();
mpMtrAngle->Enable();
mpDial->Enable();
mpFtFlip->Enable();
mpFlipTbx->Enable();
mxFtAngle->set_sensitive(true);
mxMtrAngle->set_sensitive(true);
mxDial->set_sensitive(true);
mxFtFlip->set_sensitive(true);
mxFlipTbx->set_sensitive(true);
const SfxUInt32Item* pWidthItem;
const SfxUInt32Item* pHeightItem;
@@ -564,14 +526,16 @@ void PosSizePropertyPanel::NotifyItemUpdate(
if(pWidthItem)
{
long lOldWidth1 = long( pWidthItem->GetValue() / maUIScale );
SetFieldUnit( *mpMtrWidth, meDlgUnit, true );
SetMetricValue( *mpMtrWidth, lOldWidth1, mePoolUnit );
SetFieldUnit( *mxMtrWidth, meDlgUnit, true );
SetMetricValue( *mxMtrWidth, lOldWidth1, mePoolUnit );
limitWidth(*mxMtrWidth);
mlOldWidth = lOldWidth1;
mxMtrWidth->save_value();
break;
}
}
mpMtrWidth->SetText( "" );
mxMtrWidth->set_text( "" );
break;
case SID_ATTR_TRANSFORM_HEIGHT:
@@ -582,14 +546,16 @@ void PosSizePropertyPanel::NotifyItemUpdate(
if(pHeightItem)
{
long nTmp = long( pHeightItem->GetValue() / maUIScale);
SetFieldUnit( *mpMtrHeight, meDlgUnit, true );
SetMetricValue( *mpMtrHeight, nTmp, mePoolUnit );
SetFieldUnit( *mxMtrHeight, meDlgUnit, true );
SetMetricValue( *mxMtrHeight, nTmp, mePoolUnit );
limitWidth(*mxMtrHeight);
mlOldHeight = nTmp;
mxMtrHeight->save_value();
break;
}
}
mpMtrHeight->SetText( "");
mxMtrHeight->set_text( "");
break;
case SID_ATTR_TRANSFORM_POS_X:
@@ -600,13 +566,15 @@ void PosSizePropertyPanel::NotifyItemUpdate(
if(pItem)
{
long nTmp = long(pItem->GetValue() / maUIScale);
SetFieldUnit( *mpMtrPosX, meDlgUnit, true );
SetMetricValue( *mpMtrPosX, nTmp, mePoolUnit );
SetFieldUnit( *mxMtrPosX, meDlgUnit, true );
SetMetricValue( *mxMtrPosX, nTmp, mePoolUnit );
limitWidth(*mxMtrPosX);
mxMtrPosX->save_value();
break;
}
}
mpMtrPosX->SetText( "" );
mxMtrPosX->set_text( "" );
break;
case SID_ATTR_TRANSFORM_POS_Y:
@@ -617,13 +585,15 @@ void PosSizePropertyPanel::NotifyItemUpdate(
if(pItem)
{
long nTmp = long(pItem->GetValue() / maUIScale);
SetFieldUnit( *mpMtrPosY, meDlgUnit, true );
SetMetricValue( *mpMtrPosY, nTmp, mePoolUnit );
SetFieldUnit( *mxMtrPosY, meDlgUnit, true );
SetMetricValue( *mxMtrPosY, nTmp, mePoolUnit );
limitWidth(*mxMtrPosY);
mxMtrPosY->save_value();
break;
}
}
mpMtrPosY->SetText( "" );
mxMtrPosY->set_text( "" );
break;
case SID_ATTR_TRANSFORM_ROT_X:
@@ -718,43 +688,15 @@ void PosSizePropertyPanel::NotifyItemUpdate(
long nTmp = pItem->GetValue();
nTmp = nTmp < 0 ? 36000+nTmp : nTmp;
mpMtrAngle->SetValue( nTmp );
mpDial->SetRotation( nTmp );
switch(nTmp)
{
case 0:
mpMtrAngle->SelectEntryPos(0);
break;
case 4500:
mpMtrAngle->SelectEntryPos(1);
break;
case 9000:
mpMtrAngle->SelectEntryPos(2);
break;
case 13500:
mpMtrAngle->SelectEntryPos(3);
break;
case 18000:
mpMtrAngle->SelectEntryPos(4);
break;
case 22500:
mpMtrAngle->SelectEntryPos(5);
break;
case 27000:
mpMtrAngle->SelectEntryPos(6);
break;
case 315000:
mpMtrAngle->SelectEntryPos(7);
break;
}
mxMtrAngle->set_value(nTmp);
mxCtrlDial->SetRotation(nTmp);
break;
}
}
mpMtrAngle->SetText( "" );
mpDial->SetRotation( 0 );
mxMtrAngle->set_text( "" );
mxCtrlDial->SetRotation( 0 );
break;
case SID_ATTR_METRIC:
@@ -784,11 +726,11 @@ void PosSizePropertyPanel::NotifyItemUpdate(
) && OBJ_EDGE == eKind)
|| OBJ_CAPTION == eKind)
{
mpFtAngle->Disable();
mpMtrAngle->Disable();
mpDial->Disable();
mpFlipTbx->Disable();
mpFtFlip->Disable();
mxFtAngle->set_sensitive(false);
mxMtrAngle->set_sensitive(false);
mxDial->set_sensitive(false);
mxFlipTbx->set_sensitive(false);
mxFtFlip->set_sensitive(false);
}
break;
}
@@ -816,11 +758,11 @@ void PosSizePropertyPanel::NotifyItemUpdate(
if(!isNoEdge)
{
mpFtAngle->Disable();
mpMtrAngle->Disable();
mpDial->Disable();
mpFlipTbx->Disable();
mpFtFlip->Disable();
mxFtAngle->set_sensitive(false);
mxMtrAngle->set_sensitive(false);
mxDial->set_sensitive(false);
mxFlipTbx->set_sensitive(false);
mxFtFlip->set_sensitive(false);
}
break;
}
@@ -828,43 +770,41 @@ void PosSizePropertyPanel::NotifyItemUpdate(
if(nCombinedContext == CombinedEnumContext(Application::DrawImpress, Context::TextObject))
{
mpFlipTbx->Disable();
mpFtFlip->Disable();
mxFlipTbx->set_sensitive(false);
mxFtFlip->set_sensitive(false);
}
DisableControls();
// mpCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog
// mxCbxScale must synchronized with that on Position and Size tabpage on Shape Properties dialog
SvtViewOptions aPageOpt(EViewType::TabPage, "cui/ui/possizetabpage/PositionAndSize");
OUString sUserData;
css::uno::Any aUserItem = aPageOpt.GetUserItem( USERITEM_NAME );
OUString aTemp;
if ( aUserItem >>= aTemp )
sUserData = aTemp;
mpCbxScale->Check( static_cast<bool>(sUserData.toInt32()) );
mxCbxScale->set_active(static_cast<bool>(sUserData.toInt32()));
}
void PosSizePropertyPanel::executeSize()
{
if ( !mpMtrWidth->IsValueModified() && !mpMtrHeight->IsValueModified())
if ( !mxMtrWidth->get_value_changed_from_saved() && !mxMtrHeight->get_value_changed_from_saved())
return;
Fraction aUIScale = mpView->GetModel()->GetUIScale();
// get Width
double nWidth = static_cast<double>(mpMtrWidth->GetValue( meDlgUnit ));
nWidth = MetricField::ConvertDoubleValue( nWidth, mpMtrWidth->GetBaseValue(), mpMtrWidth->GetDecimalDigits(), meDlgUnit, FieldUnit::MM_100TH );
long lWidth = static_cast<long>(nWidth * static_cast<double>(aUIScale));
double nWidth = static_cast<double>(mxMtrWidth->get_value(FieldUnit::MM_100TH));
long lWidth = long(nWidth * static_cast<double>(aUIScale));
lWidth = OutputDevice::LogicToLogic( lWidth, MapUnit::Map100thMM, mePoolUnit );
lWidth = static_cast<long>(mpMtrWidth->Denormalize( lWidth ));
lWidth = static_cast<long>(mxMtrWidth->denormalize( lWidth ));
// get Height
double nHeight = static_cast<double>(mpMtrHeight->GetValue( meDlgUnit ));
nHeight = MetricField::ConvertDoubleValue( nHeight, mpMtrHeight->GetBaseValue(), mpMtrHeight->GetDecimalDigits(), meDlgUnit, FieldUnit::MM_100TH );
long lHeight = static_cast<long>(nHeight * static_cast<double>(aUIScale));
double nHeight = static_cast<double>(mxMtrHeight->get_value(FieldUnit::MM_100TH));
long lHeight = long(nHeight * static_cast<double>(aUIScale));
lHeight = OutputDevice::LogicToLogic( lHeight, MapUnit::Map100thMM, mePoolUnit );
lHeight = static_cast<long>(mpMtrWidth->Denormalize( lHeight ));
lHeight = static_cast<long>(mxMtrHeight->denormalize( lHeight ));
// put Width & Height to itemset
SfxUInt32Item aWidthItem( SID_ATTR_TRANSFORM_WIDTH, static_cast<sal_uInt32>(lWidth));
@@ -881,19 +821,18 @@ void PosSizePropertyPanel::executeSize()
}
else
{
if ( (mpMtrWidth->IsValueModified()) && (mpMtrHeight->IsValueModified()))
if ( (mxMtrWidth->get_value_changed_from_saved()) && (mxMtrHeight->get_value_changed_from_saved()))
GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_TRANSFORM,
SfxCallMode::RECORD, { &aWidthItem, &aHeightItem, &aPointItem });
else if( mpMtrWidth->IsValueModified())
else if( mxMtrWidth->get_value_changed_from_saved())
GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_TRANSFORM,
SfxCallMode::RECORD, { &aWidthItem, &aPointItem });
else if ( mpMtrHeight->IsValueModified())
else if ( mxMtrHeight->get_value_changed_from_saved())
GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_TRANSFORM,
SfxCallMode::RECORD, { &aHeightItem, &aPointItem });
}
}
void PosSizePropertyPanel::MetricState( SfxItemState eState, const SfxPoolItem* pState )
{
bool bPosXBlank = false;
@@ -905,30 +844,30 @@ void PosSizePropertyPanel::MetricState( SfxItemState eState, const SfxPoolItem*
// and the Fields using it
meDlgUnit = GetCurrentUnit(eState,pState);
if (mpMtrPosX->GetText().isEmpty())
if (mxMtrPosX->get_text().isEmpty())
bPosXBlank = true;
SetFieldUnit( *mpMtrPosX, meDlgUnit, true );
SetFieldUnit( *mxMtrPosX, meDlgUnit, true );
if(bPosXBlank)
mpMtrPosX->SetText(OUString());
mxMtrPosX->set_text(OUString());
if (mpMtrPosY->GetText().isEmpty())
if (mxMtrPosY->get_text().isEmpty())
bPosYBlank = true;
SetFieldUnit( *mpMtrPosY, meDlgUnit, true );
SetFieldUnit( *mxMtrPosY, meDlgUnit, true );
if(bPosYBlank)
mpMtrPosY->SetText(OUString());
mxMtrPosY->set_text(OUString());
SetPosSizeMinMax();
if (mpMtrWidth->GetText().isEmpty())
if (mxMtrWidth->get_text().isEmpty())
bWidthBlank = true;
SetFieldUnit( *mpMtrWidth, meDlgUnit, true );
SetFieldUnit( *mxMtrWidth, meDlgUnit, true );
if(bWidthBlank)
mpMtrWidth->SetText(OUString());
mxMtrWidth->set_text(OUString());
if (mpMtrHeight->GetText().isEmpty())
if (mxMtrHeight->get_text().isEmpty())
bHeightBlank = true;
SetFieldUnit( *mpMtrHeight, meDlgUnit, true );
SetFieldUnit( *mxMtrHeight, meDlgUnit, true );
if(bHeightBlank)
mpMtrHeight->SetText(OUString());
mxMtrHeight->set_text(OUString());
}
@@ -972,42 +911,36 @@ void PosSizePropertyPanel::DisableControls()
{
// the position is protected("Position protect" option in modal dialog is checked),
// disable all the Position controls in sidebar
mpFtPosX->Disable();
mpMtrPosX->Disable();
mpFtPosY->Disable();
mpMtrPosY->Disable();
mpFtAngle->Disable();
mpMtrAngle->Disable();
mpDial->Disable();
mpFtFlip->Disable();
mpFlipTbx->Disable();
mxFtPosX->set_sensitive(false);
mxMtrPosX->set_sensitive(false);
mxFtPosY->set_sensitive(false);
mxMtrPosY->set_sensitive(false);
mxFtAngle->set_sensitive(false);
mxMtrAngle->set_sensitive(false);
mxDial->set_sensitive(false);
mxFtFlip->set_sensitive(false);
mxFlipTbx->set_sensitive(false);
mpFtWidth->Disable();
mpMtrWidth->Disable();
mpFtHeight->Disable();
mpMtrHeight->Disable();
mpCbxScale->Disable();
mxFtWidth->set_sensitive(false);
mxMtrWidth->set_sensitive(false);
mxFtHeight->set_sensitive(false);
mxMtrHeight->set_sensitive(false);
mxCbxScale->set_sensitive(false);
}
else
{
mpFtPosX->Enable();
mpMtrPosX->Enable();
mpFtPosY->Enable();
mpMtrPosY->Enable();
//mpFtAngle->Enable();
//mpMtrAngle->Enable();
//mpDial->Enable();
//mpFtFlip->Enable();
//mpFlipTbx->Enable();
mxFtPosX->set_sensitive(true);
mxMtrPosX->set_sensitive(true);
mxFtPosY->set_sensitive(true);
mxMtrPosY->set_sensitive(true);
if( mbSizeProtected )
{
mpFtWidth->Disable();
mpMtrWidth->Disable();
mpFtHeight->Disable();
mpMtrHeight->Disable();
mpCbxScale->Disable();
mxFtWidth->set_sensitive(false);
mxMtrWidth->set_sensitive(false);
mxFtHeight->set_sensitive(false);
mxMtrHeight->set_sensitive(false);
mxCbxScale->set_sensitive(false);
}
else
{
@@ -1015,36 +948,36 @@ void PosSizePropertyPanel::DisableControls()
{
if( mbAutoWidth )
{
mpFtWidth->Disable();
mpMtrWidth->Disable();
mpCbxScale->Disable();
mxFtWidth->set_sensitive(false);
mxMtrWidth->set_sensitive(false);
mxCbxScale->set_sensitive(false);
}
else
{
mpFtWidth->Enable();
mpMtrWidth->Enable();
mxFtWidth->set_sensitive(true);
mxMtrWidth->set_sensitive(true);
}
if( mbAutoHeight )
{
mpFtHeight->Disable();
mpMtrHeight->Disable();
mpCbxScale->Disable();
mxFtHeight->set_sensitive(false);
mxMtrHeight->set_sensitive(false);
mxCbxScale->set_sensitive(false);
}
else
{
mpFtHeight->Enable();
mpMtrHeight->Enable();
mxFtHeight->set_sensitive(true);
mxMtrHeight->set_sensitive(true);
}
if( !mbAutoWidth && !mbAutoHeight )
mpCbxScale->Enable();
mxCbxScale->set_sensitive(true);
}
else
{
mpFtWidth->Enable();
mpMtrWidth->Enable();
mpFtHeight->Enable();
mpMtrHeight->Enable();
mpCbxScale->Enable();
mxFtWidth->set_sensitive(true);
mxMtrWidth->set_sensitive(true);
mxFtHeight->set_sensitive(true);
mxMtrHeight->set_sensitive(true);
mxCbxScale->set_sensitive(true);
}
}
}
@@ -1067,7 +1000,7 @@ void PosSizePropertyPanel::SetPosSizeMinMax()
TransfrmHelper::ScaleRect( maWorkArea, aUIScale );
TransfrmHelper::ScaleRect( maRect, aUIScale );
const sal_uInt16 nDigits(mpMtrPosX->GetDecimalDigits());
const sal_uInt16 nDigits(mxMtrPosX->get_digits());
TransfrmHelper::ConvertRect( maWorkArea, nDigits, mePoolUnit, meDlgUnit );
TransfrmHelper::ConvertRect( maRect, nDigits, mePoolUnit, meDlgUnit );
@@ -1087,21 +1020,17 @@ void PosSizePropertyPanel::SetPosSizeMinMax()
fTop = std::clamp(fTop, - fMaxLong, fMaxLong);
fBottom = std::clamp(fBottom, -fMaxLong, fMaxLong);
mpMtrPosX->SetMin(basegfx::fround64(fLeft));
mpMtrPosX->SetFirst(basegfx::fround64(fLeft));
mpMtrPosX->SetMax(basegfx::fround64(fRight));
mpMtrPosX->SetLast(basegfx::fround64(fRight));
mpMtrPosY->SetMin(basegfx::fround64(fTop));
mpMtrPosY->SetFirst(basegfx::fround64(fTop));
mpMtrPosY->SetMax(basegfx::fround64(fBottom));
mpMtrPosY->SetLast(basegfx::fround64(fBottom));
mxMtrPosX->set_range(basegfx::fround64(fLeft), basegfx::fround64(fRight), FieldUnit::NONE);
limitWidth(*mxMtrPosX);
mxMtrPosY->set_range(basegfx::fround64(fTop), basegfx::fround64(fBottom), FieldUnit::NONE);
limitWidth(*mxMtrPosY);
double fMaxWidth = maWorkArea.getWidth() - (maRect.getWidth() - fLeft);
double fMaxHeight = maWorkArea.getHeight() - (maRect.getHeight() - fTop);
mpMtrWidth->SetMax(basegfx::fround64(fMaxWidth*100));
mpMtrWidth->SetLast(basegfx::fround64(fMaxWidth*100));
mpMtrHeight->SetMax(basegfx::fround64(fMaxHeight*100));
mpMtrHeight->SetLast(basegfx::fround64(fMaxHeight*100));
mxMtrWidth->set_max(basegfx::fround64(fMaxWidth*100), FieldUnit::NONE);
limitWidth(*mxMtrWidth);
mxMtrHeight->set_max(basegfx::fround64(fMaxHeight*100), FieldUnit::NONE);
limitWidth(*mxMtrHeight);
}
void PosSizePropertyPanel::UpdateUIScale()
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
index 3bc3f96..2e957b6 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
@@ -19,10 +19,10 @@
#ifndef INCLUDED_SVX_SOURCE_SIDEBAR_POSSIZE_POSSIZEPROPERTYPANEL_HXX
#define INCLUDED_SVX_SOURCE_SIDEBAR_POSSIZE_POSSIZEPROPERTYPANEL_HXX
#include <vcl/ctrl.hxx>
#include <sfx2/sidebar/SidebarPanelBase.hxx>
#include <sfx2/sidebar/ControllerItem.hxx>
#include <sfx2/sidebar/IContextChangeReceiver.hxx>
#include <sfx2/weldutils.hxx>
#include <svx/rectenum.hxx>
#include <svx/sidebar/PanelLayout.hxx>
#include <svl/poolitem.hxx>
@@ -30,17 +30,13 @@
#include <tools/fract.hxx>
#include <com/sun/star/ui/XSidebar.hpp>
#include <basegfx/range/b2drange.hxx>
#include <vcl/customweld.hxx>
#include <vcl/weld.hxx>
class SdrView;
class FixedText;
class MetricField;
class CheckBox;
class MetricBox;
class Edit;
class ToolBox;
namespace svx {
class DialControl;
class SvxDialControl;
};
namespace svx { namespace sidebar {
@@ -84,31 +80,36 @@ public:
private:
//Position
VclPtr<FixedText> mpFtPosX;
VclPtr<MetricField> mpMtrPosX;
VclPtr<FixedText> mpFtPosY;
VclPtr<MetricField> mpMtrPosY;
std::unique_ptr<weld::Label> mxFtPosX;
std::unique_ptr<weld::MetricSpinButton> mxMtrPosX;
std::unique_ptr<weld::Label> mxFtPosY;
std::unique_ptr<weld::MetricSpinButton> mxMtrPosY;
// size
VclPtr<FixedText> mpFtWidth;
VclPtr<MetricField> mpMtrWidth;
VclPtr<FixedText> mpFtHeight;
VclPtr<MetricField> mpMtrHeight;
VclPtr<CheckBox> mpCbxScale;
std::unique_ptr<weld::Label> mxFtWidth;
std::unique_ptr<weld::MetricSpinButton> mxMtrWidth;
std::unique_ptr<weld::Label> mxFtHeight;
std::unique_ptr<weld::MetricSpinButton> mxMtrHeight;
std::unique_ptr<weld::CheckButton> mxCbxScale;
//rotation
VclPtr<FixedText> mpFtAngle;
VclPtr<MetricBox> mpMtrAngle;
std::unique_ptr<weld::Label> mxFtAngle;
std::unique_ptr<weld::SpinButton> mxMtrAngle;
//rotation control
VclPtr<SidebarDialControl> mpDial;
std::unique_ptr<svx::SvxDialControl> mxCtrlDial;
std::unique_ptr<weld::CustomWeld> mxDial;
//flip
VclPtr<FixedText> mpFtFlip;
VclPtr<ToolBox> mpFlipTbx;
std::unique_ptr<weld::Label> mxFtFlip;
std::unique_ptr<weld::Toolbar> mxFlipTbx;
std::unique_ptr<ToolbarUnoDispatcher> mxFlipDispatch;
std::unique_ptr<weld::Toolbar> mxArrangeTbx;
std::unique_ptr<ToolbarUnoDispatcher> mxArrangeDispatch;
//edit charts button for online's mobile view
VclPtr<PushButton> mpBtnEditChart;
std::unique_ptr<weld::Button> mxBtnEditChart;
// Internal variables
basegfx::B2DRange maRect;
@@ -148,15 +149,14 @@ private:
css::uno::Reference<css::ui::XSidebar> mxSidebar;
DECL_LINK( ChangePosXHdl, Edit&, void );
DECL_LINK( ChangePosYHdl, Edit&, void );
DECL_LINK( ChangeWidthHdl, Edit&, void );
DECL_LINK( ChangeHeightHdl, Edit&, void );
DECL_LINK( ClickAutoHdl, Button*, void );
DECL_LINK( AngleModifiedHdl, Edit&, void );
DECL_LINK( RotationHdl, svx::DialControl*, void );
DECL_LINK( FlipHdl, ToolBox *, void );
DECL_STATIC_LINK( PosSizePropertyPanel, ClickChartEditHdl, Button*, void );
DECL_LINK( ChangePosXHdl, weld::MetricSpinButton&, void );
DECL_LINK( ChangePosYHdl, weld::MetricSpinButton&, void );
DECL_LINK( ChangeWidthHdl, weld::MetricSpinButton&, void );
DECL_LINK( ChangeHeightHdl, weld::MetricSpinButton&, void );
DECL_LINK( ClickAutoHdl, weld::ToggleButton&, void );
DECL_LINK( AngleModifiedHdl, weld::SpinButton&, void );
DECL_LINK( RotationHdl, svx::SvxDialControl*, void );
DECL_STATIC_LINK( PosSizePropertyPanel, ClickChartEditHdl, weld::Button&, void );
void Initialize();
void executeSize();
diff --git a/svx/uiconfig/ui/sidebarpossize.ui b/svx/uiconfig/ui/sidebarpossize.ui
index 8605a49..d88aecd 100644
--- a/svx/uiconfig/ui/sidebarpossize.ui
+++ b/svx/uiconfig/ui/sidebarpossize.ui
@@ -2,18 +2,35 @@
<!-- Generated with glade 3.22.1 -->
<interface domain="svx">
<requires lib="gtk+" version="3.18"/>
<requires lib="LibreOffice" version="1.0"/>
<object class="GtkAdjustment" id="adjustment1">
<property name="lower">-180</property>
<property name="upper">359.99000000000001</property>
<object class="GtkAdjustment" id="adjustmentPOS">
<property name="lower">-120</property>
<property name="upper">240</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustmentPOS1">
<property name="lower">-120</property>
<property name="upper">240</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustmentSIZE">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustmentSIZE1">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustmentSpinDegrees">
<property name="upper">359</property>
<property name="step_increment">5</property>
<property name="page_increment">20</property>
</object>
<object class="GtkGrid" id="PosSizePropertyPanel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row_homogeneous">True</property>
<property name="column_homogeneous">True</property>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
@@ -41,6 +58,7 @@
<property name="hexpand">True</property>
<property name="label" translatable="yes" context="sidebarpossize|horizontallabel">Position _X:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">horizontalpos</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -49,16 +67,15 @@
</packing>
</child>
<child>
<object class="GtkSpinButton" id="horizontalpos:0in">
<object class="GtkSpinButton" id="horizontalpos">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="sidebarpossize|horizontalpos|tooltip_text">Enter the value for the horizontal position.</property>
<accessibility>
<relation type="labelled-by" target="horizontallabel"/>
</accessibility>
<property name="adjustment">adjustmentPOS</property>
<property name="digits">2</property>
<child internal-child="accessible">
<object class="AtkObject" id="horizontalpos:0in-atkobject">
<object class="AtkObject" id="horizontalpos-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="sidebarpossize|horizontalpos">Horizontal</property>
</object>
</child>
@@ -75,6 +92,7 @@
<property name="hexpand">True</property>
<property name="label" translatable="yes" context="sidebarpossize|verticallabel">Position _Y:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">verticalpos</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -83,16 +101,14 @@
</packing>
</child>
<child>
<object class="GtkSpinButton" id="verticalpos:0in">
<object class="GtkSpinButton" id="verticalpos">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="sidebarpossize|verticalpos|tooltip_text">Enter the value for the vertical position.</property>
<accessibility>
<relation type="labelled-by" target="verticallabel"/>
</accessibility>
<property name="adjustment">adjustmentPOS1</property>
<child internal-child="accessible">
<object class="AtkObject" id="verticalpos:0in-atkobject">
<object class="AtkObject" id="verticalpos-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="sidebarpossize|verticalpos">Vertical</property>
</object>
</child>
@@ -109,6 +125,7 @@
<property name="hexpand">True</property>
<property name="label" translatable="yes" context="sidebarpossize|widthlabel">_Width:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">selectwidth</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -117,17 +134,16 @@
</packing>
</child>
<child>
<object class="GtkSpinButton" id="selectwidth:0in">
<object class="GtkSpinButton" id="selectwidth">
<property name="width_request">120</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="sidebarpossize|selectwidth|tooltip_text">Enter a width for the selected object.</property>
<accessibility>
<relation type="labelled-by" target="widthlabel"/>
</accessibility>
<property name="adjustment">adjustmentSIZE</property>
<property name="digits">2</property>
<child internal-child="accessible">
<object class="AtkObject" id="selectwidth:0in-atkobject">
<object class="AtkObject" id="selectwidth-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="sidebarpossize|selectwidth">Width</property>
</object>
</child>
@@ -144,6 +160,7 @@
<property name="hexpand">True</property>
<property name="label" translatable="yes" context="sidebarpossize|heightlabel">H_eight:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">selectheight</property>
<property name="xalign">0</property>
</object>
<packing>
@@ -152,17 +169,16 @@
</packing>
</child>
<child>
<object class="GtkSpinButton" id="selectheight:0in">
<object class="GtkSpinButton" id="selectheight">
<property name="width_request">120</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="sidebarpossize|selectheight|tooltip_text">Enter a height for the selected object.</property>
<accessibility>
<relation type="labelled-by" target="heightlabel"/>
</accessibility>
<property name="adjustment">adjustmentSIZE1</property>
<property name="digits">2</property>
<child internal-child="accessible">
<object class="AtkObject" id="selectheight:0in-atkobject">
<object class="AtkObject" id="selectheight-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="sidebarpossize|selectheight">Height</property>
</object>
</child>
@@ -204,6 +220,10 @@
<property name="label" translatable="yes" context="sidebarpossize|rotationlabel">_Rotation:</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
<accessibility>
<relation type="label-for" target="orientationcontrol"/>
<relation type="label-for" target="rotation"/>
</accessibility>
</object>
<packing>
<property name="expand">False</property>
@@ -217,18 +237,33 @@
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="spacing">6</property>
<property name="homogeneous">True</property>
<child>
<object class="svxlo-SidebarDialControl" id="orientationcontrol">
<object class="GtkScrolledWindow" id="preview">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="vexpand">True</property>
<accessibility>
<relation type="labelled-by" target="rotationlabel"/>
</accessibility>
<child internal-child="accessible">
<object class="AtkObject" id="orientationcontrol-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="sidebarpossize|orientationcontrol">Rotation</property>
<property name="can_focus">True</property>
<property name="halign">start</property>
<property name="valign">start</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkDrawingArea" id="orientationcontrol">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
<property name="tooltip_text" translatable="yes" context="rotationtabpage|CTL_ANGLE|tooltip_text">Rotation Angle</property>
<accessibility>
<relation type="labelled-by" target="rotationlabel"/>
</accessibility>
<child internal-child="accessible">
<object class="AtkObject" id="orientationcontrol-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="sidebarpossize|orientationcontrol">Rotation</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
@@ -246,17 +281,21 @@
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="VclComboBoxNumeric" id="rotation:0.00degrees">
<object class="GtkSpinButton" id="rotation">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="sidebarpossize|rotation|tooltip_text">Select the angle for rotation.</property>
<property name="hexpand">True</property>
<property name="adjustment">adjustment1</property>
<property name="halign">start</property>
<property name="adjustment">adjustmentSpinDegrees</property>
<property name="wrap">True</property>
<accessibility>
<relation type="labelled-by" target="rotationlabel"/>
</accessibility>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
@@ -269,14 +308,13 @@
<object class="GtkLabel" id="fliplabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label" translatable="yes" context="sidebarpossize|fliplabel">_Flip:</property>
<property name="use_underline">True</property>
<property name="justify">right</property>
<property name="mnemonic_widget">selectrotationtype</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
@@ -285,38 +323,36 @@
<object class="GtkToolbar" id="selectrotationtype">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="halign">start</property>
<property name="toolbar_style">icons</property>
<property name="show_arrow">False</property>
<property name="icon_size">2</property>
<child>
<object class="GtkToolButton" id="flipvertical">
<object class="GtkToolButton" id=".uno:FlipVertical">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="sidebarpossize|flipvertical|tooltip_text">Flip the selected object vertically.</property>
<property name="action_name">.uno:FlipVertical</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="fliphorizontal">
<object class="GtkToolButton" id=".uno:FlipHorizontal">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="sidebarpossize|fliphorizontal|tooltip_text">Flip the selected object horizontally.</property>
<property name="action_name">.uno:FlipHorizontal</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
<property name="homogeneous">False</property>
</packing>
</child>
<accessibility>
<relation type="labelled-by" target="fliplabel"/>
</accessibility>
</object>
<packing>
<property name="expand">True</property>
@@ -355,68 +391,67 @@
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="sidebarpossize|arrangelabel">_Arrange:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">arrangetoolbar</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="sfxlo-SidebarToolBox" id="arrangetoolbar">
<object class="GtkToolbar" id="arrangetoolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_tooltip">True</property>
<property name="tooltip_text" translatable="yes" context="sidebarpossize|arrangetoolbar">Arrange</property>
<property name="halign">end</property>
<property name="halign">start</property>
<property name="toolbar_style">icons</property>
<property name="show_arrow">False</property>
<property name="icon_size">2</property>
<child>
<object class="GtkToolButton" id="bringtofront">
<object class="GtkToolButton" id=".uno:BringToFront">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="action_name">.uno:BringToFront</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="forward">
<object class="GtkToolButton" id=".uno:ObjectForwardOne">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="action_name">.uno:ObjectForwardOne</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="backward">
<object class="GtkToolButton" id=".uno:ObjectBackOne">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="action_name">.uno:ObjectBackOne</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="sendtoback">
<object class="GtkToolButton" id=".uno:SendToBack">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="action_name">.uno:SendToBack</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
<property name="homogeneous">False</property>
</packing>
</child>
</object>