sw/source/uibase/utlui/content.cxx             |  134 +++++++++++++++++++++----
 sw/uiconfig/swriter/ui/navigatorcontextmenu.ui |  125 +++++++++++++++++++++--
 2 files changed, 228 insertions(+), 31 deletions(-)

New commits:
commit d5143c058bfdc0f5674c3e0a88fae2f9cbe28a0a
Author:     Jim Raykowski <[email protected]>
AuthorDate: Wed Jul 17 12:52:54 2024 -0800
Commit:     Jim Raykowski <[email protected]>
CommitDate: Sun Aug 18 01:38:55 2024 +0200

    tdf#156926 related: Ability to Delete all images in Writer
    
    Adds the ability to delete all content of a content type, excluding
    the Headings content type, using the content type's context menu in
    Writer Navigator.
    
    Change-Id: Ie5666b6b9b7ef2f3cdb63957b1b42b236b8674db
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170643
    Reviewed-by: Jim Raykowski <[email protected]>
    Tested-by: Jenkins

diff --git a/sw/source/uibase/utlui/content.cxx 
b/sw/source/uibase/utlui/content.cxx
index 9877ef40b676..9c7f1acff11e 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -1695,25 +1695,38 @@ IMPL_LINK(SwContentTree, CommandHdl, const 
CommandEvent&, rCEvt, bool)
 
     bool bRemovePostItEntries = true;
     bool bRemoveUpdateIndexEntry = true;
-    bool bRemoveReadonlyIndexEntry = true;    bool bRemoveCopyEntry = true;
+    bool bRemoveReadonlyIndexEntry = true;
+    bool bRemoveCopyEntry = true;
     bool bRemoveEditEntry = true;
     bool bRemoveUnprotectEntry = true;
     bool bRemoveDeleteChapterEntry = true,
+         bRemoveDeleteAllTablesEntry = true,
          bRemoveDeleteTableEntry = true,
+         bRemoveDeleteAllFramesEntry = true,
          bRemoveDeleteFrameEntry = true,
+         bRemoveDeleteAllImagesEntry = true,
          bRemoveDeleteImageEntry = true,
+         bRemoveDeleteAllOLEObjectsEntry = true,
          bRemoveDeleteOLEObjectEntry = true,
+         bRemoveDeleteAllBookmarksEntry = true,
          bRemoveDeleteBookmarkEntry = true,
+         bRemoveDeleteAllRegionsEntry = true,
          bRemoveDeleteRegionEntry = true,
+         bRemoveDeleteAllHyperlinksEntry = true,
          bRemoveDeleteHyperlinkEntry = true,
+         bRemoveDeleteAllReferencesEntry = true,
          bRemoveDeleteReferenceEntry = true,
+         bRemoveDeleteAllIndexesEntry = true,
          bRemoveDeleteIndexEntry= true,
+         bRemoveDeleteAllCommentsEntry = true,
          bRemoveDeleteCommentEntry = true,
+         bRemoveDeleteAllDrawingObjectsEntry = true,
          bRemoveDeleteDrawingObjectEntry = true,
+         bRemoveDeleteAllFieldsEntry = true,
          bRemoveDeleteFieldEntry = true,
          bRemoveDeleteAllFootnotesEntry = true,
-         bRemoveDeleteAllEndnotesEntry = true,
          bRemoveDeleteFootnoteEntry = true,
+         bRemoveDeleteAllEndnotesEntry = true,
          bRemoveDeleteEndnoteEntry = true;
     bool bRemoveRenameEntry = true;
     bool bRemoveSelectEntry = true;
@@ -1976,6 +1989,56 @@ IMPL_LINK(SwContentTree, CommandHdl, const 
CommandEvent&, rCEvt, bool)
                      && !m_pActiveShell->GetView().GetDocShell()->IsReadOnly()
                      && pType->GetMemberCount() > 0)
             {
+                // Choose which Delete All entry to show.
+                if (pType->IsDeletable() && IsDeletable(*xEntry))
+                {
+                    switch (nContentType)
+                    {
+                        case ContentTypeId::TABLE:
+                            bRemoveDeleteAllTablesEntry = false;
+                        break;
+                        case ContentTypeId::FRAME:
+                            bRemoveDeleteAllFramesEntry = false;
+                        break;
+                        case ContentTypeId::GRAPHIC:
+                            bRemoveDeleteAllImagesEntry = false;
+                        break;
+                        case ContentTypeId::OLE:
+                            bRemoveDeleteAllOLEObjectsEntry = false;
+                        break;
+                        case ContentTypeId::BOOKMARK:
+                            bRemoveDeleteAllBookmarksEntry = false;
+                        break;
+                        case ContentTypeId::REGION:
+                            bRemoveDeleteAllRegionsEntry = false;
+                        break;
+                        case ContentTypeId::URLFIELD:
+                            bRemoveDeleteAllHyperlinksEntry = false;
+                        break;
+                        case ContentTypeId::REFERENCE:
+                            bRemoveDeleteAllReferencesEntry = false;
+                        break;
+                        case ContentTypeId::INDEX:
+                            bRemoveDeleteAllIndexesEntry = false;
+                        break;
+                        case ContentTypeId::POSTIT:
+                            bRemoveDeleteAllCommentsEntry = false;
+                        break;
+                        case ContentTypeId::DRAWOBJECT:
+                            bRemoveDeleteAllDrawingObjectsEntry = false;
+                        break;
+                        case ContentTypeId::TEXTFIELD:
+                            bRemoveDeleteAllFieldsEntry = false;
+                        break;
+                        case ContentTypeId::FOOTNOTE:
+                            bRemoveDeleteAllFootnotesEntry = false;
+                        break;
+                        case ContentTypeId::ENDNOTE:
+                            bRemoveDeleteAllEndnotesEntry = false;
+                        break;
+                        default: break;
+                    }
+                }
                 if (nContentType == ContentTypeId::POSTIT)
                 {
                     const SwViewOption* m_pViewOpt = 
m_pActiveShell->GetViewOptions();
@@ -1983,10 +2046,6 @@ IMPL_LINK(SwContentTree, CommandHdl, const 
CommandEvent&, rCEvt, bool)
                     xPop->set_active(u"showresolvedcomments"_ustr, 
m_pViewOpt->IsResolvedPostIts());
                     bRemovePostItEntries = false;
                 }
-                else if (nContentType == ContentTypeId::FOOTNOTE)
-                    bRemoveDeleteAllFootnotesEntry = false;
-                else if (nContentType == ContentTypeId::ENDNOTE)
-                    bRemoveDeleteAllEndnotesEntry = false;
             }
         }
     }
@@ -2015,41 +2074,64 @@ IMPL_LINK(SwContentTree, CommandHdl, const 
CommandEvent&, rCEvt, bool)
     {
         xPop->remove(u"showcomments"_ustr);
         xPop->remove(u"showresolvedcomments"_ustr);
-        xPop->remove(OUString::number(602));
     }
 
     if (bRemoveDeleteChapterEntry)
         xPop->remove(u"deletechapter"_ustr);
+    if (bRemoveDeleteAllTablesEntry)
+        xPop->remove(u"deletealltables"_ustr);
     if (bRemoveDeleteTableEntry)
         xPop->remove(u"deletetable"_ustr);
+    if (bRemoveDeleteAllFramesEntry)
+        xPop->remove(u"deleteallframes"_ustr);
     if (bRemoveDeleteFrameEntry)
         xPop->remove(u"deleteframe"_ustr);
+    if (bRemoveDeleteAllImagesEntry)
+        xPop->remove(u"deleteallimages"_ustr);
     if (bRemoveDeleteImageEntry)
         xPop->remove(u"deleteimage"_ustr);
+    if (bRemoveDeleteAllOLEObjectsEntry)
+        xPop->remove(u"deletealloleobjects"_ustr);
     if (bRemoveDeleteOLEObjectEntry)
         xPop->remove(u"deleteoleobject"_ustr);
+    if (bRemoveDeleteAllBookmarksEntry)
+        xPop->remove(u"deleteallbookmarks"_ustr);
     if (bRemoveDeleteBookmarkEntry)
         xPop->remove(u"deletebookmark"_ustr);
+    if (bRemoveDeleteAllRegionsEntry)
+        xPop->remove(u"deleteallregions"_ustr);
     if (bRemoveDeleteRegionEntry)
         xPop->remove(u"deleteregion"_ustr);
+    if (bRemoveDeleteAllHyperlinksEntry)
+        xPop->remove(u"deleteallhyperlinks"_ustr);
     if (bRemoveDeleteHyperlinkEntry)
         xPop->remove(u"deletehyperlink"_ustr);
+    if (bRemoveDeleteAllReferencesEntry)
+        xPop->remove(u"deleteallreferences"_ustr);
     if (bRemoveDeleteReferenceEntry)
         xPop->remove(u"deletereference"_ustr);
+    if (bRemoveDeleteAllIndexesEntry)
+        xPop->remove(u"deleteallindexes"_ustr);
     if (bRemoveDeleteIndexEntry)
         xPop->remove(u"deleteindex"_ustr);
+    if (bRemoveDeleteAllCommentsEntry)
+        xPop->remove(u"deleteallcomments"_ustr);
     if (bRemoveDeleteCommentEntry)
         xPop->remove(u"deletecomment"_ustr);
+    if (bRemoveDeleteAllDrawingObjectsEntry)
+        xPop->remove(u"deletealldrawingobjects"_ustr);
     if (bRemoveDeleteDrawingObjectEntry)
         xPop->remove(u"deletedrawingobject"_ustr);
+    if (bRemoveDeleteAllFieldsEntry)
+        xPop->remove(u"deleteallfields"_ustr);
     if (bRemoveDeleteFieldEntry)
         xPop->remove(u"deletefield"_ustr);
     if (bRemoveDeleteAllFootnotesEntry)
         xPop->remove(u"deleteallfootnotes"_ustr);
-    if (bRemoveDeleteAllEndnotesEntry)
-        xPop->remove(u"deleteallendnotes"_ustr);
     if (bRemoveDeleteFootnoteEntry)
         xPop->remove(u"deletefootnote"_ustr);
+    if (bRemoveDeleteAllEndnotesEntry)
+        xPop->remove(u"deleteallendnotes"_ustr);
     if (bRemoveDeleteEndnoteEntry)
         xPop->remove(u"deleteendnote"_ustr);
 
@@ -2068,10 +2150,22 @@ IMPL_LINK(SwContentTree, CommandHdl, const 
CommandEvent&, rCEvt, bool)
             bRemoveDeleteCommentEntry &&
             bRemoveDeleteDrawingObjectEntry &&
             bRemoveDeleteFieldEntry &&
-            bRemoveDeleteAllFootnotesEntry &&
-            bRemoveDeleteAllEndnotesEntry &&
             bRemoveDeleteFootnoteEntry &&
-            bRemoveDeleteEndnoteEntry;
+            bRemoveDeleteEndnoteEntry &&
+            bRemoveDeleteAllTablesEntry &&
+            bRemoveDeleteAllFramesEntry &&
+            bRemoveDeleteAllImagesEntry &&
+            bRemoveDeleteAllOLEObjectsEntry &&
+            bRemoveDeleteAllBookmarksEntry &&
+            bRemoveDeleteAllRegionsEntry &&
+            bRemoveDeleteAllHyperlinksEntry &&
+            bRemoveDeleteAllReferencesEntry &&
+            bRemoveDeleteAllIndexesEntry &&
+            bRemoveDeleteCommentEntry &&
+            bRemoveDeleteAllDrawingObjectsEntry &&
+            bRemoveDeleteAllFieldsEntry &&
+            bRemoveDeleteAllFootnotesEntry &&
+            bRemoveDeleteAllEndnotesEntry;
 
     if (bRemoveRenameEntry)
         xPop->remove(OUString::number(502));
@@ -5356,7 +5450,15 @@ void SwContentTree::ExecuteContextMenuAction(const 
OUString& rSelectedPopupEntry
     if (!m_xTreeView->get_selected(xFirst.get()))
         return; // this shouldn't happen, but better to be safe than ...
 
-    if (rSelectedPopupEntry == "deleteallfootnotes" || rSelectedPopupEntry == 
"deleteallendnotes")
+    if (rSelectedPopupEntry == "deletealltables" || rSelectedPopupEntry == 
"deleteallframes"
+        || rSelectedPopupEntry == "deleteallimages" || rSelectedPopupEntry == 
"deletealloleobjects"
+        || rSelectedPopupEntry == "deleteallbookmarks" || rSelectedPopupEntry 
== "deleteallregions"
+        || rSelectedPopupEntry == "deleteallhyperlinks"
+        || rSelectedPopupEntry == "deleteallreferences" || rSelectedPopupEntry 
== "deleteallindexes"
+        || rSelectedPopupEntry == "deleteallcomments"
+        || rSelectedPopupEntry == "deletealldrawingobjects"
+        || rSelectedPopupEntry == "deleteallfields" || rSelectedPopupEntry == 
"deleteallfootnotes"
+        || rSelectedPopupEntry == "deleteallendnotes")
     {
         DeleteAllContentOfEntryContentType(*xFirst);
         return;
@@ -5523,12 +5625,6 @@ void SwContentTree::ExecuteContextMenuAction(const 
OUString& rSelectedPopupEntry
         case 502 :
             EditEntry(*xFirst, EditEntryMode::RENAME);
         break;
-        case 602:
-            {
-                
m_pActiveShell->GetView().GetPostItMgr()->SetActiveSidebarWin(nullptr);
-                m_pActiveShell->GetView().GetPostItMgr()->Delete();
-                break;
-            }
         case 700:
             {
                 
m_pActiveShell->GetView().GetViewFrame().GetDispatcher()->Execute(FN_OUTLINE_TO_CLIPBOARD);
diff --git a/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui 
b/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui
index 3cbbb2bd23ff..da10303b7ca0 100644
--- a/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui
+++ b/sw/uiconfig/swriter/ui/navigatorcontextmenu.ui
@@ -130,6 +130,15 @@
         <property name="use-underline">True</property>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deletealltables">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_TABLES">Delete All 
Tables</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deletetable">
         <property name="visible">True</property>
@@ -139,6 +148,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteallframes">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_FRAMES">Delete All 
Frames</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deleteframe">
         <property name="visible">True</property>
@@ -148,6 +166,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteallimages">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_IMAGES">Delete All 
Images</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deleteimage">
         <property name="visible">True</property>
@@ -157,6 +184,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deletealloleobjects">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_OLE_OBJECTS">Delete All OLE 
objects</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deleteoleobject">
         <property name="visible">True</property>
@@ -166,6 +202,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteallbookmarks">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_BOOKMARKS">Delete All 
Bookmarks</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deletebookmark">
         <property name="visible">True</property>
@@ -175,6 +220,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteallregions">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_SECTIONS">Delete All 
Sections</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deleteregion">
         <property name="visible">True</property>
@@ -184,6 +238,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteallhyperlinks">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_HYPERLINKS">Delete All 
Hyperlinks</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>
@@ -193,6 +256,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteallreferences">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_REFERENCES">Delete All 
References</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deletereference">
         <property name="visible">True</property>
@@ -201,6 +273,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteallindexes">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_INDEXES">Delete All 
Indexes</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deleteindex">
         <property name="visible">True</property>
@@ -210,6 +291,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteallcomments">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_COMMENTS">Delete All 
Comments</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deletecomment">
         <property name="visible">True</property>
@@ -219,6 +309,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deletealldrawingobjects">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_DRAWING_OBJECTS">Delete All 
Drawing objects</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deletedrawingobject">
         <property name="visible">True</property>
@@ -228,6 +327,15 @@
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
+    <child>
+      <object class="GtkMenuItem" id="deleteallfields">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_FIELDS">Delete All 
Fields</property>
+        <property name="use-underline">True</property>
+        <accelerator key="Delete" signal="activate"/>
+      </object>
+    </child>
     <child>
       <object class="GtkMenuItem" id="deletefield">
         <property name="visible">True</property>
@@ -242,23 +350,24 @@
         <property name="visible">True</property>
         <property name="can-focus">False</property>
         <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_FOOTNOTES">Delete All 
Footnotes</property>
+        <property name="use-underline">True</property>
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
     <child>
-      <object class="GtkMenuItem" id="deleteallendnotes">
+      <object class="GtkMenuItem" id="deletefootnote">
         <property name="visible">True</property>
         <property name="can-focus">False</property>
-        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_ENDNOTES">Delete All 
Endnotes</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_FOOTNOTE">Delete Footnote</property>
         <property name="use-underline">True</property>
         <accelerator key="Delete" signal="activate"/>
       </object>
     </child>
     <child>
-      <object class="GtkMenuItem" id="deletefootnote">
+      <object class="GtkMenuItem" id="deleteallendnotes">
         <property name="visible">True</property>
         <property name="can-focus">False</property>
-        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_FOOTNOTE">Delete Footnote</property>
+        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_DELETE_ALL_ENDNOTES">Delete All 
Endnotes</property>
         <property name="use-underline">True</property>
         <accelerator key="Delete" signal="activate"/>
       </object>
@@ -312,14 +421,6 @@
         <property name="use-underline">True</property>
       </object>
     </child>
-    <child>
-      <object class="GtkMenuItem" id="602">
-        <property name="visible">True</property>
-        <property name="can-focus">False</property>
-        <property name="label" translatable="yes" 
context="navigatorcontextmenu|STR_POSTIT_DELETE">Delete All</property>
-        <property name="use-underline">True</property>
-      </object>
-    </child>
     <child>
       <object class="GtkSeparatorMenuItem" id="separator2">
         <property name="visible">True</property>

Reply via email to