Related: tdf#129267 change spacing unit when measurement unit changes
Change-Id: I2407eb52a18dd06a51b49041df2035099c79c94a
Reviewed-on: https://gerrit.libreoffice.org/84788
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/svx/source/dialog/spacinglistbox.cxx b/svx/source/dialog/spacinglistbox.cxx
index e0a508e..85ebc62 100644
--- a/svx/source/dialog/spacinglistbox.cxx
+++ b/svx/source/dialog/spacinglistbox.cxx
@@ -29,6 +29,11 @@ SpacingListBox::SpacingListBox(vcl::Window* pParent)
void SpacingListBox::Init(SpacingType eType)
{
auto nSelected = GetSelectedEntryPos();
if (nSelected == LISTBOX_ENTRY_NOTFOUND)
nSelected = 0;
Clear();
const std::pair<const char*, int>* pResources;
switch (eType)
{
@@ -57,7 +62,7 @@ void SpacingListBox::Init(SpacingType eType)
}
SetDropDownLineCount(8);
SelectEntryPos(0);
SelectEntryPos(nSelected);
}
VCL_BUILDER_FACTORY(SpacingListBox);
diff --git a/sw/source/uibase/sidebar/PageFooterPanel.cxx b/sw/source/uibase/sidebar/PageFooterPanel.cxx
index 08be58f..4cc0c62 100644
--- a/sw/source/uibase/sidebar/PageFooterPanel.cxx
+++ b/sw/source/uibase/sidebar/PageFooterPanel.cxx
@@ -52,6 +52,12 @@ VclPtr<vcl::Window> PageFooterPanel::Create(
return VclPtr<PageFooterPanel>::Create(pParent, rxFrame, pBindings);
}
void PageFooterPanel::SetMarginsAndSpacingFieldUnit()
{
mpFooterSpacingLB->Init(IsInch(meFUnit) ? SpacingType::SPACING_INCH : SpacingType::SPACING_CM);
mpFooterMarginPresetLB->Init(IsInch(meFUnit) ? SpacingType::MARGINS_INCH : SpacingType::MARGINS_CM);
}
PageFooterPanel::PageFooterPanel(
vcl::Window* pParent,
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
@@ -59,9 +65,11 @@ PageFooterPanel::PageFooterPanel(
PanelLayout(pParent, "PageFooterPanel", "modules/swriter/ui/pagefooterpanel.ui", rxFrame),
mpBindings( pBindings ),
maHFToggleController(SID_ATTR_PAGE_FOOTER, *pBindings, *this),
maMetricController(SID_ATTR_METRIC, *pBindings,*this),
maFooterLRMarginController(SID_ATTR_PAGE_FOOTER_LRMARGIN, *pBindings, *this),
maFooterSpacingController(SID_ATTR_PAGE_FOOTER_SPACING, *pBindings, *this),
maFooterLayoutController(SID_ATTR_PAGE_FOOTER_LAYOUT, *pBindings, *this),
meFUnit(GetModuleFieldUnit()),
aCustomEntry(),
mpFooterItem( new SfxBoolItem(SID_ATTR_PAGE_FOOTER) ),
mpFooterLRMarginItem( new SvxLongLRSpaceItem(0, 0, SID_ATTR_PAGE_FOOTER_LRMARGIN)),
@@ -70,11 +78,8 @@ PageFooterPanel::PageFooterPanel(
{
get(mpFooterToggle, "footertoggle");
get(mpFooterSpacingLB, "spacingpreset");
FieldUnit eMetric = ::GetDfltMetric(false);
mpFooterSpacingLB->Init(IsInch(eMetric) ? SpacingType::SPACING_INCH : SpacingType::SPACING_CM);
get(mpFooterLayoutLB, "samecontentLB");
get(mpFooterMarginPresetLB, "footermarginpreset");
mpFooterMarginPresetLB->Init(IsInch(GetModuleFieldUnit()) ? SpacingType::MARGINS_INCH : SpacingType::MARGINS_CM);
get(mpCustomEntry, "customlabel");
Initialize();
@@ -88,6 +93,7 @@ PageFooterPanel::~PageFooterPanel()
void PageFooterPanel::dispose()
{
mpFooterToggle.disposeAndClear();
maMetricController.dispose();
mpFooterSpacingLB.disposeAndClear();
mpFooterLayoutLB.disposeAndClear();
mpFooterMarginPresetLB.disposeAndClear();
@@ -96,14 +102,29 @@ void PageFooterPanel::dispose()
PanelLayout::dispose();
}
FieldUnit PageFooterPanel::GetCurrentUnit(SfxItemState eState, const SfxPoolItem* pState)
{
FieldUnit eUnit;
if (pState && eState >= SfxItemState::DEFAULT)
eUnit = static_cast<FieldUnit>(static_cast<const SfxUInt16Item*>(pState)->GetValue());
else
eUnit = GetModuleFieldUnit();
return eUnit;
}
void PageFooterPanel::Initialize()
{
SetMarginsAndSpacingFieldUnit();
aCustomEntry = mpCustomEntry->GetText();
mpFooterToggle->SetClickHdl( LINK(this, PageFooterPanel, FooterToggleHdl) );
mpFooterMarginPresetLB->SetSelectHdl( LINK(this, PageFooterPanel, FooterLRMarginHdl));
mpFooterSpacingLB->SetSelectHdl( LINK(this, PageFooterPanel, FooterSpacingHdl));
mpFooterLayoutLB->SetSelectHdl( LINK(this, PageFooterPanel, FooterLayoutHdl));
mpBindings->Invalidate(SID_ATTR_METRIC);
mpBindings->Invalidate(SID_ATTR_PAGE_FOOTER);
mpBindings->Invalidate(SID_ATTR_PAGE_FOOTER_LRMARGIN);
mpBindings->Invalidate(SID_ATTR_PAGE_FOOTER_SPACING);
@@ -221,6 +242,18 @@ void PageFooterPanel::NotifyItemUpdate(
}
}
break;
case SID_ATTR_METRIC:
{
FieldUnit eFUnit = GetCurrentUnit(eState, pState);
if (meFUnit != eFUnit)
{
meFUnit = eFUnit;
SetMarginsAndSpacingFieldUnit();
UpdateSpacingControl();
UpdateMarginControl();
}
}
break;
default:
break;
}
diff --git a/sw/source/uibase/sidebar/PageFooterPanel.hxx b/sw/source/uibase/sidebar/PageFooterPanel.hxx
index 3b608cb..d41789e 100644
--- a/sw/source/uibase/sidebar/PageFooterPanel.hxx
+++ b/sw/source/uibase/sidebar/PageFooterPanel.hxx
@@ -67,10 +67,13 @@ private:
SfxBindings* mpBindings;
::sfx2::sidebar::ControllerItem maHFToggleController;
::sfx2::sidebar::ControllerItem maMetricController;
::sfx2::sidebar::ControllerItem maFooterLRMarginController;
::sfx2::sidebar::ControllerItem maFooterSpacingController;
::sfx2::sidebar::ControllerItem maFooterLayoutController;
FieldUnit meFUnit;
VclPtr<CheckBox> mpFooterToggle;
VclPtr<SpacingListBox> mpFooterSpacingLB;
VclPtr<SpacingListBox> mpFooterMarginPresetLB;
@@ -79,6 +82,7 @@ private:
OUString aCustomEntry;
void Initialize();
void SetMarginsAndSpacingFieldUnit();
void UpdateFooterCheck();
void UpdateMarginControl();
void UpdateSpacingControl();
@@ -89,6 +93,8 @@ private:
::std::unique_ptr<SvxLongULSpaceItem> mpFooterSpacingItem;
::std::unique_ptr<SfxInt16Item> mpFooterLayoutItem;
static FieldUnit GetCurrentUnit(SfxItemState eState, const SfxPoolItem* pState);
DECL_LINK( FooterToggleHdl, Button*, void );
DECL_LINK( FooterLRMarginHdl, ListBox&, void);
DECL_LINK( FooterSpacingHdl, ListBox&, void);
diff --git a/sw/source/uibase/sidebar/PageFormatPanel.cxx b/sw/source/uibase/sidebar/PageFormatPanel.cxx
index 459b7e5..ecc8ff0 100644
--- a/sw/source/uibase/sidebar/PageFormatPanel.cxx
+++ b/sw/source/uibase/sidebar/PageFormatPanel.cxx
@@ -90,7 +90,6 @@ PageFormatPanel::PageFormatPanel(
mpPageLRMarginItem( new SvxLongLRSpaceItem( 0, 0, SID_ATTR_PAGE_LRSPACE ) ),
mpPageULMarginItem( new SvxLongULSpaceItem( 0, 0, SID_ATTR_PAGE_ULSPACE ) ),
meFUnit(GetModuleFieldUnit()),
meLastFUnit(GetModuleFieldUnit()),
meUnit(),
aCustomEntry()
{
@@ -154,8 +153,8 @@ void PageFormatPanel::Initialize()
mpBindings->Update(SID_ATTR_METRIC);
mpBindings->Update(SID_ATTR_PAGE);
mpBindings->Update(SID_ATTR_PAGE_SIZE);
mpBindings->Update( SID_ATTR_PAGE_LRSPACE );
mpBindings->Update( SID_ATTR_PAGE_ULSPACE );
mpBindings->Update(SID_ATTR_PAGE_LRSPACE);
mpBindings->Update(SID_ATTR_PAGE_ULSPACE);
UpdateMarginBox();
}
@@ -190,15 +189,15 @@ void PageFormatPanel::NotifyItemUpdate(
case SID_ATTR_METRIC:
{
meUnit = maPaperSizeController.GetCoreMetric();
meFUnit = GetCurrentUnit(eState, pState);
if(meFUnit != meLastFUnit)
FieldUnit eFUnit = GetCurrentUnit(eState, pState);
if (eFUnit != meFUnit)
{
meFUnit = eFUnit;
SetFieldUnit( *mpPaperHeight, meFUnit );
SetFieldUnit( *mpPaperWidth, meFUnit );
SetMarginFieldUnit();
UpdateMarginBox();
}
meLastFUnit = meFUnit;
}
break;
case SID_ATTR_PAGE:
diff --git a/sw/source/uibase/sidebar/PageFormatPanel.hxx b/sw/source/uibase/sidebar/PageFormatPanel.hxx
index b6eaae6..1df56ec 100644
--- a/sw/source/uibase/sidebar/PageFormatPanel.hxx
+++ b/sw/source/uibase/sidebar/PageFormatPanel.hxx
@@ -84,7 +84,7 @@ private:
std::unique_ptr<SvxLongLRSpaceItem> mpPageLRMarginItem;
std::unique_ptr<SvxLongULSpaceItem> mpPageULMarginItem;
FieldUnit meFUnit, meLastFUnit;
FieldUnit meFUnit;
MapUnit meUnit;
long mnPageLeftMargin;
diff --git a/sw/source/uibase/sidebar/PageHeaderPanel.cxx b/sw/source/uibase/sidebar/PageHeaderPanel.cxx
index 5641eba..557c27f 100644
--- a/sw/source/uibase/sidebar/PageHeaderPanel.cxx
+++ b/sw/source/uibase/sidebar/PageHeaderPanel.cxx
@@ -54,6 +54,12 @@ VclPtr<vcl::Window> PageHeaderPanel::Create(
return VclPtr<PageHeaderPanel>::Create(pParent, rxFrame, pBindings);
}
void PageHeaderPanel::SetMarginsAndSpacingFieldUnit()
{
mpHeaderSpacingLB->Init(IsInch(meFUnit) ? SpacingType::SPACING_INCH : SpacingType::SPACING_CM);
mpHeaderMarginPresetLB->Init(IsInch(meFUnit) ? SpacingType::MARGINS_INCH : SpacingType::MARGINS_CM);
}
PageHeaderPanel::PageHeaderPanel(
vcl::Window* pParent,
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxFrame,
@@ -62,9 +68,11 @@ PageHeaderPanel::PageHeaderPanel(
PanelLayout(pParent, "PageHeaderPanel", "modules/swriter/ui/pageheaderpanel.ui", rxFrame),
mpBindings( pBindings ),
maHFToggleController(SID_ATTR_PAGE_HEADER, *pBindings, *this),
maMetricController(SID_ATTR_METRIC, *pBindings,*this),
maHeaderLRMarginController(SID_ATTR_PAGE_HEADER_LRMARGIN, *pBindings, *this),
maHeaderSpacingController(SID_ATTR_PAGE_HEADER_SPACING, *pBindings, *this),
maHeaderLayoutController(SID_ATTR_PAGE_HEADER_LAYOUT, *pBindings, *this),
meFUnit(GetModuleFieldUnit()),
aCustomEntry(),
mpHeaderItem( new SfxBoolItem(SID_ATTR_PAGE_HEADER) ),
mpHeaderLRMarginItem( new SvxLongLRSpaceItem(0, 0, SID_ATTR_PAGE_HEADER_LRMARGIN)),
@@ -73,11 +81,8 @@ PageHeaderPanel::PageHeaderPanel(
{
get(mpHeaderToggle, "headertoggle");
get(mpHeaderSpacingLB, "spacingpreset");
FieldUnit eMetric = ::GetDfltMetric(false);
mpHeaderSpacingLB->Init(IsInch(eMetric) ? SpacingType::SPACING_INCH : SpacingType::SPACING_CM);
get(mpHeaderLayoutLB, "samecontentLB");
get(mpHeaderMarginPresetLB, "headermarginpreset");
mpHeaderMarginPresetLB->Init(IsInch(eMetric) ? SpacingType::MARGINS_INCH : SpacingType::MARGINS_CM);
get(mpCustomEntry, "customlabel");
Initialize();
@@ -99,14 +104,29 @@ void PageHeaderPanel::dispose()
PanelLayout::dispose();
}
FieldUnit PageHeaderPanel::GetCurrentUnit(SfxItemState eState, const SfxPoolItem* pState)
{
FieldUnit eUnit;
if (pState && eState >= SfxItemState::DEFAULT)
eUnit = static_cast<FieldUnit>(static_cast<const SfxUInt16Item*>(pState)->GetValue());
else
eUnit = GetModuleFieldUnit();
return eUnit;
}
void PageHeaderPanel::Initialize()
{
SetMarginsAndSpacingFieldUnit();
aCustomEntry = mpCustomEntry->GetText();
mpHeaderToggle->SetClickHdl( LINK(this, PageHeaderPanel, HeaderToggleHdl) );
mpHeaderMarginPresetLB->SetSelectHdl( LINK(this, PageHeaderPanel, HeaderLRMarginHdl));
mpHeaderSpacingLB->SetSelectHdl( LINK(this, PageHeaderPanel, HeaderSpacingHdl));
mpHeaderLayoutLB->SetSelectHdl( LINK(this, PageHeaderPanel, HeaderLayoutHdl));
mpBindings->Invalidate(SID_ATTR_METRIC);
mpBindings->Invalidate(SID_ATTR_PAGE_HEADER);
mpBindings->Invalidate(SID_ATTR_PAGE_HEADER_LRMARGIN);
mpBindings->Invalidate(SID_ATTR_PAGE_HEADER_SPACING);
@@ -224,6 +244,18 @@ void PageHeaderPanel::NotifyItemUpdate(
}
}
break;
case SID_ATTR_METRIC:
{
FieldUnit eFUnit = GetCurrentUnit(eState, pState);
if (meFUnit != eFUnit)
{
meFUnit = eFUnit;
SetMarginsAndSpacingFieldUnit();
UpdateSpacingControl();
UpdateMarginControl();
}
}
break;
default:
break;
}
diff --git a/sw/source/uibase/sidebar/PageHeaderPanel.hxx b/sw/source/uibase/sidebar/PageHeaderPanel.hxx
index 09fa082..3861b02 100644
--- a/sw/source/uibase/sidebar/PageHeaderPanel.hxx
+++ b/sw/source/uibase/sidebar/PageHeaderPanel.hxx
@@ -67,10 +67,13 @@ private:
SfxBindings* mpBindings;
::sfx2::sidebar::ControllerItem maHFToggleController;
::sfx2::sidebar::ControllerItem maMetricController;
::sfx2::sidebar::ControllerItem maHeaderLRMarginController;
::sfx2::sidebar::ControllerItem maHeaderSpacingController;
::sfx2::sidebar::ControllerItem maHeaderLayoutController;
FieldUnit meFUnit;
VclPtr<CheckBox> mpHeaderToggle;
VclPtr<SpacingListBox> mpHeaderSpacingLB;
VclPtr<SpacingListBox> mpHeaderMarginPresetLB;
@@ -79,6 +82,7 @@ private:
OUString aCustomEntry;
void Initialize();
void SetMarginsAndSpacingFieldUnit();
void UpdateHeaderCheck();
void UpdateMarginControl();
void UpdateSpacingControl();
@@ -89,6 +93,8 @@ private:
::std::unique_ptr<SvxLongULSpaceItem> mpHeaderSpacingItem;
::std::unique_ptr<SfxInt16Item> mpHeaderLayoutItem;
static FieldUnit GetCurrentUnit(SfxItemState eState, const SfxPoolItem* pState);
DECL_LINK( HeaderToggleHdl, Button*, void );
DECL_LINK( HeaderLRMarginHdl, ListBox&, void);
DECL_LINK( HeaderSpacingHdl, ListBox&, void);