summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cui/source/customize/SvxMenuConfigPage.cxx29
-rw-r--r--cui/source/customize/SvxToolbarConfigPage.cxx12
-rw-r--r--cui/source/customize/cfg.cxx57
-rw-r--r--cui/source/inc/cfg.hxx9
-rw-r--r--include/vcl/weld.hxx5
-rw-r--r--vcl/source/app/salvtables.cxx8
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx6
7 files changed, 81 insertions, 45 deletions
diff --git a/cui/source/customize/SvxMenuConfigPage.cxx b/cui/source/customize/SvxMenuConfigPage.cxx
index 218d087349ad..7289b3506a7c 100644
--- a/cui/source/customize/SvxMenuConfigPage.cxx
+++ b/cui/source/customize/SvxMenuConfigPage.cxx
@@ -263,22 +263,21 @@ short SvxMenuConfigPage::QueryReset()
void SvxMenuConfigPage::SelectElement()
{
- m_xContentsListBox->clear();
+ weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
SvxConfigEntry* pMenuData = GetTopLevelSelection();
-
- if ( pMenuData )
+ if (!pMenuData)
+ rTreeView.clear();
+ else
{
SvxEntries* pEntries = pMenuData->GetEntries();
- int i = 0;
- for (auto const& entry : *pEntries)
- {
+ rTreeView.bulk_insert_for_each(pEntries->size(), [this, &rTreeView, pEntries](weld::TreeIter& rIter, int nIdx) {
+ auto const& entry = (*pEntries)[nIdx];
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(entry)));
- m_xContentsListBox->insert(i, sId);
- InsertEntryIntoUI(entry, i, 0);
- ++i;
- }
+ rTreeView.set_id(rIter, sId);
+ InsertEntryIntoUI(entry, rTreeView, rIter, 0);
+ });
}
UpdateButtonStates();
@@ -364,9 +363,10 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, AddCommandHdl, weld::Button&, void )
int nPos = AddFunction(-1, /*bAllowDuplicates*/false);
if (nPos == -1)
return;
+ weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
SvxConfigEntry* pEntry =
- reinterpret_cast<SvxConfigEntry*>(m_xContentsListBox->get_id(nPos).toInt64());
- InsertEntryIntoUI(pEntry, nPos, 0);
+ reinterpret_cast<SvxConfigEntry*>(rTreeView.get_id(nPos).toInt64());
+ InsertEntryIntoUI(pEntry, rTreeView, nPos, 0);
}
IMPL_LINK_NOARG( SvxMenuConfigPage, RemoveCommandHdl, weld::Button&, void )
@@ -380,12 +380,13 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, RemoveCommandHdl, weld::Button&, void )
IMPL_LINK(SvxMenuConfigPage, InsertHdl, const OString&, rIdent, void)
{
+ weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
if (rIdent == "insertseparator")
{
SvxConfigEntry* pNewEntryData = new SvxConfigEntry;
pNewEntryData->SetUserDefined();
int nPos = AppendEntry(pNewEntryData, -1);
- InsertEntryIntoUI(pNewEntryData, nPos, 0);
+ InsertEntryIntoUI(pNewEntryData, rTreeView, nPos, 0);
}
else if (rIdent == "insertsubmenu")
{
@@ -406,7 +407,7 @@ IMPL_LINK(SvxMenuConfigPage, InsertHdl, const OString&, rIdent, void)
pNewEntryData->SetUserDefined();
int nPos = AppendEntry(pNewEntryData, -1);
- InsertEntryIntoUI(pNewEntryData, nPos, 0);
+ InsertEntryIntoUI(pNewEntryData, rTreeView, nPos, 0);
ReloadTopLevelListBox();
diff --git a/cui/source/customize/SvxToolbarConfigPage.cxx b/cui/source/customize/SvxToolbarConfigPage.cxx
index b8058df387f5..b30302d52ed3 100644
--- a/cui/source/customize/SvxToolbarConfigPage.cxx
+++ b/cui/source/customize/SvxToolbarConfigPage.cxx
@@ -463,7 +463,7 @@ IMPL_LINK(SvxToolbarConfigPage, InsertHdl, const OString&, rIdent, void)
pNewEntryData->SetUserDefined();
int nPos = AppendEntry(pNewEntryData, -1);
- InsertEntryIntoUI(pNewEntryData, nPos, 1);
+ InsertEntryIntoUI(pNewEntryData, m_xContentsListBox->get_widget(), nPos, 1);
static_cast<ToolbarSaveInData*>( GetSaveInData())->ApplyToolbar( pToolbar );
@@ -561,7 +561,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
m_xContentsListBox->insert(nActEntry, sId);
m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
- InsertEntryIntoUI(pEntry, nActEntry, 1);
+ InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry, 1);
m_xContentsListBox->select(nActEntry);
m_xContentsListBox->scroll_to_row(nActEntry);
@@ -601,7 +601,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
m_xContentsListBox->insert(nActEntry, sId);
m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
- InsertEntryIntoUI(pEntry, nActEntry, 1);
+ InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry, 1);
m_xContentsListBox->select(nActEntry);
m_xContentsListBox->scroll_to_row(nActEntry);
@@ -658,7 +658,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
m_xContentsListBox->insert(nActEntry, sId);
m_xContentsListBox->set_toggle(nActEntry,
pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
- InsertEntryIntoUI(pEntry, nActEntry, 1);
+ InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry, 1);
m_xContentsListBox->select(nActEntry);
m_xContentsListBox->scroll_to_row(nActEntry);
@@ -790,7 +790,7 @@ void SvxToolbarConfigPage::SelectElement()
m_xContentsListBox->insert(i, sId);
if (entry->IsBinding() && !entry->IsSeparator())
m_xContentsListBox->set_toggle(i, entry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
- InsertEntryIntoUI(entry, i, 1);
+ InsertEntryIntoUI(entry, m_xContentsListBox->get_widget(), i, 1);
++i;
}
@@ -819,7 +819,7 @@ void SvxToolbarConfigPage::AddFunction(int nTarget)
m_xContentsListBox->set_toggle(nNewLBEntry, TRISTATE_TRUE, 0);
}
- InsertEntryIntoUI(pEntry, nNewLBEntry, 1);
+ InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nNewLBEntry, 1);
// Changes are not visible on the toolbar until this point
// TODO: Figure out a way to show the changes on the toolbar, but revert if
diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx
index 1cb922bc51c6..8daf8409ed68 100644
--- a/cui/source/customize/cfg.cxx
+++ b/cui/source/customize/cfg.cxx
@@ -1506,34 +1506,49 @@ int SvxConfigPage::AppendEntry(
return nNewEntry;
}
-void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, int nPos, int nStartCol)
+namespace
{
- OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pNewEntryData)));
-
- m_xContentsListBox->set_id(nPos, sId);
-
- if (pNewEntryData->IsSeparator())
- {
- m_xContentsListBox->set_text(nPos, "----------------------------------", nStartCol + 1);
- }
- else
+ template<typename itertype> void TmplInsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, itertype& rIter, int nStartCol, SaveInData* pSaveInData, VirtualDevice& rDropDown)
{
- auto xImage = GetSaveInData()->GetImage(pNewEntryData->GetCommand());
- if (xImage.is())
- m_xContentsListBox->set_image(nPos, xImage, nStartCol);
- OUString aName = SvxConfigPageHelper::stripHotKey( pNewEntryData->GetName() );
- m_xContentsListBox->set_text(nPos, aName, nStartCol + 1);
- }
+ OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pNewEntryData)));
- if (nStartCol == 0) // menus
- {
- if (pNewEntryData->IsPopup() || pNewEntryData->GetStyle() & css::ui::ItemStyle::DROP_DOWN)
- m_xContentsListBox->set_dropdown(nPos, nStartCol + 2);
+ rTreeView.set_id(rIter, sId);
+
+ if (pNewEntryData->IsSeparator())
+ {
+ rTreeView.set_text(rIter, "----------------------------------", nStartCol + 1);
+ }
else
- m_xContentsListBox->set_image(nPos, nullptr, nStartCol + 2);
+ {
+ auto xImage = pSaveInData->GetImage(pNewEntryData->GetCommand());
+ if (xImage.is())
+ rTreeView.set_image(rIter, xImage, nStartCol);
+ OUString aName = SvxConfigPageHelper::stripHotKey( pNewEntryData->GetName() );
+ rTreeView.set_text(rIter, aName, nStartCol + 1);
+ }
+
+ if (nStartCol == 0) // menus
+ {
+ if (pNewEntryData->IsPopup() || pNewEntryData->GetStyle() & css::ui::ItemStyle::DROP_DOWN)
+ rTreeView.set_image(rIter, rDropDown, nStartCol + 2);
+ else
+ rTreeView.set_image(rIter, css::uno::Reference<css::graphic::XGraphic>(), nStartCol + 2);
+ }
}
}
+void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, int nPos, int nStartCol)
+{
+ TmplInsertEntryIntoUI<int>(pNewEntryData, rTreeView, nPos, nStartCol,
+ GetSaveInData(), m_xContentsListBox->get_dropdown_image());
+}
+
+void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, weld::TreeIter& rIter, int nStartCol)
+{
+ TmplInsertEntryIntoUI<weld::TreeIter>(pNewEntryData, rTreeView, rIter, nStartCol,
+ GetSaveInData(), m_xContentsListBox->get_dropdown_image());
+}
+
IMPL_LINK(SvxConfigPage, MoveHdl, weld::Button&, rButton, void)
{
MoveEntry(&rButton == m_xMoveUpButton.get());
diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx
index d5410a6ce667..fa825b92f207 100644
--- a/cui/source/inc/cfg.hxx
+++ b/cui/source/inc/cfg.hxx
@@ -325,6 +325,8 @@ public:
SvxMenuEntriesListBox(std::unique_ptr<weld::TreeView> xControl, SvxConfigPage* pPage);
virtual ~SvxMenuEntriesListBox();
+ VirtualDevice& get_dropdown_image() const { return *m_xDropDown; }
+
int get_selected_index() const { return m_xControl->get_selected_index(); }
OUString get_id(int nPos) const { return m_xControl->get_id(nPos); }
void remove(int nPos) { m_xControl->remove(nPos); }
@@ -451,7 +453,12 @@ protected:
SvxConfigEntry const * pParentData );
void InsertEntryIntoUI(SvxConfigEntry* pNewEntryData,
- int nPos, int nStartCol);
+ weld::TreeView& rTreeView, int nPos,
+ int nStartCol);
+ void InsertEntryIntoUI(SvxConfigEntry* pNewEntryData,
+ weld::TreeView& rTreeView, weld::TreeIter& rIter,
+ int nStartCol);
+
void InsertEntryIntoNotebookbarTabUI(const OUString& sClassId, const OUString& sUIItemId,
const OUString& sUIItemCommand,
weld::TreeView& rTreeView, weld::TreeIter& rIter,
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 194383e72bcc..abe71e42fedb 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -870,7 +870,6 @@ public:
virtual void collapse_row(const TreeIter& rIter) = 0;
virtual void set_text(const TreeIter& rIter, const OUString& rStr, int col = -1) = 0;
virtual void set_sensitive(const TreeIter& rIter, bool bSensitive, int col = -1) = 0;
- virtual void set_image(const TreeIter& rIter, const OUString& rImage, int col = -1) = 0;
virtual void set_text_emphasis(const TreeIter& rIter, bool bOn, int col) = 0;
virtual bool get_text_emphasis(const TreeIter& rIter, int col) const = 0;
virtual void set_toggle(const TreeIter& rIter, TriState bOn, int col) = 0;
@@ -878,8 +877,10 @@ public:
virtual OUString get_text(const TreeIter& rIter, int col = -1) const = 0;
virtual void set_id(const TreeIter& rIter, const OUString& rId) = 0;
virtual OUString get_id(const TreeIter& rIter) const = 0;
+ virtual void set_image(const TreeIter& rIter, const OUString& rImage, int col = -1) = 0;
+ virtual void set_image(const TreeIter& rIter, VirtualDevice& rImage, int col = -1) = 0;
virtual void set_image(const TreeIter& rIter,
- const css::uno::Reference<css::graphic::XGraphic>& rImage, int col)
+ const css::uno::Reference<css::graphic::XGraphic>& rImage, int col = -1)
= 0;
virtual void set_font_color(const TreeIter& rIter, const Color& rColor) const = 0;
virtual void scroll_to_row(const TreeIter& rIter) = 0;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index bf704c2e6026..fa8777493cb1 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4018,13 +4018,19 @@ public:
set_image(m_xTreeView->GetEntry(nullptr, pos), createImage(rImage), col);
}
+ virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage, int col) override
+ {
+ const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+ set_image(rVclIter.iter, createImage(rImage), col);
+ }
+
virtual void set_image(const weld::TreeIter& rIter, const css::uno::Reference<css::graphic::XGraphic>& rImage, int col) override
{
const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
set_image(rVclIter.iter, Image(rImage), col);
}
- virtual void set_image(const weld::TreeIter& rIter, const OUString& rImage, int col) override
+ virtual void set_image(const weld::TreeIter& rIter, VirtualDevice& rImage, int col) override
{
const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
set_image(rVclIter.iter, createImage(rImage), col);
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index a64edcd8c1be..2b101adaabde 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -9083,6 +9083,12 @@ public:
set_image(rGtkIter.iter, col, getPixbuf(rImage));
}
+ virtual void set_image(const weld::TreeIter& rIter, VirtualDevice& rImage, int col) override
+ {
+ const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
+ set_image(rGtkIter.iter, col, getPixbuf(rImage));
+ }
+
virtual OUString get_id(int pos) const override
{
return get(pos, m_nIdCol);