[Libreoffice-commits] core.git: cui/source cui/uiconfig sw/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Mon Feb 8 10:02:25 UTC 2021


 cui/source/inc/page.hxx                       |    3 +
 cui/source/tabpages/page.cxx                  |   77 ++++++++++++++++++++++++--
 cui/uiconfig/ui/pageformatpage.ui             |   28 +++++++++
 sw/source/core/doc/DocumentSettingManager.cxx |    5 +
 sw/source/uibase/app/docst.cxx                |   30 ++++++++++
 sw/source/uibase/app/docstyle.cxx             |    2 
 6 files changed, 141 insertions(+), 4 deletions(-)

New commits:
commit 63d3bf99101e2138a21a74a3d717d4f25d3d242f
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Feb 8 09:46:50 2021 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Mon Feb 8 11:01:43 2021 +0100

    tdf#91920 sw page gutter margin, from top: add UI
    
    - read from sw::DocumentSettingManager::mbGutterAtTop
    
    - improve the preview widget to take gutter position into account
    
    - also change it when the gutter position widget changes
    
    - write it back to sw::DocumentSettingManager::mbGutterAtTop on
      modification
    
    - always check if the dialog's input item set has SID_ATTR_CHAR_GRABBAG,
      otherwise do nothing to keep Calc/Impress unchanged
    
    Change-Id: I05ef864bf7ac18f4c6829d78312044560e6402d0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110488
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    Tested-by: Jenkins

diff --git a/cui/source/inc/page.hxx b/cui/source/inc/page.hxx
index d4a39f9b68e3..1a2e8fb506c4 100644
--- a/cui/source/inc/page.hxx
+++ b/cui/source/inc/page.hxx
@@ -123,6 +123,8 @@ private:
     std::unique_ptr<weld::CheckButton> m_xRegisterCB;
     std::unique_ptr<weld::Label> m_xRegisterFT;
     std::unique_ptr<weld::ComboBox> m_xRegisterLB;
+    std::unique_ptr<weld::Label> m_xGutterPositionFT;
+    std::unique_ptr<weld::ComboBox> m_xGutterPositionLB;
     std::unique_ptr<weld::Label> m_xInsideLbl;
     std::unique_ptr<weld::Label> m_xOutsideLbl;
     std::unique_ptr<weld::Label> m_xPrintRangeQueryText;
@@ -130,6 +132,7 @@ private:
 
     void                Init_Impl();
     DECL_LINK(LayoutHdl_Impl, weld::ComboBox&, void);
+    DECL_LINK(GutterPositionHdl_Impl, weld::ComboBox&, void);
     DECL_LINK(PaperBinHdl_Impl, weld::Widget&, void);
     DECL_LINK(SwapOrientation_Impl, weld::Button&, void);
     void SwapFirstValues_Impl( bool bSet );
diff --git a/cui/source/tabpages/page.cxx b/cui/source/tabpages/page.cxx
index 9a4ee5003f59..cc3cbcff0bb2 100644
--- a/cui/source/tabpages/page.cxx
+++ b/cui/source/tabpages/page.cxx
@@ -52,6 +52,8 @@
 #include <svx/xdef.hxx>
 #include <svx/unobrushitemhelper.hxx>
 #include <svx/SvxNumOptionsTabPageHelper.hxx>
+#include <sal/log.hxx>
+#include <svl/grabbagitem.hxx>
 
 // static ----------------------------------------------------------------
 
@@ -175,6 +177,8 @@ SvxPageDescPage::SvxPageDescPage(weld::Container* pPage, weld::DialogController*
     , m_xRegisterCB(m_xBuilder->weld_check_button("checkRegisterTrue"))
     , m_xRegisterFT(m_xBuilder->weld_label("labelRegisterStyle"))
     , m_xRegisterLB(m_xBuilder->weld_combo_box("comboRegisterStyle"))
+    , m_xGutterPositionFT(m_xBuilder->weld_label("labelGutterPosition"))
+    , m_xGutterPositionLB(m_xBuilder->weld_combo_box("comboGutterPosition"))
     // Strings stored in UI
     , m_xInsideLbl(m_xBuilder->weld_label("labelInner"))
     , m_xOutsideLbl(m_xBuilder->weld_label("labelOuter"))
@@ -305,6 +309,7 @@ void SvxPageDescPage::Init_Impl()
 {
     // adjust the handler
     m_xLayoutBox->connect_changed(LINK(this, SvxPageDescPage, LayoutHdl_Impl));
+    m_xGutterPositionLB->connect_changed(LINK(this, SvxPageDescPage, GutterPositionHdl_Impl));
 
     m_xPaperSizeBox->connect_changed(LINK(this, SvxPageDescPage, PaperSizeSelect_Impl));
     m_xPaperWidthEdit->connect_value_changed( LINK(this, SvxPageDescPage, PaperSizeModify_Impl));
@@ -326,7 +331,7 @@ void SvxPageDescPage::Init_Impl()
 void SvxPageDescPage::Reset( const SfxItemSet* rSet )
 {
     SfxItemPool* pPool = rSet->GetPool();
-    DBG_ASSERT( pPool, "Where is the pool?" );
+    SAL_WARN_IF(!pPool, "cui.tabpages", "Where is the pool?");
     MapUnit eUnit = pPool->GetMetric( GetWhich( SID_ATTR_LRSPACE ) );
 
     // adjust margins (right/left)
@@ -358,6 +363,27 @@ void SvxPageDescPage::Reset( const SfxItemSet* rSet )
             static_cast<sal_uInt16>(ConvertLong_Impl( static_cast<tools::Long>(rULSpace.GetLower()), eUnit )) );
     }
 
+    if (rSet->HasItem(SID_ATTR_CHAR_GRABBAG, &pItem))
+    {
+        const auto& rGrabBagItem = static_cast<const SfxGrabBagItem&>(*pItem);
+        bool bGutterAtTop{};
+        auto it = rGrabBagItem.GetGrabBag().find("GutterAtTop");
+        if (it != rGrabBagItem.GetGrabBag().end())
+        {
+            it->second >>= bGutterAtTop;
+        }
+
+        if (bGutterAtTop)
+        {
+            m_xGutterPositionLB->set_active(1);
+        }
+        else
+        {
+            // Left.
+            m_xGutterPositionLB->set_active(0);
+        }
+    }
+
     // general page data
     SvxNumType eNumType = SVX_NUM_ARABIC;
     bLandscape = ( mpDefPrinter->GetOrientation() == Orientation::Landscape );
@@ -480,6 +506,8 @@ void SvxPageDescPage::Reset( const SfxItemSet* rSet )
 
             m_xGutterMarginLbl->hide();
             m_xGutterMarginEdit->hide();
+            m_xGutterPositionFT->hide();
+            m_xGutterPositionLB->hide();
 
             break;
         }
@@ -498,6 +526,8 @@ void SvxPageDescPage::Reset( const SfxItemSet* rSet )
 
             m_xGutterMarginLbl->hide();
             m_xGutterMarginEdit->hide();
+            m_xGutterPositionFT->hide();
+            m_xGutterPositionLB->hide();
 
             break;
         }
@@ -532,6 +562,7 @@ void SvxPageDescPage::Reset( const SfxItemSet* rSet )
     m_xVertBox->save_state();
     m_xHorzBox->save_state();
     m_xAdaptBox->save_state();
+    m_xGutterPositionLB->save_value();
 
     CheckMarginEdits( true );
 
@@ -617,6 +648,29 @@ bool SvxPageDescPage::FillItemSet( SfxItemSet* rSet )
             bModified = false;
     }
 
+    if (rOldSet.HasItem(SID_ATTR_CHAR_GRABBAG))
+    {
+        // Set gutter position.
+        SfxGrabBagItem aGrabBagItem(
+                static_cast<const SfxGrabBagItem&>(rOldSet.Get(SID_ATTR_CHAR_GRABBAG)));
+        if (m_xGutterPositionLB->get_value_changed_from_saved())
+        {
+            bool bGutterAtTop = m_xGutterPositionLB->get_active() == 1;
+            aGrabBagItem.GetGrabBag()["GutterAtTop"] <<= bGutterAtTop;
+            bModified = true;
+        }
+
+        if (bModified)
+        {
+            pOld = rOldSet.GetItem(SID_ATTR_CHAR_GRABBAG);
+
+            if (!pOld || static_cast<const SfxGrabBagItem&>(*pOld) != aGrabBagItem)
+                rSet->Put(aGrabBagItem);
+            else
+                bModified = false;
+        }
+    }
+
     bool bMod = false;
 
     if (m_xTopMarginEdit->get_value_changed_from_saved())
@@ -817,6 +871,11 @@ IMPL_LINK_NOARG(SvxPageDescPage, LayoutHdl_Impl, weld::ComboBox&, void)
     UpdateExample_Impl( true );
 }
 
+IMPL_LINK_NOARG(SvxPageDescPage, GutterPositionHdl_Impl, weld::ComboBox&, void)
+{
+    UpdateExample_Impl(true);
+}
+
 IMPL_LINK_NOARG(SvxPageDescPage, PaperBinHdl_Impl, weld::Widget&, void)
 {
     // tdf#124226 disconnect so not called again, unless Reset occurs
@@ -1022,10 +1081,20 @@ void SvxPageDescPage::UpdateExample_Impl( bool bResetbackground )
     m_aBspWin.SetSize( aSize );
 
     // Margins
-    m_aBspWin.SetTop( GetCoreValue( *m_xTopMarginEdit, MapUnit::MapTwip ) );
+    bool bGutterAtTop = m_xGutterPositionLB->get_active() == 1;
+    tools::Long nTop = GetCoreValue(*m_xTopMarginEdit, MapUnit::MapTwip);
+    if (bGutterAtTop)
+    {
+        nTop += GetCoreValue(*m_xGutterMarginEdit, MapUnit::MapTwip);
+    }
+    m_aBspWin.SetTop(nTop);
     m_aBspWin.SetBottom( GetCoreValue( *m_xBottomMarginEdit, MapUnit::MapTwip ) );
-    m_aBspWin.SetLeft(GetCoreValue(*m_xLeftMarginEdit, MapUnit::MapTwip)
-                      + GetCoreValue(*m_xGutterMarginEdit, MapUnit::MapTwip));
+    tools::Long nLeft = GetCoreValue(*m_xLeftMarginEdit, MapUnit::MapTwip);
+    if (!bGutterAtTop)
+    {
+        nLeft += GetCoreValue(*m_xGutterMarginEdit, MapUnit::MapTwip);
+    }
+    m_aBspWin.SetLeft(nLeft);
     m_aBspWin.SetRight( GetCoreValue( *m_xRightMarginEdit, MapUnit::MapTwip ) );
 
     // Layout
diff --git a/cui/uiconfig/ui/pageformatpage.ui b/cui/uiconfig/ui/pageformatpage.ui
index cc8bef5433b3..e7aa3f01f6e0 100644
--- a/cui/uiconfig/ui/pageformatpage.ui
+++ b/cui/uiconfig/ui/pageformatpage.ui
@@ -672,6 +672,34 @@
                     <property name="top_attach">2</property>
                   </packing>
                 </child>
+                <child>
+                  <object class="GtkLabel" id="labelGutterPosition">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes" context="pageformatpage|labelGutterPosition">Gutter position:</property>
+                    <property name="use_underline">True</property>
+                    <property name="mnemonic_widget">comboGutterPosition</property>
+                    <property name="xalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">7</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkComboBoxText" id="comboGutterPosition">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <items>
+                      <item translatable="yes" context="pageformatpage|liststoreGutterPosition">Left</item>
+                      <item translatable="yes" context="pageformatpage|liststoreGutterPosition">Top</item>
+                    </items>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">7</property>
+                  </packing>
+                </child>
                 <child>
                   <placeholder/>
                 </child>
diff --git a/sw/source/core/doc/DocumentSettingManager.cxx b/sw/source/core/doc/DocumentSettingManager.cxx
index e811fd88174c..98f53bc6b931 100644
--- a/sw/source/core/doc/DocumentSettingManager.cxx
+++ b/sw/source/core/doc/DocumentSettingManager.cxx
@@ -975,6 +975,11 @@ void sw::DocumentSettingManager::dumpAsXml(xmlTextWriterPtr pWriter) const
         BAD_CAST(OString::boolean(mbFrameAutowidthWithMorePara).getStr()));
     xmlTextWriterEndElement(pWriter);
 
+    xmlTextWriterStartElement(pWriter, BAD_CAST("mbGutterAtTop"));
+    xmlTextWriterWriteAttribute(pWriter, BAD_CAST("value"),
+                                BAD_CAST(OString::boolean(mbGutterAtTop).getStr()));
+    xmlTextWriterEndElement(pWriter);
+
     xmlTextWriterEndElement(pWriter);
 }
 
diff --git a/sw/source/uibase/app/docst.cxx b/sw/source/uibase/app/docst.cxx
index dd5609af368c..ff9ea4af3585 100644
--- a/sw/source/uibase/app/docst.cxx
+++ b/sw/source/uibase/app/docst.cxx
@@ -74,6 +74,7 @@
 #include <paratr.hxx>
 #include <tblafmt.hxx>
 #include <sfx2/watermarkitem.hxx>
+#include <svl/grabbagitem.hxx>
 #include <SwUndoFmt.hxx>
 #include <strings.hrc>
 #include <AccessibilityCheck.hxx>
@@ -612,6 +613,29 @@ IMPL_LINK_NOARG(ApplyStyle, ApplyHdl, LinkParamNone*, void)
             if( aTmpSet.GetItemState( m_rDocSh.GetPool().GetTrueWhich( SID_ATTR_FRAMEDIRECTION, false ) , true, &pItem ) == SfxItemState::SET )
                 SwChartHelper::DoUpdateAllCharts( pDoc );
         }
+
+        if (m_nFamily == SfxStyleFamily::Page)
+        {
+            const SfxPoolItem* pItem = nullptr;
+            if (aTmpSet.HasItem(SID_ATTR_CHAR_GRABBAG, &pItem))
+            {
+                const auto& rGrabBagItem = static_cast<const SfxGrabBagItem&>(*pItem);
+                bool bGutterAtTop{};
+                auto it = rGrabBagItem.GetGrabBag().find("GutterAtTop");
+                if (it != rGrabBagItem.GetGrabBag().end())
+                {
+                    it->second >>= bGutterAtTop;
+                }
+                bool bOldGutterAtTop
+                    = pDoc->getIDocumentSettingAccess().get(DocumentSettingId::GUTTER_AT_TOP);
+                if (bOldGutterAtTop != bGutterAtTop)
+                {
+                    pDoc->getIDocumentSettingAccess().set(DocumentSettingId::GUTTER_AT_TOP,
+                                                          bGutterAtTop);
+                    pWrtShell->InvalidateLayout(/*bSizeChanged=*/true);
+                }
+            }
+        }
     }
 
     if(m_bNew)
@@ -877,6 +901,12 @@ void SwDocShell::Edit(
         rSet.Put(SvxHatchListItem(pDrawModel->GetHatchList(), SID_HATCH_LIST));
         rSet.Put(SvxBitmapListItem(pDrawModel->GetBitmapList(), SID_BITMAP_LIST));
         rSet.Put(SvxPatternListItem(pDrawModel->GetPatternList(), SID_PATTERN_LIST));
+
+        SfxGrabBagItem aGrabBag(SID_ATTR_CHAR_GRABBAG);
+        bool bGutterAtTop
+            = GetDoc()->getIDocumentSettingAccess().get(DocumentSettingId::GUTTER_AT_TOP);
+        aGrabBag.GetGrabBag()["GutterAtTop"] <<= bGutterAtTop;
+        rSet.Put(aGrabBag);
     }
 
     if (!bBasic)
diff --git a/sw/source/uibase/app/docstyle.cxx b/sw/source/uibase/app/docstyle.cxx
index e6eff2f4322b..9d27ef06338b 100644
--- a/sw/source/uibase/app/docstyle.cxx
+++ b/sw/source/uibase/app/docstyle.cxx
@@ -65,6 +65,7 @@
 #include <svx/xfillit0.hxx>
 #include <svx/xflftrit.hxx>
 #include <svx/drawitem.hxx>
+#include <editeng/eeitem.hxx>
 
 // The Format names in the list of all names have the
 // following family as their first character:
@@ -481,6 +482,7 @@ SwDocStyleSheet::SwDocStyleSheet(   SwDoc&                rDocument,
             SID_SWREGISTER_MODE, SID_SWREGISTER_MODE,
             SID_ATTR_BRUSH_CHAR, SID_ATTR_BRUSH_CHAR,
             SID_ATTR_NUMBERING_RULE, SID_ATTR_NUMBERING_RULE,
+            SID_ATTR_CHAR_GRABBAG, SID_ATTR_CHAR_GRABBAG,
             SID_ATTR_AUTO_STYLE_UPDATE, SID_ATTR_AUTO_STYLE_UPDATE,
             FN_PARAM_FTN_INFO, FN_PARAM_FTN_INFO,
             FN_COND_COLL, FN_COND_COLL>{}),


More information about the Libreoffice-commits mailing list