cui/source/inc/cuitabarea.hxx    |   21 +++++++++-
 cui/source/tabpages/tpbitmap.cxx |   79 +++++++++++++++++++++++++--------------
 include/svx/SvxPresetListBox.hxx |    2 
 3 files changed, 73 insertions(+), 29 deletions(-)

New commits:
commit 547c67de9ffedbc893ea6132b22a1d771b6165b0
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Mon Feb 17 13:52:58 2025 +0100
Commit:     Andreas Heinisch <andreas.heini...@yahoo.de>
CommitDate: Wed Feb 26 12:00:40 2025 +0100

    tdf#133146 - Enable delete shortcut to remove items
    
    Change-Id: I8d0f223f27a3de299f917467064629c205e79c57
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181779
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>

diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx
index 30feba7fe85f..0a143528f7fc 100644
--- a/cui/source/inc/cuitabarea.hxx
+++ b/cui/source/inc/cuitabarea.hxx
@@ -498,6 +498,24 @@ public:
 
 class SvxBitmapTabPage : public SfxTabPage
 {
+
+public:
+
+    class SvxPresetListBoxValueSet : public SvxPresetListBox
+    {
+    public:
+        SvxPresetListBoxValueSet(std::unique_ptr<weld::ScrolledWindow> 
pWindow);
+        virtual bool KeyInput(const KeyEvent& rKEvt) override;
+
+        void SetDialog(SvxBitmapTabPage* pSvxBitmapTabPage)
+        {
+            m_pSvxBitmapTabPage = pSvxBitmapTabPage;
+        }
+
+    private:
+        SvxBitmapTabPage* m_pSvxBitmapTabPage;
+    };
+
 private:
 
     const SfxItemSet&          m_rOutAttrs;
@@ -519,7 +537,7 @@ private:
     Size                       rZoomedSize;
 
     SvxXRectPreview m_aCtlBitmapPreview;
-    std::unique_ptr<SvxPresetListBox>   m_xBitmapLB;
+    std::unique_ptr<SvxPresetListBoxValueSet>   m_xBitmapLB;
     std::unique_ptr<weld::ComboBox> m_xBitmapStyleLB;
     std::unique_ptr<weld::Container> m_xSizeBox;
     std::unique_ptr<weld::CheckButton> m_xTsbScale;
@@ -549,6 +567,7 @@ private:
     DECL_LINK( ClickImportHdl, weld::Button&, void );
     void ClickBitmapHdl_Impl();
     void CalculateBitmapPresetSize();
+    void DeleteBitmapHdl_Impl(const sal_uInt16 nId);
     sal_Int32 SearchBitmapList(std::u16string_view rBitmapName);
     sal_Int32 SearchBitmapList(const GraphicObject& rGraphicObject);
     tools::Long AddBitmap(const GraphicObject& rGraphicObject, const OUString& 
rName,
diff --git a/cui/source/tabpages/tpbitmap.cxx b/cui/source/tabpages/tpbitmap.cxx
index b95f76a99b2b..c257cbf2406b 100644
--- a/cui/source/tabpages/tpbitmap.cxx
+++ b/cui/source/tabpages/tpbitmap.cxx
@@ -80,7 +80,7 @@ SvxBitmapTabPage::SvxBitmapTabPage(weld::Container* pPage, 
weld::DialogControlle
     , m_aXFillAttr(rInAttrs.GetPool())
     , m_rXFSet(m_aXFillAttr.GetItemSet())
     , mpView(nullptr)
-    , m_xBitmapLB(new 
SvxPresetListBox(m_xBuilder->weld_scrolled_window(u"imagewin"_ustr, true)))
+    , m_xBitmapLB(new 
SvxPresetListBoxValueSet(m_xBuilder->weld_scrolled_window(u"imagewin"_ustr, 
true)))
     , m_xBitmapStyleLB(m_xBuilder->weld_combo_box(u"imagestyle"_ustr))
     , m_xSizeBox(m_xBuilder->weld_container(u"sizebox"_ustr))
     , m_xTsbScale(m_xBuilder->weld_check_button(u"scaletsb"_ustr))
@@ -106,6 +106,7 @@ SvxBitmapTabPage::SvxBitmapTabPage(weld::Container* pPage, 
weld::DialogControlle
     m_xBitmapLB->SetSelectHdl( LINK(this, SvxBitmapTabPage, ModifyBitmapHdl) );
     m_xBitmapLB->SetRenameHdl( LINK(this, SvxBitmapTabPage, ClickRenameHdl) );
     m_xBitmapLB->SetDeleteHdl( LINK(this, SvxBitmapTabPage, ClickDeleteHdl) );
+    m_xBitmapLB->SetDialog(this);
     m_xBitmapStyleLB->connect_changed( LINK(this, SvxBitmapTabPage, 
ModifyBitmapStyleHdl) );
     Link<weld::MetricSpinButton&, void> aLink1( LINK(this, SvxBitmapTabPage, 
ModifyBitmapSizeHdl) );
     m_xBitmapWidth->connect_value_changed( aLink1 );
@@ -444,6 +445,39 @@ void SvxBitmapTabPage::ClickBitmapHdl_Impl()
     ModifyBitmapHdl(m_xBitmapLB.get());
 }
 
+void SvxBitmapTabPage::DeleteBitmapHdl_Impl(const sal_uInt16 nId)
+{
+    const size_t nPos = m_xBitmapLB->GetItemPos(nId);
+    if( nPos == VALUESET_ITEM_NOTFOUND )
+        return;
+
+    std::unique_ptr<weld::Builder> 
xBuilder(Application::CreateBuilder(GetFrameWeld(), 
u"cui/ui/querydeletebitmapdialog.ui"_ustr));
+    std::unique_ptr<weld::MessageDialog> 
xQueryBox(xBuilder->weld_message_dialog(u"AskDelBitmapDialog"_ustr));
+
+    if (xQueryBox->run() != RET_YES)
+        return;
+
+    sal_uInt16 nNextId = m_xBitmapLB->GetSelectedItemId();
+    const bool bDeletingSelectedItem(nId == nNextId);
+    if (bDeletingSelectedItem)
+    {
+        nNextId = m_xBitmapLB->GetItemId(nPos + 1);
+        if (!nNextId)
+            nNextId = m_xBitmapLB->GetItemId(nPos - 1);
+    }
+
+    m_pBitmapList->Remove( static_cast<sal_uInt16>(nPos) );
+    m_xBitmapLB->RemoveItem( nId );
+
+    if (bDeletingSelectedItem)
+    {
+        m_xBitmapLB->SelectItem(nNextId);
+        m_aCtlBitmapPreview.Invalidate();
+    }
+    ModifyBitmapHdl(m_xBitmapLB.get());
+    m_nBitmapListState |= ChangeType::MODIFIED;
+}
+
 void SvxBitmapTabPage::CalculateBitmapPresetSize()
 {
     if(rBitmapSize.IsEmpty())
@@ -570,37 +604,28 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickRenameHdl, 
SvxPresetListBox*, void)
 
 IMPL_LINK_NOARG(SvxBitmapTabPage, ClickDeleteHdl, SvxPresetListBox*, void)
 {
-    const sal_uInt16 nId = m_xBitmapLB->GetContextMenuItemId();
-    const size_t nPos = m_xBitmapLB->GetItemPos(nId);
-
-    if( nPos == VALUESET_ITEM_NOTFOUND )
-        return;
-
-    std::unique_ptr<weld::Builder> 
xBuilder(Application::CreateBuilder(GetFrameWeld(), 
u"cui/ui/querydeletebitmapdialog.ui"_ustr));
-    std::unique_ptr<weld::MessageDialog> 
xQueryBox(xBuilder->weld_message_dialog(u"AskDelBitmapDialog"_ustr));
-
-    if (xQueryBox->run() != RET_YES)
-        return;
+    DeleteBitmapHdl_Impl(m_xBitmapLB->GetContextMenuItemId());
+}
 
-    sal_uInt16 nNextId = m_xBitmapLB->GetSelectedItemId();
-    const bool bDeletingSelectedItem(nId == nNextId);
-    if (bDeletingSelectedItem)
-    {
-        nNextId = m_xBitmapLB->GetItemId(nPos + 1);
-        if (!nNextId)
-            nNextId = m_xBitmapLB->GetItemId(nPos - 1);
-    }
 
-    m_pBitmapList->Remove( static_cast<sal_uInt16>(nPos) );
-    m_xBitmapLB->RemoveItem( nId );
+SvxBitmapTabPage::SvxPresetListBoxValueSet::SvxPresetListBoxValueSet(std::unique_ptr<weld::ScrolledWindow>
 pWindow)
+    : SvxPresetListBox(std::move(pWindow))
+{
+}
 
-    if (bDeletingSelectedItem)
+bool SvxBitmapTabPage::SvxPresetListBoxValueSet::KeyInput(const KeyEvent& 
rKEvt)
+{
+    switch (rKEvt.GetKeyCode().GetCode())
     {
-        m_xBitmapLB->SelectItem(nNextId);
-        m_aCtlBitmapPreview.Invalidate();
+        case KEY_DELETE:
+        {
+            m_pSvxBitmapTabPage->DeleteBitmapHdl_Impl(GetSelectedItemId());
+            return true;
+        }
+        break;
+        default:
+            return SvxPresetListBox::KeyInput(rKEvt);
     }
-    ModifyBitmapHdl(m_xBitmapLB.get());
-    m_nBitmapListState |= ChangeType::MODIFIED;
 }
 
 IMPL_LINK_NOARG( SvxBitmapTabPage, ModifyBitmapSizeHdl, 
weld::MetricSpinButton&, void )
diff --git a/include/svx/SvxPresetListBox.hxx b/include/svx/SvxPresetListBox.hxx
index 5255f4156be7..790578f42b3d 100644
--- a/include/svx/SvxPresetListBox.hxx
+++ b/include/svx/SvxPresetListBox.hxx
@@ -23,7 +23,7 @@
 #include <svx/xtable.hxx>
 #include <tools/gen.hxx>
 
-class SVXCORE_DLLPUBLIC SvxPresetListBox final : public ValueSet
+class SVXCORE_DLLPUBLIC SvxPresetListBox : public ValueSet
 {
 private:
     static constexpr sal_uInt32  nColCount = 3;

Reply via email to