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.heinisch@yahoo.de>
This commit is contained in:
Andreas Heinisch
2025-02-17 13:52:58 +01:00
parent 025a1e4612
commit 547c67de9f
3 changed files with 73 additions and 29 deletions

View File

@@ -498,6 +498,24 @@ public:
class SvxBitmapTabPage : public SfxTabPage 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: private:
const SfxItemSet& m_rOutAttrs; const SfxItemSet& m_rOutAttrs;
@@ -519,7 +537,7 @@ private:
Size rZoomedSize; Size rZoomedSize;
SvxXRectPreview m_aCtlBitmapPreview; 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::ComboBox> m_xBitmapStyleLB;
std::unique_ptr<weld::Container> m_xSizeBox; std::unique_ptr<weld::Container> m_xSizeBox;
std::unique_ptr<weld::CheckButton> m_xTsbScale; std::unique_ptr<weld::CheckButton> m_xTsbScale;
@@ -549,6 +567,7 @@ private:
DECL_LINK( ClickImportHdl, weld::Button&, void ); DECL_LINK( ClickImportHdl, weld::Button&, void );
void ClickBitmapHdl_Impl(); void ClickBitmapHdl_Impl();
void CalculateBitmapPresetSize(); void CalculateBitmapPresetSize();
void DeleteBitmapHdl_Impl(const sal_uInt16 nId);
sal_Int32 SearchBitmapList(std::u16string_view rBitmapName); sal_Int32 SearchBitmapList(std::u16string_view rBitmapName);
sal_Int32 SearchBitmapList(const GraphicObject& rGraphicObject); sal_Int32 SearchBitmapList(const GraphicObject& rGraphicObject);
tools::Long AddBitmap(const GraphicObject& rGraphicObject, const OUString& rName, tools::Long AddBitmap(const GraphicObject& rGraphicObject, const OUString& rName,

View File

@@ -80,7 +80,7 @@ SvxBitmapTabPage::SvxBitmapTabPage(weld::Container* pPage, weld::DialogControlle
, m_aXFillAttr(rInAttrs.GetPool()) , m_aXFillAttr(rInAttrs.GetPool())
, m_rXFSet(m_aXFillAttr.GetItemSet()) , m_rXFSet(m_aXFillAttr.GetItemSet())
, mpView(nullptr) , 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_xBitmapStyleLB(m_xBuilder->weld_combo_box(u"imagestyle"_ustr))
, m_xSizeBox(m_xBuilder->weld_container(u"sizebox"_ustr)) , m_xSizeBox(m_xBuilder->weld_container(u"sizebox"_ustr))
, m_xTsbScale(m_xBuilder->weld_check_button(u"scaletsb"_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->SetSelectHdl( LINK(this, SvxBitmapTabPage, ModifyBitmapHdl) );
m_xBitmapLB->SetRenameHdl( LINK(this, SvxBitmapTabPage, ClickRenameHdl) ); m_xBitmapLB->SetRenameHdl( LINK(this, SvxBitmapTabPage, ClickRenameHdl) );
m_xBitmapLB->SetDeleteHdl( LINK(this, SvxBitmapTabPage, ClickDeleteHdl) ); m_xBitmapLB->SetDeleteHdl( LINK(this, SvxBitmapTabPage, ClickDeleteHdl) );
m_xBitmapLB->SetDialog(this);
m_xBitmapStyleLB->connect_changed( LINK(this, SvxBitmapTabPage, ModifyBitmapStyleHdl) ); m_xBitmapStyleLB->connect_changed( LINK(this, SvxBitmapTabPage, ModifyBitmapStyleHdl) );
Link<weld::MetricSpinButton&, void> aLink1( LINK(this, SvxBitmapTabPage, ModifyBitmapSizeHdl) ); Link<weld::MetricSpinButton&, void> aLink1( LINK(this, SvxBitmapTabPage, ModifyBitmapSizeHdl) );
m_xBitmapWidth->connect_value_changed( aLink1 ); m_xBitmapWidth->connect_value_changed( aLink1 );
@@ -444,6 +445,39 @@ void SvxBitmapTabPage::ClickBitmapHdl_Impl()
ModifyBitmapHdl(m_xBitmapLB.get()); 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() void SvxBitmapTabPage::CalculateBitmapPresetSize()
{ {
if(rBitmapSize.IsEmpty()) if(rBitmapSize.IsEmpty())
@@ -570,37 +604,28 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickRenameHdl, SvxPresetListBox*, void)
IMPL_LINK_NOARG(SvxBitmapTabPage, ClickDeleteHdl, SvxPresetListBox*, void) IMPL_LINK_NOARG(SvxBitmapTabPage, ClickDeleteHdl, SvxPresetListBox*, void)
{ {
const sal_uInt16 nId = m_xBitmapLB->GetContextMenuItemId(); DeleteBitmapHdl_Impl(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)); SvxBitmapTabPage::SvxPresetListBoxValueSet::SvxPresetListBoxValueSet(std::unique_ptr<weld::ScrolledWindow> pWindow)
std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog(u"AskDelBitmapDialog"_ustr)); : SvxPresetListBox(std::move(pWindow))
{
}
if (xQueryBox->run() != RET_YES) bool SvxBitmapTabPage::SvxPresetListBoxValueSet::KeyInput(const KeyEvent& rKEvt)
return; {
switch (rKEvt.GetKeyCode().GetCode())
sal_uInt16 nNextId = m_xBitmapLB->GetSelectedItemId();
const bool bDeletingSelectedItem(nId == nNextId);
if (bDeletingSelectedItem)
{ {
nNextId = m_xBitmapLB->GetItemId(nPos + 1); case KEY_DELETE:
if (!nNextId) {
nNextId = m_xBitmapLB->GetItemId(nPos - 1); m_pSvxBitmapTabPage->DeleteBitmapHdl_Impl(GetSelectedItemId());
return true;
}
break;
default:
return SvxPresetListBox::KeyInput(rKEvt);
} }
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;
} }
IMPL_LINK_NOARG( SvxBitmapTabPage, ModifyBitmapSizeHdl, weld::MetricSpinButton&, void ) IMPL_LINK_NOARG( SvxBitmapTabPage, ModifyBitmapSizeHdl, weld::MetricSpinButton&, void )

View File

@@ -23,7 +23,7 @@
#include <svx/xtable.hxx> #include <svx/xtable.hxx>
#include <tools/gen.hxx> #include <tools/gen.hxx>
class SVXCORE_DLLPUBLIC SvxPresetListBox final : public ValueSet class SVXCORE_DLLPUBLIC SvxPresetListBox : public ValueSet
{ {
private: private:
static constexpr sal_uInt32 nColCount = 3; static constexpr sal_uInt32 nColCount = 3;