summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Tietze <tietze.heiko@gmail.com>2020-12-01 12:21:10 +0100
committerGabor Kelemen <kelemeng@ubuntu.com>2023-06-11 23:17:54 +0200
commitcbcfada382a5a9aa33d55e996e7865487f5b769e (patch)
treea1f6018e8735120570b2444c00bac7a2b2078d76
parentbf50bfb5aa1f0dae37a703f1dc0ca1199693c3ce (diff)
Resolves tdf#99646 - Make default type of anchoring optional
Option introduced at Tools > Options > Writer > Formatting Aids Change-Id: I8d890f84107647821c39669114b991c301727788 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106970 Tested-by: Jenkins Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152794 Tested-by: Gabor Kelemen <kelemeng@ubuntu.com> Reviewed-by: Gabor Kelemen <kelemeng@ubuntu.com>
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Writer.xcs25
-rw-r--r--sw/inc/viewopt.hxx10
-rw-r--r--sw/source/ui/config/optpage.cxx1
-rw-r--r--sw/source/uibase/config/cfgitems.cxx6
-rw-r--r--sw/source/uibase/config/usrpref.cxx21
-rw-r--r--sw/source/uibase/config/viewopt.cxx23
-rw-r--r--sw/source/uibase/frmdlg/frmmgr.cxx4
-rw-r--r--sw/source/uibase/inc/cfgitems.hxx1
-rw-r--r--sw/source/uibase/inc/optpage.hxx2
9 files changed, 86 insertions, 7 deletions
diff --git a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
index 0c25de006f9e..88ac40f5057d 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
@@ -1079,6 +1079,31 @@
</info>
<value>true</value>
</prop>
+ <prop oor:name="DefaultAnchor" oor:type="xs:int" oor:nillable="false">
+ <!-- UIHints: Tools - Options - Writer - View - Default Anchor -->
+ <info>
+ <desc>Specifies the anchor of newly inserted images.</desc>
+ <label>Default Anchor</label>
+ </info>
+ <constraints>
+ <enumeration oor:value="0">
+ <info>
+ <desc>FLY_TO_PARA</desc>
+ </info>
+ </enumeration>
+ <enumeration oor:value="1">
+ <info>
+ <desc>FLY_TO_CHAR</desc>
+ </info>
+ </enumeration>
+ <enumeration oor:value="2">
+ <info>
+ <desc>FLY_AS_CHAR</desc>
+ </info>
+ </enumeration>
+ </constraints>
+ <value>1</value>
+ </prop>
</group>
<group oor:name="NonprintingCharacter">
<info>
diff --git a/sw/inc/viewopt.hxx b/sw/inc/viewopt.hxx
index 11d2914ed028..3a2148c7911c 100644
--- a/sw/inc/viewopt.hxx
+++ b/sw/inc/viewopt.hxx
@@ -25,6 +25,7 @@
#include <tools/gen.hxx>
#include <tools/color.hxx>
+#include <svx/swframetypes.hxx>
#include <sfx2/zoomitem.hxx>
#include "swdllapi.h"
@@ -169,6 +170,7 @@ class SW_DLLPUBLIC SwViewOption
bool mbHideWhitespaceMode : 1; // Hide header, footer, and pagebreak.
bool m_bShowPlaceHolderFields : 1; // Only used in printing!
mutable bool m_bIdle;
+ sal_Int32 m_nDefaultAnchor; // GetDefaultAnchorType() to convert int to RndStdIds
// Scale
sal_uInt16 m_nZoom; // In percent.
@@ -649,6 +651,14 @@ public:
static void SetDocBoundaries(bool bSet) {SetAppearanceFlag(ViewOptFlags::DocBoundaries, bSet);}
static void ApplyColorConfigValues(const svtools::ColorConfig& rConfig);
+
+ // get/set default anchor (0..2); use GetDefaultAnchorType() to convert into RndStdIds::FLY_*
+ sal_Int32 GetDefaultAnchor() const
+ { return m_nDefaultAnchor; }
+ void SetDefaultAnchor( const sal_Int32 aFlag )
+ { m_nDefaultAnchor = aFlag; }
+
+ RndStdIds GetDefaultAnchorType();
};
inline bool SwViewOption::operator==( const SwViewOption &rOpt ) const
diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx
index 88b6740e8a9a..98359cc2ae05 100644
--- a/sw/source/ui/config/optpage.cxx
+++ b/sw/source/ui/config/optpage.cxx
@@ -1218,6 +1218,7 @@ SwShdwCursorOptionsTabPage::SwShdwCursorOptionsTabPage(weld::Container* pPage, w
, m_xFillSpaceRB(m_xBuilder->weld_radio_button("fillspace"))
, m_xCursorProtFrame(m_xBuilder->weld_frame("crsrprotframe"))
, m_xCursorInProtCB(m_xBuilder->weld_check_button("cursorinprot"))
+ , m_xDefaultAnchorType(m_xBuilder->weld_combo_box("cxDefaultAnchor"))
, m_xMathBaselineAlignmentCB(m_xBuilder->weld_check_button("mathbaseline"))
{
const SfxPoolItem* pItem = nullptr;
diff --git a/sw/source/uibase/config/cfgitems.cxx b/sw/source/uibase/config/cfgitems.cxx
index efbbdf4154b4..a5e8718aa718 100644
--- a/sw/source/uibase/config/cfgitems.cxx
+++ b/sw/source/uibase/config/cfgitems.cxx
@@ -41,6 +41,7 @@ SwDocDisplayItem::SwDocDisplayItem() :
bCharHiddenText =
bBookmarks =
bManualBreak = true;
+ m_xDefaultAnchor = 1; //FLY_TO_CHAR
};
// Item for the Settings dialog, page document view
@@ -55,6 +56,7 @@ SwDocDisplayItem::SwDocDisplayItem(const SwViewOption& rVOpt ) :
bCharHiddenText = rVOpt.IsShowHiddenChar(true);
bBookmarks = rVOpt.IsShowBookmarks(true);
bManualBreak = rVOpt.IsLineBreak(true);
+ m_xDefaultAnchor = rVOpt.GetDefaultAnchor();
}
SfxPoolItem* SwDocDisplayItem::Clone( SfxItemPool* ) const
@@ -75,7 +77,8 @@ bool SwDocDisplayItem::operator==( const SfxPoolItem& rAttr ) const
bSoftHyphen == rItem.bSoftHyphen &&
bCharHiddenText == rItem.bCharHiddenText &&
bBookmarks == rItem.bBookmarks &&
- bManualBreak == rItem.bManualBreak );
+ bManualBreak == rItem.bManualBreak &&
+ m_xDefaultAnchor == rItem.m_xDefaultAnchor);
}
void SwDocDisplayItem::FillViewOptions( SwViewOption& rVOpt) const
@@ -88,6 +91,7 @@ void SwDocDisplayItem::FillViewOptions( SwViewOption& rVOpt) const
rVOpt.SetShowHiddenChar(bCharHiddenText );
rVOpt.SetShowBookmarks(bBookmarks );
rVOpt.SetLineBreak (bManualBreak );
+ rVOpt.SetDefaultAnchor( m_xDefaultAnchor );
}
SwElemItem::SwElemItem() :
diff --git a/sw/source/uibase/config/usrpref.cxx b/sw/source/uibase/config/usrpref.cxx
index cfc6142314c6..7f368346f66c 100644
--- a/sw/source/uibase/config/usrpref.cxx
+++ b/sw/source/uibase/config/usrpref.cxx
@@ -83,6 +83,7 @@ SwMasterUsrPref::~SwMasterUsrPref()
}
static const auto g_UpdateLinkIndex = 17;
+const auto g_DefaultAnchor = 22;
Sequence<OUString> SwContentViewConfig::GetPropertyNames() const
{
@@ -93,8 +94,8 @@ Sequence<OUString> SwContentViewConfig::GetPropertyNames() const
"Display/DrawingControl", // 2
"Display/FieldCode", // 3
"Display/Note", // 4
- "Display/ShowContentTips", // 5
- "NonprintingCharacter/MetaCharacters", // 6
+ "Display/ShowContentTips", // 5
+ "NonprintingCharacter/MetaCharacters", // 6
"NonprintingCharacter/ParagraphEnd", // 7
"NonprintingCharacter/OptionalHyphen", // 8
"NonprintingCharacter/Space", // 9
@@ -109,7 +110,8 @@ Sequence<OUString> SwContentViewConfig::GetPropertyNames() const
"Update/Field", // 18
"Update/Chart", // 19
"Display/ShowInlineTooltips", // 20
- "Display/UseHeaderFooterMenu" // 21
+ "Display/UseHeaderFooterMenu", // 21
+ "Display/DefaultAnchor" // 22
};
#if defined(__GNUC__) && !defined(__clang__)
// clang 8.0.0 says strcmp isn't constexpr
@@ -177,8 +179,9 @@ void SwContentViewConfig::ImplCommit()
case 19: bVal = rParent.IsUpdateCharts(); break;// "Update/Chart"
case 20: bVal = rParent.IsShowInlineTooltips(); break;// "Display/ShowInlineTooltips"
case 21: bVal = rParent.IsUseHeaderFooterMenu(); break;// "Display/UseHeaderFooterMenu"
+ case 22: pValues[nProp] <<= rParent.GetDefaultAnchor(); break;// "Display/DefaultAnchor"
}
- if (nProp != g_UpdateLinkIndex)
+ if ((nProp != g_UpdateLinkIndex) && (nProp != g_DefaultAnchor))
pValues[nProp] <<= bVal;
}
PutProperties(aNames, aValues);
@@ -196,7 +199,8 @@ void SwContentViewConfig::Load()
{
if(pValues[nProp].hasValue())
{
- bool bSet = nProp != g_UpdateLinkIndex && *o3tl::doAccess<bool>(pValues[nProp]);
+ bool bSet = ((nProp != g_UpdateLinkIndex) && (nProp != g_DefaultAnchor))
+ && *o3tl::doAccess<bool>(pValues[nProp]);
switch(nProp)
{
case 0: rParent.SetGraphic(bSet); break;// "Display/GraphicObject",
@@ -227,6 +231,13 @@ void SwContentViewConfig::Load()
case 19: rParent.SetUpdateCharts(bSet); break;// "Update/Chart"
case 20: rParent.SetShowInlineTooltips(bSet); break;// "Display/ShowInlineTooltips"
case 21: rParent.SetUseHeaderFooterMenu(bSet); break;// "Display/UseHeaderFooterMenu"
+ case 22:
+ {
+ sal_Int32 nSet = 0;
+ pValues[nProp] >>= nSet;
+ rParent.SetDefaultAnchor(nSet);
+ }
+ break; // "Display/DefaultAnchor"
}
}
}
diff --git a/sw/source/uibase/config/viewopt.cxx b/sw/source/uibase/config/viewopt.cxx
index 6059ef5ec8c8..6fa49a4258f0 100644
--- a/sw/source/uibase/config/viewopt.cxx
+++ b/sw/source/uibase/config/viewopt.cxx
@@ -83,6 +83,7 @@ bool SwViewOption::IsEqualFlags( const SwViewOption &rOpt ) const
&& mbHideWhitespaceMode == rOpt.mbHideWhitespaceMode
&& m_bShowPlaceHolderFields == rOpt.m_bShowPlaceHolderFields
&& m_bIdle == rOpt.m_bIdle
+ && m_nDefaultAnchor == rOpt.m_nDefaultAnchor
#ifdef DBG_UTIL
// correspond to the statements in ui/config/cfgvw.src
&& m_bTest1 == rOpt.IsTest1()
@@ -210,6 +211,8 @@ SwViewOption::SwViewOption() :
m_bIdle = true;
+ m_nDefaultAnchor = 1; //FLY_TO_CHAR
+
#ifdef DBG_UTIL
// correspond to the statements in ui/config/cfgvw.src
m_bTest1 = m_bTest2 = m_bTest3 = m_bTest4 =
@@ -248,6 +251,7 @@ SwViewOption::SwViewOption(const SwViewOption& rVOpt)
mbHideWhitespaceMode = rVOpt.mbHideWhitespaceMode;
m_bShowPlaceHolderFields = rVOpt.m_bShowPlaceHolderFields;
m_bIdle = rVOpt.m_bIdle;
+ m_nDefaultAnchor = rVOpt.m_nDefaultAnchor;
#ifdef DBG_UTIL
m_bTest1 = rVOpt.m_bTest1;
@@ -289,6 +293,7 @@ SwViewOption& SwViewOption::operator=( const SwViewOption &rVOpt )
mbHideWhitespaceMode = rVOpt.mbHideWhitespaceMode;
m_bShowPlaceHolderFields = rVOpt.m_bShowPlaceHolderFields;
m_bIdle = rVOpt.m_bIdle;
+ m_nDefaultAnchor = rVOpt.m_nDefaultAnchor;
#ifdef DBG_UTIL
m_bTest1 = rVOpt.m_bTest1;
@@ -360,6 +365,24 @@ sal_uInt16 GetHtmlMode(const SwDocShell* pShell)
return nRet;
}
+RndStdIds SwViewOption::GetDefaultAnchorType()
+{
+ switch ( m_nDefaultAnchor )
+ {
+ case 0:
+ return RndStdIds::FLY_AT_PARA; //0
+ break;
+ case 1:
+ return RndStdIds::FLY_AT_CHAR; //4
+ break;
+ case 2:
+ return RndStdIds::FLY_AS_CHAR; //1
+ break;
+ default:
+ return RndStdIds::FLY_AT_CHAR; //4
+ }//switch
+}
+
Color& SwViewOption::GetDocColor()
{
return s_aDocColor;
diff --git a/sw/source/uibase/frmdlg/frmmgr.cxx b/sw/source/uibase/frmdlg/frmmgr.cxx
index e09d42623ee1..db6b036a7cc8 100644
--- a/sw/source/uibase/frmdlg/frmmgr.cxx
+++ b/sw/source/uibase/frmdlg/frmmgr.cxx
@@ -88,7 +88,9 @@ SwFlyFrameAttrMgr::SwFlyFrameAttrMgr( bool bNew, SwWrtShell* pSh, Frmmgr_Type nT
if (nType == Frmmgr_Type::GRF || nType == Frmmgr_Type::OLE)
{
- m_aSet.Put(SwFormatAnchor(RndStdIds::FLY_AT_CHAR));
+ // Default anchor for new graphics and objects is at-char, except for Math objects.
+ SwViewOption aViewOpt(*pSh->GetViewOptions());
+ m_aSet.Put(SwFormatAnchor(aViewOpt.GetDefaultAnchorType()));//RndStdIds::FLY_AT_CHAR
}
}
else if ( nType == Frmmgr_Type::NONE )
diff --git a/sw/source/uibase/inc/cfgitems.hxx b/sw/source/uibase/inc/cfgitems.hxx
index 297ac1846faa..11fc13baecc0 100644
--- a/sw/source/uibase/inc/cfgitems.hxx
+++ b/sw/source/uibase/inc/cfgitems.hxx
@@ -51,6 +51,7 @@ class SW_DLLPUBLIC SwDocDisplayItem : public SfxPoolItem
bool bCharHiddenText :1;
bool bBookmarks :1;
bool bManualBreak :1;
+ sal_Int32 m_xDefaultAnchor;
public:
SwDocDisplayItem();
diff --git a/sw/source/uibase/inc/optpage.hxx b/sw/source/uibase/inc/optpage.hxx
index 8de1394b633e..d85091a4572e 100644
--- a/sw/source/uibase/inc/optpage.hxx
+++ b/sw/source/uibase/inc/optpage.hxx
@@ -244,6 +244,8 @@ class SwShdwCursorOptionsTabPage : public SfxTabPage
std::unique_ptr<weld::Frame> m_xCursorProtFrame;
std::unique_ptr<weld::CheckButton> m_xCursorInProtCB;
+ std::unique_ptr<weld::ComboBox> m_xDefaultAnchorType;
+
std::unique_ptr<weld::CheckButton> m_xMathBaselineAlignmentCB;
public: