sw/source/uibase/inc/content.hxx               |    7 ++++--
 sw/source/uibase/utlui/content.cxx             |   29 +++++++++++++++++++------
 sw/uiconfig/swriter/ui/navigatorcontextmenu.ui |    9 +++++++
 3 files changed, 37 insertions(+), 8 deletions(-)

New commits:
commit 6afffcee5fcf7c9719abe7176468d20602e750bf
Author:     Jim Raykowski <rayk...@gmail.com>
AuthorDate: Tue Oct 10 19:06:21 2023 -0800
Commit:     Jim Raykowski <rayk...@gmail.com>
CommitDate: Thu Oct 12 19:13:59 2023 +0200

    tdf#42787 SwNavigator: Add ability to delete Sections
    
    Change-Id: If259772d6b84cdae48b75083c569fcf862416baf
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157802
    Tested-by: Jenkins
    Reviewed-by: Jim Raykowski <rayk...@gmail.com>

diff --git a/sw/source/uibase/inc/content.hxx b/sw/source/uibase/inc/content.hxx
index f7666e97244b..c2a922189894 100644
--- a/sw/source/uibase/inc/content.hxx
+++ b/sw/source/uibase/inc/content.hxx
@@ -60,15 +60,18 @@ class SwRegionContent final : public SwContent
 {
 
     sal_uInt8   m_nRegionLevel;
+    const SwSectionFormat* m_pSectionFormat;
 
     public:
         SwRegionContent(    const SwContentType* pCnt,
                             const OUString& rName,
                             sal_uInt8 nLevel,
-                            tools::Long nYPos) :
+                            tools::Long nYPos,
+                            const SwSectionFormat* pSectionFormat) :
             SwContent(pCnt, rName, nYPos),
-                        m_nRegionLevel(nLevel){}
+                        m_nRegionLevel(nLevel), 
m_pSectionFormat(pSectionFormat){}
     sal_uInt8   GetRegionLevel() const {return m_nRegionLevel;}
+    const SwSectionFormat* GetSectionFormat() const {return m_pSectionFormat;}
 };
 
 class SwURLFieldContent final : public SwContent
diff --git a/sw/source/uibase/utlui/content.cxx 
b/sw/source/uibase/utlui/content.cxx
index c9a30aaddfe4..7456d2a28e12 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -378,7 +378,7 @@ SwContentType::SwContentType(SwWrtShell* pShell, 
ContentTypeId nType, sal_uInt8
         case ContentTypeId::REGION:
             m_sTypeToken = "region";
             m_bEdit = true;
-            m_bDelete = false;
+            m_bDelete = true;
         break;
         case ContentTypeId::INDEX:
             m_bEdit = true;
@@ -796,8 +796,10 @@ void SwContentType::FillMemberList(bool* pbContentChanged)
                         pParentFormat = pParentFormat->GetParent();
                     }
 
-                    std::unique_ptr<SwContent> pCnt(new SwRegionContent(this, 
sSectionName,
-                            nLevel, m_bAlphabeticSort ? 0 : 
getYPos(pNodeIndex->GetNode())));
+                    auto pCnt(std::make_unique<SwRegionContent>(this, 
sSectionName, nLevel,
+                                            m_bAlphabeticSort ? 0 : 
getYPos(pNodeIndex->GetNode()),
+                                                                pFormat));
+
                     if(!pFormat->IsVisible())
                         pCnt->SetInvisible();
                     m_pMember->insert(std::move(pCnt));
@@ -1661,6 +1663,7 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
          bRemoveDeleteImageEntry = true,
          bRemoveDeleteOLEObjectEntry = true,
          bRemoveDeleteBookmarkEntry = true,
+         bRemoveDeleteRegionEntry = true,
          bRemoveDeleteHyperlinkEntry = true,
          bRemoveDeleteReferenceEntry = true,
          bRemoveDeleteIndexEntry= true,
@@ -1783,8 +1786,7 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
                     && 
m_pActiveShell->getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_BOOKMARKS);
             const bool bEditable = pType->IsEditable() &&
                     ((bVisible && !bProtected) || ContentTypeId::REGION == 
nContentType);
-            const bool bDeletable = pType->IsDeletable() &&
-                    ((bVisible && !bProtected && !bProtectBM) || 
ContentTypeId::REGION == nContentType);
+            const bool bDeletable = pType->IsDeletable() && bVisible && 
!bProtected && !bProtectBM;
             const bool bRenamable = bEditable && !bReadonly &&
                     (ContentTypeId::TABLE == nContentType ||
                      ContentTypeId::FRAME == nContentType ||
@@ -1817,6 +1819,9 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
                     case ContentTypeId::BOOKMARK:
                         bRemoveDeleteBookmarkEntry = false;
                     break;
+                    case ContentTypeId::REGION:
+                        bRemoveDeleteRegionEntry = false;
+                    break;
                     case ContentTypeId::URLFIELD:
                         bRemoveDeleteHyperlinkEntry = false;
                     break;
@@ -1962,6 +1967,8 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
         xPop->remove("deleteoleobject");
     if (bRemoveDeleteBookmarkEntry)
         xPop->remove("deletebookmark");
+    if (bRemoveDeleteRegionEntry)
+        xPop->remove("deleteregion");
     if (bRemoveDeleteHyperlinkEntry)
         xPop->remove("deletehyperlink");
     if (bRemoveDeleteReferenceEntry)
@@ -1982,6 +1989,7 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, 
rCEvt, bool)
             bRemoveDeleteImageEntry &&
             bRemoveDeleteOLEObjectEntry &&
             bRemoveDeleteBookmarkEntry &&
+            bRemoveDeleteRegionEntry &&
             bRemoveDeleteHyperlinkEntry &&
             bRemoveDeleteReferenceEntry &&
             bRemoveDeleteIndexEntry &&
@@ -4654,6 +4662,7 @@ void SwContentTree::ExecuteContextMenuAction(const 
OUString& rSelectedPopupEntry
              rSelectedPopupEntry == "deleteimage" ||
              rSelectedPopupEntry == "deleteoleobject" ||
              rSelectedPopupEntry == "deletebookmark" ||
+             rSelectedPopupEntry == "deleteregion" ||
              rSelectedPopupEntry == "deletehyperlink" ||
              rSelectedPopupEntry == "deletereference" ||
              rSelectedPopupEntry == "deleteindex" ||
@@ -5174,7 +5183,15 @@ void SwContentTree::EditEntry(const weld::TreeIter& 
rEntry, EditEntryMode nMode)
         break;
 
         case ContentTypeId::REGION    :
-            if(nMode == EditEntryMode::RENAME)
+            if (nMode == EditEntryMode::DELETE)
+            {
+                
assert(dynamic_cast<SwRegionContent*>(static_cast<SwTypeNumber*>(pCnt)));
+                const SwSectionFormat* pSectionFormat
+                        = 
static_cast<SwRegionContent*>(pCnt)->GetSectionFormat();
+                m_pActiveShell->GetDoc()->DelSectionFormat(
+                            const_cast<SwSectionFormat*>(pSectionFormat), 
false);
+            }
+            else if (nMode == EditEntryMode::RENAME)
             {
                 uno::Reference< frame::XModel >  xModel = 
m_pActiveShell->GetView().GetDocShell()->GetBaseModel();
                 uno::Reference< text::XTextSectionsSupplier >  xSects(xModel, 
uno::UNO_QUERY);
diff --git a/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui 
b/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui
index b3a02800fcdb..11400272371c 100644
--- a/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui
+++ b/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui
@@ -183,6 +183,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteregion">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_REGION">Delete Section</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deletehyperlink">
         <property name="visible">True</property>

Reply via email to